framefields 2.9.3 → 2.11.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 (480) hide show
  1. package/README.md +9 -2
  2. package/dist/audio/index.d.mts +5 -5
  3. package/dist/audio/index.mjs +13 -13
  4. package/dist/{audio-B6RmYOPe.mjs → audio-BuCVk1IQ.mjs} +32 -6
  5. package/dist/audio-BuCVk1IQ.mjs.map +1 -0
  6. package/dist/audio-CYZkDwae.d.mts +62 -0
  7. package/dist/audio-CYZkDwae.d.mts.map +1 -0
  8. package/dist/{audio-BlDbnteH.mjs → audio-KHBadECb.mjs} +1 -1
  9. package/dist/{audio-BlDbnteH.mjs.map → audio-KHBadECb.mjs.map} +1 -1
  10. package/dist/{check-result-Bj7g62ka.mjs → check-result-Culfu7Nx.mjs} +1 -1
  11. package/dist/{check-result-Bj7g62ka.mjs.map → check-result-Culfu7Nx.mjs.map} +1 -1
  12. package/dist/cli/check-worker.mjs +50 -50
  13. package/dist/cli.mjs +179 -3
  14. package/dist/cli.mjs.map +1 -1
  15. package/dist/cloud/index.d.mts +118 -0
  16. package/dist/cloud/index.d.mts.map +1 -0
  17. package/dist/cloud/index.mjs +3 -0
  18. package/dist/cloud-xcfV4J03.mjs +233 -0
  19. package/dist/cloud-xcfV4J03.mjs.map +1 -0
  20. package/dist/components/index.d.mts +14 -14
  21. package/dist/components/index.mjs +47 -47
  22. package/dist/{dist-Cn8bDsQF.mjs → dist-BIE8fvlv.mjs} +1 -1
  23. package/dist/{dist-Cn8bDsQF.mjs.map → dist-BIE8fvlv.mjs.map} +1 -1
  24. package/dist/{dist-ByxHoMQI.mjs → dist-Bf2_efYP.mjs} +1 -1
  25. package/dist/{dist-ByxHoMQI.mjs.map → dist-Bf2_efYP.mjs.map} +1 -1
  26. package/dist/{dist-BlulwErl.mjs → dist-CNGv-JTX.mjs} +1 -1
  27. package/dist/{dist-D12-a3-x.mjs → dist-CWLLnigL.mjs} +375 -15
  28. package/dist/dist-CWLLnigL.mjs.map +1 -0
  29. package/dist/{dist-DL1GwJvs.mjs → dist-CySGkG54.mjs} +2 -2
  30. package/dist/{dist-DL1GwJvs.mjs.map → dist-CySGkG54.mjs.map} +1 -1
  31. package/dist/{dist-Dq5TkNDI.mjs → dist-Dg9LMWoX.mjs} +2 -2
  32. package/dist/{dist-Dq5TkNDI.mjs.map → dist-Dg9LMWoX.mjs.map} +1 -1
  33. package/dist/{dist-DEUU6sNe.mjs → dist-EQX3TUUl.mjs} +4 -4
  34. package/dist/{dist-DEUU6sNe.mjs.map → dist-EQX3TUUl.mjs.map} +1 -1
  35. package/dist/effects/index.d.mts +6 -6
  36. package/dist/effects/index.mjs +36 -36
  37. package/dist/{effects-CViUoQSV.mjs → effects-DKLbLXF7.mjs} +3 -3
  38. package/dist/{effects-CViUoQSV.mjs.map → effects-DKLbLXF7.mjs.map} +1 -1
  39. package/dist/fonts/index.d.mts +1 -1
  40. package/dist/fonts/index.mjs +3 -3
  41. package/dist/{fonts-B0U2KO5I.mjs → fonts-gPbGbShD.mjs} +2 -2
  42. package/dist/{fonts-B0U2KO5I.mjs.map → fonts-gPbGbShD.mjs.map} +1 -1
  43. package/dist/{gpu-zFNrvhV9.mjs → gpu-CpkJJLQP.mjs} +2 -2
  44. package/dist/{gpu-zFNrvhV9.mjs.map → gpu-CpkJJLQP.mjs.map} +1 -1
  45. package/dist/{index-BuYtrhzL.d.mts → index-BW0Q1ygn.d.mts} +1 -1
  46. package/dist/{index-BuYtrhzL.d.mts.map → index-BW0Q1ygn.d.mts.map} +1 -1
  47. package/dist/{index-f4IF1vRH.d.mts → index-Bly-7YM1.d.mts} +3 -3
  48. package/dist/{index-f4IF1vRH.d.mts.map → index-Bly-7YM1.d.mts.map} +1 -1
  49. package/dist/{index-Bzo1uj8h.d.mts → index-BuiZzc6i.d.mts} +23 -3
  50. package/dist/index-BuiZzc6i.d.mts.map +1 -0
  51. package/dist/{index-DBhswLMO.d.mts → index-C8YwZ6k1.d.mts} +2 -2
  52. package/dist/{index-DBhswLMO.d.mts.map → index-C8YwZ6k1.d.mts.map} +1 -1
  53. package/dist/{index-svAgwTY_.d.mts → index-CEU_Zsb9.d.mts} +2 -2
  54. package/dist/{index-svAgwTY_.d.mts.map → index-CEU_Zsb9.d.mts.map} +1 -1
  55. package/dist/{index-9_4X2ro1.d.mts → index-COYNQ_mf.d.mts} +1 -1
  56. package/dist/{index-9_4X2ro1.d.mts.map → index-COYNQ_mf.d.mts.map} +1 -1
  57. package/dist/{index-CgGM31I9.d.mts → index-CdCrae-I.d.mts} +2 -2
  58. package/dist/{index-CgGM31I9.d.mts.map → index-CdCrae-I.d.mts.map} +1 -1
  59. package/dist/{index-B9Lm1x8i.d.mts → index-Cro-818i.d.mts} +297 -283
  60. package/dist/index-Cro-818i.d.mts.map +1 -0
  61. package/dist/{index-w28KUM9A.d.mts → index-D2i9J9Zq.d.mts} +3 -3
  62. package/dist/{index-w28KUM9A.d.mts.map → index-D2i9J9Zq.d.mts.map} +1 -1
  63. package/dist/{index-V0ZQ4JN6.d.mts → index-gOVtTm-P.d.mts} +125 -3
  64. package/dist/index-gOVtTm-P.d.mts.map +1 -0
  65. package/dist/{index-C6GcuYVA.d.mts → index-jSDEM-uE.d.mts} +5 -5
  66. package/dist/{index-C6GcuYVA.d.mts.map → index-jSDEM-uE.d.mts.map} +1 -1
  67. package/dist/index.d.mts +16 -16
  68. package/dist/index.mjs +59 -59
  69. package/dist/preview/index.d.mts +4 -4
  70. package/dist/preview/index.mjs +12 -12
  71. package/dist/{preview-ZKJ_zTmd.mjs → preview-BToKUTtZ.mjs} +3 -3
  72. package/dist/{preview-ZKJ_zTmd.mjs.map → preview-BToKUTtZ.mjs.map} +1 -1
  73. package/dist/preview-engine/audio.mjs +1 -1
  74. package/dist/preview-engine/{chunk-VN36PRVD.mjs → chunk-26XWIHW3.mjs} +1 -1
  75. package/dist/preview-engine/{chunk-BVDWS3D2.mjs → chunk-4AGQN53P.mjs} +1 -1
  76. package/dist/preview-engine/{chunk-IB6GZJOL.mjs → chunk-54Q5CKSV.mjs} +1 -1
  77. package/dist/preview-engine/{chunk-Y5K5LVOR.mjs → chunk-5KSBS3AL.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-ZJ5SWTCW.mjs → chunk-65NANVQL.mjs} +1 -1
  79. package/dist/preview-engine/{chunk-34RJ7GAS.mjs → chunk-6LTINEA4.mjs} +1 -1
  80. package/dist/preview-engine/{chunk-SPJPM43P.mjs → chunk-7GMHSTRP.mjs} +1 -1
  81. package/dist/preview-engine/{chunk-BEYA25UZ.mjs → chunk-ACBBBOUM.mjs} +1 -1
  82. package/dist/preview-engine/{chunk-7U34VKNO.mjs → chunk-BRV7TQDV.mjs} +1 -1
  83. package/dist/preview-engine/{chunk-KHJZMTOS.mjs → chunk-CCORQLMR.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-5AWAOMBR.mjs → chunk-CIVEZJYF.mjs} +1 -1
  85. package/dist/preview-engine/{chunk-FKG27DVO.mjs → chunk-CIVJXFWH.mjs} +1 -1
  86. package/dist/preview-engine/{chunk-JIPMF42Z.mjs → chunk-D6LM7DTJ.mjs} +2 -2
  87. package/dist/preview-engine/{chunk-GA4HNR44.mjs → chunk-DNNGWS2C.mjs} +1 -1
  88. package/dist/preview-engine/{chunk-ZY47XIRK.mjs → chunk-EAWJXW4J.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-6R3UJBL5.mjs → chunk-EPRINA4V.mjs} +1 -1
  90. package/dist/preview-engine/{chunk-GRJJVSOV.mjs → chunk-EXEO245X.mjs} +1 -1
  91. package/dist/preview-engine/{chunk-DVZITDQS.mjs → chunk-FQL4IJZN.mjs} +1 -1
  92. package/dist/preview-engine/{chunk-QCSVT73T.mjs → chunk-GHTG5XV6.mjs} +1 -1
  93. package/dist/preview-engine/{chunk-VVY4PG5E.mjs → chunk-GXFYRMJZ.mjs} +25 -25
  94. package/dist/preview-engine/{chunk-AHQCDTD6.mjs → chunk-IBPYV6HF.mjs} +1 -1
  95. package/dist/preview-engine/{chunk-PM2W4VLT.mjs → chunk-IKVJ4MW5.mjs} +1 -1
  96. package/dist/preview-engine/{chunk-GZWA5QJS.mjs → chunk-JDB7PMRI.mjs} +1 -1
  97. package/dist/preview-engine/{chunk-CC4NNNIY.mjs → chunk-KVOFO273.mjs} +1 -1
  98. package/dist/preview-engine/{chunk-RJIAES3X.mjs → chunk-LFNCWMKS.mjs} +1 -1
  99. package/dist/preview-engine/{chunk-FTCEG3SF.mjs → chunk-LMXMBX4J.mjs} +1 -1
  100. package/dist/preview-engine/{chunk-MIEH74UH.mjs → chunk-M4QANUJI.mjs} +1 -1
  101. package/dist/preview-engine/{chunk-VVE2QHVG.mjs → chunk-NOKPBMIP.mjs} +1 -1
  102. package/dist/preview-engine/{chunk-P5FKRQFU.mjs → chunk-O63FLYWC.mjs} +1 -1
  103. package/dist/preview-engine/chunk-OELPPLML.mjs +107 -0
  104. package/dist/preview-engine/{chunk-GIICZZQI.mjs → chunk-OLB4TQLQ.mjs} +1 -1
  105. package/dist/preview-engine/{chunk-CN2VLYLB.mjs → chunk-PKNUTHPI.mjs} +1 -1
  106. package/dist/preview-engine/{chunk-2B722GXM.mjs → chunk-QF4JWVO3.mjs} +1 -1
  107. package/dist/preview-engine/{chunk-EJJITH6U.mjs → chunk-RDWLLITE.mjs} +1 -1
  108. package/dist/preview-engine/{chunk-K3C6GUQD.mjs → chunk-SE2C623Z.mjs} +1 -1
  109. package/dist/preview-engine/{chunk-34DL53D5.mjs → chunk-TEWRQKX3.mjs} +1 -1
  110. package/dist/preview-engine/{chunk-H7BSN7V7.mjs → chunk-UGB6JKVS.mjs} +1 -1
  111. package/dist/preview-engine/{chunk-BJV2LBII.mjs → chunk-UI3VH33L.mjs} +1 -1
  112. package/dist/preview-engine/{chunk-UXYM2G6J.mjs → chunk-UMJ3VGKN.mjs} +1 -1
  113. package/dist/preview-engine/{chunk-2DWY7UBV.mjs → chunk-VFQH5KVS.mjs} +1 -1
  114. package/dist/preview-engine/{chunk-73CNXGAK.mjs → chunk-VQA4DYZU.mjs} +1 -1
  115. package/dist/preview-engine/{chunk-LVYVXVZO.mjs → chunk-VZLIRYAL.mjs} +1 -1
  116. package/dist/preview-engine/{chunk-4WYM72ZN.mjs → chunk-WFMUDL55.mjs} +1 -1
  117. package/dist/preview-engine/{chunk-Q62GPWGD.mjs → chunk-XF6DYP6B.mjs} +11 -11
  118. package/dist/preview-engine/{chunk-35HMRW4I.mjs → chunk-YHMBGJP6.mjs} +1 -1
  119. package/dist/preview-engine/{chunk-DMSZXG56.mjs → chunk-YKM7JDQY.mjs} +1 -1
  120. package/dist/preview-engine/{chunk-SF37HXAH.mjs → chunk-YVZTRH4Y.mjs} +1 -1
  121. package/dist/preview-engine/{chunk-TNJEZKXM.mjs → chunk-Z24UEN4P.mjs} +1 -1
  122. package/dist/preview-engine/{chunk-2PYTDN2C.mjs → chunk-ZF2MEFKO.mjs} +1 -1
  123. package/dist/preview-engine/{chunk-OH5W5EL6.mjs → chunk-ZIXPWP2B.mjs} +1 -1
  124. package/dist/preview-engine/components.mjs +1 -1
  125. package/dist/preview-engine/effects.mjs +1 -1
  126. package/dist/preview-engine/framefields.mjs +1 -1
  127. package/dist/preview-engine/player.mjs +1 -1
  128. package/dist/preview-engine/renderers-2NGIILMI.mjs +1 -0
  129. package/dist/preview-engine/{renderers-5TO2SXFR.mjs → renderers-33FCFHDR.mjs} +1 -1
  130. package/dist/preview-engine/renderers-466Z77BH.mjs +1 -0
  131. package/dist/preview-engine/{renderers-PIIEUKFE.mjs → renderers-4IBFDW2S.mjs} +1 -1
  132. package/dist/preview-engine/renderers-4KRENGZA.mjs +1 -0
  133. package/dist/preview-engine/renderers-4W52BQEU.mjs +1 -0
  134. package/dist/preview-engine/{renderers-ZACSHGNZ.mjs → renderers-53EI26GL.mjs} +1 -1
  135. package/dist/preview-engine/renderers-55PRAS7G.mjs +1 -0
  136. package/dist/preview-engine/renderers-5LLYINHW.mjs +1 -0
  137. package/dist/preview-engine/{renderers-A24KZK2Q.mjs → renderers-5XLGCEOA.mjs} +1 -1
  138. package/dist/preview-engine/renderers-63N3Y2XO.mjs +1 -0
  139. package/dist/preview-engine/{renderers-V3AQO7AR.mjs → renderers-6LNDAO4B.mjs} +1 -1
  140. package/dist/preview-engine/renderers-6ROVFDIN.mjs +1 -0
  141. package/dist/preview-engine/{renderers-CUMVIVHI.mjs → renderers-6YVZUQOH.mjs} +1 -1
  142. package/dist/preview-engine/renderers-7CAHX35U.mjs +1 -0
  143. package/dist/preview-engine/renderers-A4RVLPMG.mjs +1 -0
  144. package/dist/preview-engine/renderers-A53P4J6O.mjs +1 -0
  145. package/dist/preview-engine/{renderers-WEYAHOBK.mjs → renderers-ACUJMDEK.mjs} +1 -1
  146. package/dist/preview-engine/renderers-AFJ3373L.mjs +1 -0
  147. package/dist/preview-engine/renderers-ATFWTA3U.mjs +1 -0
  148. package/dist/preview-engine/{renderers-TSBV4KPE.mjs → renderers-BOBVXYAA.mjs} +1 -1
  149. package/dist/preview-engine/renderers-BPYJXHBU.mjs +1 -0
  150. package/dist/preview-engine/{renderers-NCGH2WWJ.mjs → renderers-C7SI3NIE.mjs} +1 -1
  151. package/dist/preview-engine/{renderers-FSI5KNGZ.mjs → renderers-CCRZNGVK.mjs} +1 -1
  152. package/dist/preview-engine/{renderers-NUAI4TO5.mjs → renderers-CYJAVWHT.mjs} +1 -1
  153. package/dist/preview-engine/renderers-D3ZF7FXT.mjs +1 -0
  154. package/dist/preview-engine/renderers-D7YN6B4B.mjs +1 -0
  155. package/dist/preview-engine/renderers-DBLASKF5.mjs +1 -0
  156. package/dist/preview-engine/renderers-DC5ZYYHM.mjs +1 -0
  157. package/dist/preview-engine/{renderers-5UZ3YFBD.mjs → renderers-EN7LXJLG.mjs} +1 -1
  158. package/dist/preview-engine/{renderers-L6YDX6GS.mjs → renderers-FY2HOQCS.mjs} +1 -1
  159. package/dist/preview-engine/{renderers-6Z7DWAPH.mjs → renderers-GQM3KMV3.mjs} +1 -1
  160. package/dist/preview-engine/{renderers-QA2HKUJJ.mjs → renderers-H6PBHEYU.mjs} +1 -1
  161. package/dist/preview-engine/{renderers-MD3PRFZL.mjs → renderers-HKLCB4U6.mjs} +1 -1
  162. package/dist/preview-engine/{renderers-TGJSOKDY.mjs → renderers-HSFQIILN.mjs} +1 -1
  163. package/dist/preview-engine/{renderers-7C5RA3R5.mjs → renderers-I6QKZ7CH.mjs} +1 -1
  164. package/dist/preview-engine/renderers-J6ZEXW5L.mjs +1 -0
  165. package/dist/preview-engine/renderers-JV4MF46Q.mjs +1 -0
  166. package/dist/preview-engine/{renderers-SEIAUKJF.mjs → renderers-KCGK33Y2.mjs} +1 -1
  167. package/dist/preview-engine/renderers-KQKH4ZIX.mjs +1 -0
  168. package/dist/preview-engine/renderers-MEITHN4N.mjs +1 -0
  169. package/dist/preview-engine/renderers-MN3HSBTJ.mjs +1 -0
  170. package/dist/preview-engine/renderers-NTG3QGNH.mjs +1 -0
  171. package/dist/preview-engine/{renderers-KC6ZSKCW.mjs → renderers-OGOW3NA4.mjs} +1 -1
  172. package/dist/preview-engine/renderers-OU4SFMB2.mjs +1 -0
  173. package/dist/preview-engine/{renderers-ENMY4DKF.mjs → renderers-P2HORBZ6.mjs} +1 -1
  174. package/dist/preview-engine/renderers-P6TIBJIG.mjs +1 -0
  175. package/dist/preview-engine/renderers-POJWQ7L3.mjs +1 -0
  176. package/dist/preview-engine/renderers-RJ7S6VHD.mjs +1 -0
  177. package/dist/preview-engine/renderers-RJJAJZYN.mjs +1 -0
  178. package/dist/preview-engine/renderers-UEQ733VK.mjs +1 -0
  179. package/dist/preview-engine/{renderers-T74CQCEN.mjs → renderers-UG2C3C7T.mjs} +1 -1
  180. package/dist/preview-engine/renderers-ULO2AW2U.mjs +1 -0
  181. package/dist/preview-engine/renderers-UPVHGHCK.mjs +1 -0
  182. package/dist/preview-engine/renderers-UZHSNNIM.mjs +1 -0
  183. package/dist/preview-engine/renderers-V5KWZL2C.mjs +1 -0
  184. package/dist/preview-engine/{renderers-5KANN7XF.mjs → renderers-VIGZYJYX.mjs} +1 -1
  185. package/dist/preview-engine/{renderers-4F7WLQD5.mjs → renderers-VVP5WQOY.mjs} +1 -1
  186. package/dist/preview-engine/{renderers-7XHO6M3B.mjs → renderers-WL372W36.mjs} +1 -1
  187. package/dist/preview-engine/{renderers-U4M7ZCV4.mjs → renderers-WSABL3QO.mjs} +1 -1
  188. package/dist/preview-engine/{renderers-Y22VSOXF.mjs → renderers-X6CORAES.mjs} +1 -1
  189. package/dist/preview-engine/renderers-YMXKYOHQ.mjs +1 -0
  190. package/dist/preview-engine/renderers-YWDAZ2NZ.mjs +1 -0
  191. package/dist/preview-engine/signals.mjs +1 -1
  192. package/dist/{program-xjIwjKb6.mjs → program-Bc860ko5.mjs} +4 -4
  193. package/dist/{program-xjIwjKb6.mjs.map → program-Bc860ko5.mjs.map} +1 -1
  194. package/dist/registry/focus-zoom.json +9 -2
  195. package/dist/renderer/index.d.mts +4 -4
  196. package/dist/renderer/index.mjs +4 -4
  197. package/dist/renderer--Ymc_4XJ.mjs +5 -0
  198. package/dist/{renderer-Dee8ksIV.mjs → renderer-1uoKiILq.mjs} +3 -3
  199. package/dist/{renderer-Dee8ksIV.mjs.map → renderer-1uoKiILq.mjs.map} +1 -1
  200. package/dist/{renderer-CIB5L_C4.mjs → renderer-4ZUv3X1I.mjs} +5 -5
  201. package/dist/{renderer-CIB5L_C4.mjs.map → renderer-4ZUv3X1I.mjs.map} +1 -1
  202. package/dist/{renderer-BPYIqtNg.mjs → renderer-50JEMaVo.mjs} +5 -5
  203. package/dist/{renderer-BPYIqtNg.mjs.map → renderer-50JEMaVo.mjs.map} +1 -1
  204. package/dist/{renderer-BdbI_u9w.mjs → renderer-7ow5Acsg.mjs} +3 -3
  205. package/dist/{renderer-BdbI_u9w.mjs.map → renderer-7ow5Acsg.mjs.map} +1 -1
  206. package/dist/{renderer-B-inTgyb.d.mts → renderer-88C3QpKL.d.mts} +2 -2
  207. package/dist/{renderer-B-inTgyb.d.mts.map → renderer-88C3QpKL.d.mts.map} +1 -1
  208. package/dist/{renderer-DH7l5WFr.mjs → renderer-B-CMRUag.mjs} +4 -4
  209. package/dist/{renderer-DH7l5WFr.mjs.map → renderer-B-CMRUag.mjs.map} +1 -1
  210. package/dist/renderer-B-OdV-eq.mjs +5 -0
  211. package/dist/{renderer-NTCk1Srf.mjs → renderer-B1LD29TV.mjs} +3 -3
  212. package/dist/{renderer-NTCk1Srf.mjs.map → renderer-B1LD29TV.mjs.map} +1 -1
  213. package/dist/{renderer-ESkPj6pk.mjs → renderer-B1esRxGy.mjs} +4 -4
  214. package/dist/{renderer-ESkPj6pk.mjs.map → renderer-B1esRxGy.mjs.map} +1 -1
  215. package/dist/{renderer-g7fF2AYk.mjs → renderer-B3Dme2es.mjs} +5 -5
  216. package/dist/{renderer-g7fF2AYk.mjs.map → renderer-B3Dme2es.mjs.map} +1 -1
  217. package/dist/renderer-B65fwoA2.mjs +5 -0
  218. package/dist/{renderer-CDVb4OfJ.mjs → renderer-B6Oeahe_.mjs} +5 -5
  219. package/dist/{renderer-CDVb4OfJ.mjs.map → renderer-B6Oeahe_.mjs.map} +1 -1
  220. package/dist/renderer-B92Ahkcv.mjs +5 -0
  221. package/dist/renderer-B9z2AK31.mjs +5 -0
  222. package/dist/{renderer-BZmmekE8.mjs → renderer-BDZC3o3N.mjs} +4 -4
  223. package/dist/{renderer-BZmmekE8.mjs.map → renderer-BDZC3o3N.mjs.map} +1 -1
  224. package/dist/renderer-BIF3Dg3Z.mjs +5 -0
  225. package/dist/{renderer-C06U4c9k.mjs → renderer-BJ-7WRgO.mjs} +3 -3
  226. package/dist/{renderer-C06U4c9k.mjs.map → renderer-BJ-7WRgO.mjs.map} +1 -1
  227. package/dist/renderer-BJUVaIAT.mjs +5 -0
  228. package/dist/renderer-BKRDMbI-.mjs +5 -0
  229. package/dist/{renderer-HnSiwSW8.mjs → renderer-BNHcwxw9.mjs} +4 -4
  230. package/dist/{renderer-HnSiwSW8.mjs.map → renderer-BNHcwxw9.mjs.map} +1 -1
  231. package/dist/{renderer-B78W9uad.mjs → renderer-BNJ6Jk7-.mjs} +4 -4
  232. package/dist/{renderer-B78W9uad.mjs.map → renderer-BNJ6Jk7-.mjs.map} +1 -1
  233. package/dist/{renderer-BVql26Ay.mjs → renderer-BOrMBwQS.mjs} +2 -2
  234. package/dist/{renderer-BVql26Ay.mjs.map → renderer-BOrMBwQS.mjs.map} +1 -1
  235. package/dist/{renderer-Cl8r1LJe.mjs → renderer-BQetXCcZ.mjs} +4 -4
  236. package/dist/{renderer-Cl8r1LJe.mjs.map → renderer-BQetXCcZ.mjs.map} +1 -1
  237. package/dist/{renderer-C4yKI8MT.mjs → renderer-BSELd5vU.mjs} +3 -3
  238. package/dist/{renderer-C4yKI8MT.mjs.map → renderer-BSELd5vU.mjs.map} +1 -1
  239. package/dist/renderer-BSwhyVWa.mjs +5 -0
  240. package/dist/{renderer-CcJyD9Q5.mjs → renderer-BURhYcpA.mjs} +4 -4
  241. package/dist/{renderer-CcJyD9Q5.mjs.map → renderer-BURhYcpA.mjs.map} +1 -1
  242. package/dist/renderer-BUqSZn2X.mjs +5 -0
  243. package/dist/{renderer-DoPEPlbG.d.mts → renderer-BVKOQarx.d.mts} +3 -3
  244. package/dist/{renderer-DoPEPlbG.d.mts.map → renderer-BVKOQarx.d.mts.map} +1 -1
  245. package/dist/{renderer-CwVbHki6.mjs → renderer-BaIJIfJ6.mjs} +5 -5
  246. package/dist/{renderer-CwVbHki6.mjs.map → renderer-BaIJIfJ6.mjs.map} +1 -1
  247. package/dist/renderer-BbmvjqK9.mjs +3 -0
  248. package/dist/{renderer-Be5hfwSd.mjs → renderer-Bbxh4N8Y.mjs} +425 -115
  249. package/dist/renderer-Bbxh4N8Y.mjs.map +1 -0
  250. package/dist/{renderer-BG6bkKtY.mjs → renderer-Bf4-N7k7.mjs} +5 -5
  251. package/dist/{renderer-BG6bkKtY.mjs.map → renderer-Bf4-N7k7.mjs.map} +1 -1
  252. package/dist/{renderer-CpedZNEG.mjs → renderer-BhsrlGKp.mjs} +3 -3
  253. package/dist/{renderer-CpedZNEG.mjs.map → renderer-BhsrlGKp.mjs.map} +1 -1
  254. package/dist/{renderer-AUK_ZS3p.mjs → renderer-Bo7shNdU.mjs} +4 -4
  255. package/dist/{renderer-AUK_ZS3p.mjs.map → renderer-Bo7shNdU.mjs.map} +1 -1
  256. package/dist/renderer-Bpe4k_x6.mjs +5 -0
  257. package/dist/{renderer-BfbSvElt.mjs → renderer-BwrfKKqw.mjs} +4 -4
  258. package/dist/{renderer-BfbSvElt.mjs.map → renderer-BwrfKKqw.mjs.map} +1 -1
  259. package/dist/{renderer-CWLF6cAz.mjs → renderer-Bx14Wnxl.mjs} +3 -3
  260. package/dist/{renderer-CWLF6cAz.mjs.map → renderer-Bx14Wnxl.mjs.map} +1 -1
  261. package/dist/{renderer-CCFHnafT.mjs → renderer-Bxjb0HYU.mjs} +4 -4
  262. package/dist/{renderer-CCFHnafT.mjs.map → renderer-Bxjb0HYU.mjs.map} +1 -1
  263. package/dist/{renderer-5qJPGvVL.mjs → renderer-ByjaseAo.mjs} +5 -5
  264. package/dist/{renderer-5qJPGvVL.mjs.map → renderer-ByjaseAo.mjs.map} +1 -1
  265. package/dist/renderer-C1NjG0CJ.mjs +5 -0
  266. package/dist/renderer-C7Puyst9.mjs +5 -0
  267. package/dist/{renderer-CYX9vKZ-.mjs → renderer-C9BSXyrq.mjs} +4 -4
  268. package/dist/{renderer-CYX9vKZ-.mjs.map → renderer-C9BSXyrq.mjs.map} +1 -1
  269. package/dist/{renderer-CUBDxuxh.mjs → renderer-CAWnCsQc.mjs} +5 -5
  270. package/dist/{renderer-CUBDxuxh.mjs.map → renderer-CAWnCsQc.mjs.map} +1 -1
  271. package/dist/renderer-CGA_7320.mjs +5 -0
  272. package/dist/{renderer-CEfVvcw-.mjs → renderer-CLAvn9c6.mjs} +4 -4
  273. package/dist/{renderer-CEfVvcw-.mjs.map → renderer-CLAvn9c6.mjs.map} +1 -1
  274. package/dist/renderer-CLnFkXO7.mjs +5 -0
  275. package/dist/renderer-CMQIT1Kh.mjs +5 -0
  276. package/dist/{renderer-BYqrtBvd.mjs → renderer-COcKhouz.mjs} +5 -5
  277. package/dist/{renderer-BYqrtBvd.mjs.map → renderer-COcKhouz.mjs.map} +1 -1
  278. package/dist/renderer-CQ1rwjIh.mjs +5 -0
  279. package/dist/{renderer-US4GsamT.mjs → renderer-CR0mDPYY.mjs} +3 -3
  280. package/dist/renderer-CT8h0boY.mjs +5 -0
  281. package/dist/{renderer-VhkubIx_.mjs → renderer-CU8v-LxD.mjs} +5 -5
  282. package/dist/{renderer-VhkubIx_.mjs.map → renderer-CU8v-LxD.mjs.map} +1 -1
  283. package/dist/renderer-Cb0lszt3.mjs +5 -0
  284. package/dist/renderer-Ci7oLye9.mjs +5 -0
  285. package/dist/renderer-CjqXB3CZ.mjs +5 -0
  286. package/dist/{renderer-DIEmK57T.mjs → renderer-Co6UFbZB.mjs} +5 -5
  287. package/dist/{renderer-DIEmK57T.mjs.map → renderer-Co6UFbZB.mjs.map} +1 -1
  288. package/dist/renderer-CqTV04zQ.mjs +5 -0
  289. package/dist/{renderer-xDV2cCkX.mjs → renderer-CrR8Mpxq.mjs} +5 -5
  290. package/dist/{renderer-xDV2cCkX.mjs.map → renderer-CrR8Mpxq.mjs.map} +1 -1
  291. package/dist/renderer-CtWeRtHK.mjs +5 -0
  292. package/dist/{renderer-BRWjLiHX.mjs → renderer-CxGx1Lhi.mjs} +3 -3
  293. package/dist/{renderer-BRWjLiHX.mjs.map → renderer-CxGx1Lhi.mjs.map} +1 -1
  294. package/dist/{renderer-BQOeeXTr.mjs → renderer-Cz-n883J.mjs} +5 -5
  295. package/dist/{renderer-BQOeeXTr.mjs.map → renderer-Cz-n883J.mjs.map} +1 -1
  296. package/dist/renderer-CzolnwCo.mjs +5 -0
  297. package/dist/{renderer-sPI7aY6c.mjs → renderer-D-QVGphn.mjs} +4 -4
  298. package/dist/{renderer-sPI7aY6c.mjs.map → renderer-D-QVGphn.mjs.map} +1 -1
  299. package/dist/{renderer-C3tVrzyT.mjs → renderer-D06HxSXO.mjs} +3 -3
  300. package/dist/{renderer-CXLugAe8.mjs → renderer-D0aAZHC7.mjs} +4 -4
  301. package/dist/{renderer-CXLugAe8.mjs.map → renderer-D0aAZHC7.mjs.map} +1 -1
  302. package/dist/{renderer-mLlgfM7X.mjs → renderer-D4f8f66C.mjs} +4 -4
  303. package/dist/{renderer-mLlgfM7X.mjs.map → renderer-D4f8f66C.mjs.map} +1 -1
  304. package/dist/renderer-D6qhcx_C.mjs +5 -0
  305. package/dist/{renderer-C7MAqpIS.mjs → renderer-DAn9xiQT.mjs} +4 -4
  306. package/dist/{renderer-C7MAqpIS.mjs.map → renderer-DAn9xiQT.mjs.map} +1 -1
  307. package/dist/renderer-DDfEf0jt.mjs +5 -0
  308. package/dist/renderer-DDpa8ztp.mjs +5 -0
  309. package/dist/{renderer-DW7hbluw.mjs → renderer-DE9Jik9K.mjs} +3 -3
  310. package/dist/{renderer-DW7hbluw.mjs.map → renderer-DE9Jik9K.mjs.map} +1 -1
  311. package/dist/{renderer-C6st34I6.mjs → renderer-DFJWPqOJ.mjs} +3 -3
  312. package/dist/{renderer-C6st34I6.mjs.map → renderer-DFJWPqOJ.mjs.map} +1 -1
  313. package/dist/{renderer-D2TTDcgh.mjs → renderer-DLPhfwbR.mjs} +3 -3
  314. package/dist/{renderer-D2TTDcgh.mjs.map → renderer-DLPhfwbR.mjs.map} +1 -1
  315. package/dist/{renderer-D1VsqFf4.mjs → renderer-DOkbn1ot.mjs} +5 -5
  316. package/dist/{renderer-D1VsqFf4.mjs.map → renderer-DOkbn1ot.mjs.map} +1 -1
  317. package/dist/{renderer-BWMzjSgf.mjs → renderer-DaXQgGg3.mjs} +5 -5
  318. package/dist/{renderer-BWMzjSgf.mjs.map → renderer-DaXQgGg3.mjs.map} +1 -1
  319. package/dist/renderer-DbQBqzmx.mjs +5 -0
  320. package/dist/{renderer-DrWeb39d.mjs → renderer-DcvjSolU.mjs} +1 -1
  321. package/dist/{renderer-DrWeb39d.mjs.map → renderer-DcvjSolU.mjs.map} +1 -1
  322. package/dist/renderer-DfUcwMKa.mjs +5 -0
  323. package/dist/renderer-DgIjNANM.mjs +6 -0
  324. package/dist/{renderer-DOKHd37M.mjs → renderer-DgPn_SOC.mjs} +4 -4
  325. package/dist/{renderer-DOKHd37M.mjs.map → renderer-DgPn_SOC.mjs.map} +1 -1
  326. package/dist/{renderer-BgDLCCuq.mjs → renderer-DkqZmfm8.mjs} +5 -5
  327. package/dist/{renderer-BgDLCCuq.mjs.map → renderer-DkqZmfm8.mjs.map} +1 -1
  328. package/dist/{renderer-q4zMFfnY.mjs → renderer-Dpl6poqD.mjs} +2 -2
  329. package/dist/{renderer-q4zMFfnY.mjs.map → renderer-Dpl6poqD.mjs.map} +1 -1
  330. package/dist/renderer-Dsh6Tgu0.mjs +3 -0
  331. package/dist/renderer-DuIwR9GT.mjs +5 -0
  332. package/dist/renderer-Dv4u2c14.mjs +5 -0
  333. package/dist/{renderer-BJKzZwyn.mjs → renderer-DwK9jsER.mjs} +4 -4
  334. package/dist/{renderer-BJKzZwyn.mjs.map → renderer-DwK9jsER.mjs.map} +1 -1
  335. package/dist/{renderer-mQt-y49D.mjs → renderer-HDj9Zb-O.mjs} +5 -5
  336. package/dist/{renderer-mQt-y49D.mjs.map → renderer-HDj9Zb-O.mjs.map} +1 -1
  337. package/dist/renderer-IE1yu3lZ.mjs +5 -0
  338. package/dist/{renderer-B7kOF_Az.mjs → renderer-JHByuUNb.mjs} +3 -3
  339. package/dist/{renderer-B7kOF_Az.mjs.map → renderer-JHByuUNb.mjs.map} +1 -1
  340. package/dist/{renderer-B3IRvukr.mjs → renderer-KKk7myX1.mjs} +5 -5
  341. package/dist/{renderer-B3IRvukr.mjs.map → renderer-KKk7myX1.mjs.map} +1 -1
  342. package/dist/renderer-PY_wnEN0.mjs +5 -0
  343. package/dist/{renderer-BcO7LUla.mjs → renderer-Ros7XQg2.mjs} +3 -3
  344. package/dist/{renderer-BcO7LUla.mjs.map → renderer-Ros7XQg2.mjs.map} +1 -1
  345. package/dist/{renderer-bbaMOD4I.mjs → renderer-RvI3qRUI.mjs} +5 -5
  346. package/dist/{renderer-bbaMOD4I.mjs.map → renderer-RvI3qRUI.mjs.map} +1 -1
  347. package/dist/{renderer-CPTXJs0n.mjs → renderer-Rw87u1Cr.mjs} +6 -6
  348. package/dist/{renderer-CPTXJs0n.mjs.map → renderer-Rw87u1Cr.mjs.map} +1 -1
  349. package/dist/{renderer-Du-GnKLb.mjs → renderer-TKZCA0B9.mjs} +9 -9
  350. package/dist/{renderer-Du-GnKLb.mjs.map → renderer-TKZCA0B9.mjs.map} +1 -1
  351. package/dist/{renderer-C_2UDMEG.mjs → renderer-V4dhrf_h.mjs} +6 -6
  352. package/dist/{renderer-C_2UDMEG.mjs.map → renderer-V4dhrf_h.mjs.map} +1 -1
  353. package/dist/{renderer-eT7Gp7FS.mjs → renderer-_9gbYS-3.mjs} +5 -5
  354. package/dist/{renderer-eT7Gp7FS.mjs.map → renderer-_9gbYS-3.mjs.map} +1 -1
  355. package/dist/{renderer-IQ97z2rw.mjs → renderer-celhuAL7.mjs} +3 -3
  356. package/dist/{renderer-IQ97z2rw.mjs.map → renderer-celhuAL7.mjs.map} +1 -1
  357. package/dist/{renderer-DIqkhsLI.mjs → renderer-eMCTAa9e.mjs} +4 -4
  358. package/dist/{renderer-DIqkhsLI.mjs.map → renderer-eMCTAa9e.mjs.map} +1 -1
  359. package/dist/{renderer-B6TjJi1g.mjs → renderer-fs8f1QeE.mjs} +5 -5
  360. package/dist/{renderer-B6TjJi1g.mjs.map → renderer-fs8f1QeE.mjs.map} +1 -1
  361. package/dist/{renderer-BJQt0RiZ.mjs → renderer-fwKnV9zs.mjs} +5 -5
  362. package/dist/{renderer-BJQt0RiZ.mjs.map → renderer-fwKnV9zs.mjs.map} +1 -1
  363. package/dist/{renderer-F1D9ZJ8I.mjs → renderer-g_1t2je9.mjs} +3 -3
  364. package/dist/renderer-gv24VyzO.mjs +5 -0
  365. package/dist/{renderer-C3Iev6zu.mjs → renderer-h62QaJYz.mjs} +4 -4
  366. package/dist/{renderer-C3Iev6zu.mjs.map → renderer-h62QaJYz.mjs.map} +1 -1
  367. package/dist/{renderer-BNbMi9CI.mjs → renderer-jnAIhWn_.mjs} +5 -5
  368. package/dist/{renderer-BNbMi9CI.mjs.map → renderer-jnAIhWn_.mjs.map} +1 -1
  369. package/dist/{renderer-CyCtm0UV.mjs → renderer-lHNTgiOM.mjs} +3 -3
  370. package/dist/{renderer-CyCtm0UV.mjs.map → renderer-lHNTgiOM.mjs.map} +1 -1
  371. package/dist/renderer-nN6lPZf9.mjs +5 -0
  372. package/dist/{renderer-Dat8opUZ.mjs → renderer-o68mVeyk.mjs} +4 -4
  373. package/dist/{renderer-Dat8opUZ.mjs.map → renderer-o68mVeyk.mjs.map} +1 -1
  374. package/dist/{renderer-Dss7T71q.mjs → renderer-pNmI-A9o.mjs} +5 -5
  375. package/dist/{renderer-Dss7T71q.mjs.map → renderer-pNmI-A9o.mjs.map} +1 -1
  376. package/dist/{renderer-CbhnJi_8.mjs → renderer-q7q6k_cD.mjs} +4 -4
  377. package/dist/{renderer-CbhnJi_8.mjs.map → renderer-q7q6k_cD.mjs.map} +1 -1
  378. package/dist/{renderer-OsQRvOle.mjs → renderer-riIFosX6.mjs} +5 -5
  379. package/dist/{renderer-OsQRvOle.mjs.map → renderer-riIFosX6.mjs.map} +1 -1
  380. package/dist/{renderer-BMP_lYMk.mjs → renderer-sfqZK6L5.mjs} +4 -4
  381. package/dist/{renderer-BMP_lYMk.mjs.map → renderer-sfqZK6L5.mjs.map} +1 -1
  382. package/dist/{renderer-DEQeONTd.mjs → renderer-ynFRJh7G.mjs} +3 -3
  383. package/dist/{renderers-CP8CFWDs-BH1gUTYa.mjs → renderers-CP8CFWDs-DRoslK4F.mjs} +4 -4
  384. package/dist/{renderers-CP8CFWDs-BH1gUTYa.mjs.map → renderers-CP8CFWDs-DRoslK4F.mjs.map} +1 -1
  385. package/dist/sam/index.d.mts +3 -3
  386. package/dist/sam/index.mjs +1 -1
  387. package/dist/signals/index.d.mts +8 -8
  388. package/dist/signals/index.mjs +8 -8
  389. package/dist/{signals-gOd0Ui9B.mjs → signals-BfJ1aqpT.mjs} +4 -4
  390. package/dist/{signals-gOd0Ui9B.mjs.map → signals-BfJ1aqpT.mjs.map} +1 -1
  391. package/dist/{src-BU1VOWSk.mjs → src-BYp6r-cS.mjs} +11 -11
  392. package/dist/{src-BU1VOWSk.mjs.map → src-BYp6r-cS.mjs.map} +1 -1
  393. package/dist/{src-Bnr8DUC--DzkRGA62.mjs → src-Bnr8DUC--BRDqRF6I.mjs} +3 -3
  394. package/dist/{src-Bnr8DUC--DzkRGA62.mjs.map → src-Bnr8DUC--BRDqRF6I.mjs.map} +1 -1
  395. package/package.json +65 -59
  396. package/dist/audio-B6RmYOPe.mjs.map +0 -1
  397. package/dist/audio-D6tBMbHh.d.mts +0 -38
  398. package/dist/audio-D6tBMbHh.d.mts.map +0 -1
  399. package/dist/dist-D12-a3-x.mjs.map +0 -1
  400. package/dist/index-B9Lm1x8i.d.mts.map +0 -1
  401. package/dist/index-Bzo1uj8h.d.mts.map +0 -1
  402. package/dist/index-V0ZQ4JN6.d.mts.map +0 -1
  403. package/dist/preview-engine/chunk-S2ABWY5G.mjs +0 -1
  404. package/dist/preview-engine/renderers-3BOQOUEU.mjs +0 -1
  405. package/dist/preview-engine/renderers-3M2FESR2.mjs +0 -1
  406. package/dist/preview-engine/renderers-5XRKZHVT.mjs +0 -1
  407. package/dist/preview-engine/renderers-6LHIWKMZ.mjs +0 -1
  408. package/dist/preview-engine/renderers-A43VCJ7X.mjs +0 -1
  409. package/dist/preview-engine/renderers-AKY464RY.mjs +0 -1
  410. package/dist/preview-engine/renderers-C5UO6PL5.mjs +0 -1
  411. package/dist/preview-engine/renderers-C64QSZO4.mjs +0 -1
  412. package/dist/preview-engine/renderers-CIRCR6NG.mjs +0 -1
  413. package/dist/preview-engine/renderers-CIWOPETY.mjs +0 -1
  414. package/dist/preview-engine/renderers-CZEZCELP.mjs +0 -1
  415. package/dist/preview-engine/renderers-FSQMWHQM.mjs +0 -1
  416. package/dist/preview-engine/renderers-FZEW5C23.mjs +0 -1
  417. package/dist/preview-engine/renderers-HCET2IML.mjs +0 -1
  418. package/dist/preview-engine/renderers-IUOOC6K7.mjs +0 -1
  419. package/dist/preview-engine/renderers-KYYJLVIJ.mjs +0 -1
  420. package/dist/preview-engine/renderers-L4GE7WV3.mjs +0 -1
  421. package/dist/preview-engine/renderers-LRAFWKCO.mjs +0 -1
  422. package/dist/preview-engine/renderers-LU3XZWEB.mjs +0 -1
  423. package/dist/preview-engine/renderers-ND2WV4K3.mjs +0 -1
  424. package/dist/preview-engine/renderers-NJ5CWVVH.mjs +0 -1
  425. package/dist/preview-engine/renderers-NKXYPR3V.mjs +0 -1
  426. package/dist/preview-engine/renderers-NWR66CGK.mjs +0 -1
  427. package/dist/preview-engine/renderers-O22WTBRM.mjs +0 -1
  428. package/dist/preview-engine/renderers-PBBA7LQB.mjs +0 -1
  429. package/dist/preview-engine/renderers-Q6LJRZ7R.mjs +0 -1
  430. package/dist/preview-engine/renderers-RMEACSRL.mjs +0 -1
  431. package/dist/preview-engine/renderers-SP42LCSI.mjs +0 -1
  432. package/dist/preview-engine/renderers-T7SZA3BX.mjs +0 -1
  433. package/dist/preview-engine/renderers-VADTDAHD.mjs +0 -1
  434. package/dist/preview-engine/renderers-VNNWI5C3.mjs +0 -1
  435. package/dist/preview-engine/renderers-WZ75MLP3.mjs +0 -1
  436. package/dist/preview-engine/renderers-XB5R4UQA.mjs +0 -1
  437. package/dist/preview-engine/renderers-YBIUZDGQ.mjs +0 -1
  438. package/dist/preview-engine/renderers-YESJR4O7.mjs +0 -1
  439. package/dist/preview-engine/renderers-YKSRZRRT.mjs +0 -1
  440. package/dist/renderer-129U3pc9.mjs +0 -5
  441. package/dist/renderer-2phFTFxQ.mjs +0 -5
  442. package/dist/renderer-9muKpDeE.mjs +0 -5
  443. package/dist/renderer-B5Dhv6j9.mjs +0 -5
  444. package/dist/renderer-BBUgCS3C.mjs +0 -5
  445. package/dist/renderer-BKXM28Mx.mjs +0 -5
  446. package/dist/renderer-BKqm6xdf.mjs +0 -5
  447. package/dist/renderer-BMfMMf0R.mjs +0 -5
  448. package/dist/renderer-BPsjEnnl.mjs +0 -5
  449. package/dist/renderer-Be5hfwSd.mjs.map +0 -1
  450. package/dist/renderer-Bofr6f88.mjs +0 -6
  451. package/dist/renderer-BqoGcujR.mjs +0 -5
  452. package/dist/renderer-BvuBt2aH.mjs +0 -5
  453. package/dist/renderer-BxTgXHu1.mjs +0 -5
  454. package/dist/renderer-Bz2Rrz60.mjs +0 -5
  455. package/dist/renderer-CBjG8rjE.mjs +0 -5
  456. package/dist/renderer-CS2zyPyZ.mjs +0 -5
  457. package/dist/renderer-CXnbl_jR.mjs +0 -5
  458. package/dist/renderer-CaF9vod_.mjs +0 -5
  459. package/dist/renderer-CbSBH3lp.mjs +0 -5
  460. package/dist/renderer-CdjuGRbO.mjs +0 -5
  461. package/dist/renderer-CoLbxC13.mjs +0 -5
  462. package/dist/renderer-Cr9G0dXB.mjs +0 -5
  463. package/dist/renderer-D63l6_UC.mjs +0 -5
  464. package/dist/renderer-DCJqnzER.mjs +0 -5
  465. package/dist/renderer-DFBOR5J3.mjs +0 -5
  466. package/dist/renderer-DGAZSzw6.mjs +0 -5
  467. package/dist/renderer-DPLGk1Qk.mjs +0 -5
  468. package/dist/renderer-DTCUzByS.mjs +0 -5
  469. package/dist/renderer-DdGahYi1.mjs +0 -5
  470. package/dist/renderer-DhL4nNPk.mjs +0 -5
  471. package/dist/renderer-DkyTbiVz.mjs +0 -3
  472. package/dist/renderer-DnAZweRX.mjs +0 -5
  473. package/dist/renderer-DpisVnT2.mjs +0 -5
  474. package/dist/renderer-Ds7pAKnE.mjs +0 -3
  475. package/dist/renderer-DxZD5B54.mjs +0 -5
  476. package/dist/renderer-PMHOnbnA.mjs +0 -5
  477. package/dist/renderer-STufNpMx.mjs +0 -5
  478. package/dist/renderer-SdrgfCxH.mjs +0 -5
  479. /package/dist/{chunk-D8S17ehY.mjs → chunk-W71TSjRM.mjs} +0 -0
  480. /package/dist/{renderer-Cputd36d.mjs → renderer-B6rZUBwE.mjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-DH7l5WFr.mjs","names":[],"sources":["../../../nodes/node-stereo-panning/dist/renderers-Dc15sLt-.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isSignal, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\"pan\"];\nconst PANNING_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n pan : f32,\n hasPanSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>;\n@group(0) @binding(4) var<storage, read> panSignal : array<f32>;\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n var currentPan = u.pan;\n if (u.hasPanSig > 0.5f) {\n currentPan = panSignal[index];\n }\n let clampedPan = max(-1.0f, min(1.0f, currentPan));\n var leftGain = 1.0f;\n var rightGain = 1.0f;\n\n if (clampedPan < 0.0f) {\n rightGain = 1.0f + clampedPan;\n } else if (clampedPan > 0.0f) {\n leftGain = 1.0f - clampedPan;\n }\n\n if (numChannels > 1u) {\n outputChannels[index] = inputChannels[index] * leftGain;\n outputChannels[numSamples + index] = inputChannels[numSamples + index] * rightGain;\n } else {\n outputChannels[index] = inputChannels[index] * leftGain;\n }\n }\n\n // Dummy reference to prevent state binding from being optimized out\n state[0] = state[0];\n}\n`;\nconst stereoPanningAudioProcessor = async (channels, sampleRate, node, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Stereo Panning.\");\n\tconst op = node.operation || {};\n\tconst inputs = op.inputs || {};\n\tconst pan = resolveNumber(op.pan, 0);\n\tconst clampedPan = Math.max(-1, Math.min(1, pan));\n\tconst isHandleConnected = (handleIdKey) => {\n\t\tconst handleId = op[handleIdKey];\n\t\tif (typeof handleId !== \"string\" || !handleId) return false;\n\t\tconst input = inputs[handleId];\n\t\treturn Boolean(input?.connectionValid && input.outputItem && (input.outputItem.type === \"Signal\" || input.outputItem.type === \"Number\"));\n\t};\n\tconst hasPanSig = isSignal(op.pan) || isSignal(op.signals?.pan) || isHandleConnected(\"panHandleId\") ? 1 : 0;\n\tif (channels.length === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tif (channels.length === 1) {\n\t\tconst rightChannel = new Float32Array(numSamples);\n\t\trightChannel.set(channels[0]);\n\t\tchannels.push(rightChannel);\n\t}\n\tconst numChannels = channels.length;\n\tconst nodeId = op.id || \"stereo-panning\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, node, frame, fps, PANNING_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\tclampedPan,\n\t\thasPanSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0\n\t], 8, 1, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: stereoPanningAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Dc15sLt-.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc,CAAC,MAAM;AAC3B,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDtC,MAAM,8BAA8B,OAAO,UAAU,YAAY,MAAM,QAAQ;AAC9E,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,mDAAmD;CACrF,MAAM,KAAK,KAAK,aAAa,EAAE;CAC/B,MAAM,SAAS,GAAG,UAAU,EAAE;CAC9B,MAAM,MAAM,cAAc,GAAG,KAAK,EAAE;CACpC,MAAM,aAAa,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;CACjD,MAAM,qBAAqB,gBAAgB;EAC1C,MAAM,WAAW,GAAG;AACpB,MAAI,OAAO,aAAa,YAAY,CAAC,SAAU,QAAO;EACtD,MAAM,QAAQ,OAAO;AACrB,SAAO,QAAQ,OAAO,mBAAmB,MAAM,eAAe,MAAM,WAAW,SAAS,YAAY,MAAM,WAAW,SAAS,UAAU;;CAEzI,MAAM,YAAY,SAAS,GAAG,IAAI,IAAI,SAAS,GAAG,SAAS,IAAI,IAAI,kBAAkB,cAAc,GAAG,IAAI;AAC1G,KAAI,SAAS,WAAW,EAAG;CAC3B,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;AACtB,KAAI,SAAS,WAAW,GAAG;EAC1B,MAAM,eAAe,IAAI,aAAa,WAAW;AACjD,eAAa,IAAI,SAAS,GAAG;AAC7B,WAAS,KAAK,aAAa;;CAE5B,MAAM,cAAc,SAAS;CAC7B,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;AACvB,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,MAAM,OAAO,KAAK,+BAA+B;EAC7H;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,GAAG,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK5F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,6BAA6B,CAAC"}
1
+ {"version":3,"file":"renderer-B-CMRUag.mjs","names":[],"sources":["../../../nodes/node-stereo-panning/dist/renderers-Dc15sLt-.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isSignal, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\"pan\"];\nconst PANNING_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n pan : f32,\n hasPanSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>;\n@group(0) @binding(4) var<storage, read> panSignal : array<f32>;\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n var currentPan = u.pan;\n if (u.hasPanSig > 0.5f) {\n currentPan = panSignal[index];\n }\n let clampedPan = max(-1.0f, min(1.0f, currentPan));\n var leftGain = 1.0f;\n var rightGain = 1.0f;\n\n if (clampedPan < 0.0f) {\n rightGain = 1.0f + clampedPan;\n } else if (clampedPan > 0.0f) {\n leftGain = 1.0f - clampedPan;\n }\n\n if (numChannels > 1u) {\n outputChannels[index] = inputChannels[index] * leftGain;\n outputChannels[numSamples + index] = inputChannels[numSamples + index] * rightGain;\n } else {\n outputChannels[index] = inputChannels[index] * leftGain;\n }\n }\n\n // Dummy reference to prevent state binding from being optimized out\n state[0] = state[0];\n}\n`;\nconst stereoPanningAudioProcessor = async (channels, sampleRate, node, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Stereo Panning.\");\n\tconst op = node.operation || {};\n\tconst inputs = op.inputs || {};\n\tconst pan = resolveNumber(op.pan, 0);\n\tconst clampedPan = Math.max(-1, Math.min(1, pan));\n\tconst isHandleConnected = (handleIdKey) => {\n\t\tconst handleId = op[handleIdKey];\n\t\tif (typeof handleId !== \"string\" || !handleId) return false;\n\t\tconst input = inputs[handleId];\n\t\treturn Boolean(input?.connectionValid && input.outputItem && (input.outputItem.type === \"Signal\" || input.outputItem.type === \"Number\"));\n\t};\n\tconst hasPanSig = isSignal(op.pan) || isSignal(op.signals?.pan) || isHandleConnected(\"panHandleId\") ? 1 : 0;\n\tif (channels.length === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tif (channels.length === 1) {\n\t\tconst rightChannel = new Float32Array(numSamples);\n\t\trightChannel.set(channels[0]);\n\t\tchannels.push(rightChannel);\n\t}\n\tconst numChannels = channels.length;\n\tconst nodeId = op.id || \"stereo-panning\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, node, frame, fps, PANNING_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\tclampedPan,\n\t\thasPanSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0\n\t], 8, 1, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: stereoPanningAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Dc15sLt-.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc,CAAC,MAAM;AAC3B,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDtC,MAAM,8BAA8B,OAAO,UAAU,YAAY,MAAM,QAAQ;AAC9E,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,mDAAmD;CACrF,MAAM,KAAK,KAAK,aAAa,EAAE;CAC/B,MAAM,SAAS,GAAG,UAAU,EAAE;CAC9B,MAAM,MAAM,cAAc,GAAG,KAAK,EAAE;CACpC,MAAM,aAAa,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;CACjD,MAAM,qBAAqB,gBAAgB;EAC1C,MAAM,WAAW,GAAG;AACpB,MAAI,OAAO,aAAa,YAAY,CAAC,SAAU,QAAO;EACtD,MAAM,QAAQ,OAAO;AACrB,SAAO,QAAQ,OAAO,mBAAmB,MAAM,eAAe,MAAM,WAAW,SAAS,YAAY,MAAM,WAAW,SAAS,UAAU;;CAEzI,MAAM,YAAY,SAAS,GAAG,IAAI,IAAI,SAAS,GAAG,SAAS,IAAI,IAAI,kBAAkB,cAAc,GAAG,IAAI;AAC1G,KAAI,SAAS,WAAW,EAAG;CAC3B,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;AACtB,KAAI,SAAS,WAAW,GAAG;EAC1B,MAAM,eAAe,IAAI,aAAa,WAAW;AACjD,eAAa,IAAI,SAAS,GAAG;AAC7B,WAAS,KAAK,aAAa;;CAE5B,MAAM,cAAc,SAAS;CAC7B,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;AACvB,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,MAAM,OAAO,KAAK,+BAA+B;EAC7H;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,GAAG,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK5F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,6BAA6B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-W71TSjRM.mjs";
2
+ import "./dist-CWLLnigL.mjs";
3
+ import { t as renderers_default } from "./renderer-BSELd5vU.mjs";
4
+
5
+ export { renderers_default as default };
@@ -1,5 +1,5 @@
1
- import { n as defineRenderer } from "./renderer-DrWeb39d.mjs";
2
- import { q as parseColor } from "./dist-D12-a3-x.mjs";
1
+ import { n as defineRenderer } from "./renderer-DcvjSolU.mjs";
2
+ import { q as parseColor } from "./dist-CWLLnigL.mjs";
3
3
 
4
4
  //#region ../../nodes/node-paint/dist/renderers-Cp52luA9.mjs
5
5
  const PaintWebGPURenderer = async (args) => {
@@ -142,4 +142,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: PaintWebGPURenderer });
142
142
 
143
143
  //#endregion
144
144
  export { renderers_default as t };
145
- //# sourceMappingURL=renderer-NTCk1Srf.mjs.map
145
+ //# sourceMappingURL=renderer-B1LD29TV.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-NTCk1Srf.mjs","names":[],"sources":["../../../nodes/node-paint/dist/renderers-Cp52luA9.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { parseColor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst PaintWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetView, targetTexture, targetWidth, targetHeight, encoder, props, drawChild } = args;\n\tconst { virtualMedia } = props;\n\tif (virtualMedia.operation?.op !== \"Paint\") return;\n\tconst childMedia = virtualMedia?.children?.[0];\n\tconst containerW = props.containerWidth ?? childMedia?.metadata?.width ?? targetWidth;\n\tconst containerH = props.containerHeight ?? childMedia?.metadata?.height ?? targetHeight;\n\tconst config = virtualMedia.operation;\n\tconst isMaskMode = config.mode === \"mask\";\n\tconst strokes = config.strokes ?? [];\n\tpass.end();\n\tctx.renderer.pushIdentity();\n\tconst baseTex = ctx.renderer.getTemporaryTexture(containerW, containerH, [...props.excludeTextures || [], targetTexture]);\n\tconst baseView = baseTex.createView();\n\tif (isMaskMode) ctx.renderer.beginFrame(encoder, baseView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 1\n\t}, containerW, containerH, \"clear\").end();\n\telse if (childMedia) await drawChild(childMedia, props, baseView, baseTex, containerW, containerH);\n\telse {\n\t\tconst basePass = ctx.renderer.beginFrame(encoder, baseView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerW, containerH, \"clear\");\n\t\tif (config.backgroundColor) ctx.renderer.drawRect(basePass, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: containerW,\n\t\t\theight: containerH\n\t\t}, config.backgroundColor);\n\t\tbasePass.end();\n\t}\n\tlet finalTex = baseTex;\n\tif (strokes.length > 0) {\n\t\tconst origW = childMedia?.metadata?.width ?? containerW;\n\t\tconst origH = childMedia?.metadata?.height ?? containerH;\n\t\tconst scaleX = origW > 0 ? containerW / origW : 1;\n\t\tconst scaleY = origH > 0 ? containerH / origH : 1;\n\t\tlet scalePushed = false;\n\t\tif (scaleX !== 1 || scaleY !== 1) {\n\t\t\tctx.renderer.pushTransform(new DOMMatrix().scale(scaleX, scaleY));\n\t\t\tscalePushed = true;\n\t\t}\n\t\tconst paintTex = ctx.renderer.getTemporaryTexture(containerW, containerH, [\n\t\t\tbaseTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tconst paintView = paintTex.createView();\n\t\tctx.renderer.beginFrame(encoder, paintView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerW, containerH, \"clear\").end();\n\t\tconst allStrokes = strokes;\n\t\tlet currentLayer = paintTex;\n\t\tlet currentPass = null;\n\t\tfor (const stroke of allStrokes) if (stroke.tool === \"brush\") {\n\t\t\tif (!currentPass) currentPass = ctx.renderer.beginFrame(encoder, currentLayer.createView(), {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}, containerW, containerH, \"load\");\n\t\t\tconst parsedColor = parseColor(stroke.color);\n\t\t\tconst drawColor = isMaskMode ? {\n\t\t\t\tr: parsedColor.a,\n\t\t\t\tg: parsedColor.a,\n\t\t\t\tb: parsedColor.a,\n\t\t\t\ta: parsedColor.a\n\t\t\t} : {\n\t\t\t\tr: parsedColor.r * parsedColor.a,\n\t\t\t\tg: parsedColor.g * parsedColor.a,\n\t\t\t\tb: parsedColor.b * parsedColor.a,\n\t\t\t\ta: parsedColor.a\n\t\t\t};\n\t\t\tctx.renderer.drawPath(currentPass, stroke.path, drawColor, stroke.size, {\n\t\t\t\topacity: stroke.opacity ?? 1,\n\t\t\t\tblendMode: \"max\"\n\t\t\t});\n\t\t} else if (stroke.tool === \"eraser\") {\n\t\t\tif (currentPass) {\n\t\t\t\tcurrentPass.end();\n\t\t\t\tcurrentPass = null;\n\t\t\t}\n\t\t\tconst maskTex = ctx.renderer.getTemporaryTexture(containerW, containerH, [\n\t\t\t\tbaseTex,\n\t\t\t\tpaintTex,\n\t\t\t\ttargetTexture,\n\t\t\t\t...props.excludeTextures || []\n\t\t\t]);\n\t\t\tconst maskView = maskTex.createView();\n\t\t\tconst maskPass = ctx.renderer.beginFrame(encoder, maskView, {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}, containerW, containerH, \"clear\");\n\t\t\tctx.renderer.drawPath(maskPass, stroke.path, \"#ffffff\", stroke.size, { blendMode: \"max\" });\n\t\t\tmaskPass.end();\n\t\t\tcurrentLayer = ctx.renderer.composite(encoder, currentLayer, maskTex, \"mask-out\", [\n\t\t\t\tbaseTex,\n\t\t\t\tpaintTex,\n\t\t\t\ttargetTexture,\n\t\t\t\t...props.excludeTextures || []\n\t\t\t]);\n\t\t}\n\t\tif (currentPass) currentPass.end();\n\t\tfinalTex = ctx.renderer.composite(encoder, baseTex, currentLayer, \"normal\", [\n\t\t\tbaseTex,\n\t\t\tcurrentLayer,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tif (scalePushed) ctx.renderer.popTransform();\n\t}\n\tctx.renderer.popTransform();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, finalTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerW,\n\t\theight: containerH\n\t});\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PaintWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Cp52luA9.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-B1LD29TV.mjs","names":[],"sources":["../../../nodes/node-paint/dist/renderers-Cp52luA9.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { parseColor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst PaintWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetView, targetTexture, targetWidth, targetHeight, encoder, props, drawChild } = args;\n\tconst { virtualMedia } = props;\n\tif (virtualMedia.operation?.op !== \"Paint\") return;\n\tconst childMedia = virtualMedia?.children?.[0];\n\tconst containerW = props.containerWidth ?? childMedia?.metadata?.width ?? targetWidth;\n\tconst containerH = props.containerHeight ?? childMedia?.metadata?.height ?? targetHeight;\n\tconst config = virtualMedia.operation;\n\tconst isMaskMode = config.mode === \"mask\";\n\tconst strokes = config.strokes ?? [];\n\tpass.end();\n\tctx.renderer.pushIdentity();\n\tconst baseTex = ctx.renderer.getTemporaryTexture(containerW, containerH, [...props.excludeTextures || [], targetTexture]);\n\tconst baseView = baseTex.createView();\n\tif (isMaskMode) ctx.renderer.beginFrame(encoder, baseView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 1\n\t}, containerW, containerH, \"clear\").end();\n\telse if (childMedia) await drawChild(childMedia, props, baseView, baseTex, containerW, containerH);\n\telse {\n\t\tconst basePass = ctx.renderer.beginFrame(encoder, baseView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerW, containerH, \"clear\");\n\t\tif (config.backgroundColor) ctx.renderer.drawRect(basePass, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: containerW,\n\t\t\theight: containerH\n\t\t}, config.backgroundColor);\n\t\tbasePass.end();\n\t}\n\tlet finalTex = baseTex;\n\tif (strokes.length > 0) {\n\t\tconst origW = childMedia?.metadata?.width ?? containerW;\n\t\tconst origH = childMedia?.metadata?.height ?? containerH;\n\t\tconst scaleX = origW > 0 ? containerW / origW : 1;\n\t\tconst scaleY = origH > 0 ? containerH / origH : 1;\n\t\tlet scalePushed = false;\n\t\tif (scaleX !== 1 || scaleY !== 1) {\n\t\t\tctx.renderer.pushTransform(new DOMMatrix().scale(scaleX, scaleY));\n\t\t\tscalePushed = true;\n\t\t}\n\t\tconst paintTex = ctx.renderer.getTemporaryTexture(containerW, containerH, [\n\t\t\tbaseTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tconst paintView = paintTex.createView();\n\t\tctx.renderer.beginFrame(encoder, paintView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerW, containerH, \"clear\").end();\n\t\tconst allStrokes = strokes;\n\t\tlet currentLayer = paintTex;\n\t\tlet currentPass = null;\n\t\tfor (const stroke of allStrokes) if (stroke.tool === \"brush\") {\n\t\t\tif (!currentPass) currentPass = ctx.renderer.beginFrame(encoder, currentLayer.createView(), {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}, containerW, containerH, \"load\");\n\t\t\tconst parsedColor = parseColor(stroke.color);\n\t\t\tconst drawColor = isMaskMode ? {\n\t\t\t\tr: parsedColor.a,\n\t\t\t\tg: parsedColor.a,\n\t\t\t\tb: parsedColor.a,\n\t\t\t\ta: parsedColor.a\n\t\t\t} : {\n\t\t\t\tr: parsedColor.r * parsedColor.a,\n\t\t\t\tg: parsedColor.g * parsedColor.a,\n\t\t\t\tb: parsedColor.b * parsedColor.a,\n\t\t\t\ta: parsedColor.a\n\t\t\t};\n\t\t\tctx.renderer.drawPath(currentPass, stroke.path, drawColor, stroke.size, {\n\t\t\t\topacity: stroke.opacity ?? 1,\n\t\t\t\tblendMode: \"max\"\n\t\t\t});\n\t\t} else if (stroke.tool === \"eraser\") {\n\t\t\tif (currentPass) {\n\t\t\t\tcurrentPass.end();\n\t\t\t\tcurrentPass = null;\n\t\t\t}\n\t\t\tconst maskTex = ctx.renderer.getTemporaryTexture(containerW, containerH, [\n\t\t\t\tbaseTex,\n\t\t\t\tpaintTex,\n\t\t\t\ttargetTexture,\n\t\t\t\t...props.excludeTextures || []\n\t\t\t]);\n\t\t\tconst maskView = maskTex.createView();\n\t\t\tconst maskPass = ctx.renderer.beginFrame(encoder, maskView, {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}, containerW, containerH, \"clear\");\n\t\t\tctx.renderer.drawPath(maskPass, stroke.path, \"#ffffff\", stroke.size, { blendMode: \"max\" });\n\t\t\tmaskPass.end();\n\t\t\tcurrentLayer = ctx.renderer.composite(encoder, currentLayer, maskTex, \"mask-out\", [\n\t\t\t\tbaseTex,\n\t\t\t\tpaintTex,\n\t\t\t\ttargetTexture,\n\t\t\t\t...props.excludeTextures || []\n\t\t\t]);\n\t\t}\n\t\tif (currentPass) currentPass.end();\n\t\tfinalTex = ctx.renderer.composite(encoder, baseTex, currentLayer, \"normal\", [\n\t\t\tbaseTex,\n\t\t\tcurrentLayer,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tif (scalePushed) ctx.renderer.popTransform();\n\t}\n\tctx.renderer.popTransform();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, finalTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerW,\n\t\theight: containerH\n\t});\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PaintWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Cp52luA9.mjs.map"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { n as defineRenderer } from "./renderer-DrWeb39d.mjs";
2
- import { Rn as signalRegistry, W as lutStore } from "./dist-D12-a3-x.mjs";
3
- import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-zFNrvhV9.mjs";
1
+ import { n as defineRenderer } from "./renderer-DcvjSolU.mjs";
2
+ import { W as lutStore, zn as signalRegistry } from "./dist-CWLLnigL.mjs";
3
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CpkJJLQP.mjs";
4
4
 
5
5
  //#region ../../nodes/node-apply-lut/dist/renderers-BrWmp6fW.mjs
6
6
  const LUT_3D_SHADER = `
@@ -219,4 +219,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: LutWebGPURenderer });
219
219
 
220
220
  //#endregion
221
221
  export { renderers_default as t };
222
- //# sourceMappingURL=renderer-ESkPj6pk.mjs.map
222
+ //# sourceMappingURL=renderer-B1esRxGy.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-ESkPj6pk.mjs","names":[],"sources":["../../../nodes/node-apply-lut/dist/renderers-BrWmp6fW.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTiming } from \"@framefields/node-sdk/gpu\";\nimport { lutStore, signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst LUT_3D_SHADER = `\nstruct LutUniforms {\n\tintensity : f32,\n\tlutSize : f32,\n\thasSignal : f32,\n\tpad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : LutUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var lutTex : texture_3d<f32>;\n@group(2) @binding(1) var lutSamp : sampler;\n@group(3) @binding(0) var signalTex : texture_2d<f32>;\n@group(3) @binding(1) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet inputColor = textureSampleLevel(tex, samp, in.uv, 0.0);\n\t\n\t// Coordinate adjustment to sample from texel centers\n\tlet uvw = inputColor.rgb * ((u.lutSize - 1.0) / u.lutSize) + vec3<f32>(0.5 / u.lutSize);\n\tlet mappedColor = textureSampleLevel(lutTex, lutSamp, uvw, 0.0);\n\t\n\tvar activeIntensity = u.intensity;\n\tif (u.hasSignal > 0.5) {\n\t\tactiveIntensity = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;\n\t}\n\t\n\tlet finalRgb = inputColor.rgb + activeIntensity * (mappedColor.rgb - inputColor.rgb);\n\treturn vec4<f32>(finalRgb * inputColor.a, inputColor.a);\n}\n`;\nconst LUT_1D_SHADER = `\nstruct LutUniforms {\n\tintensity : f32,\n\tlutSize : f32,\n\thasSignal : f32,\n\tpad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : LutUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var lutTex : texture_1d<f32>;\n@group(2) @binding(1) var lutSamp : sampler;\n@group(3) @binding(0) var signalTex : texture_2d<f32>;\n@group(3) @binding(1) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet inputColor = textureSampleLevel(tex, samp, in.uv, 0.0);\n\t\n\tlet rCoord = inputColor.r * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);\n\tlet gCoord = inputColor.g * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);\n\tlet bCoord = inputColor.b * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);\n\t\n\tlet mappedR = textureSampleLevel(lutTex, lutSamp, rCoord, 0.0).r;\n\tlet mappedG = textureSampleLevel(lutTex, lutSamp, gCoord, 0.0).g;\n\tlet mappedB = textureSampleLevel(lutTex, lutSamp, bCoord, 0.0).b;\n\t\n\tvar activeIntensity = u.intensity;\n\tif (u.hasSignal > 0.5) {\n\t\tactiveIntensity = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;\n\t}\n\t\n\tlet finalRgb = inputColor.rgb + activeIntensity * (vec3<f32>(mappedR, mappedG, mappedB) - inputColor.rgb);\n\treturn vec4<f32>(finalRgb * inputColor.a, inputColor.a);\n}\n`;\nconst lutUniformData = new Float32Array(4);\nconst getDeviceLayouts = perDevice((device) => ({\n\tlutUniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tlutTextureLayout3D: fragmentBindGroupLayout(device, [{ texture: {\n\t\tviewDimension: \"3d\",\n\t\tsampleType: \"float\"\n\t} }, \"sampler\"]),\n\tlutTextureLayout1D: fragmentBindGroupLayout(device, [{ texture: {\n\t\tviewDimension: \"1d\",\n\t\tsampleType: \"float\"\n\t} }, \"sampler\"]),\n\tsignalTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getLutResources(device, format, type) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `lut_${type}_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst shaderCode = type === \"3D\" ? LUT_3D_SHADER : LUT_1D_SHADER;\n\t\tconst lutModule = device.createShaderModule({\n\t\t\tlabel: `lut_${type.toLowerCase()}_${format}.wgsl`,\n\t\t\tcode: shaderCode\n\t\t});\n\t\tconst currentLutLayout = type === \"3D\" ? layouts.lutTextureLayout3D : layouts.lutTextureLayout1D;\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `LutPipeline_${type}_${format}`,\n\t\t\tmodule: lutModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.lutUniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tcurrentLutLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tlutPipeline: pipeline,\n\t\tlutUniformLayout: layouts.lutUniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tlutTextureLayout: type === \"3D\" ? layouts.lutTextureLayout3D : layouts.lutTextureLayout1D,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst LutWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ApplyLUT\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst lutUrl = op.lutUrl;\n\tif (!lutUrl) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst intensityInput = op.intensityHandleId ? op.inputs?.[op.intensityHandleId] : null;\n\tconst hasSignal = !!(intensityInput?.connectionValid && intensityInput.outputItem?.type === \"Signal\");\n\tconst sd = hasSignal ? intensityInput?.outputItem?.data : null;\n\tlet intensity = 1;\n\tlet hasStaticSignal = false;\n\tif (!hasSignal) if (intensityInput?.connectionValid && intensityInput.outputItem?.type === \"Number\") intensity = Number(intensityInput.outputItem.data ?? 1);\n\telse intensity = Number(op.intensity ?? 1);\n\telse if (sd && typeof sd === \"object\") {\n\t\tintensity = Number(sd.offset ?? 1);\n\t\thasStaticSignal = true;\n\t}\n\tintensity = Math.max(0, Math.min(10, intensity));\n\tlet lut = lutStore.get(lutUrl, ctx.device);\n\tif (!lut) {\n\t\tif ((props.isHeadless ?? (typeof window === \"undefined\" || globalThis.__IS_HEADLESS_RENDERER__)) || props.forceWait) try {\n\t\t\tlut = await lutStore.getOrLoad(lutUrl, ctx.device);\n\t\t} catch (err) {\n\t\t\tif (!(err instanceof DOMException && err.name === \"AbortError\") && !(err && typeof err === \"object\" && \"name\" in err && err.name === \"AbortError\")) console.error(\"[ApplyLUT] Failed to load LUT synchronously:\", err);\n\t\t}\n\t\telse lutStore.getOrLoad(lutUrl, ctx.device).catch((err) => {\n\t\t\tif (err instanceof DOMException && err.name === \"AbortError\" || err && typeof err === \"object\" && \"name\" in err && err.name === \"AbortError\") return;\n\t\t\tconsole.error(\"[ApplyLUT] Failed to load LUT in background:\", err);\n\t\t});\n\t\tif (!lut && lutUrl.startsWith(\"runtime://lut/\")) {\n\t\t\tconst prefix = lutUrl.substring(0, lutUrl.lastIndexOf(\"-\") + 1);\n\t\t\tif (prefix) lut = lutStore.getAnyMatching(prefix, ctx.device);\n\t\t}\n\t}\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tif (!lut) {\n\t\tdrawTextureToTarget(args, tmpTex, op.opacity ?? 1);\n\t\treturn;\n\t}\n\tconst { lutPipeline: pipeline, lutUniformLayout: uLayout, singleTextureLayout: tLayout, lutTextureLayout: lLayout, signalTextureLayout: sigLayout } = getLutResources(ctx.device, ctx.renderer.format, lut.type);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tlet signalView;\n\tif (hasStaticSignal) {\n\t\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\t\tsignalView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, sd.nodeId ?? \"lut_intensity_sig\", elapsedSeconds, durationSeconds, sd, width, height, props.renderId, frame, fps);\n\t} else signalView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tlutUniformData[0] = intensity;\n\tlutUniformData[1] = lut.size;\n\tlutUniformData[2] = hasStaticSignal ? 1 : 0;\n\tlutUniformData[3] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(lutUniformData);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: lLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: lut.texture.createView()\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t}),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: signalView\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LutWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BrWmp6fW.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-B1esRxGy.mjs","names":[],"sources":["../../../nodes/node-apply-lut/dist/renderers-BrWmp6fW.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTiming } from \"@framefields/node-sdk/gpu\";\nimport { lutStore, signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst LUT_3D_SHADER = `\nstruct LutUniforms {\n\tintensity : f32,\n\tlutSize : f32,\n\thasSignal : f32,\n\tpad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : LutUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var lutTex : texture_3d<f32>;\n@group(2) @binding(1) var lutSamp : sampler;\n@group(3) @binding(0) var signalTex : texture_2d<f32>;\n@group(3) @binding(1) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet inputColor = textureSampleLevel(tex, samp, in.uv, 0.0);\n\t\n\t// Coordinate adjustment to sample from texel centers\n\tlet uvw = inputColor.rgb * ((u.lutSize - 1.0) / u.lutSize) + vec3<f32>(0.5 / u.lutSize);\n\tlet mappedColor = textureSampleLevel(lutTex, lutSamp, uvw, 0.0);\n\t\n\tvar activeIntensity = u.intensity;\n\tif (u.hasSignal > 0.5) {\n\t\tactiveIntensity = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;\n\t}\n\t\n\tlet finalRgb = inputColor.rgb + activeIntensity * (mappedColor.rgb - inputColor.rgb);\n\treturn vec4<f32>(finalRgb * inputColor.a, inputColor.a);\n}\n`;\nconst LUT_1D_SHADER = `\nstruct LutUniforms {\n\tintensity : f32,\n\tlutSize : f32,\n\thasSignal : f32,\n\tpad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : LutUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var lutTex : texture_1d<f32>;\n@group(2) @binding(1) var lutSamp : sampler;\n@group(3) @binding(0) var signalTex : texture_2d<f32>;\n@group(3) @binding(1) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet inputColor = textureSampleLevel(tex, samp, in.uv, 0.0);\n\t\n\tlet rCoord = inputColor.r * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);\n\tlet gCoord = inputColor.g * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);\n\tlet bCoord = inputColor.b * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);\n\t\n\tlet mappedR = textureSampleLevel(lutTex, lutSamp, rCoord, 0.0).r;\n\tlet mappedG = textureSampleLevel(lutTex, lutSamp, gCoord, 0.0).g;\n\tlet mappedB = textureSampleLevel(lutTex, lutSamp, bCoord, 0.0).b;\n\t\n\tvar activeIntensity = u.intensity;\n\tif (u.hasSignal > 0.5) {\n\t\tactiveIntensity = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;\n\t}\n\t\n\tlet finalRgb = inputColor.rgb + activeIntensity * (vec3<f32>(mappedR, mappedG, mappedB) - inputColor.rgb);\n\treturn vec4<f32>(finalRgb * inputColor.a, inputColor.a);\n}\n`;\nconst lutUniformData = new Float32Array(4);\nconst getDeviceLayouts = perDevice((device) => ({\n\tlutUniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tlutTextureLayout3D: fragmentBindGroupLayout(device, [{ texture: {\n\t\tviewDimension: \"3d\",\n\t\tsampleType: \"float\"\n\t} }, \"sampler\"]),\n\tlutTextureLayout1D: fragmentBindGroupLayout(device, [{ texture: {\n\t\tviewDimension: \"1d\",\n\t\tsampleType: \"float\"\n\t} }, \"sampler\"]),\n\tsignalTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getLutResources(device, format, type) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `lut_${type}_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst shaderCode = type === \"3D\" ? LUT_3D_SHADER : LUT_1D_SHADER;\n\t\tconst lutModule = device.createShaderModule({\n\t\t\tlabel: `lut_${type.toLowerCase()}_${format}.wgsl`,\n\t\t\tcode: shaderCode\n\t\t});\n\t\tconst currentLutLayout = type === \"3D\" ? layouts.lutTextureLayout3D : layouts.lutTextureLayout1D;\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `LutPipeline_${type}_${format}`,\n\t\t\tmodule: lutModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.lutUniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tcurrentLutLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tlutPipeline: pipeline,\n\t\tlutUniformLayout: layouts.lutUniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tlutTextureLayout: type === \"3D\" ? layouts.lutTextureLayout3D : layouts.lutTextureLayout1D,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst LutWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ApplyLUT\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst lutUrl = op.lutUrl;\n\tif (!lutUrl) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst intensityInput = op.intensityHandleId ? op.inputs?.[op.intensityHandleId] : null;\n\tconst hasSignal = !!(intensityInput?.connectionValid && intensityInput.outputItem?.type === \"Signal\");\n\tconst sd = hasSignal ? intensityInput?.outputItem?.data : null;\n\tlet intensity = 1;\n\tlet hasStaticSignal = false;\n\tif (!hasSignal) if (intensityInput?.connectionValid && intensityInput.outputItem?.type === \"Number\") intensity = Number(intensityInput.outputItem.data ?? 1);\n\telse intensity = Number(op.intensity ?? 1);\n\telse if (sd && typeof sd === \"object\") {\n\t\tintensity = Number(sd.offset ?? 1);\n\t\thasStaticSignal = true;\n\t}\n\tintensity = Math.max(0, Math.min(10, intensity));\n\tlet lut = lutStore.get(lutUrl, ctx.device);\n\tif (!lut) {\n\t\tif ((props.isHeadless ?? (typeof window === \"undefined\" || globalThis.__IS_HEADLESS_RENDERER__)) || props.forceWait) try {\n\t\t\tlut = await lutStore.getOrLoad(lutUrl, ctx.device);\n\t\t} catch (err) {\n\t\t\tif (!(err instanceof DOMException && err.name === \"AbortError\") && !(err && typeof err === \"object\" && \"name\" in err && err.name === \"AbortError\")) console.error(\"[ApplyLUT] Failed to load LUT synchronously:\", err);\n\t\t}\n\t\telse lutStore.getOrLoad(lutUrl, ctx.device).catch((err) => {\n\t\t\tif (err instanceof DOMException && err.name === \"AbortError\" || err && typeof err === \"object\" && \"name\" in err && err.name === \"AbortError\") return;\n\t\t\tconsole.error(\"[ApplyLUT] Failed to load LUT in background:\", err);\n\t\t});\n\t\tif (!lut && lutUrl.startsWith(\"runtime://lut/\")) {\n\t\t\tconst prefix = lutUrl.substring(0, lutUrl.lastIndexOf(\"-\") + 1);\n\t\t\tif (prefix) lut = lutStore.getAnyMatching(prefix, ctx.device);\n\t\t}\n\t}\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tif (!lut) {\n\t\tdrawTextureToTarget(args, tmpTex, op.opacity ?? 1);\n\t\treturn;\n\t}\n\tconst { lutPipeline: pipeline, lutUniformLayout: uLayout, singleTextureLayout: tLayout, lutTextureLayout: lLayout, signalTextureLayout: sigLayout } = getLutResources(ctx.device, ctx.renderer.format, lut.type);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tlet signalView;\n\tif (hasStaticSignal) {\n\t\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\t\tsignalView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, sd.nodeId ?? \"lut_intensity_sig\", elapsedSeconds, durationSeconds, sd, width, height, props.renderId, frame, fps);\n\t} else signalView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tlutUniformData[0] = intensity;\n\tlutUniformData[1] = lut.size;\n\tlutUniformData[2] = hasStaticSignal ? 1 : 0;\n\tlutUniformData[3] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(lutUniformData);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: lLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: lut.texture.createView()\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t}),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: signalView\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LutWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BrWmp6fW.mjs.map"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import "./chunk-D8S17ehY.mjs";
2
- import { n as defineRenderer } from "./renderer-DrWeb39d.mjs";
3
- import "./dist-D12-a3-x.mjs";
4
- import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-zFNrvhV9.mjs";
1
+ import "./chunk-W71TSjRM.mjs";
2
+ import { n as defineRenderer } from "./renderer-DcvjSolU.mjs";
3
+ import "./dist-CWLLnigL.mjs";
4
+ import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CpkJJLQP.mjs";
5
5
 
6
6
  //#region ../../nodes/node-pixelate/dist/renderers-lrLhGRcA.mjs
7
7
  const OP = "Pixelate";
@@ -201,4 +201,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: PixelateWebGPURenderer
201
201
 
202
202
  //#endregion
203
203
  export { PixelateWebGPURenderer, renderers_default as default };
204
- //# sourceMappingURL=renderer-g7fF2AYk.mjs.map
204
+ //# sourceMappingURL=renderer-B3Dme2es.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-g7fF2AYk.mjs","names":[],"sources":["../../../nodes/node-pixelate/dist/renderers-lrLhGRcA.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Pixelate\";\nconst UNIFORM_FLOATS = 8;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 2> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet size = u.v[1].x;\n\tlet shape = u32(u.v[1].y + 0.5);\n\tlet gap = u.v[1].z;\n\n\tlet R = res();\n\tlet cell = max(size, 1.0);\n\tlet p = in.uv * R;\n\tlet c0 = floor(p / cell) * cell + cell * 0.5;\n\tlet col = texelS(c0);\n\tlet f = (p - c0) / cell;\n\tlet g = 1.0 - gap;\n\tlet e = 1.0 / cell;\n\tvar m = 1.0;\n\tif (shape == 1u) {\n\t\tm = 1.0 - smoothstep(0.5 * g - e, 0.5 * g, length(f));\n\t} else if (shape == 2u) {\n\t\tm = 1.0 - smoothstep(0.5 * g - e, 0.5 * g, abs(f.x) + abs(f.y));\n\t} else if (gap > 0.0) {\n\t\tm = 1.0 - smoothstep(0.5 * g - e, 0.5 * g, max(abs(f.x), abs(f.y)));\n\t}\n\treturn premul(vec4<f32>(col.rgb, col.a * m));\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.size, 12);\n\tdata[5] = Math.max(0, [\n\t\t\"square\",\n\t\t\"circle\",\n\t\t\"diamond\"\n\t].indexOf(String(raw.shape ?? \"square\")));\n\tdata[6] = num(raw.gap, 0);\n}\nconst PixelateWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PixelateWebGPURenderer });\n\n//#endregion\nexport { PixelateWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-lrLhGRcA.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-B3Dme2es.mjs","names":[],"sources":["../../../nodes/node-pixelate/dist/renderers-lrLhGRcA.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Pixelate\";\nconst UNIFORM_FLOATS = 8;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 2> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet size = u.v[1].x;\n\tlet shape = u32(u.v[1].y + 0.5);\n\tlet gap = u.v[1].z;\n\n\tlet R = res();\n\tlet cell = max(size, 1.0);\n\tlet p = in.uv * R;\n\tlet c0 = floor(p / cell) * cell + cell * 0.5;\n\tlet col = texelS(c0);\n\tlet f = (p - c0) / cell;\n\tlet g = 1.0 - gap;\n\tlet e = 1.0 / cell;\n\tvar m = 1.0;\n\tif (shape == 1u) {\n\t\tm = 1.0 - smoothstep(0.5 * g - e, 0.5 * g, length(f));\n\t} else if (shape == 2u) {\n\t\tm = 1.0 - smoothstep(0.5 * g - e, 0.5 * g, abs(f.x) + abs(f.y));\n\t} else if (gap > 0.0) {\n\t\tm = 1.0 - smoothstep(0.5 * g - e, 0.5 * g, max(abs(f.x), abs(f.y)));\n\t}\n\treturn premul(vec4<f32>(col.rgb, col.a * m));\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.size, 12);\n\tdata[5] = Math.max(0, [\n\t\t\"square\",\n\t\t\"circle\",\n\t\t\"diamond\"\n\t].indexOf(String(raw.shape ?? \"square\")));\n\tdata[6] = num(raw.gap, 0);\n}\nconst PixelateWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PixelateWebGPURenderer });\n\n//#endregion\nexport { PixelateWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-lrLhGRcA.mjs.map"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-W71TSjRM.mjs";
2
+ import "./dist-CWLLnigL.mjs";
3
+ import { n as renderers_default, t as WebGPURenderer } from "./renderer-BQetXCcZ.mjs";
4
+
5
+ export { WebGPURenderer, renderers_default as default };
@@ -1,7 +1,7 @@
1
- import "./chunk-D8S17ehY.mjs";
2
- import { Rt as getFingerprint } from "./dist-ByxHoMQI.mjs";
3
- import { n as defineRenderer } from "./renderer-DrWeb39d.mjs";
4
- import { W as lutStore } from "./dist-D12-a3-x.mjs";
1
+ import "./chunk-W71TSjRM.mjs";
2
+ import { Rt as getFingerprint } from "./dist-Bf2_efYP.mjs";
3
+ import { n as defineRenderer } from "./renderer-DcvjSolU.mjs";
4
+ import { W as lutStore } from "./dist-CWLLnigL.mjs";
5
5
 
6
6
  //#region ../../nodes/node-extract-lut/dist/renderers-CDotFzd9.mjs
7
7
  const extractionCache = /* @__PURE__ */ new Map();
@@ -979,4 +979,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ExtractLutWebGPURendere
979
979
 
980
980
  //#endregion
981
981
  export { renderers_default as default };
982
- //# sourceMappingURL=renderer-CDVb4OfJ.mjs.map
982
+ //# sourceMappingURL=renderer-B6Oeahe_.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-CDVb4OfJ.mjs","names":[],"sources":["../../../nodes/node-extract-lut/dist/renderers-CDotFzd9.mjs"],"sourcesContent":["import { getFingerprint } from \"@framefields/core\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { lutStore } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst extractionCache = /* @__PURE__ */ new Map();\nconst pendingExtractions = /* @__PURE__ */ new Map();\nconst latestRequestedFingerprint = /* @__PURE__ */ new Map();\nconst activeTextures = /* @__PURE__ */ new Map();\nconst pipelineCache = /* @__PURE__ */ new WeakMap();\n/**\n* Lazily compiles and caches the two WGSL compute shaders per device.\n*\n* Both shaders write a flat array of f32 triples (R,G,B) for every cell of a\n* `lutSize³` cube. The host uploads whatever small set of parameters is needed\n* (RBF weights OR LAB statistics), then reads the result back as a typed array\n* that can be forwarded to `lutStore.createOrUpdate`.\n*\n* Workgroup size 8×8×4 = 256 threads maps cleanly onto lutSize=33 with\n* ceil(33/8)=5 groups on X/Y and ceil(33/4)=9 on Z → 5×5×9 = 225 dispatches.\n*/\nfunction getOrCreatePipelines(device) {\n\tconst cached = pipelineCache.get(device);\n\tif (cached) return cached;\n\tconst pipelines = {\n\t\trbf: device.createComputePipeline({\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: device.createShaderModule({ code: `\nstruct Params {\n\tlutSize : u32,\n\tnumSamples : u32,\n\tepsilonSq : f32,\n}\n\n@group(0) @binding(0) var<uniform> params : Params;\n@group(0) @binding(1) var<storage, read> srcPoints : array<vec4f>; // [numSamples]\n@group(0) @binding(2) var<storage, read> weights : array<vec4f>; // [numSamples]\n@group(0) @binding(3) var<storage, read> poly : array<vec4f>; // [4]\n@group(0) @binding(4) var<storage, read_write> lut : array<f32>; // [lutSize³ * 3]\n\n@compute @workgroup_size(8, 8, 4)\nfn main(@builtin(global_invocation_id) gid : vec3u) {\n\tlet lutSize = params.lutSize;\n\tif (gid.x >= lutSize || gid.y >= lutSize || gid.z >= lutSize) { return; }\n\n\tlet inR = f32(gid.x) / f32(lutSize - 1u);\n\tlet inG = f32(gid.y) / f32(lutSize - 1u);\n\tlet inB = f32(gid.z) / f32(lutSize - 1u);\n\tlet p = vec3f(inR, inG, inB);\n\n\t// Polynomial part: poly[0] + poly[1]*r + poly[2]*g + poly[3]*b\n\tvar out = poly[0].xyz + poly[1].xyz * inR + poly[2].xyz * inG + poly[3].xyz * inB;\n\n\t// RBF sum\n\tlet eps = params.epsilonSq;\n\tlet M = params.numSamples;\n\tvar minDistSq = 1e10;\n\tvar rbfSum = vec3f(0.0);\n\tfor (var i = 0u; i < M; i++) {\n\t\tlet d = p - srcPoints[i].xyz;\n\t\tlet dSq = dot(d, d);\n\t\tminDistSq = min(minDistSq, dSq);\n\t\tlet phi = sqrt(dSq + eps);\n\t\trbfSum += weights[i].xyz * phi;\n\t}\n\n\t// Smoothly fade out RBF weight contribution for regions far from samples\n\t// starts fading at distance 0.25 (dist^2 = 0.0625), fully faded at 0.5 (dist^2 = 0.25)\n\tlet rbfFade = clamp(1.0 - (minDistSq - 0.0625) / (0.25 - 0.0625), 0.0, 1.0);\n\tout += rbfSum * rbfFade;\n\n\t// Smoothly blend the entire mapping towards identity for regions extremely far from samples\n\t// starts blending at distance 0.35 (dist^2 = 0.1225), fully identity at 0.65 (dist^2 = 0.4225)\n\tlet identityBlend = clamp((minDistSq - 0.1225) / (0.4225 - 0.1225), 0.0, 1.0);\n\tout = mix(out, p, identityBlend);\n\n\t// Clamp + write\n\tlet cell = (gid.z * lutSize * lutSize + gid.y * lutSize + gid.x) * 3u;\n\tlut[cell + 0u] = clamp(out.r, 0.0, 1.0);\n\tlut[cell + 1u] = clamp(out.g, 0.0, 1.0);\n\tlut[cell + 2u] = clamp(out.b, 0.0, 1.0);\n}` }),\n\t\t\t\tentryPoint: \"main\"\n\t\t\t}\n\t\t}),\n\t\tstatistical: device.createComputePipeline({\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: device.createShaderModule({ code: `\nstruct Stats {\n\tsrcMean : vec4f, // (meanL, meanA, meanB, pad) of source\n\ttgtMean : vec4f, // (meanL, meanA, meanB, pad) of target\n\tscale : vec4f, // tgtStd / srcStd per channel\n\tlutSize : u32,\n}\n\n@group(0) @binding(0) var<uniform> stats : Stats;\n@group(0) @binding(1) var<storage, read_write> lut : array<f32>;\n\n// Constants matching the Reinhard/rgbToLab implementation\nconst INV_SQRT3 : f32 = 0.57735026919; // 1 / sqrt(3)\nconst INV_SQRT6 : f32 = 0.40824829046; // 1 / sqrt(6)\nconst INV_SQRT2 : f32 = 0.70710678118; // 1 / sqrt(2)\n\nfn safeLog10(v : f32) -> f32 {\n\treturn log(max(v, 1e-5)) * 0.43429448190; // log10(x) = ln(x) / ln(10)\n}\n\nfn rgbToLab(rgb : vec3f) -> vec3f {\n\tlet R = max(rgb.r, 1e-5);\n\tlet G = max(rgb.g, 1e-5);\n\tlet B = max(rgb.b, 1e-5);\n\n\tlet Lms_L = safeLog10(0.3811 * R + 0.5783 * G + 0.0402 * B);\n\tlet Lms_M = safeLog10(0.1967 * R + 0.7244 * G + 0.0782 * B);\n\tlet Lms_S = safeLog10(0.0241 * R + 0.1288 * G + 0.8444 * B);\n\n\treturn vec3f(\n\t\t(Lms_L + Lms_M + Lms_S) * INV_SQRT3,\n\t\t(Lms_L + Lms_M - 2.0 * Lms_S) * INV_SQRT6,\n\t\t(Lms_L - Lms_M) * INV_SQRT2,\n\t);\n}\n\nfn labToRgb(lab : vec3f) -> vec3f {\n\tlet l = lab.x; let a = lab.y; let b = lab.z;\n\n\tlet L_log = l * INV_SQRT3 + a * INV_SQRT6 + b * INV_SQRT2;\n\tlet M_log = l * INV_SQRT3 + a * INV_SQRT6 - b * INV_SQRT2;\n\tlet S_log = l * INV_SQRT3 - 2.0 * a * INV_SQRT6;\n\n\tlet L = pow(10.0, L_log);\n\tlet M = pow(10.0, M_log);\n\tlet S = pow(10.0, S_log);\n\n\treturn clamp(vec3f(\n\t\t 4.4679 * L - 3.5873 * M + 0.1193 * S,\n\t\t-1.2186 * L + 2.3809 * M - 0.1624 * S,\n\t\t 0.0497 * L - 0.2439 * M + 1.2045 * S,\n\t), vec3f(0.0), vec3f(1.0));\n}\n\n@compute @workgroup_size(8, 8, 4)\nfn main(@builtin(global_invocation_id) gid : vec3u) {\n\tlet lutSize = stats.lutSize;\n\tif (gid.x >= lutSize || gid.y >= lutSize || gid.z >= lutSize) { return; }\n\n\tlet inR = f32(gid.x) / f32(lutSize - 1u);\n\tlet inG = f32(gid.y) / f32(lutSize - 1u);\n\tlet inB = f32(gid.z) / f32(lutSize - 1u);\n\n\tlet lab = rgbToLab(vec3f(inR, inG, inB));\n\tlet mapped = stats.scale.xyz * (lab - stats.srcMean.xyz) + stats.tgtMean.xyz;\n\tlet rgb = labToRgb(mapped);\n\n\tlet cell = (gid.z * lutSize * lutSize + gid.y * lutSize + gid.x) * 3u;\n\tlut[cell + 0u] = rgb.r;\n\tlut[cell + 1u] = rgb.g;\n\tlut[cell + 2u] = rgb.b;\n}` }),\n\t\t\t\tentryPoint: \"main\"\n\t\t\t}\n\t\t})\n\t};\n\tpipelineCache.set(device, pipelines);\n\treturn pipelines;\n}\nfunction solveLU(A, B, n) {\n\tconst ipiv = new Int32Array(n);\n\tfor (let i = 0; i < n; i++) ipiv[i] = i;\n\tfor (let i = 0; i < n; i++) {\n\t\tlet maxVal = 0;\n\t\tlet pivotRow = i;\n\t\tfor (let r = i; r < n; r++) {\n\t\t\tconst val = Math.abs(A[r * n + i]);\n\t\t\tif (val > maxVal) {\n\t\t\t\tmaxVal = val;\n\t\t\t\tpivotRow = r;\n\t\t\t}\n\t\t}\n\t\tif (maxVal < 1e-9) return null;\n\t\telse if (pivotRow !== i) {\n\t\t\tconst tmp = ipiv[i];\n\t\t\tipiv[i] = ipiv[pivotRow];\n\t\t\tipiv[pivotRow] = tmp;\n\t\t\tfor (let col = 0; col < n; col++) {\n\t\t\t\tconst i1 = i * n + col, i2 = pivotRow * n + col;\n\t\t\t\tconst t = A[i1];\n\t\t\t\tA[i1] = A[i2];\n\t\t\t\tA[i2] = t;\n\t\t\t}\n\t\t\tfor (let col = 0; col < 3; col++) {\n\t\t\t\tconst i1 = i * 3 + col, i2 = pivotRow * 3 + col;\n\t\t\t\tconst t = B[i1];\n\t\t\t\tB[i1] = B[i2];\n\t\t\t\tB[i2] = t;\n\t\t\t}\n\t\t}\n\t\tconst pivot = A[i * n + i];\n\t\tif (Math.abs(pivot) < 1e-9) return null;\n\t\tfor (let r = i + 1; r < n; r++) {\n\t\t\tconst factor = A[r * n + i] / pivot;\n\t\t\tA[r * n + i] = 0;\n\t\t\tfor (let col = i + 1; col < n; col++) A[r * n + col] -= factor * A[i * n + col];\n\t\t\tfor (let col = 0; col < 3; col++) B[r * 3 + col] -= factor * B[i * 3 + col];\n\t\t}\n\t}\n\tconst X = new Float64Array(n * 3);\n\tfor (let col = 0; col < 3; col++) for (let i = n - 1; i >= 0; i--) {\n\t\tlet sum = B[i * 3 + col];\n\t\tfor (let j = i + 1; j < n; j++) sum -= A[i * n + j] * X[j * 3 + col];\n\t\tconst denom = A[i * n + i];\n\t\tif (Math.abs(denom) < 1e-9) return null;\n\t\tX[i * 3 + col] = sum / denom;\n\t}\n\treturn X;\n}\nfunction hasAbsurdCoefficients(X_sol) {\n\tfor (let i = 0; i < X_sol.length; i++) {\n\t\tconst val = X_sol[i];\n\t\tif (Number.isNaN(val) || !Number.isFinite(val) || Math.abs(val) > 1e5) return true;\n\t}\n\treturn false;\n}\nfunction solveLU1D(A, B, n) {\n\tconst ipiv = new Int32Array(n);\n\tfor (let i = 0; i < n; i++) ipiv[i] = i;\n\tfor (let i = 0; i < n; i++) {\n\t\tlet maxVal = 0;\n\t\tlet pivotRow = i;\n\t\tfor (let r = i; r < n; r++) {\n\t\t\tconst val = Math.abs(A[r * n + i]);\n\t\t\tif (val > maxVal) {\n\t\t\t\tmaxVal = val;\n\t\t\t\tpivotRow = r;\n\t\t\t}\n\t\t}\n\t\tif (maxVal < 1e-9) return null;\n\t\telse if (pivotRow !== i) {\n\t\t\tconst tmp = ipiv[i];\n\t\t\tipiv[i] = ipiv[pivotRow];\n\t\t\tipiv[pivotRow] = tmp;\n\t\t\tfor (let col = 0; col < n; col++) {\n\t\t\t\tconst i1 = i * n + col, i2 = pivotRow * n + col;\n\t\t\t\tconst t$1 = A[i1];\n\t\t\t\tA[i1] = A[i2];\n\t\t\t\tA[i2] = t$1;\n\t\t\t}\n\t\t\tconst t = B[i];\n\t\t\tB[i] = B[pivotRow];\n\t\t\tB[pivotRow] = t;\n\t\t}\n\t\tconst pivot = A[i * n + i];\n\t\tif (Math.abs(pivot) < 1e-9) return null;\n\t\tfor (let r = i + 1; r < n; r++) {\n\t\t\tconst factor = A[r * n + i] / pivot;\n\t\t\tA[r * n + i] = 0;\n\t\t\tfor (let col = i + 1; col < n; col++) A[r * n + col] -= factor * A[i * n + col];\n\t\t\tB[r] -= factor * B[i];\n\t\t}\n\t}\n\tconst X = new Float64Array(n);\n\tfor (let i = n - 1; i >= 0; i--) {\n\t\tlet sum = B[i];\n\t\tfor (let j = i + 1; j < n; j++) sum -= A[i * n + j] * X[j];\n\t\tconst denom = A[i * n + i];\n\t\tif (Math.abs(denom) < 1e-9) return null;\n\t\tX[i] = sum / denom;\n\t}\n\treturn X;\n}\nfunction solve1DChannel(srcVals, tgtVals, epsilonSq) {\n\tconst M = srcVals.length;\n\tconst H = M + 2;\n\tconst K_mat = new Float64Array(H * H);\n\tconst B_rhs = new Float64Array(H);\n\tfor (let i = 0; i < M; i++) {\n\t\tconst xi = srcVals[i];\n\t\tB_rhs[i] = tgtVals[i];\n\t\tfor (let j = 0; j < M; j++) {\n\t\t\tconst dx = xi - srcVals[j];\n\t\t\tK_mat[i * H + j] = Math.sqrt(dx * dx + epsilonSq);\n\t\t}\n\t\tK_mat[i * H + M + 0] = 1;\n\t\tK_mat[i * H + M + 1] = xi;\n\t\tK_mat[(M + 0) * H + i] = 1;\n\t\tK_mat[(M + 1) * H + i] = xi;\n\t}\n\tlet diagMean = 0;\n\tfor (let i = 0; i < M; i++) diagMean += K_mat[i * H + i];\n\tdiagMean /= M;\n\tconst lambda = Math.max(1e-4, diagMean * .01);\n\tfor (let i = 0; i < M; i++) K_mat[i * H + i] += lambda;\n\tconst polyLambda = Math.max(1e-4, diagMean * .001);\n\tfor (let k = 0; k < 2; k++) K_mat[(M + k) * H + M + k] = polyLambda;\n\treturn solveLU1D(K_mat, B_rhs, H);\n}\nfunction evaluate1DChannel(srcVals, X_sol, epsilonSq, lutSize) {\n\tconst M = srcVals.length;\n\tconst out = new Float32Array(lutSize);\n\tfor (let cell = 0; cell < lutSize; cell++) {\n\t\tconst p = cell / (lutSize - 1);\n\t\tlet minDistSq = 1e10;\n\t\tfor (let i = 0; i < M; i++) {\n\t\t\tconst dx = p - srcVals[i];\n\t\t\tminDistSq = Math.min(minDistSq, dx * dx);\n\t\t}\n\t\tlet rbfSum = 0;\n\t\tfor (let i = 0; i < M; i++) {\n\t\t\tconst dx = p - srcVals[i];\n\t\t\tconst phi = Math.sqrt(dx * dx + epsilonSq);\n\t\t\trbfSum += X_sol[i] * phi;\n\t\t}\n\t\tconst rbfFade = Math.max(0, Math.min(1, 1 - (minDistSq - .0625) / .1875));\n\t\tlet val = X_sol[M + 0] + X_sol[M + 1] * p + rbfSum * rbfFade;\n\t\tconst identityBlend = Math.max(0, Math.min(1, (minDistSq - .1225) / .3));\n\t\tval = val * (1 - identityBlend) + p * identityBlend;\n\t\tout[cell] = Math.max(0, Math.min(1, val));\n\t}\n\treturn out;\n}\nfunction isSeparableOperationTree(vv, sourceMedia) {\n\tconst sourceFingerprint = getFingerprint(sourceMedia);\n\tlet current = vv;\n\twhile (current) {\n\t\tconst op = current.operation;\n\t\tif (!op) break;\n\t\tconst mediaToFingerprint = {\n\t\t\t...current,\n\t\t\tmetadata: {},\n\t\t\toperation: current.operation ? { ...current.operation } : void 0\n\t\t};\n\t\tif (mediaToFingerprint.operation) delete mediaToFingerprint.operation.lutUrl;\n\t\tif (getFingerprint(mediaToFingerprint) === sourceFingerprint) return true;\n\t\tif (op.op === \"source\") return false;\n\t\tif (op.op === \"Curves\") {\n\t\t\tif (op.curveType !== \"rgb\") return false;\n\t\t} else if (op.op === \"Levels\") {} else return false;\n\t\tif (current.children && current.children.length > 0) current = current.children[0];\n\t\telse break;\n\t}\n\treturn false;\n}\nfunction rgbToLab(r, g, b) {\n\tconst R = Math.max(1e-5, r), G = Math.max(1e-5, g), B = Math.max(1e-5, b);\n\tconst L = Math.log10(Math.max(1e-5, .3811 * R + .5783 * G + .0402 * B));\n\tconst M = Math.log10(Math.max(1e-5, .1967 * R + .7244 * G + .0782 * B));\n\tconst S = Math.log10(Math.max(1e-5, .0241 * R + .1288 * G + .8444 * B));\n\treturn [\n\t\t(L + M + S) / Math.sqrt(3),\n\t\t(L + M - 2 * S) / Math.sqrt(6),\n\t\t(L - M) / Math.sqrt(2)\n\t];\n}\nfunction getPixelRGB(pixels, idx, isBGRA) {\n\tconst o = idx * 4;\n\tconst rIdx = isBGRA ? o + 2 : o;\n\tconst bIdx = isBGRA ? o : o + 2;\n\treturn [\n\t\tpixels[rIdx] / 255,\n\t\tpixels[o + 1] / 255,\n\t\tpixels[bIdx] / 255\n\t];\n}\nfunction hashString(str) {\n\tlet hash = 5381;\n\tfor (let i = 0; i < str.length; i++) hash = hash * 33 ^ str.charCodeAt(i);\n\treturn hash >>> 0;\n}\nvar SeededRandom = class {\n\tstate;\n\tconstructor(seed) {\n\t\tthis.state = seed || 1;\n\t}\n\tnext() {\n\t\tthis.state = (this.state * 1664525 + 1013904223) % 4294967296;\n\t\treturn this.state / 4294967296;\n\t}\n};\nfunction seededShuffle(array, seed) {\n\tconst rng = new SeededRandom(seed);\n\tconst shuffled = [...array];\n\tfor (let i = shuffled.length - 1; i > 0; i--) {\n\t\tconst j = Math.floor(rng.next() * (i + 1));\n\t\tconst temp = shuffled[i];\n\t\tshuffled[i] = shuffled[j];\n\t\tshuffled[j] = temp;\n\t}\n\treturn shuffled;\n}\nfunction buildUniqueColorPool(srcPixels, tgtPixels, isBGRA, gridResolution = 20) {\n\tconst occupied = /* @__PURE__ */ new Set();\n\tconst pool = [];\n\tconst numPixels = srcPixels.length / 4;\n\tfor (let i = 0; i < numPixels; i++) {\n\t\tconst src = getPixelRGB(srcPixels, i, isBGRA);\n\t\tconst r = Math.max(0, Math.min(gridResolution - 1, Math.floor(src[0] * gridResolution)));\n\t\tconst g = Math.max(0, Math.min(gridResolution - 1, Math.floor(src[1] * gridResolution)));\n\t\tconst b = Math.max(0, Math.min(gridResolution - 1, Math.floor(src[2] * gridResolution)));\n\t\tconst cellKey = r * gridResolution * gridResolution + g * gridResolution + b;\n\t\tif (!occupied.has(cellKey)) {\n\t\t\toccupied.add(cellKey);\n\t\t\tpool.push({\n\t\t\t\tsrc,\n\t\t\t\ttgt: getPixelRGB(tgtPixels, i, isBGRA)\n\t\t\t});\n\t\t}\n\t}\n\treturn pool;\n}\n/**\n* Evaluates the fitted RBF on the GPU.\n*\n* CPU work that remains:\n* • Build K matrix O(M²) – tiny (≈ 162×162)\n* • solveLU O(M³) – tiny\n*\n* GPU work (replaces the triple-nested JS loop):\n* • 33³ = 35 937 threads × M inner iterations → ~5.7 M parallel MADs\n*\n* Returns a plain Float32Array of length lutSize³×3 for lutStore.\n*/\nasync function evaluateRbfOnGpu(device, pipelines, sampledPoints, X_sol, lutSize, epsilonSq) {\n\tconst M = sampledPoints.length;\n\tconst totalCells = lutSize * lutSize * lutSize;\n\tconst wgs = 8;\n\tconst srcPointsData = new Float32Array(M * 4);\n\tconst weightsData = new Float32Array(M * 4);\n\tfor (let i = 0; i < M; i++) {\n\t\tsrcPointsData[i * 4 + 0] = sampledPoints[i].src[0];\n\t\tsrcPointsData[i * 4 + 1] = sampledPoints[i].src[1];\n\t\tsrcPointsData[i * 4 + 2] = sampledPoints[i].src[2];\n\t\tsrcPointsData[i * 4 + 3] = 0;\n\t\tweightsData[i * 4 + 0] = X_sol[i * 3 + 0];\n\t\tweightsData[i * 4 + 1] = X_sol[i * 3 + 1];\n\t\tweightsData[i * 4 + 2] = X_sol[i * 3 + 2];\n\t\tweightsData[i * 4 + 3] = 0;\n\t}\n\tconst polyData = new Float32Array(16);\n\tfor (let k = 0; k < 4; k++) {\n\t\tpolyData[k * 4 + 0] = X_sol[(M + k) * 3 + 0];\n\t\tpolyData[k * 4 + 1] = X_sol[(M + k) * 3 + 1];\n\t\tpolyData[k * 4 + 2] = X_sol[(M + k) * 3 + 2];\n\t\tpolyData[k * 4 + 3] = 0;\n\t}\n\tconst paramsBuffer = device.createBuffer({\n\t\tsize: 16,\n\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t});\n\tconst paramsData = /* @__PURE__ */ new ArrayBuffer(16);\n\tnew Uint32Array(paramsData, 0, 2).set([lutSize, M]);\n\tnew Float32Array(paramsData, 8, 1).set([epsilonSq]);\n\tdevice.queue.writeBuffer(paramsBuffer, 0, paramsData);\n\tconst srcPointsBuf = upload(device, srcPointsData);\n\tconst weightsBuf = upload(device, weightsData);\n\tconst polyBuf = upload(device, polyData);\n\tconst lutByteSize = totalCells * 3 * 4;\n\tconst lutBuf = device.createBuffer({\n\t\tsize: lutByteSize,\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n\t});\n\tconst readbackBuf = device.createBuffer({\n\t\tsize: lutByteSize,\n\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n\t});\n\tconst bg = device.createBindGroup({\n\t\tlayout: pipelines.rbf.getBindGroupLayout(0),\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: paramsBuffer }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: srcPointsBuf }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: { buffer: weightsBuf }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: { buffer: polyBuf }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: { buffer: lutBuf }\n\t\t\t}\n\t\t]\n\t});\n\tconst enc = device.createCommandEncoder({ label: \"rbf-lut-eval\" });\n\tconst pass = enc.beginComputePass();\n\tpass.setPipeline(pipelines.rbf);\n\tpass.setBindGroup(0, bg);\n\tconst groups = Math.ceil(lutSize / wgs);\n\tpass.dispatchWorkgroups(groups, groups, Math.ceil(lutSize / 4));\n\tpass.end();\n\tenc.copyBufferToBuffer(lutBuf, 0, readbackBuf, 0, lutByteSize);\n\tdevice.queue.submit([enc.finish()]);\n\tawait readbackBuf.mapAsync(GPUMapMode.READ);\n\tconst result = new Float32Array(readbackBuf.getMappedRange().slice(0));\n\treadbackBuf.unmap();\n\tparamsBuffer.destroy();\n\tsrcPointsBuf.destroy();\n\tweightsBuf.destroy();\n\tpolyBuf.destroy();\n\tlutBuf.destroy();\n\treadbackBuf.destroy();\n\treturn result;\n}\n/**\n* Generates the statistical LAB-transfer LUT entirely on the GPU.\n* The only CPU work is computing 6 scalars (mean/std per LAB channel).\n*/\nasync function evaluateStatisticalOnGpu(device, pipelines, srcMean, tgtMean, scale, lutSize) {\n\tconst lutByteSize = lutSize * lutSize * lutSize * 3 * 4;\n\tconst statsData = /* @__PURE__ */ new ArrayBuffer(64);\n\tconst f = new Float32Array(statsData);\n\tconst u = new Uint32Array(statsData);\n\tf[0] = srcMean[0];\n\tf[1] = srcMean[1];\n\tf[2] = srcMean[2];\n\tf[4] = tgtMean[0];\n\tf[5] = tgtMean[1];\n\tf[6] = tgtMean[2];\n\tf[8] = scale[0];\n\tf[9] = scale[1];\n\tf[10] = scale[2];\n\tu[12] = lutSize;\n\tconst statsBuf = device.createBuffer({\n\t\tsize: 64,\n\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t});\n\tdevice.queue.writeBuffer(statsBuf, 0, statsData);\n\tconst lutBuf = device.createBuffer({\n\t\tsize: lutByteSize,\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n\t});\n\tconst readbackBuf = device.createBuffer({\n\t\tsize: lutByteSize,\n\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n\t});\n\tconst bg = device.createBindGroup({\n\t\tlayout: pipelines.statistical.getBindGroupLayout(0),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: statsBuf }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: { buffer: lutBuf }\n\t\t}]\n\t});\n\tconst enc = device.createCommandEncoder({ label: \"stat-lut-eval\" });\n\tconst pass = enc.beginComputePass();\n\tpass.setPipeline(pipelines.statistical);\n\tpass.setBindGroup(0, bg);\n\tconst groups = Math.ceil(lutSize / 8);\n\tpass.dispatchWorkgroups(groups, groups, Math.ceil(lutSize / 4));\n\tpass.end();\n\tenc.copyBufferToBuffer(lutBuf, 0, readbackBuf, 0, lutByteSize);\n\tdevice.queue.submit([enc.finish()]);\n\tawait readbackBuf.mapAsync(GPUMapMode.READ);\n\tconst result = new Float32Array(readbackBuf.getMappedRange().slice(0));\n\treadbackBuf.unmap();\n\tstatsBuf.destroy();\n\tlutBuf.destroy();\n\treadbackBuf.destroy();\n\treturn result;\n}\n/** Uploads a Float32Array into a storage-readable GPUBuffer. */\nfunction upload(device, data) {\n\tconst buf = device.createBuffer({\n\t\tsize: Math.max(data.byteLength, 16),\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST\n\t});\n\tdevice.queue.writeBuffer(buf, 0, data);\n\treturn buf;\n}\n/**\n* Converts a flat Float32Array [R0,G0,B0, R1,G1,B1 …] returned from the GPU\n* into the tuple array expected by `lutStore.createOrUpdate`.\n*/\nfunction flatToPoints(flat) {\n\tconst n = flat.length / 3;\n\tconst out = new Array(n);\n\tfor (let i = 0; i < n; i++) out[i] = [\n\t\tflat[i * 3],\n\t\tflat[i * 3 + 1],\n\t\tflat[i * 3 + 2]\n\t];\n\treturn out;\n}\nconst ExtractLutWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ExtractLUT\" || !op) return;\n\tconst nodeId = op.nodeId ?? props.renderId;\n\tconst mediaToFingerprint = {\n\t\t...props.virtualMedia,\n\t\tmetadata: {},\n\t\toperation: props.virtualMedia?.operation ? { ...props.virtualMedia.operation } : void 0\n\t};\n\tif (mediaToFingerprint.operation) {\n\t\tdelete mediaToFingerprint.operation.lutUrl;\n\t\tdelete mediaToFingerprint.operation.timeline;\n\t\tdelete mediaToFingerprint.operation.startFrame;\n\t}\n\tconst lutUrl = op.lutUrl ?? `runtime://lut/extract-lut-${nodeId}-${getFingerprint(mediaToFingerprint)}`;\n\tconst fingerprint = lutUrl.startsWith(`runtime://lut/extract-lut-${nodeId}-`) ? lutUrl.slice(`runtime://lut/extract-lut-${nodeId}-`.length) : getFingerprint(mediaToFingerprint);\n\tconst cacheKey = `${nodeId}-${fingerprint}`;\n\tconst sourceMedia = props.virtualMedia?.children?.[0];\n\tconst targetMedia = props.virtualMedia?.children?.[1];\n\tif (!sourceMedia || !targetMedia) {\n\t\tpass.end();\n\t\treturn;\n\t}\n\tconst strategy = op.strategy ?? \"deterministic\";\n\tconst samplePoints = op.samplePoints ?? 150;\n\tconst gridSize = 64;\n\tconst numPixels = gridSize * gridSize;\n\tif (extractionCache.get(nodeId) === fingerprint && lutStore.get(lutUrl, ctx.device)) {\n\t\tpass.end();\n\t\treturn;\n\t}\n\tif (pendingExtractions.has(cacheKey)) {\n\t\tpass.end();\n\t\treturn;\n\t}\n\tlatestRequestedFingerprint.set(nodeId, fingerprint);\n\tpass.end();\n\tlutStore.getOrLoad(lutUrl, ctx.device);\n\tconst prev = activeTextures.get(nodeId);\n\tif (prev) {\n\t\tconst toDestroy = prev;\n\t\tctx.device.queue.onSubmittedWorkDone().then(() => {\n\t\t\ttry {\n\t\t\t\ttoDestroy.srcTex.destroy();\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\ttoDestroy.tgtTex.destroy();\n\t\t\t} catch {}\n\t\t});\n\t\tactiveTextures.delete(nodeId);\n\t}\n\tconst srcTex = ctx.device.createTexture({\n\t\tlabel: `ExtractLUT-src-grid-${nodeId}`,\n\t\tsize: [gridSize, gridSize],\n\t\tformat: ctx.renderer.format,\n\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC\n\t});\n\tctx.renderer.beginFrame(encoder, srcTex.createView(), {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 1\n\t}, gridSize, gridSize, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: gridSize,\n\t\theight: gridSize\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(sourceMedia, {\n\t\t...props,\n\t\trenderId: `${nodeId}-c0`,\n\t\tvirtualMedia: sourceMedia,\n\t\tcontainerWidth: gridSize,\n\t\tcontainerHeight: gridSize,\n\t\tforceWait: true\n\t}, srcTex.createView(), srcTex, gridSize, gridSize);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst tgtTex = ctx.device.createTexture({\n\t\tlabel: `ExtractLUT-tgt-grid-${nodeId}`,\n\t\tsize: [gridSize, gridSize],\n\t\tformat: ctx.renderer.format,\n\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC\n\t});\n\tactiveTextures.set(nodeId, {\n\t\tsrcTex,\n\t\ttgtTex\n\t});\n\tctx.renderer.beginFrame(encoder, tgtTex.createView(), {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 1\n\t}, gridSize, gridSize, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: gridSize,\n\t\theight: gridSize\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(targetMedia, {\n\t\t...props,\n\t\trenderId: `${nodeId}-c1`,\n\t\tvirtualMedia: targetMedia,\n\t\tcontainerWidth: gridSize,\n\t\tcontainerHeight: gridSize,\n\t\tforceWait: true\n\t}, tgtTex.createView(), tgtTex, gridSize, gridSize);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst bytesPerPixel = 4;\n\tconst align = 256;\n\tconst unpaddedBPR = gridSize * bytesPerPixel;\n\tconst bytesPerRow = Math.ceil(unpaddedBPR / align) * align;\n\tconst stagingSize = bytesPerRow * gridSize;\n\tconst srcStagingBuffer = ctx.device.createBuffer({\n\t\tlabel: `ExtractLUT-src-staging-${nodeId}`,\n\t\tsize: stagingSize,\n\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t});\n\tconst tgtStagingBuffer = ctx.device.createBuffer({\n\t\tlabel: `ExtractLUT-tgt-staging-${nodeId}`,\n\t\tsize: stagingSize,\n\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t});\n\tencoder.copyTextureToBuffer({ texture: srcTex }, {\n\t\tbuffer: srcStagingBuffer,\n\t\tbytesPerRow\n\t}, [gridSize, gridSize]);\n\tencoder.copyTextureToBuffer({ texture: tgtTex }, {\n\t\tbuffer: tgtStagingBuffer,\n\t\tbytesPerRow\n\t}, [gridSize, gridSize]);\n\tlet startMapping = () => {};\n\tconst mainSubmitPromise = new Promise((resolve) => {\n\t\tstartMapping = resolve;\n\t});\n\tconst originalSubmit = ctx.device.queue.submit;\n\tctx.device.queue.submit = function(commandBuffers) {\n\t\tctx.device.queue.submit = originalSubmit;\n\t\toriginalSubmit.call(this, commandBuffers);\n\t\tstartMapping();\n\t};\n\tconst extractionPromise = (async () => {\n\t\ttry {\n\t\t\tawait mainSubmitPromise;\n\t\t\tif (latestRequestedFingerprint.get(nodeId) !== fingerprint) {\n\t\t\t\ttry {\n\t\t\t\t\tsrcStagingBuffer.destroy();\n\t\t\t\t\ttgtStagingBuffer.destroy();\n\t\t\t\t} catch {}\n\t\t\t\tlutStore.rejectRawDataPromise(lutUrl, new DOMException(\"Extraction superseded by a newer request\", \"AbortError\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait ctx.device.queue.onSubmittedWorkDone();\n\t\t\tawait Promise.all([srcStagingBuffer.mapAsync(GPUMapMode.READ), tgtStagingBuffer.mapAsync(GPUMapMode.READ)]);\n\t\t\tconst srcPixels = new Uint8Array(numPixels * bytesPerPixel);\n\t\t\tconst tgtPixels = new Uint8Array(numPixels * bytesPerPixel);\n\t\t\tconst copyRows = (src, dst) => {\n\t\t\t\tif (bytesPerRow === unpaddedBPR) dst.set(src);\n\t\t\t\telse for (let y = 0; y < gridSize; y++) dst.set(src.subarray(y * bytesPerRow, y * bytesPerRow + unpaddedBPR), y * unpaddedBPR);\n\t\t\t};\n\t\t\tcopyRows(new Uint8Array(srcStagingBuffer.getMappedRange()), srcPixels);\n\t\t\tcopyRows(new Uint8Array(tgtStagingBuffer.getMappedRange()), tgtPixels);\n\t\t\tsrcStagingBuffer.unmap();\n\t\t\tsrcStagingBuffer.destroy();\n\t\t\ttgtStagingBuffer.unmap();\n\t\t\ttgtStagingBuffer.destroy();\n\t\t\tif (latestRequestedFingerprint.get(nodeId) !== fingerprint) {\n\t\t\t\tlutStore.rejectRawDataPromise(lutUrl, new DOMException(\"Extraction superceded by a newer request\", \"AbortError\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst isBGRA = ctx.renderer.format === \"bgra8unorm\" || ctx.renderer.format === \"bgra8unorm-srgb\";\n\t\t\tconst lutSize = 33;\n\t\t\tconst pipelines = getOrCreatePipelines(ctx.device);\n\t\t\tlet flat = null;\n\t\t\tlet succeeded = false;\n\t\t\tif (strategy === \"deterministic\") {\n\t\t\t\tconst shuffled = seededShuffle(buildUniqueColorPool(srcPixels, tgtPixels, isBGRA, 20), hashString(getFingerprint({\n\t\t\t\t\t...props.virtualMedia,\n\t\t\t\t\tmetadata: {},\n\t\t\t\t\toperation: void 0\n\t\t\t\t})));\n\t\t\t\tconst sampledPoints = shuffled.slice(0, Math.min(shuffled.length, samplePoints));\n\t\t\t\tconst M = sampledPoints.length;\n\t\t\t\tif (M >= 8) {\n\t\t\t\t\tif (isSeparableOperationTree(targetMedia, sourceMedia)) {\n\t\t\t\t\t\tlet epsilonSq = .01;\n\t\t\t\t\t\tlet totalMinDist = 0;\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) {\n\t\t\t\t\t\t\tlet minD = Infinity;\n\t\t\t\t\t\t\tfor (let j = 0; j < M; j++) {\n\t\t\t\t\t\t\t\tif (i === j) continue;\n\t\t\t\t\t\t\t\tconst dx = sampledPoints[i].src[0] - sampledPoints[j].src[0];\n\t\t\t\t\t\t\t\tminD = Math.min(minD, dx * dx);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttotalMinDist += Math.sqrt(minD);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst meanNND = totalMinDist / M;\n\t\t\t\t\t\tepsilonSq = Math.max(meanNND * meanNND * 4, 1e-4);\n\t\t\t\t\t\tconst srcR = sampledPoints.map((p) => p.src[0]);\n\t\t\t\t\t\tconst tgtR = sampledPoints.map((p) => p.tgt[0]);\n\t\t\t\t\t\tconst srcG = sampledPoints.map((p) => p.src[1]);\n\t\t\t\t\t\tconst tgtG = sampledPoints.map((p) => p.tgt[1]);\n\t\t\t\t\t\tconst srcB = sampledPoints.map((p) => p.src[2]);\n\t\t\t\t\t\tconst tgtB = sampledPoints.map((p) => p.tgt[2]);\n\t\t\t\t\t\tconst X_sol_R = solve1DChannel(srcR, tgtR, epsilonSq);\n\t\t\t\t\t\tconst X_sol_G = solve1DChannel(srcG, tgtG, epsilonSq);\n\t\t\t\t\t\tconst X_sol_B = solve1DChannel(srcB, tgtB, epsilonSq);\n\t\t\t\t\t\tif (X_sol_R && !hasAbsurdCoefficients(X_sol_R) && X_sol_G && !hasAbsurdCoefficients(X_sol_G) && X_sol_B && !hasAbsurdCoefficients(X_sol_B)) {\n\t\t\t\t\t\t\tconst lutR = evaluate1DChannel(srcR, X_sol_R, epsilonSq, lutSize);\n\t\t\t\t\t\t\tconst lutG = evaluate1DChannel(srcG, X_sol_G, epsilonSq, lutSize);\n\t\t\t\t\t\t\tconst lutB = evaluate1DChannel(srcB, X_sol_B, epsilonSq, lutSize);\n\t\t\t\t\t\t\tflat = new Float32Array(lutSize * lutSize * lutSize * 3);\n\t\t\t\t\t\t\tfor (let b = 0; b < lutSize; b++) for (let g = 0; g < lutSize; g++) for (let r = 0; r < lutSize; r++) {\n\t\t\t\t\t\t\t\tconst idx = (b * lutSize * lutSize + g * lutSize + r) * 3;\n\t\t\t\t\t\t\t\tflat[idx + 0] = lutR[r];\n\t\t\t\t\t\t\t\tflat[idx + 1] = lutG[g];\n\t\t\t\t\t\t\t\tflat[idx + 2] = lutB[b];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsucceeded = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!succeeded) {\n\t\t\t\t\t\tconst H = M + 4;\n\t\t\t\t\t\tlet epsilonSq = .01;\n\t\t\t\t\t\tlet totalMinDist = 0;\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) {\n\t\t\t\t\t\t\tlet minD = Infinity;\n\t\t\t\t\t\t\tfor (let j = 0; j < M; j++) {\n\t\t\t\t\t\t\t\tif (i === j) continue;\n\t\t\t\t\t\t\t\tconst dx = sampledPoints[i].src[0] - sampledPoints[j].src[0];\n\t\t\t\t\t\t\t\tconst dy = sampledPoints[i].src[1] - sampledPoints[j].src[1];\n\t\t\t\t\t\t\t\tconst dz = sampledPoints[i].src[2] - sampledPoints[j].src[2];\n\t\t\t\t\t\t\t\tminD = Math.min(minD, dx * dx + dy * dy + dz * dz);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttotalMinDist += Math.sqrt(minD);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst meanNND = totalMinDist / M;\n\t\t\t\t\t\tepsilonSq = Math.max(meanNND * meanNND * 4, 1e-4);\n\t\t\t\t\t\tconst K_mat = new Float64Array(H * H);\n\t\t\t\t\t\tconst B_rhs = new Float64Array(H * 3);\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) {\n\t\t\t\t\t\t\tconst pi = sampledPoints[i].src;\n\t\t\t\t\t\t\tconst gi = sampledPoints[i].tgt;\n\t\t\t\t\t\t\tB_rhs[i * 3 + 0] = gi[0];\n\t\t\t\t\t\t\tB_rhs[i * 3 + 1] = gi[1];\n\t\t\t\t\t\t\tB_rhs[i * 3 + 2] = gi[2];\n\t\t\t\t\t\t\tfor (let j = 0; j < M; j++) {\n\t\t\t\t\t\t\t\tconst pj = sampledPoints[j].src;\n\t\t\t\t\t\t\t\tconst dx = pi[0] - pj[0], dy = pi[1] - pj[1], dz = pi[2] - pj[2];\n\t\t\t\t\t\t\t\tK_mat[i * H + j] = Math.sqrt(dx * dx + dy * dy + dz * dz + epsilonSq);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tK_mat[i * H + M + 0] = 1;\n\t\t\t\t\t\t\tK_mat[i * H + M + 1] = pi[0];\n\t\t\t\t\t\t\tK_mat[i * H + M + 2] = pi[1];\n\t\t\t\t\t\t\tK_mat[i * H + M + 3] = pi[2];\n\t\t\t\t\t\t\tK_mat[(M + 0) * H + i] = 1;\n\t\t\t\t\t\t\tK_mat[(M + 1) * H + i] = pi[0];\n\t\t\t\t\t\t\tK_mat[(M + 2) * H + i] = pi[1];\n\t\t\t\t\t\t\tK_mat[(M + 3) * H + i] = pi[2];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet diagMean = 0;\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) diagMean += K_mat[i * H + i];\n\t\t\t\t\t\tdiagMean /= M;\n\t\t\t\t\t\tconst lambda = Math.max(1e-4, diagMean * .01);\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) K_mat[i * H + i] += lambda;\n\t\t\t\t\t\tconst polyLambda = Math.max(1e-4, diagMean * .001);\n\t\t\t\t\t\tfor (let k = 0; k < 4; k++) K_mat[(M + k) * H + M + k] = polyLambda;\n\t\t\t\t\t\tconst X_sol = solveLU(K_mat, B_rhs, H);\n\t\t\t\t\t\tif (X_sol && !hasAbsurdCoefficients(X_sol)) try {\n\t\t\t\t\t\t\tflat = await evaluateRbfOnGpu(ctx.device, pipelines, sampledPoints, X_sol, lutSize, epsilonSq);\n\t\t\t\t\t\t\tlet hasInvalid = false;\n\t\t\t\t\t\t\tfor (let i = 0; i < flat.length; i++) {\n\t\t\t\t\t\t\t\tconst val = flat[i];\n\t\t\t\t\t\t\t\tif (Number.isNaN(val) || !Number.isFinite(val)) {\n\t\t\t\t\t\t\t\t\thasInvalid = true;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!hasInvalid) succeeded = true;\n\t\t\t\t\t\t} catch (gpuErr) {\n\t\t\t\t\t\t\tconsole.error(\"[ExtractLUT] RBF GPU evaluation failed:\", gpuErr);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!succeeded) {\n\t\t\t\tlet srcMeanL = 0, srcMeanA = 0, srcMeanB = 0;\n\t\t\t\tlet tgtMeanL = 0, tgtMeanA = 0, tgtMeanB = 0;\n\t\t\t\tconst srcLABs = [];\n\t\t\t\tconst tgtLABs = [];\n\t\t\t\tfor (let i = 0; i < numPixels; i++) {\n\t\t\t\t\tconst sl = rgbToLab(...getPixelRGB(srcPixels, i, isBGRA));\n\t\t\t\t\tsrcLABs.push(sl);\n\t\t\t\t\tsrcMeanL += sl[0];\n\t\t\t\t\tsrcMeanA += sl[1];\n\t\t\t\t\tsrcMeanB += sl[2];\n\t\t\t\t\tconst tl = rgbToLab(...getPixelRGB(tgtPixels, i, isBGRA));\n\t\t\t\t\ttgtLABs.push(tl);\n\t\t\t\t\ttgtMeanL += tl[0];\n\t\t\t\t\ttgtMeanA += tl[1];\n\t\t\t\t\ttgtMeanB += tl[2];\n\t\t\t\t}\n\t\t\t\tsrcMeanL /= numPixels;\n\t\t\t\tsrcMeanA /= numPixels;\n\t\t\t\tsrcMeanB /= numPixels;\n\t\t\t\ttgtMeanL /= numPixels;\n\t\t\t\ttgtMeanA /= numPixels;\n\t\t\t\ttgtMeanB /= numPixels;\n\t\t\t\tlet srcStdL = 0, srcStdA = 0, srcStdB = 0;\n\t\t\t\tlet tgtStdL = 0, tgtStdA = 0, tgtStdB = 0;\n\t\t\t\tfor (let i = 0; i < numPixels; i++) {\n\t\t\t\t\tsrcStdL += (srcLABs[i][0] - srcMeanL) ** 2;\n\t\t\t\t\tsrcStdA += (srcLABs[i][1] - srcMeanA) ** 2;\n\t\t\t\t\tsrcStdB += (srcLABs[i][2] - srcMeanB) ** 2;\n\t\t\t\t\ttgtStdL += (tgtLABs[i][0] - tgtMeanL) ** 2;\n\t\t\t\t\ttgtStdA += (tgtLABs[i][1] - tgtMeanA) ** 2;\n\t\t\t\t\ttgtStdB += (tgtLABs[i][2] - tgtMeanB) ** 2;\n\t\t\t\t}\n\t\t\t\tsrcStdL = Math.max(Math.sqrt(srcStdL / numPixels), 1e-6);\n\t\t\t\tsrcStdA = Math.max(Math.sqrt(srcStdA / numPixels), 1e-6);\n\t\t\t\tsrcStdB = Math.max(Math.sqrt(srcStdB / numPixels), 1e-6);\n\t\t\t\ttgtStdL = Math.sqrt(tgtStdL / numPixels);\n\t\t\t\ttgtStdA = Math.sqrt(tgtStdA / numPixels);\n\t\t\t\ttgtStdB = Math.sqrt(tgtStdB / numPixels);\n\t\t\t\tif (srcStdL < 1e-4 || srcMeanL < 1e-4) {\n\t\t\t\t\tflat = new Float32Array(lutSize * lutSize * lutSize * 3);\n\t\t\t\t\tfor (let b = 0; b < lutSize; b++) for (let g = 0; g < lutSize; g++) for (let r = 0; r < lutSize; r++) {\n\t\t\t\t\t\tconst idx = (b * lutSize * lutSize + g * lutSize + r) * 3;\n\t\t\t\t\t\tflat[idx + 0] = r / (lutSize - 1);\n\t\t\t\t\t\tflat[idx + 1] = g / (lutSize - 1);\n\t\t\t\t\t\tflat[idx + 2] = b / (lutSize - 1);\n\t\t\t\t\t}\n\t\t\t\t} else flat = await evaluateStatisticalOnGpu(ctx.device, pipelines, [\n\t\t\t\t\tsrcMeanL,\n\t\t\t\t\tsrcMeanA,\n\t\t\t\t\tsrcMeanB\n\t\t\t\t], [\n\t\t\t\t\ttgtMeanL,\n\t\t\t\t\ttgtMeanA,\n\t\t\t\t\ttgtMeanB\n\t\t\t\t], [\n\t\t\t\t\ttgtStdL / srcStdL,\n\t\t\t\t\ttgtStdA / srcStdA,\n\t\t\t\t\ttgtStdB / srcStdB\n\t\t\t\t], lutSize);\n\t\t\t}\n\t\t\tconst smoothedPoints = flatToPoints(flat);\n\t\t\tif (latestRequestedFingerprint.get(nodeId) !== fingerprint) {\n\t\t\t\tlutStore.rejectRawDataPromise(lutUrl, new DOMException(\"Extraction superseded by a newer request\", \"AbortError\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlutStore.createOrUpdate(lutUrl, ctx.device, smoothedPoints, lutSize, \"3D\");\n\t\t\textractionCache.set(nodeId, fingerprint);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"[ExtractLUT] Async extraction error:\", err);\n\t\t\ttry {\n\t\t\t\tconst lutSize = 33;\n\t\t\t\tconst identityPoints = [];\n\t\t\t\tfor (let z = 0; z < lutSize; z++) for (let y = 0; y < lutSize; y++) for (let x = 0; x < lutSize; x++) identityPoints.push([\n\t\t\t\t\tx / (lutSize - 1),\n\t\t\t\t\ty / (lutSize - 1),\n\t\t\t\t\tz / (lutSize - 1)\n\t\t\t\t]);\n\t\t\t\tif (latestRequestedFingerprint.get(nodeId) === fingerprint) {\n\t\t\t\t\tlutStore.createOrUpdate(lutUrl, ctx.device, identityPoints, lutSize, \"3D\");\n\t\t\t\t\textractionCache.set(nodeId, fingerprint);\n\t\t\t\t}\n\t\t\t} catch (fallbackErr) {\n\t\t\t\tconsole.error(\"[ExtractLUT] Failed to write fallback identity LUT:\", fallbackErr);\n\t\t\t\tlutStore.rejectRawDataPromise(lutUrl, err);\n\t\t\t}\n\t\t} finally {\n\t\t\tpendingExtractions.delete(cacheKey);\n\t\t}\n\t})();\n\tpendingExtractions.set(cacheKey, extractionPromise);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ExtractLutWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CDotFzd9.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-B6Oeahe_.mjs","names":[],"sources":["../../../nodes/node-extract-lut/dist/renderers-CDotFzd9.mjs"],"sourcesContent":["import { getFingerprint } from \"@framefields/core\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { lutStore } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst extractionCache = /* @__PURE__ */ new Map();\nconst pendingExtractions = /* @__PURE__ */ new Map();\nconst latestRequestedFingerprint = /* @__PURE__ */ new Map();\nconst activeTextures = /* @__PURE__ */ new Map();\nconst pipelineCache = /* @__PURE__ */ new WeakMap();\n/**\n* Lazily compiles and caches the two WGSL compute shaders per device.\n*\n* Both shaders write a flat array of f32 triples (R,G,B) for every cell of a\n* `lutSize³` cube. The host uploads whatever small set of parameters is needed\n* (RBF weights OR LAB statistics), then reads the result back as a typed array\n* that can be forwarded to `lutStore.createOrUpdate`.\n*\n* Workgroup size 8×8×4 = 256 threads maps cleanly onto lutSize=33 with\n* ceil(33/8)=5 groups on X/Y and ceil(33/4)=9 on Z → 5×5×9 = 225 dispatches.\n*/\nfunction getOrCreatePipelines(device) {\n\tconst cached = pipelineCache.get(device);\n\tif (cached) return cached;\n\tconst pipelines = {\n\t\trbf: device.createComputePipeline({\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: device.createShaderModule({ code: `\nstruct Params {\n\tlutSize : u32,\n\tnumSamples : u32,\n\tepsilonSq : f32,\n}\n\n@group(0) @binding(0) var<uniform> params : Params;\n@group(0) @binding(1) var<storage, read> srcPoints : array<vec4f>; // [numSamples]\n@group(0) @binding(2) var<storage, read> weights : array<vec4f>; // [numSamples]\n@group(0) @binding(3) var<storage, read> poly : array<vec4f>; // [4]\n@group(0) @binding(4) var<storage, read_write> lut : array<f32>; // [lutSize³ * 3]\n\n@compute @workgroup_size(8, 8, 4)\nfn main(@builtin(global_invocation_id) gid : vec3u) {\n\tlet lutSize = params.lutSize;\n\tif (gid.x >= lutSize || gid.y >= lutSize || gid.z >= lutSize) { return; }\n\n\tlet inR = f32(gid.x) / f32(lutSize - 1u);\n\tlet inG = f32(gid.y) / f32(lutSize - 1u);\n\tlet inB = f32(gid.z) / f32(lutSize - 1u);\n\tlet p = vec3f(inR, inG, inB);\n\n\t// Polynomial part: poly[0] + poly[1]*r + poly[2]*g + poly[3]*b\n\tvar out = poly[0].xyz + poly[1].xyz * inR + poly[2].xyz * inG + poly[3].xyz * inB;\n\n\t// RBF sum\n\tlet eps = params.epsilonSq;\n\tlet M = params.numSamples;\n\tvar minDistSq = 1e10;\n\tvar rbfSum = vec3f(0.0);\n\tfor (var i = 0u; i < M; i++) {\n\t\tlet d = p - srcPoints[i].xyz;\n\t\tlet dSq = dot(d, d);\n\t\tminDistSq = min(minDistSq, dSq);\n\t\tlet phi = sqrt(dSq + eps);\n\t\trbfSum += weights[i].xyz * phi;\n\t}\n\n\t// Smoothly fade out RBF weight contribution for regions far from samples\n\t// starts fading at distance 0.25 (dist^2 = 0.0625), fully faded at 0.5 (dist^2 = 0.25)\n\tlet rbfFade = clamp(1.0 - (minDistSq - 0.0625) / (0.25 - 0.0625), 0.0, 1.0);\n\tout += rbfSum * rbfFade;\n\n\t// Smoothly blend the entire mapping towards identity for regions extremely far from samples\n\t// starts blending at distance 0.35 (dist^2 = 0.1225), fully identity at 0.65 (dist^2 = 0.4225)\n\tlet identityBlend = clamp((minDistSq - 0.1225) / (0.4225 - 0.1225), 0.0, 1.0);\n\tout = mix(out, p, identityBlend);\n\n\t// Clamp + write\n\tlet cell = (gid.z * lutSize * lutSize + gid.y * lutSize + gid.x) * 3u;\n\tlut[cell + 0u] = clamp(out.r, 0.0, 1.0);\n\tlut[cell + 1u] = clamp(out.g, 0.0, 1.0);\n\tlut[cell + 2u] = clamp(out.b, 0.0, 1.0);\n}` }),\n\t\t\t\tentryPoint: \"main\"\n\t\t\t}\n\t\t}),\n\t\tstatistical: device.createComputePipeline({\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: device.createShaderModule({ code: `\nstruct Stats {\n\tsrcMean : vec4f, // (meanL, meanA, meanB, pad) of source\n\ttgtMean : vec4f, // (meanL, meanA, meanB, pad) of target\n\tscale : vec4f, // tgtStd / srcStd per channel\n\tlutSize : u32,\n}\n\n@group(0) @binding(0) var<uniform> stats : Stats;\n@group(0) @binding(1) var<storage, read_write> lut : array<f32>;\n\n// Constants matching the Reinhard/rgbToLab implementation\nconst INV_SQRT3 : f32 = 0.57735026919; // 1 / sqrt(3)\nconst INV_SQRT6 : f32 = 0.40824829046; // 1 / sqrt(6)\nconst INV_SQRT2 : f32 = 0.70710678118; // 1 / sqrt(2)\n\nfn safeLog10(v : f32) -> f32 {\n\treturn log(max(v, 1e-5)) * 0.43429448190; // log10(x) = ln(x) / ln(10)\n}\n\nfn rgbToLab(rgb : vec3f) -> vec3f {\n\tlet R = max(rgb.r, 1e-5);\n\tlet G = max(rgb.g, 1e-5);\n\tlet B = max(rgb.b, 1e-5);\n\n\tlet Lms_L = safeLog10(0.3811 * R + 0.5783 * G + 0.0402 * B);\n\tlet Lms_M = safeLog10(0.1967 * R + 0.7244 * G + 0.0782 * B);\n\tlet Lms_S = safeLog10(0.0241 * R + 0.1288 * G + 0.8444 * B);\n\n\treturn vec3f(\n\t\t(Lms_L + Lms_M + Lms_S) * INV_SQRT3,\n\t\t(Lms_L + Lms_M - 2.0 * Lms_S) * INV_SQRT6,\n\t\t(Lms_L - Lms_M) * INV_SQRT2,\n\t);\n}\n\nfn labToRgb(lab : vec3f) -> vec3f {\n\tlet l = lab.x; let a = lab.y; let b = lab.z;\n\n\tlet L_log = l * INV_SQRT3 + a * INV_SQRT6 + b * INV_SQRT2;\n\tlet M_log = l * INV_SQRT3 + a * INV_SQRT6 - b * INV_SQRT2;\n\tlet S_log = l * INV_SQRT3 - 2.0 * a * INV_SQRT6;\n\n\tlet L = pow(10.0, L_log);\n\tlet M = pow(10.0, M_log);\n\tlet S = pow(10.0, S_log);\n\n\treturn clamp(vec3f(\n\t\t 4.4679 * L - 3.5873 * M + 0.1193 * S,\n\t\t-1.2186 * L + 2.3809 * M - 0.1624 * S,\n\t\t 0.0497 * L - 0.2439 * M + 1.2045 * S,\n\t), vec3f(0.0), vec3f(1.0));\n}\n\n@compute @workgroup_size(8, 8, 4)\nfn main(@builtin(global_invocation_id) gid : vec3u) {\n\tlet lutSize = stats.lutSize;\n\tif (gid.x >= lutSize || gid.y >= lutSize || gid.z >= lutSize) { return; }\n\n\tlet inR = f32(gid.x) / f32(lutSize - 1u);\n\tlet inG = f32(gid.y) / f32(lutSize - 1u);\n\tlet inB = f32(gid.z) / f32(lutSize - 1u);\n\n\tlet lab = rgbToLab(vec3f(inR, inG, inB));\n\tlet mapped = stats.scale.xyz * (lab - stats.srcMean.xyz) + stats.tgtMean.xyz;\n\tlet rgb = labToRgb(mapped);\n\n\tlet cell = (gid.z * lutSize * lutSize + gid.y * lutSize + gid.x) * 3u;\n\tlut[cell + 0u] = rgb.r;\n\tlut[cell + 1u] = rgb.g;\n\tlut[cell + 2u] = rgb.b;\n}` }),\n\t\t\t\tentryPoint: \"main\"\n\t\t\t}\n\t\t})\n\t};\n\tpipelineCache.set(device, pipelines);\n\treturn pipelines;\n}\nfunction solveLU(A, B, n) {\n\tconst ipiv = new Int32Array(n);\n\tfor (let i = 0; i < n; i++) ipiv[i] = i;\n\tfor (let i = 0; i < n; i++) {\n\t\tlet maxVal = 0;\n\t\tlet pivotRow = i;\n\t\tfor (let r = i; r < n; r++) {\n\t\t\tconst val = Math.abs(A[r * n + i]);\n\t\t\tif (val > maxVal) {\n\t\t\t\tmaxVal = val;\n\t\t\t\tpivotRow = r;\n\t\t\t}\n\t\t}\n\t\tif (maxVal < 1e-9) return null;\n\t\telse if (pivotRow !== i) {\n\t\t\tconst tmp = ipiv[i];\n\t\t\tipiv[i] = ipiv[pivotRow];\n\t\t\tipiv[pivotRow] = tmp;\n\t\t\tfor (let col = 0; col < n; col++) {\n\t\t\t\tconst i1 = i * n + col, i2 = pivotRow * n + col;\n\t\t\t\tconst t = A[i1];\n\t\t\t\tA[i1] = A[i2];\n\t\t\t\tA[i2] = t;\n\t\t\t}\n\t\t\tfor (let col = 0; col < 3; col++) {\n\t\t\t\tconst i1 = i * 3 + col, i2 = pivotRow * 3 + col;\n\t\t\t\tconst t = B[i1];\n\t\t\t\tB[i1] = B[i2];\n\t\t\t\tB[i2] = t;\n\t\t\t}\n\t\t}\n\t\tconst pivot = A[i * n + i];\n\t\tif (Math.abs(pivot) < 1e-9) return null;\n\t\tfor (let r = i + 1; r < n; r++) {\n\t\t\tconst factor = A[r * n + i] / pivot;\n\t\t\tA[r * n + i] = 0;\n\t\t\tfor (let col = i + 1; col < n; col++) A[r * n + col] -= factor * A[i * n + col];\n\t\t\tfor (let col = 0; col < 3; col++) B[r * 3 + col] -= factor * B[i * 3 + col];\n\t\t}\n\t}\n\tconst X = new Float64Array(n * 3);\n\tfor (let col = 0; col < 3; col++) for (let i = n - 1; i >= 0; i--) {\n\t\tlet sum = B[i * 3 + col];\n\t\tfor (let j = i + 1; j < n; j++) sum -= A[i * n + j] * X[j * 3 + col];\n\t\tconst denom = A[i * n + i];\n\t\tif (Math.abs(denom) < 1e-9) return null;\n\t\tX[i * 3 + col] = sum / denom;\n\t}\n\treturn X;\n}\nfunction hasAbsurdCoefficients(X_sol) {\n\tfor (let i = 0; i < X_sol.length; i++) {\n\t\tconst val = X_sol[i];\n\t\tif (Number.isNaN(val) || !Number.isFinite(val) || Math.abs(val) > 1e5) return true;\n\t}\n\treturn false;\n}\nfunction solveLU1D(A, B, n) {\n\tconst ipiv = new Int32Array(n);\n\tfor (let i = 0; i < n; i++) ipiv[i] = i;\n\tfor (let i = 0; i < n; i++) {\n\t\tlet maxVal = 0;\n\t\tlet pivotRow = i;\n\t\tfor (let r = i; r < n; r++) {\n\t\t\tconst val = Math.abs(A[r * n + i]);\n\t\t\tif (val > maxVal) {\n\t\t\t\tmaxVal = val;\n\t\t\t\tpivotRow = r;\n\t\t\t}\n\t\t}\n\t\tif (maxVal < 1e-9) return null;\n\t\telse if (pivotRow !== i) {\n\t\t\tconst tmp = ipiv[i];\n\t\t\tipiv[i] = ipiv[pivotRow];\n\t\t\tipiv[pivotRow] = tmp;\n\t\t\tfor (let col = 0; col < n; col++) {\n\t\t\t\tconst i1 = i * n + col, i2 = pivotRow * n + col;\n\t\t\t\tconst t$1 = A[i1];\n\t\t\t\tA[i1] = A[i2];\n\t\t\t\tA[i2] = t$1;\n\t\t\t}\n\t\t\tconst t = B[i];\n\t\t\tB[i] = B[pivotRow];\n\t\t\tB[pivotRow] = t;\n\t\t}\n\t\tconst pivot = A[i * n + i];\n\t\tif (Math.abs(pivot) < 1e-9) return null;\n\t\tfor (let r = i + 1; r < n; r++) {\n\t\t\tconst factor = A[r * n + i] / pivot;\n\t\t\tA[r * n + i] = 0;\n\t\t\tfor (let col = i + 1; col < n; col++) A[r * n + col] -= factor * A[i * n + col];\n\t\t\tB[r] -= factor * B[i];\n\t\t}\n\t}\n\tconst X = new Float64Array(n);\n\tfor (let i = n - 1; i >= 0; i--) {\n\t\tlet sum = B[i];\n\t\tfor (let j = i + 1; j < n; j++) sum -= A[i * n + j] * X[j];\n\t\tconst denom = A[i * n + i];\n\t\tif (Math.abs(denom) < 1e-9) return null;\n\t\tX[i] = sum / denom;\n\t}\n\treturn X;\n}\nfunction solve1DChannel(srcVals, tgtVals, epsilonSq) {\n\tconst M = srcVals.length;\n\tconst H = M + 2;\n\tconst K_mat = new Float64Array(H * H);\n\tconst B_rhs = new Float64Array(H);\n\tfor (let i = 0; i < M; i++) {\n\t\tconst xi = srcVals[i];\n\t\tB_rhs[i] = tgtVals[i];\n\t\tfor (let j = 0; j < M; j++) {\n\t\t\tconst dx = xi - srcVals[j];\n\t\t\tK_mat[i * H + j] = Math.sqrt(dx * dx + epsilonSq);\n\t\t}\n\t\tK_mat[i * H + M + 0] = 1;\n\t\tK_mat[i * H + M + 1] = xi;\n\t\tK_mat[(M + 0) * H + i] = 1;\n\t\tK_mat[(M + 1) * H + i] = xi;\n\t}\n\tlet diagMean = 0;\n\tfor (let i = 0; i < M; i++) diagMean += K_mat[i * H + i];\n\tdiagMean /= M;\n\tconst lambda = Math.max(1e-4, diagMean * .01);\n\tfor (let i = 0; i < M; i++) K_mat[i * H + i] += lambda;\n\tconst polyLambda = Math.max(1e-4, diagMean * .001);\n\tfor (let k = 0; k < 2; k++) K_mat[(M + k) * H + M + k] = polyLambda;\n\treturn solveLU1D(K_mat, B_rhs, H);\n}\nfunction evaluate1DChannel(srcVals, X_sol, epsilonSq, lutSize) {\n\tconst M = srcVals.length;\n\tconst out = new Float32Array(lutSize);\n\tfor (let cell = 0; cell < lutSize; cell++) {\n\t\tconst p = cell / (lutSize - 1);\n\t\tlet minDistSq = 1e10;\n\t\tfor (let i = 0; i < M; i++) {\n\t\t\tconst dx = p - srcVals[i];\n\t\t\tminDistSq = Math.min(minDistSq, dx * dx);\n\t\t}\n\t\tlet rbfSum = 0;\n\t\tfor (let i = 0; i < M; i++) {\n\t\t\tconst dx = p - srcVals[i];\n\t\t\tconst phi = Math.sqrt(dx * dx + epsilonSq);\n\t\t\trbfSum += X_sol[i] * phi;\n\t\t}\n\t\tconst rbfFade = Math.max(0, Math.min(1, 1 - (minDistSq - .0625) / .1875));\n\t\tlet val = X_sol[M + 0] + X_sol[M + 1] * p + rbfSum * rbfFade;\n\t\tconst identityBlend = Math.max(0, Math.min(1, (minDistSq - .1225) / .3));\n\t\tval = val * (1 - identityBlend) + p * identityBlend;\n\t\tout[cell] = Math.max(0, Math.min(1, val));\n\t}\n\treturn out;\n}\nfunction isSeparableOperationTree(vv, sourceMedia) {\n\tconst sourceFingerprint = getFingerprint(sourceMedia);\n\tlet current = vv;\n\twhile (current) {\n\t\tconst op = current.operation;\n\t\tif (!op) break;\n\t\tconst mediaToFingerprint = {\n\t\t\t...current,\n\t\t\tmetadata: {},\n\t\t\toperation: current.operation ? { ...current.operation } : void 0\n\t\t};\n\t\tif (mediaToFingerprint.operation) delete mediaToFingerprint.operation.lutUrl;\n\t\tif (getFingerprint(mediaToFingerprint) === sourceFingerprint) return true;\n\t\tif (op.op === \"source\") return false;\n\t\tif (op.op === \"Curves\") {\n\t\t\tif (op.curveType !== \"rgb\") return false;\n\t\t} else if (op.op === \"Levels\") {} else return false;\n\t\tif (current.children && current.children.length > 0) current = current.children[0];\n\t\telse break;\n\t}\n\treturn false;\n}\nfunction rgbToLab(r, g, b) {\n\tconst R = Math.max(1e-5, r), G = Math.max(1e-5, g), B = Math.max(1e-5, b);\n\tconst L = Math.log10(Math.max(1e-5, .3811 * R + .5783 * G + .0402 * B));\n\tconst M = Math.log10(Math.max(1e-5, .1967 * R + .7244 * G + .0782 * B));\n\tconst S = Math.log10(Math.max(1e-5, .0241 * R + .1288 * G + .8444 * B));\n\treturn [\n\t\t(L + M + S) / Math.sqrt(3),\n\t\t(L + M - 2 * S) / Math.sqrt(6),\n\t\t(L - M) / Math.sqrt(2)\n\t];\n}\nfunction getPixelRGB(pixels, idx, isBGRA) {\n\tconst o = idx * 4;\n\tconst rIdx = isBGRA ? o + 2 : o;\n\tconst bIdx = isBGRA ? o : o + 2;\n\treturn [\n\t\tpixels[rIdx] / 255,\n\t\tpixels[o + 1] / 255,\n\t\tpixels[bIdx] / 255\n\t];\n}\nfunction hashString(str) {\n\tlet hash = 5381;\n\tfor (let i = 0; i < str.length; i++) hash = hash * 33 ^ str.charCodeAt(i);\n\treturn hash >>> 0;\n}\nvar SeededRandom = class {\n\tstate;\n\tconstructor(seed) {\n\t\tthis.state = seed || 1;\n\t}\n\tnext() {\n\t\tthis.state = (this.state * 1664525 + 1013904223) % 4294967296;\n\t\treturn this.state / 4294967296;\n\t}\n};\nfunction seededShuffle(array, seed) {\n\tconst rng = new SeededRandom(seed);\n\tconst shuffled = [...array];\n\tfor (let i = shuffled.length - 1; i > 0; i--) {\n\t\tconst j = Math.floor(rng.next() * (i + 1));\n\t\tconst temp = shuffled[i];\n\t\tshuffled[i] = shuffled[j];\n\t\tshuffled[j] = temp;\n\t}\n\treturn shuffled;\n}\nfunction buildUniqueColorPool(srcPixels, tgtPixels, isBGRA, gridResolution = 20) {\n\tconst occupied = /* @__PURE__ */ new Set();\n\tconst pool = [];\n\tconst numPixels = srcPixels.length / 4;\n\tfor (let i = 0; i < numPixels; i++) {\n\t\tconst src = getPixelRGB(srcPixels, i, isBGRA);\n\t\tconst r = Math.max(0, Math.min(gridResolution - 1, Math.floor(src[0] * gridResolution)));\n\t\tconst g = Math.max(0, Math.min(gridResolution - 1, Math.floor(src[1] * gridResolution)));\n\t\tconst b = Math.max(0, Math.min(gridResolution - 1, Math.floor(src[2] * gridResolution)));\n\t\tconst cellKey = r * gridResolution * gridResolution + g * gridResolution + b;\n\t\tif (!occupied.has(cellKey)) {\n\t\t\toccupied.add(cellKey);\n\t\t\tpool.push({\n\t\t\t\tsrc,\n\t\t\t\ttgt: getPixelRGB(tgtPixels, i, isBGRA)\n\t\t\t});\n\t\t}\n\t}\n\treturn pool;\n}\n/**\n* Evaluates the fitted RBF on the GPU.\n*\n* CPU work that remains:\n* • Build K matrix O(M²) – tiny (≈ 162×162)\n* • solveLU O(M³) – tiny\n*\n* GPU work (replaces the triple-nested JS loop):\n* • 33³ = 35 937 threads × M inner iterations → ~5.7 M parallel MADs\n*\n* Returns a plain Float32Array of length lutSize³×3 for lutStore.\n*/\nasync function evaluateRbfOnGpu(device, pipelines, sampledPoints, X_sol, lutSize, epsilonSq) {\n\tconst M = sampledPoints.length;\n\tconst totalCells = lutSize * lutSize * lutSize;\n\tconst wgs = 8;\n\tconst srcPointsData = new Float32Array(M * 4);\n\tconst weightsData = new Float32Array(M * 4);\n\tfor (let i = 0; i < M; i++) {\n\t\tsrcPointsData[i * 4 + 0] = sampledPoints[i].src[0];\n\t\tsrcPointsData[i * 4 + 1] = sampledPoints[i].src[1];\n\t\tsrcPointsData[i * 4 + 2] = sampledPoints[i].src[2];\n\t\tsrcPointsData[i * 4 + 3] = 0;\n\t\tweightsData[i * 4 + 0] = X_sol[i * 3 + 0];\n\t\tweightsData[i * 4 + 1] = X_sol[i * 3 + 1];\n\t\tweightsData[i * 4 + 2] = X_sol[i * 3 + 2];\n\t\tweightsData[i * 4 + 3] = 0;\n\t}\n\tconst polyData = new Float32Array(16);\n\tfor (let k = 0; k < 4; k++) {\n\t\tpolyData[k * 4 + 0] = X_sol[(M + k) * 3 + 0];\n\t\tpolyData[k * 4 + 1] = X_sol[(M + k) * 3 + 1];\n\t\tpolyData[k * 4 + 2] = X_sol[(M + k) * 3 + 2];\n\t\tpolyData[k * 4 + 3] = 0;\n\t}\n\tconst paramsBuffer = device.createBuffer({\n\t\tsize: 16,\n\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t});\n\tconst paramsData = /* @__PURE__ */ new ArrayBuffer(16);\n\tnew Uint32Array(paramsData, 0, 2).set([lutSize, M]);\n\tnew Float32Array(paramsData, 8, 1).set([epsilonSq]);\n\tdevice.queue.writeBuffer(paramsBuffer, 0, paramsData);\n\tconst srcPointsBuf = upload(device, srcPointsData);\n\tconst weightsBuf = upload(device, weightsData);\n\tconst polyBuf = upload(device, polyData);\n\tconst lutByteSize = totalCells * 3 * 4;\n\tconst lutBuf = device.createBuffer({\n\t\tsize: lutByteSize,\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n\t});\n\tconst readbackBuf = device.createBuffer({\n\t\tsize: lutByteSize,\n\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n\t});\n\tconst bg = device.createBindGroup({\n\t\tlayout: pipelines.rbf.getBindGroupLayout(0),\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: paramsBuffer }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: srcPointsBuf }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: { buffer: weightsBuf }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: { buffer: polyBuf }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: { buffer: lutBuf }\n\t\t\t}\n\t\t]\n\t});\n\tconst enc = device.createCommandEncoder({ label: \"rbf-lut-eval\" });\n\tconst pass = enc.beginComputePass();\n\tpass.setPipeline(pipelines.rbf);\n\tpass.setBindGroup(0, bg);\n\tconst groups = Math.ceil(lutSize / wgs);\n\tpass.dispatchWorkgroups(groups, groups, Math.ceil(lutSize / 4));\n\tpass.end();\n\tenc.copyBufferToBuffer(lutBuf, 0, readbackBuf, 0, lutByteSize);\n\tdevice.queue.submit([enc.finish()]);\n\tawait readbackBuf.mapAsync(GPUMapMode.READ);\n\tconst result = new Float32Array(readbackBuf.getMappedRange().slice(0));\n\treadbackBuf.unmap();\n\tparamsBuffer.destroy();\n\tsrcPointsBuf.destroy();\n\tweightsBuf.destroy();\n\tpolyBuf.destroy();\n\tlutBuf.destroy();\n\treadbackBuf.destroy();\n\treturn result;\n}\n/**\n* Generates the statistical LAB-transfer LUT entirely on the GPU.\n* The only CPU work is computing 6 scalars (mean/std per LAB channel).\n*/\nasync function evaluateStatisticalOnGpu(device, pipelines, srcMean, tgtMean, scale, lutSize) {\n\tconst lutByteSize = lutSize * lutSize * lutSize * 3 * 4;\n\tconst statsData = /* @__PURE__ */ new ArrayBuffer(64);\n\tconst f = new Float32Array(statsData);\n\tconst u = new Uint32Array(statsData);\n\tf[0] = srcMean[0];\n\tf[1] = srcMean[1];\n\tf[2] = srcMean[2];\n\tf[4] = tgtMean[0];\n\tf[5] = tgtMean[1];\n\tf[6] = tgtMean[2];\n\tf[8] = scale[0];\n\tf[9] = scale[1];\n\tf[10] = scale[2];\n\tu[12] = lutSize;\n\tconst statsBuf = device.createBuffer({\n\t\tsize: 64,\n\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t});\n\tdevice.queue.writeBuffer(statsBuf, 0, statsData);\n\tconst lutBuf = device.createBuffer({\n\t\tsize: lutByteSize,\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC\n\t});\n\tconst readbackBuf = device.createBuffer({\n\t\tsize: lutByteSize,\n\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n\t});\n\tconst bg = device.createBindGroup({\n\t\tlayout: pipelines.statistical.getBindGroupLayout(0),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: statsBuf }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: { buffer: lutBuf }\n\t\t}]\n\t});\n\tconst enc = device.createCommandEncoder({ label: \"stat-lut-eval\" });\n\tconst pass = enc.beginComputePass();\n\tpass.setPipeline(pipelines.statistical);\n\tpass.setBindGroup(0, bg);\n\tconst groups = Math.ceil(lutSize / 8);\n\tpass.dispatchWorkgroups(groups, groups, Math.ceil(lutSize / 4));\n\tpass.end();\n\tenc.copyBufferToBuffer(lutBuf, 0, readbackBuf, 0, lutByteSize);\n\tdevice.queue.submit([enc.finish()]);\n\tawait readbackBuf.mapAsync(GPUMapMode.READ);\n\tconst result = new Float32Array(readbackBuf.getMappedRange().slice(0));\n\treadbackBuf.unmap();\n\tstatsBuf.destroy();\n\tlutBuf.destroy();\n\treadbackBuf.destroy();\n\treturn result;\n}\n/** Uploads a Float32Array into a storage-readable GPUBuffer. */\nfunction upload(device, data) {\n\tconst buf = device.createBuffer({\n\t\tsize: Math.max(data.byteLength, 16),\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST\n\t});\n\tdevice.queue.writeBuffer(buf, 0, data);\n\treturn buf;\n}\n/**\n* Converts a flat Float32Array [R0,G0,B0, R1,G1,B1 …] returned from the GPU\n* into the tuple array expected by `lutStore.createOrUpdate`.\n*/\nfunction flatToPoints(flat) {\n\tconst n = flat.length / 3;\n\tconst out = new Array(n);\n\tfor (let i = 0; i < n; i++) out[i] = [\n\t\tflat[i * 3],\n\t\tflat[i * 3 + 1],\n\t\tflat[i * 3 + 2]\n\t];\n\treturn out;\n}\nconst ExtractLutWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ExtractLUT\" || !op) return;\n\tconst nodeId = op.nodeId ?? props.renderId;\n\tconst mediaToFingerprint = {\n\t\t...props.virtualMedia,\n\t\tmetadata: {},\n\t\toperation: props.virtualMedia?.operation ? { ...props.virtualMedia.operation } : void 0\n\t};\n\tif (mediaToFingerprint.operation) {\n\t\tdelete mediaToFingerprint.operation.lutUrl;\n\t\tdelete mediaToFingerprint.operation.timeline;\n\t\tdelete mediaToFingerprint.operation.startFrame;\n\t}\n\tconst lutUrl = op.lutUrl ?? `runtime://lut/extract-lut-${nodeId}-${getFingerprint(mediaToFingerprint)}`;\n\tconst fingerprint = lutUrl.startsWith(`runtime://lut/extract-lut-${nodeId}-`) ? lutUrl.slice(`runtime://lut/extract-lut-${nodeId}-`.length) : getFingerprint(mediaToFingerprint);\n\tconst cacheKey = `${nodeId}-${fingerprint}`;\n\tconst sourceMedia = props.virtualMedia?.children?.[0];\n\tconst targetMedia = props.virtualMedia?.children?.[1];\n\tif (!sourceMedia || !targetMedia) {\n\t\tpass.end();\n\t\treturn;\n\t}\n\tconst strategy = op.strategy ?? \"deterministic\";\n\tconst samplePoints = op.samplePoints ?? 150;\n\tconst gridSize = 64;\n\tconst numPixels = gridSize * gridSize;\n\tif (extractionCache.get(nodeId) === fingerprint && lutStore.get(lutUrl, ctx.device)) {\n\t\tpass.end();\n\t\treturn;\n\t}\n\tif (pendingExtractions.has(cacheKey)) {\n\t\tpass.end();\n\t\treturn;\n\t}\n\tlatestRequestedFingerprint.set(nodeId, fingerprint);\n\tpass.end();\n\tlutStore.getOrLoad(lutUrl, ctx.device);\n\tconst prev = activeTextures.get(nodeId);\n\tif (prev) {\n\t\tconst toDestroy = prev;\n\t\tctx.device.queue.onSubmittedWorkDone().then(() => {\n\t\t\ttry {\n\t\t\t\ttoDestroy.srcTex.destroy();\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\ttoDestroy.tgtTex.destroy();\n\t\t\t} catch {}\n\t\t});\n\t\tactiveTextures.delete(nodeId);\n\t}\n\tconst srcTex = ctx.device.createTexture({\n\t\tlabel: `ExtractLUT-src-grid-${nodeId}`,\n\t\tsize: [gridSize, gridSize],\n\t\tformat: ctx.renderer.format,\n\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC\n\t});\n\tctx.renderer.beginFrame(encoder, srcTex.createView(), {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 1\n\t}, gridSize, gridSize, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: gridSize,\n\t\theight: gridSize\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(sourceMedia, {\n\t\t...props,\n\t\trenderId: `${nodeId}-c0`,\n\t\tvirtualMedia: sourceMedia,\n\t\tcontainerWidth: gridSize,\n\t\tcontainerHeight: gridSize,\n\t\tforceWait: true\n\t}, srcTex.createView(), srcTex, gridSize, gridSize);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst tgtTex = ctx.device.createTexture({\n\t\tlabel: `ExtractLUT-tgt-grid-${nodeId}`,\n\t\tsize: [gridSize, gridSize],\n\t\tformat: ctx.renderer.format,\n\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC\n\t});\n\tactiveTextures.set(nodeId, {\n\t\tsrcTex,\n\t\ttgtTex\n\t});\n\tctx.renderer.beginFrame(encoder, tgtTex.createView(), {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 1\n\t}, gridSize, gridSize, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: gridSize,\n\t\theight: gridSize\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(targetMedia, {\n\t\t...props,\n\t\trenderId: `${nodeId}-c1`,\n\t\tvirtualMedia: targetMedia,\n\t\tcontainerWidth: gridSize,\n\t\tcontainerHeight: gridSize,\n\t\tforceWait: true\n\t}, tgtTex.createView(), tgtTex, gridSize, gridSize);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst bytesPerPixel = 4;\n\tconst align = 256;\n\tconst unpaddedBPR = gridSize * bytesPerPixel;\n\tconst bytesPerRow = Math.ceil(unpaddedBPR / align) * align;\n\tconst stagingSize = bytesPerRow * gridSize;\n\tconst srcStagingBuffer = ctx.device.createBuffer({\n\t\tlabel: `ExtractLUT-src-staging-${nodeId}`,\n\t\tsize: stagingSize,\n\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t});\n\tconst tgtStagingBuffer = ctx.device.createBuffer({\n\t\tlabel: `ExtractLUT-tgt-staging-${nodeId}`,\n\t\tsize: stagingSize,\n\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t});\n\tencoder.copyTextureToBuffer({ texture: srcTex }, {\n\t\tbuffer: srcStagingBuffer,\n\t\tbytesPerRow\n\t}, [gridSize, gridSize]);\n\tencoder.copyTextureToBuffer({ texture: tgtTex }, {\n\t\tbuffer: tgtStagingBuffer,\n\t\tbytesPerRow\n\t}, [gridSize, gridSize]);\n\tlet startMapping = () => {};\n\tconst mainSubmitPromise = new Promise((resolve) => {\n\t\tstartMapping = resolve;\n\t});\n\tconst originalSubmit = ctx.device.queue.submit;\n\tctx.device.queue.submit = function(commandBuffers) {\n\t\tctx.device.queue.submit = originalSubmit;\n\t\toriginalSubmit.call(this, commandBuffers);\n\t\tstartMapping();\n\t};\n\tconst extractionPromise = (async () => {\n\t\ttry {\n\t\t\tawait mainSubmitPromise;\n\t\t\tif (latestRequestedFingerprint.get(nodeId) !== fingerprint) {\n\t\t\t\ttry {\n\t\t\t\t\tsrcStagingBuffer.destroy();\n\t\t\t\t\ttgtStagingBuffer.destroy();\n\t\t\t\t} catch {}\n\t\t\t\tlutStore.rejectRawDataPromise(lutUrl, new DOMException(\"Extraction superseded by a newer request\", \"AbortError\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait ctx.device.queue.onSubmittedWorkDone();\n\t\t\tawait Promise.all([srcStagingBuffer.mapAsync(GPUMapMode.READ), tgtStagingBuffer.mapAsync(GPUMapMode.READ)]);\n\t\t\tconst srcPixels = new Uint8Array(numPixels * bytesPerPixel);\n\t\t\tconst tgtPixels = new Uint8Array(numPixels * bytesPerPixel);\n\t\t\tconst copyRows = (src, dst) => {\n\t\t\t\tif (bytesPerRow === unpaddedBPR) dst.set(src);\n\t\t\t\telse for (let y = 0; y < gridSize; y++) dst.set(src.subarray(y * bytesPerRow, y * bytesPerRow + unpaddedBPR), y * unpaddedBPR);\n\t\t\t};\n\t\t\tcopyRows(new Uint8Array(srcStagingBuffer.getMappedRange()), srcPixels);\n\t\t\tcopyRows(new Uint8Array(tgtStagingBuffer.getMappedRange()), tgtPixels);\n\t\t\tsrcStagingBuffer.unmap();\n\t\t\tsrcStagingBuffer.destroy();\n\t\t\ttgtStagingBuffer.unmap();\n\t\t\ttgtStagingBuffer.destroy();\n\t\t\tif (latestRequestedFingerprint.get(nodeId) !== fingerprint) {\n\t\t\t\tlutStore.rejectRawDataPromise(lutUrl, new DOMException(\"Extraction superceded by a newer request\", \"AbortError\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst isBGRA = ctx.renderer.format === \"bgra8unorm\" || ctx.renderer.format === \"bgra8unorm-srgb\";\n\t\t\tconst lutSize = 33;\n\t\t\tconst pipelines = getOrCreatePipelines(ctx.device);\n\t\t\tlet flat = null;\n\t\t\tlet succeeded = false;\n\t\t\tif (strategy === \"deterministic\") {\n\t\t\t\tconst shuffled = seededShuffle(buildUniqueColorPool(srcPixels, tgtPixels, isBGRA, 20), hashString(getFingerprint({\n\t\t\t\t\t...props.virtualMedia,\n\t\t\t\t\tmetadata: {},\n\t\t\t\t\toperation: void 0\n\t\t\t\t})));\n\t\t\t\tconst sampledPoints = shuffled.slice(0, Math.min(shuffled.length, samplePoints));\n\t\t\t\tconst M = sampledPoints.length;\n\t\t\t\tif (M >= 8) {\n\t\t\t\t\tif (isSeparableOperationTree(targetMedia, sourceMedia)) {\n\t\t\t\t\t\tlet epsilonSq = .01;\n\t\t\t\t\t\tlet totalMinDist = 0;\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) {\n\t\t\t\t\t\t\tlet minD = Infinity;\n\t\t\t\t\t\t\tfor (let j = 0; j < M; j++) {\n\t\t\t\t\t\t\t\tif (i === j) continue;\n\t\t\t\t\t\t\t\tconst dx = sampledPoints[i].src[0] - sampledPoints[j].src[0];\n\t\t\t\t\t\t\t\tminD = Math.min(minD, dx * dx);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttotalMinDist += Math.sqrt(minD);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst meanNND = totalMinDist / M;\n\t\t\t\t\t\tepsilonSq = Math.max(meanNND * meanNND * 4, 1e-4);\n\t\t\t\t\t\tconst srcR = sampledPoints.map((p) => p.src[0]);\n\t\t\t\t\t\tconst tgtR = sampledPoints.map((p) => p.tgt[0]);\n\t\t\t\t\t\tconst srcG = sampledPoints.map((p) => p.src[1]);\n\t\t\t\t\t\tconst tgtG = sampledPoints.map((p) => p.tgt[1]);\n\t\t\t\t\t\tconst srcB = sampledPoints.map((p) => p.src[2]);\n\t\t\t\t\t\tconst tgtB = sampledPoints.map((p) => p.tgt[2]);\n\t\t\t\t\t\tconst X_sol_R = solve1DChannel(srcR, tgtR, epsilonSq);\n\t\t\t\t\t\tconst X_sol_G = solve1DChannel(srcG, tgtG, epsilonSq);\n\t\t\t\t\t\tconst X_sol_B = solve1DChannel(srcB, tgtB, epsilonSq);\n\t\t\t\t\t\tif (X_sol_R && !hasAbsurdCoefficients(X_sol_R) && X_sol_G && !hasAbsurdCoefficients(X_sol_G) && X_sol_B && !hasAbsurdCoefficients(X_sol_B)) {\n\t\t\t\t\t\t\tconst lutR = evaluate1DChannel(srcR, X_sol_R, epsilonSq, lutSize);\n\t\t\t\t\t\t\tconst lutG = evaluate1DChannel(srcG, X_sol_G, epsilonSq, lutSize);\n\t\t\t\t\t\t\tconst lutB = evaluate1DChannel(srcB, X_sol_B, epsilonSq, lutSize);\n\t\t\t\t\t\t\tflat = new Float32Array(lutSize * lutSize * lutSize * 3);\n\t\t\t\t\t\t\tfor (let b = 0; b < lutSize; b++) for (let g = 0; g < lutSize; g++) for (let r = 0; r < lutSize; r++) {\n\t\t\t\t\t\t\t\tconst idx = (b * lutSize * lutSize + g * lutSize + r) * 3;\n\t\t\t\t\t\t\t\tflat[idx + 0] = lutR[r];\n\t\t\t\t\t\t\t\tflat[idx + 1] = lutG[g];\n\t\t\t\t\t\t\t\tflat[idx + 2] = lutB[b];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsucceeded = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!succeeded) {\n\t\t\t\t\t\tconst H = M + 4;\n\t\t\t\t\t\tlet epsilonSq = .01;\n\t\t\t\t\t\tlet totalMinDist = 0;\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) {\n\t\t\t\t\t\t\tlet minD = Infinity;\n\t\t\t\t\t\t\tfor (let j = 0; j < M; j++) {\n\t\t\t\t\t\t\t\tif (i === j) continue;\n\t\t\t\t\t\t\t\tconst dx = sampledPoints[i].src[0] - sampledPoints[j].src[0];\n\t\t\t\t\t\t\t\tconst dy = sampledPoints[i].src[1] - sampledPoints[j].src[1];\n\t\t\t\t\t\t\t\tconst dz = sampledPoints[i].src[2] - sampledPoints[j].src[2];\n\t\t\t\t\t\t\t\tminD = Math.min(minD, dx * dx + dy * dy + dz * dz);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttotalMinDist += Math.sqrt(minD);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst meanNND = totalMinDist / M;\n\t\t\t\t\t\tepsilonSq = Math.max(meanNND * meanNND * 4, 1e-4);\n\t\t\t\t\t\tconst K_mat = new Float64Array(H * H);\n\t\t\t\t\t\tconst B_rhs = new Float64Array(H * 3);\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) {\n\t\t\t\t\t\t\tconst pi = sampledPoints[i].src;\n\t\t\t\t\t\t\tconst gi = sampledPoints[i].tgt;\n\t\t\t\t\t\t\tB_rhs[i * 3 + 0] = gi[0];\n\t\t\t\t\t\t\tB_rhs[i * 3 + 1] = gi[1];\n\t\t\t\t\t\t\tB_rhs[i * 3 + 2] = gi[2];\n\t\t\t\t\t\t\tfor (let j = 0; j < M; j++) {\n\t\t\t\t\t\t\t\tconst pj = sampledPoints[j].src;\n\t\t\t\t\t\t\t\tconst dx = pi[0] - pj[0], dy = pi[1] - pj[1], dz = pi[2] - pj[2];\n\t\t\t\t\t\t\t\tK_mat[i * H + j] = Math.sqrt(dx * dx + dy * dy + dz * dz + epsilonSq);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tK_mat[i * H + M + 0] = 1;\n\t\t\t\t\t\t\tK_mat[i * H + M + 1] = pi[0];\n\t\t\t\t\t\t\tK_mat[i * H + M + 2] = pi[1];\n\t\t\t\t\t\t\tK_mat[i * H + M + 3] = pi[2];\n\t\t\t\t\t\t\tK_mat[(M + 0) * H + i] = 1;\n\t\t\t\t\t\t\tK_mat[(M + 1) * H + i] = pi[0];\n\t\t\t\t\t\t\tK_mat[(M + 2) * H + i] = pi[1];\n\t\t\t\t\t\t\tK_mat[(M + 3) * H + i] = pi[2];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet diagMean = 0;\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) diagMean += K_mat[i * H + i];\n\t\t\t\t\t\tdiagMean /= M;\n\t\t\t\t\t\tconst lambda = Math.max(1e-4, diagMean * .01);\n\t\t\t\t\t\tfor (let i = 0; i < M; i++) K_mat[i * H + i] += lambda;\n\t\t\t\t\t\tconst polyLambda = Math.max(1e-4, diagMean * .001);\n\t\t\t\t\t\tfor (let k = 0; k < 4; k++) K_mat[(M + k) * H + M + k] = polyLambda;\n\t\t\t\t\t\tconst X_sol = solveLU(K_mat, B_rhs, H);\n\t\t\t\t\t\tif (X_sol && !hasAbsurdCoefficients(X_sol)) try {\n\t\t\t\t\t\t\tflat = await evaluateRbfOnGpu(ctx.device, pipelines, sampledPoints, X_sol, lutSize, epsilonSq);\n\t\t\t\t\t\t\tlet hasInvalid = false;\n\t\t\t\t\t\t\tfor (let i = 0; i < flat.length; i++) {\n\t\t\t\t\t\t\t\tconst val = flat[i];\n\t\t\t\t\t\t\t\tif (Number.isNaN(val) || !Number.isFinite(val)) {\n\t\t\t\t\t\t\t\t\thasInvalid = true;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!hasInvalid) succeeded = true;\n\t\t\t\t\t\t} catch (gpuErr) {\n\t\t\t\t\t\t\tconsole.error(\"[ExtractLUT] RBF GPU evaluation failed:\", gpuErr);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!succeeded) {\n\t\t\t\tlet srcMeanL = 0, srcMeanA = 0, srcMeanB = 0;\n\t\t\t\tlet tgtMeanL = 0, tgtMeanA = 0, tgtMeanB = 0;\n\t\t\t\tconst srcLABs = [];\n\t\t\t\tconst tgtLABs = [];\n\t\t\t\tfor (let i = 0; i < numPixels; i++) {\n\t\t\t\t\tconst sl = rgbToLab(...getPixelRGB(srcPixels, i, isBGRA));\n\t\t\t\t\tsrcLABs.push(sl);\n\t\t\t\t\tsrcMeanL += sl[0];\n\t\t\t\t\tsrcMeanA += sl[1];\n\t\t\t\t\tsrcMeanB += sl[2];\n\t\t\t\t\tconst tl = rgbToLab(...getPixelRGB(tgtPixels, i, isBGRA));\n\t\t\t\t\ttgtLABs.push(tl);\n\t\t\t\t\ttgtMeanL += tl[0];\n\t\t\t\t\ttgtMeanA += tl[1];\n\t\t\t\t\ttgtMeanB += tl[2];\n\t\t\t\t}\n\t\t\t\tsrcMeanL /= numPixels;\n\t\t\t\tsrcMeanA /= numPixels;\n\t\t\t\tsrcMeanB /= numPixels;\n\t\t\t\ttgtMeanL /= numPixels;\n\t\t\t\ttgtMeanA /= numPixels;\n\t\t\t\ttgtMeanB /= numPixels;\n\t\t\t\tlet srcStdL = 0, srcStdA = 0, srcStdB = 0;\n\t\t\t\tlet tgtStdL = 0, tgtStdA = 0, tgtStdB = 0;\n\t\t\t\tfor (let i = 0; i < numPixels; i++) {\n\t\t\t\t\tsrcStdL += (srcLABs[i][0] - srcMeanL) ** 2;\n\t\t\t\t\tsrcStdA += (srcLABs[i][1] - srcMeanA) ** 2;\n\t\t\t\t\tsrcStdB += (srcLABs[i][2] - srcMeanB) ** 2;\n\t\t\t\t\ttgtStdL += (tgtLABs[i][0] - tgtMeanL) ** 2;\n\t\t\t\t\ttgtStdA += (tgtLABs[i][1] - tgtMeanA) ** 2;\n\t\t\t\t\ttgtStdB += (tgtLABs[i][2] - tgtMeanB) ** 2;\n\t\t\t\t}\n\t\t\t\tsrcStdL = Math.max(Math.sqrt(srcStdL / numPixels), 1e-6);\n\t\t\t\tsrcStdA = Math.max(Math.sqrt(srcStdA / numPixels), 1e-6);\n\t\t\t\tsrcStdB = Math.max(Math.sqrt(srcStdB / numPixels), 1e-6);\n\t\t\t\ttgtStdL = Math.sqrt(tgtStdL / numPixels);\n\t\t\t\ttgtStdA = Math.sqrt(tgtStdA / numPixels);\n\t\t\t\ttgtStdB = Math.sqrt(tgtStdB / numPixels);\n\t\t\t\tif (srcStdL < 1e-4 || srcMeanL < 1e-4) {\n\t\t\t\t\tflat = new Float32Array(lutSize * lutSize * lutSize * 3);\n\t\t\t\t\tfor (let b = 0; b < lutSize; b++) for (let g = 0; g < lutSize; g++) for (let r = 0; r < lutSize; r++) {\n\t\t\t\t\t\tconst idx = (b * lutSize * lutSize + g * lutSize + r) * 3;\n\t\t\t\t\t\tflat[idx + 0] = r / (lutSize - 1);\n\t\t\t\t\t\tflat[idx + 1] = g / (lutSize - 1);\n\t\t\t\t\t\tflat[idx + 2] = b / (lutSize - 1);\n\t\t\t\t\t}\n\t\t\t\t} else flat = await evaluateStatisticalOnGpu(ctx.device, pipelines, [\n\t\t\t\t\tsrcMeanL,\n\t\t\t\t\tsrcMeanA,\n\t\t\t\t\tsrcMeanB\n\t\t\t\t], [\n\t\t\t\t\ttgtMeanL,\n\t\t\t\t\ttgtMeanA,\n\t\t\t\t\ttgtMeanB\n\t\t\t\t], [\n\t\t\t\t\ttgtStdL / srcStdL,\n\t\t\t\t\ttgtStdA / srcStdA,\n\t\t\t\t\ttgtStdB / srcStdB\n\t\t\t\t], lutSize);\n\t\t\t}\n\t\t\tconst smoothedPoints = flatToPoints(flat);\n\t\t\tif (latestRequestedFingerprint.get(nodeId) !== fingerprint) {\n\t\t\t\tlutStore.rejectRawDataPromise(lutUrl, new DOMException(\"Extraction superseded by a newer request\", \"AbortError\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlutStore.createOrUpdate(lutUrl, ctx.device, smoothedPoints, lutSize, \"3D\");\n\t\t\textractionCache.set(nodeId, fingerprint);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"[ExtractLUT] Async extraction error:\", err);\n\t\t\ttry {\n\t\t\t\tconst lutSize = 33;\n\t\t\t\tconst identityPoints = [];\n\t\t\t\tfor (let z = 0; z < lutSize; z++) for (let y = 0; y < lutSize; y++) for (let x = 0; x < lutSize; x++) identityPoints.push([\n\t\t\t\t\tx / (lutSize - 1),\n\t\t\t\t\ty / (lutSize - 1),\n\t\t\t\t\tz / (lutSize - 1)\n\t\t\t\t]);\n\t\t\t\tif (latestRequestedFingerprint.get(nodeId) === fingerprint) {\n\t\t\t\t\tlutStore.createOrUpdate(lutUrl, ctx.device, identityPoints, lutSize, \"3D\");\n\t\t\t\t\textractionCache.set(nodeId, fingerprint);\n\t\t\t\t}\n\t\t\t} catch (fallbackErr) {\n\t\t\t\tconsole.error(\"[ExtractLUT] Failed to write fallback identity LUT:\", fallbackErr);\n\t\t\t\tlutStore.rejectRawDataPromise(lutUrl, err);\n\t\t\t}\n\t\t} finally {\n\t\t\tpendingExtractions.delete(cacheKey);\n\t\t}\n\t})();\n\tpendingExtractions.set(cacheKey, extractionPromise);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ExtractLutWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CDotFzd9.mjs.map"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-W71TSjRM.mjs";
2
+ import "./dist-CWLLnigL.mjs";
3
+ import { t as renderers_default } from "./renderer-DLPhfwbR.mjs";
4
+
5
+ export { renderers_default as default };
@@ -0,0 +1,5 @@
1
+ import "./chunk-W71TSjRM.mjs";
2
+ import "./dist-CWLLnigL.mjs";
3
+ import { n as renderers_default, t as WebGPURenderer } from "./renderer-DgPn_SOC.mjs";
4
+
5
+ export { WebGPURenderer, renderers_default as default };
@@ -1,6 +1,6 @@
1
- import { n as defineRenderer, u as unwrapFrameParam } from "./renderer-DrWeb39d.mjs";
2
- import { q as parseColor } from "./dist-D12-a3-x.mjs";
3
- import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-zFNrvhV9.mjs";
1
+ import { n as defineRenderer, u as unwrapFrameParam } from "./renderer-DcvjSolU.mjs";
2
+ import { q as parseColor } from "./dist-CWLLnigL.mjs";
3
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CpkJJLQP.mjs";
4
4
 
5
5
  //#region ../../nodes/node-halftone-screen/dist/renderers-CvluQiq3.mjs
6
6
  const WGSL_HALFTONE_SHADER = `
@@ -456,4 +456,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: HalftoneScreenWebGPURen
456
456
 
457
457
  //#endregion
458
458
  export { renderers_default as t };
459
- //# sourceMappingURL=renderer-BZmmekE8.mjs.map
459
+ //# sourceMappingURL=renderer-BDZC3o3N.mjs.map