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-BNbMi9CI.mjs","names":[],"sources":["../../../nodes/node-kaleidoscope/dist/renderers-D5lECrP_.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 = \"Kaleidoscope\";\nconst UNIFORM_FLOATS = 12;\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>, 3> };\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 segments = u.v[1].x;\n\tlet rotation = u.v[1].y;\n\tlet centerX = u.v[1].z;\n\tlet centerY = u.v[1].w;\n\tlet zoom = u.v[2].x;\n\n\tlet R = res();\n\tlet aspect = R.x / R.y;\n\tlet center = vec2<f32>(centerX, centerY);\n\tvar p = in.uv - center;\n\tp.x *= aspect;\n\tlet rad = length(p) / zoom;\n\tlet rot = radians(rotation);\n\tlet seg = 6.2831853 / segments;\n\tvar a = atan2(p.y, p.x) - rot;\n\ta = a - seg * floor(a / seg);\n\ta = min(a, seg - a);\n\tvar q = vec2<f32>(cos(a + rot), sin(a + rot)) * rad;\n\tq.x /= aspect;\n\tlet uv = q + center;\n\tlet m = vec2<f32>(1.0) - abs(fract(uv * 0.5) * 2.0 - vec2<f32>(1.0));\n\treturn sampleP(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.segments, 6);\n\tdata[5] = num(raw.rotation, 0);\n\tdata[6] = num(raw.centerX, .5);\n\tdata[7] = num(raw.centerY, .5);\n\tdata[8] = num(raw.zoom, 1);\n}\nconst KaleidoscopeWebGPURenderer = 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: KaleidoscopeWebGPURenderer });\n\n//#endregion\nexport { KaleidoscopeWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-D5lECrP_.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-jnAIhWn_.mjs","names":[],"sources":["../../../nodes/node-kaleidoscope/dist/renderers-D5lECrP_.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 = \"Kaleidoscope\";\nconst UNIFORM_FLOATS = 12;\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>, 3> };\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 segments = u.v[1].x;\n\tlet rotation = u.v[1].y;\n\tlet centerX = u.v[1].z;\n\tlet centerY = u.v[1].w;\n\tlet zoom = u.v[2].x;\n\n\tlet R = res();\n\tlet aspect = R.x / R.y;\n\tlet center = vec2<f32>(centerX, centerY);\n\tvar p = in.uv - center;\n\tp.x *= aspect;\n\tlet rad = length(p) / zoom;\n\tlet rot = radians(rotation);\n\tlet seg = 6.2831853 / segments;\n\tvar a = atan2(p.y, p.x) - rot;\n\ta = a - seg * floor(a / seg);\n\ta = min(a, seg - a);\n\tvar q = vec2<f32>(cos(a + rot), sin(a + rot)) * rad;\n\tq.x /= aspect;\n\tlet uv = q + center;\n\tlet m = vec2<f32>(1.0) - abs(fract(uv * 0.5) * 2.0 - vec2<f32>(1.0));\n\treturn sampleP(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.segments, 6);\n\tdata[5] = num(raw.rotation, 0);\n\tdata[6] = num(raw.centerX, .5);\n\tdata[7] = num(raw.centerY, .5);\n\tdata[8] = num(raw.zoom, 1);\n}\nconst KaleidoscopeWebGPURenderer = 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: KaleidoscopeWebGPURenderer });\n\n//#endregion\nexport { KaleidoscopeWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-D5lECrP_.mjs.map"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { Rn as signalRegistry, q as parseColor } from "./dist-D12-a3-x.mjs";
2
- import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-zFNrvhV9.mjs";
1
+ import { q as parseColor, zn as signalRegistry } from "./dist-CWLLnigL.mjs";
2
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CpkJJLQP.mjs";
3
3
 
4
4
  //#region ../../nodes/node-gradient-map/dist/renderers-DDdRKrlK.mjs
5
5
  const deviceResourceCache = /* @__PURE__ */ new WeakMap();
@@ -206,4 +206,4 @@ var renderers_default = { WebGPURenderer: GradientMapWebGPURenderer };
206
206
 
207
207
  //#endregion
208
208
  export { renderers_default as n, GradientMapWebGPURenderer as t };
209
- //# sourceMappingURL=renderer-CyCtm0UV.mjs.map
209
+ //# sourceMappingURL=renderer-lHNTgiOM.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-CyCtm0UV.mjs","names":[],"sources":["../../../nodes/node-gradient-map/dist/renderers-DDdRKrlK.mjs"],"sourcesContent":["import { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTiming } from \"@framefields/node-sdk/gpu\";\nimport { parseColor, signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst WGSL_GRADIENT_MAP_SHADER = `\nstruct GradientStop {\n\tpos : vec4<f32>,\n\tcol : vec4<f32>,\n};\n\nstruct GradientMapUniforms {\n\tnumStops : f32,\n\tisSmooth : f32,\n\tdither : f32,\n\topacity : f32,\n\n\thasOpacitySig : f32,\n\tpad0 : f32,\n\tpad1 : f32,\n\tpad2 : f32,\n\n\tstops : array<GradientStop, 16>,\n};\n\n@group(0) @binding(0) var<uniform> u : GradientMapUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(1) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn ditherNoise(pos: vec2<f32>) -> f32 {\n\tlet p = fract(pos * vec2<f32>(0.1031, 0.1030));\n\tlet d = dot(p, p.yx + 33.33);\n\treturn fract((p.x + p.y) * d) - 0.5;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (color.a <= 0.00001) {\n\t\treturn color;\n\t}\n\n\tlet alpha = color.a;\n\tlet rgb = color.rgb / max(alpha, 0.0001);\n\n\t// ITU-R BT.709 Luminance\n\tvar lum = dot(rgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n\n\tif (u.dither > 0.5) {\n\t\tlet d = ditherNoise(in.pos.xy) * (1.0 / 255.0);\n\t\tlum = clamp(lum + d, 0.0, 1.0);\n\t} else {\n\t\tlum = clamp(lum, 0.0, 1.0);\n\t}\n\n\tlet count = i32(clamp(u.numStops, 2.0, 16.0));\n\tvar gradColor = u.stops[0].col.rgb;\n\n\tif (lum <= u.stops[0].pos.x) {\n\t\tgradColor = u.stops[0].col.rgb;\n\t} else if (lum >= u.stops[count - 1].pos.x) {\n\t\tgradColor = u.stops[count - 1].col.rgb;\n\t} else {\n\t\tfor (var i = 0; i < 15; i = i + 1) {\n\t\t\tif (i >= count - 1) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlet p0 = u.stops[i].pos.x;\n\t\t\tlet p1 = u.stops[i + 1].pos.x;\n\n\t\t\tif (lum >= p0 && lum <= p1) {\n\t\t\t\tlet range = max(p1 - p0, 1e-5);\n\t\t\t\tlet t = clamp((lum - p0) / range, 0.0, 1.0);\n\t\t\t\tif (u.isSmooth > 0.5) {\n\t\t\t\t\tgradColor = mix(u.stops[i].col.rgb, u.stops[i + 1].col.rgb, t);\n\t\t\t\t} else {\n\t\t\t\t\tgradColor = u.stops[i].col.rgb;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar opacity = u.opacity;\n\tif (u.hasOpacitySig > 0.5) {\n\t\topacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\topacity = clamp(opacity, 0.0, 1.0);\n\n\tlet finalRgb = mix(rgb, gradColor, opacity);\n\treturn vec4<f32>(finalRgb * alpha, alpha);\n}\n`;\nfunction getGradientMapResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"], \"GradientMapUniformLayout\");\n\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"GradientMapTextureLayout\");\n\tconst signalLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"GradientMapSignalLayout\");\n\tres = {\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tlabel: \"GradientMapPipeline\",\n\t\t\tmodule: device.createShaderModule({\n\t\t\t\tlabel: \"GradientMapShaderModule\",\n\t\t\t\tcode: WGSL_GRADIENT_MAP_SHADER\n\t\t\t}),\n\t\t\tlayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalLayout\n\t\t\t],\n\t\t\tformat\n\t\t}),\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalLayout\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst uniformBufferData = new Float32Array(136);\nconst GradientMapWebGPURenderer = 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 !== \"GradientMap\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst sortedStops = [...Array.isArray(op.stops) ? op.stops : [{\n\t\tposition: 0,\n\t\tcolor: \"#000000\"\n\t}, {\n\t\tposition: 1,\n\t\tcolor: \"#ffffff\"\n\t}]].sort((a, b) => a.position - b.position);\n\tconst numStops = Math.min(Math.max(sortedStops.length, 2), 16);\n\tconst opacityHandleId = op.opacityHandleId;\n\tconst opacitySignalInput = opacityHandleId ? op.inputs?.[opacityHandleId] : null;\n\tconst hasOpacitySig = !!(opacitySignalInput?.connectionValid && opacitySignalInput.outputItem?.type === \"Signal\");\n\tconst opacitySigData = hasOpacitySig ? opacitySignalInput?.outputItem?.data : null;\n\tlet opacityVal = Number(op.opacity ?? 1);\n\tif (!hasOpacitySig && opacitySignalInput?.connectionValid && opacitySignalInput.outputItem?.type === \"Number\") opacityVal = Number(opacitySignalInput.outputItem.data ?? 1);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tlet opacityView;\n\tif (hasOpacitySig && opacitySigData) opacityView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, opacitySigData.nodeId ?? \"gradient_map_opacity\", elapsedSeconds, durationSeconds, opacitySigData, width, height, props.renderId, frame, fps);\n\telse opacityView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tuniformBufferData.fill(0);\n\tuniformBufferData[0] = numStops;\n\tuniformBufferData[1] = op.smooth === false ? 0 : 1;\n\tuniformBufferData[2] = op.dither === false ? 0 : 1;\n\tuniformBufferData[3] = opacityVal;\n\tuniformBufferData[4] = hasOpacitySig ? 1 : 0;\n\tuniformBufferData[5] = 0;\n\tuniformBufferData[6] = 0;\n\tuniformBufferData[7] = 0;\n\tfor (let i = 0; i < 16; i++) {\n\t\tconst stop = sortedStops[Math.min(i, numStops - 1)];\n\t\tconst baseIdx = 8 + i * 8;\n\t\tconst parsed = parseColor(stop.color);\n\t\tuniformBufferData[baseIdx + 0] = stop.position;\n\t\tuniformBufferData[baseIdx + 1] = 0;\n\t\tuniformBufferData[baseIdx + 2] = 0;\n\t\tuniformBufferData[baseIdx + 3] = 0;\n\t\tuniformBufferData[baseIdx + 4] = parsed.r;\n\t\tuniformBufferData[baseIdx + 5] = parsed.g;\n\t\tuniformBufferData[baseIdx + 6] = parsed.b;\n\t\tuniformBufferData[baseIdx + 7] = parsed.a;\n\t}\n\tconst { pipeline, uniformLayout, textureLayout, signalLayout } = getGradientMapResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst buffer = ctx.renderer.getTemporaryBuffer(uniformBufferData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, textureLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: signalLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: opacityView\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, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = { WebGPURenderer: GradientMapWebGPURenderer };\n\n//#endregion\nexport { GradientMapWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-DDdRKrlK.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-lHNTgiOM.mjs","names":[],"sources":["../../../nodes/node-gradient-map/dist/renderers-DDdRKrlK.mjs"],"sourcesContent":["import { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTiming } from \"@framefields/node-sdk/gpu\";\nimport { parseColor, signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst WGSL_GRADIENT_MAP_SHADER = `\nstruct GradientStop {\n\tpos : vec4<f32>,\n\tcol : vec4<f32>,\n};\n\nstruct GradientMapUniforms {\n\tnumStops : f32,\n\tisSmooth : f32,\n\tdither : f32,\n\topacity : f32,\n\n\thasOpacitySig : f32,\n\tpad0 : f32,\n\tpad1 : f32,\n\tpad2 : f32,\n\n\tstops : array<GradientStop, 16>,\n};\n\n@group(0) @binding(0) var<uniform> u : GradientMapUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(1) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn ditherNoise(pos: vec2<f32>) -> f32 {\n\tlet p = fract(pos * vec2<f32>(0.1031, 0.1030));\n\tlet d = dot(p, p.yx + 33.33);\n\treturn fract((p.x + p.y) * d) - 0.5;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (color.a <= 0.00001) {\n\t\treturn color;\n\t}\n\n\tlet alpha = color.a;\n\tlet rgb = color.rgb / max(alpha, 0.0001);\n\n\t// ITU-R BT.709 Luminance\n\tvar lum = dot(rgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n\n\tif (u.dither > 0.5) {\n\t\tlet d = ditherNoise(in.pos.xy) * (1.0 / 255.0);\n\t\tlum = clamp(lum + d, 0.0, 1.0);\n\t} else {\n\t\tlum = clamp(lum, 0.0, 1.0);\n\t}\n\n\tlet count = i32(clamp(u.numStops, 2.0, 16.0));\n\tvar gradColor = u.stops[0].col.rgb;\n\n\tif (lum <= u.stops[0].pos.x) {\n\t\tgradColor = u.stops[0].col.rgb;\n\t} else if (lum >= u.stops[count - 1].pos.x) {\n\t\tgradColor = u.stops[count - 1].col.rgb;\n\t} else {\n\t\tfor (var i = 0; i < 15; i = i + 1) {\n\t\t\tif (i >= count - 1) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlet p0 = u.stops[i].pos.x;\n\t\t\tlet p1 = u.stops[i + 1].pos.x;\n\n\t\t\tif (lum >= p0 && lum <= p1) {\n\t\t\t\tlet range = max(p1 - p0, 1e-5);\n\t\t\t\tlet t = clamp((lum - p0) / range, 0.0, 1.0);\n\t\t\t\tif (u.isSmooth > 0.5) {\n\t\t\t\t\tgradColor = mix(u.stops[i].col.rgb, u.stops[i + 1].col.rgb, t);\n\t\t\t\t} else {\n\t\t\t\t\tgradColor = u.stops[i].col.rgb;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar opacity = u.opacity;\n\tif (u.hasOpacitySig > 0.5) {\n\t\topacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\topacity = clamp(opacity, 0.0, 1.0);\n\n\tlet finalRgb = mix(rgb, gradColor, opacity);\n\treturn vec4<f32>(finalRgb * alpha, alpha);\n}\n`;\nfunction getGradientMapResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"], \"GradientMapUniformLayout\");\n\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"GradientMapTextureLayout\");\n\tconst signalLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"GradientMapSignalLayout\");\n\tres = {\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tlabel: \"GradientMapPipeline\",\n\t\t\tmodule: device.createShaderModule({\n\t\t\t\tlabel: \"GradientMapShaderModule\",\n\t\t\t\tcode: WGSL_GRADIENT_MAP_SHADER\n\t\t\t}),\n\t\t\tlayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalLayout\n\t\t\t],\n\t\t\tformat\n\t\t}),\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalLayout\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst uniformBufferData = new Float32Array(136);\nconst GradientMapWebGPURenderer = 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 !== \"GradientMap\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst sortedStops = [...Array.isArray(op.stops) ? op.stops : [{\n\t\tposition: 0,\n\t\tcolor: \"#000000\"\n\t}, {\n\t\tposition: 1,\n\t\tcolor: \"#ffffff\"\n\t}]].sort((a, b) => a.position - b.position);\n\tconst numStops = Math.min(Math.max(sortedStops.length, 2), 16);\n\tconst opacityHandleId = op.opacityHandleId;\n\tconst opacitySignalInput = opacityHandleId ? op.inputs?.[opacityHandleId] : null;\n\tconst hasOpacitySig = !!(opacitySignalInput?.connectionValid && opacitySignalInput.outputItem?.type === \"Signal\");\n\tconst opacitySigData = hasOpacitySig ? opacitySignalInput?.outputItem?.data : null;\n\tlet opacityVal = Number(op.opacity ?? 1);\n\tif (!hasOpacitySig && opacitySignalInput?.connectionValid && opacitySignalInput.outputItem?.type === \"Number\") opacityVal = Number(opacitySignalInput.outputItem.data ?? 1);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tlet opacityView;\n\tif (hasOpacitySig && opacitySigData) opacityView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, opacitySigData.nodeId ?? \"gradient_map_opacity\", elapsedSeconds, durationSeconds, opacitySigData, width, height, props.renderId, frame, fps);\n\telse opacityView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tuniformBufferData.fill(0);\n\tuniformBufferData[0] = numStops;\n\tuniformBufferData[1] = op.smooth === false ? 0 : 1;\n\tuniformBufferData[2] = op.dither === false ? 0 : 1;\n\tuniformBufferData[3] = opacityVal;\n\tuniformBufferData[4] = hasOpacitySig ? 1 : 0;\n\tuniformBufferData[5] = 0;\n\tuniformBufferData[6] = 0;\n\tuniformBufferData[7] = 0;\n\tfor (let i = 0; i < 16; i++) {\n\t\tconst stop = sortedStops[Math.min(i, numStops - 1)];\n\t\tconst baseIdx = 8 + i * 8;\n\t\tconst parsed = parseColor(stop.color);\n\t\tuniformBufferData[baseIdx + 0] = stop.position;\n\t\tuniformBufferData[baseIdx + 1] = 0;\n\t\tuniformBufferData[baseIdx + 2] = 0;\n\t\tuniformBufferData[baseIdx + 3] = 0;\n\t\tuniformBufferData[baseIdx + 4] = parsed.r;\n\t\tuniformBufferData[baseIdx + 5] = parsed.g;\n\t\tuniformBufferData[baseIdx + 6] = parsed.b;\n\t\tuniformBufferData[baseIdx + 7] = parsed.a;\n\t}\n\tconst { pipeline, uniformLayout, textureLayout, signalLayout } = getGradientMapResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst buffer = ctx.renderer.getTemporaryBuffer(uniformBufferData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, textureLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: signalLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: opacityView\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, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = { WebGPURenderer: GradientMapWebGPURenderer };\n\n//#endregion\nexport { GradientMapWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-DDdRKrlK.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-B1LD29TV.mjs";
4
+
5
+ export { renderers_default as default };
@@ -1,6 +1,6 @@
1
- import { xn as resolveNumber } from "./dist-ByxHoMQI.mjs";
2
- import { i as isHandleConnected, n as defineRenderer } from "./renderer-DrWeb39d.mjs";
3
- import { g as WebGPUAudioProcessor } from "./dist-D12-a3-x.mjs";
1
+ import { xn as resolveNumber } from "./dist-Bf2_efYP.mjs";
2
+ import { i as isHandleConnected, n as defineRenderer } from "./renderer-DcvjSolU.mjs";
3
+ import { g as WebGPUAudioProcessor } from "./dist-CWLLnigL.mjs";
4
4
 
5
5
  //#region ../../nodes/node-audio-noise-gate/dist/renderers-AuTJmGew.mjs
6
6
  const PARAM_ORDER = [
@@ -279,4 +279,4 @@ var renderers_default = defineRenderer({ audioProcessor: noiseGateAudioProcessor
279
279
 
280
280
  //#endregion
281
281
  export { renderers_default as t };
282
- //# sourceMappingURL=renderer-Dat8opUZ.mjs.map
282
+ //# sourceMappingURL=renderer-o68mVeyk.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-Dat8opUZ.mjs","names":[],"sources":["../../../nodes/node-audio-noise-gate/dist/renderers-AuTJmGew.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\n\t\"threshold\",\n\t\"attack\",\n\t\"hold\",\n\t\"release\",\n\t\"range\"\n];\nconst NOISE_GATE_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n threshold : f32,\n attack : f32,\n hold : f32,\n release : f32,\n closedGain : f32,\n windowLength : f32,\n hasThresholdSig : f32,\n hasAttackSig : f32,\n hasHoldSig : f32,\n hasReleaseSig : f32,\n hasRangeSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : 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> thresholdSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> attackSignal : array<f32>;\n@group(0) @binding(6) var<storage, read> holdSignal : array<f32>;\n@group(0) @binding(7) var<storage, read> releaseSignal : array<f32>;\n@group(0) @binding(8) var<storage, read> rangeSignal : array<f32>;\n\nfn log10(x: f32) -> f32 {\n return log(x) * 0.4342944819032518f;\n}\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\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 let windowLength = u32(u.windowLength);\n\n var gateState = u32(state[0]); // 0=CLOSED, 1=ATTACK, 2=OPEN, 3=HOLD, 4=RELEASE\n if (is_nan_or_inf(state[0])) { gateState = 0u; }\n\n var currentGain = state[1];\n if (is_nan_or_inf(currentGain)) { currentGain = 0.0f; }\n\n var gainAtTransition = state[2];\n if (is_nan_or_inf(gainAtTransition)) { gainAtTransition = 0.0f; }\n\n var attackSamplesLeft = i32(state[3]);\n var holdSamplesLeft = i32(state[4]);\n var releaseSamplesLeft = i32(state[5]);\n var writeIndex = u32(state[6]);\n var sumSquares = state[7];\n if (is_nan_or_inf(sumSquares)) { sumSquares = 0.0f; }\n\n let sampleRate = u.sampleRate;\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // 1. Dynamic Parameter Modulation & Anti-Explosion Clamping\n var effThreshold = u.threshold;\n if (u.hasThresholdSig > 0.5f) {\n effThreshold = thresholdSignal[index];\n }\n effThreshold = clamp(effThreshold, -120.0f, 0.0f);\n\n var effAttack = u.attack;\n if (u.hasAttackSig > 0.5f) {\n effAttack = attackSignal[index];\n }\n effAttack = clamp(effAttack, 0.0001f, 5.0f);\n\n var effHold = u.hold;\n if (u.hasHoldSig > 0.5f) {\n effHold = holdSignal[index];\n }\n effHold = clamp(effHold, 0.001f, 10.0f);\n\n var effRelease = u.release;\n if (u.hasReleaseSig > 0.5f) {\n effRelease = releaseSignal[index];\n }\n effRelease = clamp(effRelease, 0.01f, 10.0f);\n\n var effRange = u.closedGain;\n if (u.hasRangeSig > 0.5f) {\n let rDb = clamp(rangeSignal[index], -120.0f, 0.0f);\n effRange = select(0.0f, pow(10.0f, rDb / 20.0f), rDb > -96.0f);\n }\n effRange = clamp(effRange, 0.0f, 1.0f);\n\n // 2. Peak & RMS Window Calculation\n var peak = 0.0f;\n for (var c = 0u; c < numChannels; c = c + 1u) {\n var val = abs(inputChannels[c * numSamples + index]);\n if (is_nan_or_inf(val)) { val = 0.0f; }\n if (val > peak) {\n peak = val;\n }\n }\n\n let inputPowerSq = peak * peak;\n let oldestSq = state[8u + writeIndex];\n state[8u + writeIndex] = inputPowerSq;\n sumSquares = max(0.0f, sumSquares - oldestSq + inputPowerSq);\n writeIndex = (writeIndex + 1u) % windowLength;\n\n if (writeIndex == 0u) {\n var sum = 0.0f;\n for (var j = 0u; j < windowLength; j = j + 1u) {\n sum = sum + state[8u + j];\n }\n sumSquares = sum;\n }\n\n let rms = sqrt(sumSquares / f32(windowLength));\n let db = 20.0f * log10(max(rms, 1e-9f));\n\n let signalAboveThreshold = db >= effThreshold;\n\n if (signalAboveThreshold) {\n if (gateState == 0u || gateState == 4u) {\n gateState = 1u; // ATTACK\n gainAtTransition = currentGain;\n var samples = i32(round(effAttack * sampleRate));\n if (samples <= 0) { samples = 1; }\n attackSamplesLeft = samples;\n } else if (gateState == 3u) {\n gateState = 2u; // OPEN\n currentGain = 1.0f;\n }\n } else {\n if (gateState == 2u || gateState == 1u) {\n gateState = 3u; // HOLD\n var samples = i32(round(effHold * sampleRate));\n if (samples <= 0) { samples = 1; }\n holdSamplesLeft = samples;\n }\n }\n\n if (gateState == 0u) {\n currentGain = effRange;\n } else if (gateState == 2u) {\n currentGain = 1.0f;\n } else if (gateState == 1u) {\n var totalAttackSamples = i32(round(effAttack * sampleRate));\n if (totalAttackSamples <= 0) { totalAttackSamples = 1; }\n let progress = 1.0f - f32(attackSamplesLeft) / f32(totalAttackSamples);\n currentGain = gainAtTransition + progress * (1.0f - gainAtTransition);\n\n attackSamplesLeft = attackSamplesLeft - 1;\n if (attackSamplesLeft <= 0) {\n gateState = 2u;\n currentGain = 1.0f;\n }\n } else if (gateState == 3u) {\n currentGain = 1.0f;\n holdSamplesLeft = holdSamplesLeft - 1;\n if (holdSamplesLeft <= 0) {\n gateState = 4u; // RELEASE\n gainAtTransition = 1.0f;\n var samples = i32(round(effRelease * sampleRate));\n if (samples <= 0) { samples = 1; }\n releaseSamplesLeft = samples;\n }\n } else if (gateState == 4u) {\n var totalReleaseSamples = i32(round(effRelease * sampleRate));\n if (totalReleaseSamples <= 0) { totalReleaseSamples = 1; }\n let progress = 1.0f - f32(releaseSamplesLeft) / f32(totalReleaseSamples);\n currentGain = gainAtTransition + progress * (effRange - gainAtTransition);\n\n releaseSamplesLeft = releaseSamplesLeft - 1;\n if (releaseSamplesLeft <= 0) {\n gateState = 0u;\n currentGain = effRange;\n }\n }\n\n currentGain = clamp(currentGain, 0.0f, 1.0f);\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let sampleIndex = c * numSamples + index;\n var inVal = inputChannels[sampleIndex];\n if (is_nan_or_inf(inVal)) { inVal = 0.0f; }\n\n var outVal = inVal * currentGain;\n if (is_nan_or_inf(outVal)) { outVal = 0.0f; }\n\n if (outVal > 1.0f) {\n outVal = 1.0f;\n } else if (outVal < -1.0f) {\n outVal = -1.0f;\n } else if (outVal > 0.9f) {\n outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f);\n } else if (outVal < -0.9f) {\n outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f);\n }\n\n outputChannels[sampleIndex] = outVal;\n }\n }\n\n state[0] = f32(gateState);\n state[1] = currentGain;\n state[2] = gainAtTransition;\n state[3] = f32(attackSamplesLeft);\n state[4] = f32(holdSamplesLeft);\n state[5] = f32(releaseSamplesLeft);\n state[6] = f32(writeIndex);\n state[7] = sumSquares;\n}\n`;\nconst noiseGateAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Noise Gate.\");\n\tconst op = virtualMedia.operation || {};\n\tconst threshold = resolveNumber(op.threshold, -40);\n\tconst attack = resolveNumber(op.attack, .005);\n\tconst hold = resolveNumber(op.hold, .05);\n\tconst release = resolveNumber(op.release, .1);\n\tconst range = resolveNumber(op.range, -80);\n\tconst closedGain = range <= -96 ? 0 : 10 ** (range / 20);\n\tconst hasThresholdSig = isHandleConnected(op, \"thresholdHandleId\") ? 1 : 0;\n\tconst hasAttackSig = isHandleConnected(op, \"attackHandleId\") ? 1 : 0;\n\tconst hasHoldSig = isHandleConnected(op, \"holdHandleId\") ? 1 : 0;\n\tconst hasReleaseSig = isHandleConnected(op, \"releaseHandleId\") ? 1 : 0;\n\tconst hasRangeSig = isHandleConnected(op, \"rangeHandleId\") ? 1 : 0;\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst windowLength = Math.max(1, Math.round(.01 * sampleRate));\n\tconst nodeId = op.id || \"audio-noise-gate\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst stateFloatCount = 8 + windowLength;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, NOISE_GATE_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\tthreshold,\n\t\tattack,\n\t\thold,\n\t\trelease,\n\t\tclosedGain,\n\t\twindowLength,\n\t\thasThresholdSig,\n\t\thasAttackSig,\n\t\thasHoldSig,\n\t\thasReleaseSig,\n\t\thasRangeSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels\n\t], 16, stateFloatCount, 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: noiseGateAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-AuTJmGew.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc;CACnB;CACA;CACA;CACA;CACA;CACA;AACD,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+NzC,MAAM,0BAA0B,OAAO,UAAU,YAAY,cAAc,QAAQ;AAClF,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,+CAA+C;CACjF,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,YAAY,cAAc,GAAG,WAAW,IAAI;CAClD,MAAM,SAAS,cAAc,GAAG,QAAQ,KAAK;CAC7C,MAAM,OAAO,cAAc,GAAG,MAAM,IAAI;CACxC,MAAM,UAAU,cAAc,GAAG,SAAS,GAAG;CAC7C,MAAM,QAAQ,cAAc,GAAG,OAAO,IAAI;CAC1C,MAAM,aAAa,SAAS,MAAM,IAAI,OAAO,QAAQ;CACrD,MAAM,kBAAkB,kBAAkB,IAAI,oBAAoB,GAAG,IAAI;CACzE,MAAM,eAAe,kBAAkB,IAAI,iBAAiB,GAAG,IAAI;CACnE,MAAM,aAAa,kBAAkB,IAAI,eAAe,GAAG,IAAI;CAC/D,MAAM,gBAAgB,kBAAkB,IAAI,kBAAkB,GAAG,IAAI;CACrE,MAAM,cAAc,kBAAkB,IAAI,gBAAgB,GAAG,IAAI;CACjE,MAAM,cAAc,SAAS;AAC7B,KAAI,gBAAgB,EAAG;CACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;CACtB,MAAM,eAAe,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,WAAW,CAAC;CAC9D,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;CACvB,MAAM,kBAAkB,IAAI;AAC5B,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,kCAAkC;EACxI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,iBAAiB,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK3G,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,yBAAyB,CAAC"}
1
+ {"version":3,"file":"renderer-o68mVeyk.mjs","names":[],"sources":["../../../nodes/node-audio-noise-gate/dist/renderers-AuTJmGew.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\n\t\"threshold\",\n\t\"attack\",\n\t\"hold\",\n\t\"release\",\n\t\"range\"\n];\nconst NOISE_GATE_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n threshold : f32,\n attack : f32,\n hold : f32,\n release : f32,\n closedGain : f32,\n windowLength : f32,\n hasThresholdSig : f32,\n hasAttackSig : f32,\n hasHoldSig : f32,\n hasReleaseSig : f32,\n hasRangeSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : 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> thresholdSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> attackSignal : array<f32>;\n@group(0) @binding(6) var<storage, read> holdSignal : array<f32>;\n@group(0) @binding(7) var<storage, read> releaseSignal : array<f32>;\n@group(0) @binding(8) var<storage, read> rangeSignal : array<f32>;\n\nfn log10(x: f32) -> f32 {\n return log(x) * 0.4342944819032518f;\n}\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\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 let windowLength = u32(u.windowLength);\n\n var gateState = u32(state[0]); // 0=CLOSED, 1=ATTACK, 2=OPEN, 3=HOLD, 4=RELEASE\n if (is_nan_or_inf(state[0])) { gateState = 0u; }\n\n var currentGain = state[1];\n if (is_nan_or_inf(currentGain)) { currentGain = 0.0f; }\n\n var gainAtTransition = state[2];\n if (is_nan_or_inf(gainAtTransition)) { gainAtTransition = 0.0f; }\n\n var attackSamplesLeft = i32(state[3]);\n var holdSamplesLeft = i32(state[4]);\n var releaseSamplesLeft = i32(state[5]);\n var writeIndex = u32(state[6]);\n var sumSquares = state[7];\n if (is_nan_or_inf(sumSquares)) { sumSquares = 0.0f; }\n\n let sampleRate = u.sampleRate;\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // 1. Dynamic Parameter Modulation & Anti-Explosion Clamping\n var effThreshold = u.threshold;\n if (u.hasThresholdSig > 0.5f) {\n effThreshold = thresholdSignal[index];\n }\n effThreshold = clamp(effThreshold, -120.0f, 0.0f);\n\n var effAttack = u.attack;\n if (u.hasAttackSig > 0.5f) {\n effAttack = attackSignal[index];\n }\n effAttack = clamp(effAttack, 0.0001f, 5.0f);\n\n var effHold = u.hold;\n if (u.hasHoldSig > 0.5f) {\n effHold = holdSignal[index];\n }\n effHold = clamp(effHold, 0.001f, 10.0f);\n\n var effRelease = u.release;\n if (u.hasReleaseSig > 0.5f) {\n effRelease = releaseSignal[index];\n }\n effRelease = clamp(effRelease, 0.01f, 10.0f);\n\n var effRange = u.closedGain;\n if (u.hasRangeSig > 0.5f) {\n let rDb = clamp(rangeSignal[index], -120.0f, 0.0f);\n effRange = select(0.0f, pow(10.0f, rDb / 20.0f), rDb > -96.0f);\n }\n effRange = clamp(effRange, 0.0f, 1.0f);\n\n // 2. Peak & RMS Window Calculation\n var peak = 0.0f;\n for (var c = 0u; c < numChannels; c = c + 1u) {\n var val = abs(inputChannels[c * numSamples + index]);\n if (is_nan_or_inf(val)) { val = 0.0f; }\n if (val > peak) {\n peak = val;\n }\n }\n\n let inputPowerSq = peak * peak;\n let oldestSq = state[8u + writeIndex];\n state[8u + writeIndex] = inputPowerSq;\n sumSquares = max(0.0f, sumSquares - oldestSq + inputPowerSq);\n writeIndex = (writeIndex + 1u) % windowLength;\n\n if (writeIndex == 0u) {\n var sum = 0.0f;\n for (var j = 0u; j < windowLength; j = j + 1u) {\n sum = sum + state[8u + j];\n }\n sumSquares = sum;\n }\n\n let rms = sqrt(sumSquares / f32(windowLength));\n let db = 20.0f * log10(max(rms, 1e-9f));\n\n let signalAboveThreshold = db >= effThreshold;\n\n if (signalAboveThreshold) {\n if (gateState == 0u || gateState == 4u) {\n gateState = 1u; // ATTACK\n gainAtTransition = currentGain;\n var samples = i32(round(effAttack * sampleRate));\n if (samples <= 0) { samples = 1; }\n attackSamplesLeft = samples;\n } else if (gateState == 3u) {\n gateState = 2u; // OPEN\n currentGain = 1.0f;\n }\n } else {\n if (gateState == 2u || gateState == 1u) {\n gateState = 3u; // HOLD\n var samples = i32(round(effHold * sampleRate));\n if (samples <= 0) { samples = 1; }\n holdSamplesLeft = samples;\n }\n }\n\n if (gateState == 0u) {\n currentGain = effRange;\n } else if (gateState == 2u) {\n currentGain = 1.0f;\n } else if (gateState == 1u) {\n var totalAttackSamples = i32(round(effAttack * sampleRate));\n if (totalAttackSamples <= 0) { totalAttackSamples = 1; }\n let progress = 1.0f - f32(attackSamplesLeft) / f32(totalAttackSamples);\n currentGain = gainAtTransition + progress * (1.0f - gainAtTransition);\n\n attackSamplesLeft = attackSamplesLeft - 1;\n if (attackSamplesLeft <= 0) {\n gateState = 2u;\n currentGain = 1.0f;\n }\n } else if (gateState == 3u) {\n currentGain = 1.0f;\n holdSamplesLeft = holdSamplesLeft - 1;\n if (holdSamplesLeft <= 0) {\n gateState = 4u; // RELEASE\n gainAtTransition = 1.0f;\n var samples = i32(round(effRelease * sampleRate));\n if (samples <= 0) { samples = 1; }\n releaseSamplesLeft = samples;\n }\n } else if (gateState == 4u) {\n var totalReleaseSamples = i32(round(effRelease * sampleRate));\n if (totalReleaseSamples <= 0) { totalReleaseSamples = 1; }\n let progress = 1.0f - f32(releaseSamplesLeft) / f32(totalReleaseSamples);\n currentGain = gainAtTransition + progress * (effRange - gainAtTransition);\n\n releaseSamplesLeft = releaseSamplesLeft - 1;\n if (releaseSamplesLeft <= 0) {\n gateState = 0u;\n currentGain = effRange;\n }\n }\n\n currentGain = clamp(currentGain, 0.0f, 1.0f);\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let sampleIndex = c * numSamples + index;\n var inVal = inputChannels[sampleIndex];\n if (is_nan_or_inf(inVal)) { inVal = 0.0f; }\n\n var outVal = inVal * currentGain;\n if (is_nan_or_inf(outVal)) { outVal = 0.0f; }\n\n if (outVal > 1.0f) {\n outVal = 1.0f;\n } else if (outVal < -1.0f) {\n outVal = -1.0f;\n } else if (outVal > 0.9f) {\n outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f);\n } else if (outVal < -0.9f) {\n outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f);\n }\n\n outputChannels[sampleIndex] = outVal;\n }\n }\n\n state[0] = f32(gateState);\n state[1] = currentGain;\n state[2] = gainAtTransition;\n state[3] = f32(attackSamplesLeft);\n state[4] = f32(holdSamplesLeft);\n state[5] = f32(releaseSamplesLeft);\n state[6] = f32(writeIndex);\n state[7] = sumSquares;\n}\n`;\nconst noiseGateAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Noise Gate.\");\n\tconst op = virtualMedia.operation || {};\n\tconst threshold = resolveNumber(op.threshold, -40);\n\tconst attack = resolveNumber(op.attack, .005);\n\tconst hold = resolveNumber(op.hold, .05);\n\tconst release = resolveNumber(op.release, .1);\n\tconst range = resolveNumber(op.range, -80);\n\tconst closedGain = range <= -96 ? 0 : 10 ** (range / 20);\n\tconst hasThresholdSig = isHandleConnected(op, \"thresholdHandleId\") ? 1 : 0;\n\tconst hasAttackSig = isHandleConnected(op, \"attackHandleId\") ? 1 : 0;\n\tconst hasHoldSig = isHandleConnected(op, \"holdHandleId\") ? 1 : 0;\n\tconst hasReleaseSig = isHandleConnected(op, \"releaseHandleId\") ? 1 : 0;\n\tconst hasRangeSig = isHandleConnected(op, \"rangeHandleId\") ? 1 : 0;\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst windowLength = Math.max(1, Math.round(.01 * sampleRate));\n\tconst nodeId = op.id || \"audio-noise-gate\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst stateFloatCount = 8 + windowLength;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, NOISE_GATE_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\tthreshold,\n\t\tattack,\n\t\thold,\n\t\trelease,\n\t\tclosedGain,\n\t\twindowLength,\n\t\thasThresholdSig,\n\t\thasAttackSig,\n\t\thasHoldSig,\n\t\thasReleaseSig,\n\t\thasRangeSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels\n\t], 16, stateFloatCount, 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: noiseGateAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-AuTJmGew.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc;CACnB;CACA;CACA;CACA;CACA;CACA;AACD,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+NzC,MAAM,0BAA0B,OAAO,UAAU,YAAY,cAAc,QAAQ;AAClF,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,+CAA+C;CACjF,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,YAAY,cAAc,GAAG,WAAW,IAAI;CAClD,MAAM,SAAS,cAAc,GAAG,QAAQ,KAAK;CAC7C,MAAM,OAAO,cAAc,GAAG,MAAM,IAAI;CACxC,MAAM,UAAU,cAAc,GAAG,SAAS,GAAG;CAC7C,MAAM,QAAQ,cAAc,GAAG,OAAO,IAAI;CAC1C,MAAM,aAAa,SAAS,MAAM,IAAI,OAAO,QAAQ;CACrD,MAAM,kBAAkB,kBAAkB,IAAI,oBAAoB,GAAG,IAAI;CACzE,MAAM,eAAe,kBAAkB,IAAI,iBAAiB,GAAG,IAAI;CACnE,MAAM,aAAa,kBAAkB,IAAI,eAAe,GAAG,IAAI;CAC/D,MAAM,gBAAgB,kBAAkB,IAAI,kBAAkB,GAAG,IAAI;CACrE,MAAM,cAAc,kBAAkB,IAAI,gBAAgB,GAAG,IAAI;CACjE,MAAM,cAAc,SAAS;AAC7B,KAAI,gBAAgB,EAAG;CACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;CACtB,MAAM,eAAe,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,WAAW,CAAC;CAC9D,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;CACvB,MAAM,kBAAkB,IAAI;AAC5B,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,kCAAkC;EACxI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,iBAAiB,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK3G,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,yBAAyB,CAAC"}
@@ -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 { o as drawChildToTexture } 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 { o as drawChildToTexture } from "./gpu-CpkJJLQP.mjs";
5
5
 
6
6
  //#region ../../nodes/node-extract-frame/dist/renderers-ByS_lnbu.mjs
7
7
  /**
@@ -58,4 +58,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ExtractFrameWebGPURende
58
58
 
59
59
  //#endregion
60
60
  export { renderers_default as default };
61
- //# sourceMappingURL=renderer-Dss7T71q.mjs.map
61
+ //# sourceMappingURL=renderer-pNmI-A9o.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-Dss7T71q.mjs","names":[],"sources":["../../../nodes/node-extract-frame/dist/renderers-ByS_lnbu.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { drawChildToTexture } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\n/**\n* WebGPU renderer for the ExtractFrame operation.\n*\n* Renders the child media (Video/Lottie/GIF) at a specific frame number,\n* producing a static image output. The frame number is stored in the operation\n* and the child is rendered at the corresponding timestamp.\n*/\nconst ExtractFrameWebGPURenderer = async (args) => {\n\tconst { ctx, props, targetView, targetWidth, targetHeight, encoder } = args;\n\tconst { virtualMedia, opacity = 1 } = props;\n\tconst op = virtualMedia?.operation;\n\tif (!op || op.op !== \"ExtractFrame\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst frame = op.frame ?? 0;\n\tconst childMeta = childMedia.metadata;\n\tconst childFps = childMeta?.fps ?? 24;\n\tconst timestampSec = frame / childFps;\n\targs.pass.end();\n\tconst sourceWidth = childMeta?.width ?? props.containerWidth ?? targetWidth;\n\tconst sourceHeight = childMeta?.height ?? props.containerHeight ?? targetHeight;\n\tconst containerWidth = props.containerWidth ?? ctx.surface.width;\n\tconst containerHeight = props.containerHeight ?? ctx.surface.height;\n\tconst { texture: childTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight,\n\t\t\tframe,\n\t\t\tfps: childFps,\n\t\t\ttimestampSec,\n\t\t\tforceWait: true\n\t\t}\n\t});\n\tconst outPass = 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(outPass, childTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerWidth,\n\t\theight: containerHeight\n\t}, { opacity });\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ExtractFrameWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-ByS_lnbu.mjs.map"],"mappings":";;;;;;;;;;;;;AAWA,MAAM,6BAA6B,OAAO,SAAS;CAClD,MAAM,EAAE,KAAK,OAAO,YAAY,aAAa,cAAc,YAAY;CACvE,MAAM,EAAE,cAAc,UAAU,MAAM;CACtC,MAAM,KAAK,cAAc;AACzB,KAAI,CAAC,MAAM,GAAG,OAAO,eAAgB;CACrC,MAAM,aAAa,aAAa,WAAW;AAC3C,KAAI,CAAC,WAAY;CACjB,MAAM,QAAQ,GAAG,SAAS;CAC1B,MAAM,YAAY,WAAW;CAC7B,MAAM,WAAW,WAAW,OAAO;CACnC,MAAM,eAAe,QAAQ;AAC7B,MAAK,KAAK,KAAK;CACf,MAAM,cAAc,WAAW,SAAS,MAAM,kBAAkB;CAChE,MAAM,eAAe,WAAW,UAAU,MAAM,mBAAmB;CACnE,MAAM,iBAAiB,MAAM,kBAAkB,IAAI,QAAQ;CAC3D,MAAM,kBAAkB,MAAM,mBAAmB,IAAI,QAAQ;CAC7D,MAAM,EAAE,SAAS,aAAa,MAAM,mBAAmB,MAAM,YAAY;EACxE,OAAO;EACP,QAAQ;EACR,OAAO;GACN,GAAG;GACH,gBAAgB;GAChB,iBAAiB;GACjB;GACA,KAAK;GACL;GACA,WAAW;GACX;EACD,CAAC;CACF,MAAM,UAAU,IAAI,SAAS,WAAW,SAAS,YAAY;EAC5D,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,EAAE,aAAa,cAAc,OAAO;AACrC,KAAI,SAAS,YAAY,SAAS,UAAU;EAC3C,GAAG;EACH,GAAG;EACH,OAAO;EACP,QAAQ;EACR,EAAE,EAAE,SAAS,CAAC;AACf,MAAK,OAAO;;AAKb,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,4BAA4B,CAAC"}
1
+ {"version":3,"file":"renderer-pNmI-A9o.mjs","names":[],"sources":["../../../nodes/node-extract-frame/dist/renderers-ByS_lnbu.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { drawChildToTexture } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\n/**\n* WebGPU renderer for the ExtractFrame operation.\n*\n* Renders the child media (Video/Lottie/GIF) at a specific frame number,\n* producing a static image output. The frame number is stored in the operation\n* and the child is rendered at the corresponding timestamp.\n*/\nconst ExtractFrameWebGPURenderer = async (args) => {\n\tconst { ctx, props, targetView, targetWidth, targetHeight, encoder } = args;\n\tconst { virtualMedia, opacity = 1 } = props;\n\tconst op = virtualMedia?.operation;\n\tif (!op || op.op !== \"ExtractFrame\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst frame = op.frame ?? 0;\n\tconst childMeta = childMedia.metadata;\n\tconst childFps = childMeta?.fps ?? 24;\n\tconst timestampSec = frame / childFps;\n\targs.pass.end();\n\tconst sourceWidth = childMeta?.width ?? props.containerWidth ?? targetWidth;\n\tconst sourceHeight = childMeta?.height ?? props.containerHeight ?? targetHeight;\n\tconst containerWidth = props.containerWidth ?? ctx.surface.width;\n\tconst containerHeight = props.containerHeight ?? ctx.surface.height;\n\tconst { texture: childTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight,\n\t\t\tframe,\n\t\t\tfps: childFps,\n\t\t\ttimestampSec,\n\t\t\tforceWait: true\n\t\t}\n\t});\n\tconst outPass = 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(outPass, childTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerWidth,\n\t\theight: containerHeight\n\t}, { opacity });\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ExtractFrameWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-ByS_lnbu.mjs.map"],"mappings":";;;;;;;;;;;;;AAWA,MAAM,6BAA6B,OAAO,SAAS;CAClD,MAAM,EAAE,KAAK,OAAO,YAAY,aAAa,cAAc,YAAY;CACvE,MAAM,EAAE,cAAc,UAAU,MAAM;CACtC,MAAM,KAAK,cAAc;AACzB,KAAI,CAAC,MAAM,GAAG,OAAO,eAAgB;CACrC,MAAM,aAAa,aAAa,WAAW;AAC3C,KAAI,CAAC,WAAY;CACjB,MAAM,QAAQ,GAAG,SAAS;CAC1B,MAAM,YAAY,WAAW;CAC7B,MAAM,WAAW,WAAW,OAAO;CACnC,MAAM,eAAe,QAAQ;AAC7B,MAAK,KAAK,KAAK;CACf,MAAM,cAAc,WAAW,SAAS,MAAM,kBAAkB;CAChE,MAAM,eAAe,WAAW,UAAU,MAAM,mBAAmB;CACnE,MAAM,iBAAiB,MAAM,kBAAkB,IAAI,QAAQ;CAC3D,MAAM,kBAAkB,MAAM,mBAAmB,IAAI,QAAQ;CAC7D,MAAM,EAAE,SAAS,aAAa,MAAM,mBAAmB,MAAM,YAAY;EACxE,OAAO;EACP,QAAQ;EACR,OAAO;GACN,GAAG;GACH,gBAAgB;GAChB,iBAAiB;GACjB;GACA,KAAK;GACL;GACA,WAAW;GACX;EACD,CAAC;CACF,MAAM,UAAU,IAAI,SAAS,WAAW,SAAS,YAAY;EAC5D,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,EAAE,aAAa,cAAc,OAAO;AACrC,KAAI,SAAS,YAAY,SAAS,UAAU;EAC3C,GAAG;EACH,GAAG;EACH,OAAO;EACP,QAAQ;EACR,EAAE,EAAE,SAAS,CAAC;AACf,MAAK,OAAO;;AAKb,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,4BAA4B,CAAC"}
@@ -1,6 +1,6 @@
1
- import { xn as resolveNumber } from "./dist-ByxHoMQI.mjs";
2
- import { i as isHandleConnected, n as defineRenderer } from "./renderer-DrWeb39d.mjs";
3
- import { g as WebGPUAudioProcessor } from "./dist-D12-a3-x.mjs";
1
+ import { xn as resolveNumber } from "./dist-Bf2_efYP.mjs";
2
+ import { i as isHandleConnected, n as defineRenderer } from "./renderer-DcvjSolU.mjs";
3
+ import { g as WebGPUAudioProcessor } from "./dist-CWLLnigL.mjs";
4
4
 
5
5
  //#region ../../nodes/node-audio-compressor/dist/renderers-BorUA3F3.mjs
6
6
  const PARAM_ORDER = [
@@ -248,4 +248,4 @@ var renderers_default = defineRenderer({ audioProcessor: compressorAudioProcesso
248
248
 
249
249
  //#endregion
250
250
  export { renderers_default as t };
251
- //# sourceMappingURL=renderer-CbhnJi_8.mjs.map
251
+ //# sourceMappingURL=renderer-q7q6k_cD.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-CbhnJi_8.mjs","names":[],"sources":["../../../nodes/node-audio-compressor/dist/renderers-BorUA3F3.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\n\t\"threshold\",\n\t\"ratio\",\n\t\"attack\",\n\t\"release\",\n\t\"knee\",\n\t\"makeupGain\"\n];\nconst COMPRESSOR_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n threshold : f32,\n ratio : f32,\n attack : f32,\n release : f32,\n knee : f32,\n makeupGain : f32,\n hasThresholdSig : f32,\n hasRatioSig : f32,\n hasAttackSig : f32,\n hasReleaseSig : f32,\n hasKneeSig : f32,\n hasMakeupGainSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n pad2 : f32,\n pad3 : 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>; // state[0] = envelope\n@group(0) @binding(4) var<storage, read> thresholdSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> ratioSignal : array<f32>;\n@group(0) @binding(6) var<storage, read> attackSignal : array<f32>;\n@group(0) @binding(7) var<storage, read> releaseSignal : array<f32>;\n@group(0) @binding(8) var<storage, read> kneeSignal : array<f32>;\n@group(0) @binding(9) var<storage, read> makeupGainSignal : array<f32>;\n\nfn log10(x: f32) -> f32 {\n return log(x) * 0.4342944819032518f;\n}\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\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 var envelope = state[0];\n if (is_nan_or_inf(envelope)) {\n envelope = 0.0f;\n }\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // 1. Dynamic Parameter Modulation & Anti-Explosion Clamping\n var effThreshold = u.threshold;\n if (u.hasThresholdSig > 0.5f) {\n effThreshold = thresholdSignal[index];\n }\n effThreshold = clamp(effThreshold, -120.0f, 0.0f);\n\n var effRatio = u.ratio;\n if (u.hasRatioSig > 0.5f) {\n effRatio = ratioSignal[index];\n }\n effRatio = clamp(effRatio, 1.0f, 100.0f);\n\n var effAttack = u.attack;\n if (u.hasAttackSig > 0.5f) {\n effAttack = attackSignal[index];\n }\n effAttack = clamp(effAttack, 0.0001f, 10.0f);\n\n var effRelease = u.release;\n if (u.hasReleaseSig > 0.5f) {\n effRelease = releaseSignal[index];\n }\n effRelease = clamp(effRelease, 0.001f, 10.0f);\n\n var effKnee = u.knee;\n if (u.hasKneeSig > 0.5f) {\n effKnee = kneeSignal[index];\n }\n effKnee = clamp(effKnee, 0.0f, 40.0f);\n\n var effMakeupGain = u.makeupGain;\n if (u.hasMakeupGainSig > 0.5f) {\n effMakeupGain = makeupGainSignal[index];\n }\n effMakeupGain = clamp(effMakeupGain, -60.0f, 36.0f);\n\n // 2. Safe Attack / Release Coefficients\n let attackCoeff = clamp(1.0f - exp(-1.0f / (u.sampleRate * effAttack)), 0.00001f, 1.0f);\n let releaseCoeff = clamp(1.0f - exp(-1.0f / (u.sampleRate * effRelease)), 0.00001f, 1.0f);\n\n // 3. Peak Detection with NaN / Inf sanitization\n var peak = 0.0f;\n for (var c = 0u; c < numChannels; c = c + 1u) {\n var val = abs(inputChannels[c * numSamples + index]);\n if (is_nan_or_inf(val)) {\n val = 0.0f;\n }\n if (val > peak) {\n peak = val;\n }\n }\n \n // 4. Convert Peak to dBFS\n let dB = 20.0f * log10(max(peak, 1e-9f));\n\n // 5. Compute target reduction (soft-knee & ratio)\n var targetReductiondB = 0.0f;\n if (effKnee > 0.0f) {\n let x = dB - effThreshold;\n if (x <= -effKnee / 2.0f) {\n targetReductiondB = 0.0f;\n } else if (x >= effKnee / 2.0f) {\n targetReductiondB = (dB - effThreshold) * (1.0f - 1.0f / effRatio);\n } else {\n let kneeTerm = x + effKnee / 2.0f;\n targetReductiondB = ((kneeTerm * kneeTerm) / (2.0f * effKnee)) * (1.0f - 1.0f / effRatio);\n }\n } else {\n if (dB > effThreshold) {\n targetReductiondB = (dB - effThreshold) * (1.0f - 1.0f / effRatio);\n }\n }\n\n targetReductiondB = clamp(targetReductiondB, 0.0f, 120.0f);\n\n // 6. Envelope Smoothing\n let targetGaindB = -targetReductiondB;\n if (targetGaindB < envelope) {\n envelope += (targetGaindB - envelope) * attackCoeff;\n } else {\n envelope += (targetGaindB - envelope) * releaseCoeff;\n }\n\n if (is_nan_or_inf(envelope)) {\n envelope = 0.0f;\n }\n envelope = clamp(envelope, -120.0f, 0.0f);\n\n // 7. Apply linear gain and soft clipping\n let totalGaindB = clamp(envelope + effMakeupGain, -120.0f, 36.0f);\n let gainLinear = clamp(pow(10.0f, totalGaindB / 20.0f), 0.0f, 63.1f);\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let sampleIndex = c * numSamples + index;\n var inVal = inputChannels[sampleIndex];\n if (is_nan_or_inf(inVal)) {\n inVal = 0.0f;\n }\n\n var outVal = inVal * gainLinear;\n if (is_nan_or_inf(outVal)) {\n outVal = 0.0f;\n }\n \n // Soft clipping at ±1.0 with smooth tanh transition starting at ±0.9\n if (outVal > 1.0f) {\n outVal = 1.0f;\n } else if (outVal < -1.0f) {\n outVal = -1.0f;\n } else if (outVal > 0.9f) {\n outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f);\n } else if (outVal < -0.9f) {\n outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f);\n }\n \n outputChannels[sampleIndex] = outVal;\n }\n }\n\n if (is_nan_or_inf(envelope)) {\n state[0] = 0.0f;\n } else {\n state[0] = clamp(envelope, -120.0f, 0.0f);\n }\n}\n`;\nconst compressorAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Dynamics Compressor.\");\n\tconst op = virtualMedia.operation || {};\n\tconst threshold = resolveNumber(op.threshold, -24);\n\tconst ratio = resolveNumber(op.ratio, 4);\n\tconst attack = resolveNumber(op.attack, .003);\n\tconst release = resolveNumber(op.release, .25);\n\tconst knee = resolveNumber(op.knee, 6);\n\tconst makeupGain = resolveNumber(op.makeupGain, 0);\n\tconst hasThresholdSig = isHandleConnected(op, \"thresholdHandleId\") ? 1 : 0;\n\tconst hasRatioSig = isHandleConnected(op, \"ratioHandleId\") ? 1 : 0;\n\tconst hasAttackSig = isHandleConnected(op, \"attackHandleId\") ? 1 : 0;\n\tconst hasReleaseSig = isHandleConnected(op, \"releaseHandleId\") ? 1 : 0;\n\tconst hasKneeSig = isHandleConnected(op, \"kneeHandleId\") ? 1 : 0;\n\tconst hasMakeupGainSig = isHandleConnected(op, \"makeupGainHandleId\") ? 1 : 0;\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst nodeId = op.id || \"audio-compressor\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, COMPRESSOR_SHADER_TEMPLATE, (t) => [\n\t\tsampleRate,\n\t\tthreshold,\n\t\tratio,\n\t\tattack,\n\t\trelease,\n\t\tknee,\n\t\tmakeupGain,\n\t\thasThresholdSig,\n\t\thasRatioSig,\n\t\thasAttackSig,\n\t\thasReleaseSig,\n\t\thasKneeSig,\n\t\thasMakeupGainSig,\n\t\tt,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0,\n\t\t0,\n\t\t0\n\t], 20, 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: compressorAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BorUA3F3.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc;CACnB;CACA;CACA;CACA;CACA;CACA;CACA;AACD,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4LzC,MAAM,2BAA2B,OAAO,UAAU,YAAY,cAAc,QAAQ;AACnF,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,wDAAwD;CAC1F,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,YAAY,cAAc,GAAG,WAAW,IAAI;CAClD,MAAM,QAAQ,cAAc,GAAG,OAAO,EAAE;CACxC,MAAM,SAAS,cAAc,GAAG,QAAQ,KAAK;CAC7C,MAAM,UAAU,cAAc,GAAG,SAAS,IAAI;CAC9C,MAAM,OAAO,cAAc,GAAG,MAAM,EAAE;CACtC,MAAM,aAAa,cAAc,GAAG,YAAY,EAAE;CAClD,MAAM,kBAAkB,kBAAkB,IAAI,oBAAoB,GAAG,IAAI;CACzE,MAAM,cAAc,kBAAkB,IAAI,gBAAgB,GAAG,IAAI;CACjE,MAAM,eAAe,kBAAkB,IAAI,iBAAiB,GAAG,IAAI;CACnE,MAAM,gBAAgB,kBAAkB,IAAI,kBAAkB,GAAG,IAAI;CACrE,MAAM,aAAa,kBAAkB,IAAI,eAAe,GAAG,IAAI;CAC/D,MAAM,mBAAmB,kBAAkB,IAAI,qBAAqB,GAAG,IAAI;CAC3E,MAAM,cAAc,SAAS;AAC7B,KAAI,gBAAgB,EAAG;CACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;CACtB,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;AACvB,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,6BAA6B,MAAM;EACzI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK7F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,0BAA0B,CAAC"}
1
+ {"version":3,"file":"renderer-q7q6k_cD.mjs","names":[],"sources":["../../../nodes/node-audio-compressor/dist/renderers-BorUA3F3.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\n\t\"threshold\",\n\t\"ratio\",\n\t\"attack\",\n\t\"release\",\n\t\"knee\",\n\t\"makeupGain\"\n];\nconst COMPRESSOR_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n threshold : f32,\n ratio : f32,\n attack : f32,\n release : f32,\n knee : f32,\n makeupGain : f32,\n hasThresholdSig : f32,\n hasRatioSig : f32,\n hasAttackSig : f32,\n hasReleaseSig : f32,\n hasKneeSig : f32,\n hasMakeupGainSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n pad2 : f32,\n pad3 : 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>; // state[0] = envelope\n@group(0) @binding(4) var<storage, read> thresholdSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> ratioSignal : array<f32>;\n@group(0) @binding(6) var<storage, read> attackSignal : array<f32>;\n@group(0) @binding(7) var<storage, read> releaseSignal : array<f32>;\n@group(0) @binding(8) var<storage, read> kneeSignal : array<f32>;\n@group(0) @binding(9) var<storage, read> makeupGainSignal : array<f32>;\n\nfn log10(x: f32) -> f32 {\n return log(x) * 0.4342944819032518f;\n}\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\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 var envelope = state[0];\n if (is_nan_or_inf(envelope)) {\n envelope = 0.0f;\n }\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // 1. Dynamic Parameter Modulation & Anti-Explosion Clamping\n var effThreshold = u.threshold;\n if (u.hasThresholdSig > 0.5f) {\n effThreshold = thresholdSignal[index];\n }\n effThreshold = clamp(effThreshold, -120.0f, 0.0f);\n\n var effRatio = u.ratio;\n if (u.hasRatioSig > 0.5f) {\n effRatio = ratioSignal[index];\n }\n effRatio = clamp(effRatio, 1.0f, 100.0f);\n\n var effAttack = u.attack;\n if (u.hasAttackSig > 0.5f) {\n effAttack = attackSignal[index];\n }\n effAttack = clamp(effAttack, 0.0001f, 10.0f);\n\n var effRelease = u.release;\n if (u.hasReleaseSig > 0.5f) {\n effRelease = releaseSignal[index];\n }\n effRelease = clamp(effRelease, 0.001f, 10.0f);\n\n var effKnee = u.knee;\n if (u.hasKneeSig > 0.5f) {\n effKnee = kneeSignal[index];\n }\n effKnee = clamp(effKnee, 0.0f, 40.0f);\n\n var effMakeupGain = u.makeupGain;\n if (u.hasMakeupGainSig > 0.5f) {\n effMakeupGain = makeupGainSignal[index];\n }\n effMakeupGain = clamp(effMakeupGain, -60.0f, 36.0f);\n\n // 2. Safe Attack / Release Coefficients\n let attackCoeff = clamp(1.0f - exp(-1.0f / (u.sampleRate * effAttack)), 0.00001f, 1.0f);\n let releaseCoeff = clamp(1.0f - exp(-1.0f / (u.sampleRate * effRelease)), 0.00001f, 1.0f);\n\n // 3. Peak Detection with NaN / Inf sanitization\n var peak = 0.0f;\n for (var c = 0u; c < numChannels; c = c + 1u) {\n var val = abs(inputChannels[c * numSamples + index]);\n if (is_nan_or_inf(val)) {\n val = 0.0f;\n }\n if (val > peak) {\n peak = val;\n }\n }\n \n // 4. Convert Peak to dBFS\n let dB = 20.0f * log10(max(peak, 1e-9f));\n\n // 5. Compute target reduction (soft-knee & ratio)\n var targetReductiondB = 0.0f;\n if (effKnee > 0.0f) {\n let x = dB - effThreshold;\n if (x <= -effKnee / 2.0f) {\n targetReductiondB = 0.0f;\n } else if (x >= effKnee / 2.0f) {\n targetReductiondB = (dB - effThreshold) * (1.0f - 1.0f / effRatio);\n } else {\n let kneeTerm = x + effKnee / 2.0f;\n targetReductiondB = ((kneeTerm * kneeTerm) / (2.0f * effKnee)) * (1.0f - 1.0f / effRatio);\n }\n } else {\n if (dB > effThreshold) {\n targetReductiondB = (dB - effThreshold) * (1.0f - 1.0f / effRatio);\n }\n }\n\n targetReductiondB = clamp(targetReductiondB, 0.0f, 120.0f);\n\n // 6. Envelope Smoothing\n let targetGaindB = -targetReductiondB;\n if (targetGaindB < envelope) {\n envelope += (targetGaindB - envelope) * attackCoeff;\n } else {\n envelope += (targetGaindB - envelope) * releaseCoeff;\n }\n\n if (is_nan_or_inf(envelope)) {\n envelope = 0.0f;\n }\n envelope = clamp(envelope, -120.0f, 0.0f);\n\n // 7. Apply linear gain and soft clipping\n let totalGaindB = clamp(envelope + effMakeupGain, -120.0f, 36.0f);\n let gainLinear = clamp(pow(10.0f, totalGaindB / 20.0f), 0.0f, 63.1f);\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let sampleIndex = c * numSamples + index;\n var inVal = inputChannels[sampleIndex];\n if (is_nan_or_inf(inVal)) {\n inVal = 0.0f;\n }\n\n var outVal = inVal * gainLinear;\n if (is_nan_or_inf(outVal)) {\n outVal = 0.0f;\n }\n \n // Soft clipping at ±1.0 with smooth tanh transition starting at ±0.9\n if (outVal > 1.0f) {\n outVal = 1.0f;\n } else if (outVal < -1.0f) {\n outVal = -1.0f;\n } else if (outVal > 0.9f) {\n outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f);\n } else if (outVal < -0.9f) {\n outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f);\n }\n \n outputChannels[sampleIndex] = outVal;\n }\n }\n\n if (is_nan_or_inf(envelope)) {\n state[0] = 0.0f;\n } else {\n state[0] = clamp(envelope, -120.0f, 0.0f);\n }\n}\n`;\nconst compressorAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Dynamics Compressor.\");\n\tconst op = virtualMedia.operation || {};\n\tconst threshold = resolveNumber(op.threshold, -24);\n\tconst ratio = resolveNumber(op.ratio, 4);\n\tconst attack = resolveNumber(op.attack, .003);\n\tconst release = resolveNumber(op.release, .25);\n\tconst knee = resolveNumber(op.knee, 6);\n\tconst makeupGain = resolveNumber(op.makeupGain, 0);\n\tconst hasThresholdSig = isHandleConnected(op, \"thresholdHandleId\") ? 1 : 0;\n\tconst hasRatioSig = isHandleConnected(op, \"ratioHandleId\") ? 1 : 0;\n\tconst hasAttackSig = isHandleConnected(op, \"attackHandleId\") ? 1 : 0;\n\tconst hasReleaseSig = isHandleConnected(op, \"releaseHandleId\") ? 1 : 0;\n\tconst hasKneeSig = isHandleConnected(op, \"kneeHandleId\") ? 1 : 0;\n\tconst hasMakeupGainSig = isHandleConnected(op, \"makeupGainHandleId\") ? 1 : 0;\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst nodeId = op.id || \"audio-compressor\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, COMPRESSOR_SHADER_TEMPLATE, (t) => [\n\t\tsampleRate,\n\t\tthreshold,\n\t\tratio,\n\t\tattack,\n\t\trelease,\n\t\tknee,\n\t\tmakeupGain,\n\t\thasThresholdSig,\n\t\thasRatioSig,\n\t\thasAttackSig,\n\t\thasReleaseSig,\n\t\thasKneeSig,\n\t\thasMakeupGainSig,\n\t\tt,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0,\n\t\t0,\n\t\t0\n\t], 20, 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: compressorAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BorUA3F3.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc;CACnB;CACA;CACA;CACA;CACA;CACA;CACA;AACD,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4LzC,MAAM,2BAA2B,OAAO,UAAU,YAAY,cAAc,QAAQ;AACnF,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,wDAAwD;CAC1F,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,YAAY,cAAc,GAAG,WAAW,IAAI;CAClD,MAAM,QAAQ,cAAc,GAAG,OAAO,EAAE;CACxC,MAAM,SAAS,cAAc,GAAG,QAAQ,KAAK;CAC7C,MAAM,UAAU,cAAc,GAAG,SAAS,IAAI;CAC9C,MAAM,OAAO,cAAc,GAAG,MAAM,EAAE;CACtC,MAAM,aAAa,cAAc,GAAG,YAAY,EAAE;CAClD,MAAM,kBAAkB,kBAAkB,IAAI,oBAAoB,GAAG,IAAI;CACzE,MAAM,cAAc,kBAAkB,IAAI,gBAAgB,GAAG,IAAI;CACjE,MAAM,eAAe,kBAAkB,IAAI,iBAAiB,GAAG,IAAI;CACnE,MAAM,gBAAgB,kBAAkB,IAAI,kBAAkB,GAAG,IAAI;CACrE,MAAM,aAAa,kBAAkB,IAAI,eAAe,GAAG,IAAI;CAC/D,MAAM,mBAAmB,kBAAkB,IAAI,qBAAqB,GAAG,IAAI;CAC3E,MAAM,cAAc,SAAS;AAC7B,KAAI,gBAAgB,EAAG;CACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;CACtB,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;AACvB,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,6BAA6B,MAAM;EACzI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK7F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,0BAA0B,CAAC"}
@@ -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-rgb-split/dist/renderers-BrKktWQX.mjs
7
7
  const OP = "RGBSplit";
@@ -188,4 +188,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: RGBSplitWebGPURenderer
188
188
 
189
189
  //#endregion
190
190
  export { RGBSplitWebGPURenderer, renderers_default as default };
191
- //# sourceMappingURL=renderer-OsQRvOle.mjs.map
191
+ //# sourceMappingURL=renderer-riIFosX6.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-OsQRvOle.mjs","names":[],"sources":["../../../nodes/node-rgb-split/dist/renderers-BrKktWQX.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 = \"RGBSplit\";\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 amount = u.v[1].x;\n\tlet angle = u.v[1].y;\n\tlet radial = u.v[1].z;\n\n\tlet R = res();\n\tlet a = radians(angle);\n\tvar d = vec2<f32>(cos(a), sin(a)) * amount / R;\n\tif (radial > 0.5) { d = (in.uv - 0.5) * 2.0 * amount / R; }\n\tlet cr = sampleP(in.uv + d);\n\tlet cg = sampleP(in.uv);\n\tlet cb = sampleP(in.uv - d);\n\treturn vec4<f32>(cr.r, cg.g, cb.b, max(max(cr.a, cg.a), cb.a));\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.amount, 8);\n\tdata[5] = num(raw.angle, 0);\n\tdata[6] = raw.radial === void 0 ? 0 : raw.radial ? 1 : 0;\n}\nconst RGBSplitWebGPURenderer = 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: RGBSplitWebGPURenderer });\n\n//#endregion\nexport { RGBSplitWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BrKktWQX.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-riIFosX6.mjs","names":[],"sources":["../../../nodes/node-rgb-split/dist/renderers-BrKktWQX.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 = \"RGBSplit\";\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 amount = u.v[1].x;\n\tlet angle = u.v[1].y;\n\tlet radial = u.v[1].z;\n\n\tlet R = res();\n\tlet a = radians(angle);\n\tvar d = vec2<f32>(cos(a), sin(a)) * amount / R;\n\tif (radial > 0.5) { d = (in.uv - 0.5) * 2.0 * amount / R; }\n\tlet cr = sampleP(in.uv + d);\n\tlet cg = sampleP(in.uv);\n\tlet cb = sampleP(in.uv - d);\n\treturn vec4<f32>(cr.r, cg.g, cb.b, max(max(cr.a, cg.a), cb.a));\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.amount, 8);\n\tdata[5] = num(raw.angle, 0);\n\tdata[6] = raw.radial === void 0 ? 0 : raw.radial ? 1 : 0;\n}\nconst RGBSplitWebGPURenderer = 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: RGBSplitWebGPURenderer });\n\n//#endregion\nexport { RGBSplitWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BrKktWQX.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 } from "./dist-D12-a3-x.mjs";
3
- import { a as createFullscreenPipeline, c as drawTextureToTarget, 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 } from "./renderer-DcvjSolU.mjs";
2
+ import { zn as signalRegistry } from "./dist-CWLLnigL.mjs";
3
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, 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-colorkey/dist/renderers-eo_mW2uK.mjs
6
6
  const COLORKEY_SHADER = `
@@ -279,4 +279,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ColorKeyWebGPURenderer
279
279
 
280
280
  //#endregion
281
281
  export { renderers_default as t };
282
- //# sourceMappingURL=renderer-BMP_lYMk.mjs.map
282
+ //# sourceMappingURL=renderer-sfqZK6L5.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-BMP_lYMk.mjs","names":[],"sources":["../../../nodes/node-colorkey/dist/renderers-eo_mW2uK.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst COLORKEY_SHADER = `\nstruct ColorKeyUniforms {\n\tsimilarity : f32,\n\tsmoothness : f32,\n\tspillSuppression : f32,\n\tcolorSpace : f32, // 0 for YUV, 1 for RGB\n\tspillSuppressionType : f32, // 0 for Desaturate, 1 for Neutralize, 2 for None\n\tkeyR : f32,\n\tkeyG : f32,\n\tkeyB : f32,\n\thasSimilaritySig : f32,\n\thasSmoothnessSig : f32,\n\thasSpillSig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : ColorKeyUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var similaritySigTex : texture_2d<f32>;\n@group(2) @binding(1) var smoothnessSigTex : texture_2d<f32>;\n@group(2) @binding(2) var spillSigTex : texture_2d<f32>;\n@group(2) @binding(3) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn rgb2yuv(rgb: vec3<f32>) -> vec3<f32> {\n\tlet y = 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b;\n\tlet u = -0.169 * rgb.r - 0.331 * rgb.g + 0.500 * rgb.b;\n\tlet v = 0.500 * rgb.r - 0.419 * rgb.g - 0.081 * rgb.b;\n\treturn vec3<f32>(y, u, v);\n}\n\nfn yuv2rgb(yuv: vec3<f32>) -> vec3<f32> {\n\tlet r = yuv.x + 1.402 * yuv.z;\n\tlet g = yuv.x - 0.344 * yuv.y - 0.714 * yuv.z;\n\tlet b = yuv.x + 1.772 * yuv.y;\n\treturn vec3<f32>(r, g, b);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet src_color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (src_color.a < 1e-5) {\n\t\treturn src_color;\n\t}\n\n\t// Unpremultiply alpha for keying and grading\n\tlet unpremult_rgb = src_color.rgb / src_color.a;\n\n\t// Resolve dynamic signals if connected, otherwise use static uniform values\n\tvar similarity = u.similarity;\n\tif (u.hasSimilaritySig > 0.5) {\n\t\tsimilarity = textureSampleLevel(similaritySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tvar smoothness = u.smoothness;\n\tif (u.hasSmoothnessSig > 0.5) {\n\t\tsmoothness = textureSampleLevel(smoothnessSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tvar spillSuppression = u.spillSuppression;\n\tif (u.hasSpillSig > 0.5) {\n\t\tspillSuppression = textureSampleLevel(spillSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet keyColor = vec3<f32>(u.keyR, u.keyG, u.keyB);\n\n\t// 1. Calculate similarity distance\n\tvar dist = 0.0;\n\tif (u.colorSpace < 0.5) {\n\t\t// YUV (Chroma Distance)\n\t\tlet C_yuv = rgb2yuv(unpremult_rgb);\n\t\tlet K_yuv = rgb2yuv(keyColor);\n\t\tdist = distance(C_yuv.yz, K_yuv.yz);\n\t} else {\n\t\t// RGB (Exact Distance)\n\t\tdist = distance(unpremult_rgb, keyColor);\n\t}\n\n\t// 2. Calculate transparency mask\n\tvar mask = 0.0;\n\tif (smoothness < 0.0001) {\n\t\tmask = select(0.0, 1.0, dist >= similarity);\n\t} else {\n\t\tmask = smoothstep(similarity, similarity + smoothness, dist);\n\t}\n\n\t// 3. Apply spill suppression\n\tvar final_rgb = unpremult_rgb;\n\tif (u.spillSuppressionType < 2.5) { // 0 for Desaturate, 1 for Neutralize, 2 for None\n\t\tlet C_yuv = rgb2yuv(unpremult_rgb);\n\t\tlet K_yuv = rgb2yuv(keyColor);\n\t\tlet K_chroma = K_yuv.yz;\n\t\tlet K_len_sq = dot(K_chroma, K_chroma);\n\n\t\tif (K_len_sq > 1e-6) {\n\t\t\tlet C_chroma = C_yuv.yz;\n\t\t\tlet proj = dot(C_chroma, K_chroma) / K_len_sq;\n\t\t\tif (proj > 0.0) {\n\t\t\t\tlet C_para = proj * K_chroma;\n\t\t\t\tvar C_chroma_suppressed = C_chroma;\n\n\t\t\t\tif (u.spillSuppressionType < 0.5) {\n\t\t\t\t\t// Desaturate\n\t\t\t\t\tC_chroma_suppressed = C_chroma - spillSuppression * C_para;\n\t\t\t\t} else {\n\t\t\t\t\t// Neutralize (completely shift to neutral gray chroma)\n\t\t\t\t\tC_chroma_suppressed = C_chroma - C_para;\n\t\t\t\t}\n\n\t\t\t\tfinal_rgb = yuv2rgb(vec3<f32>(C_yuv.x, C_chroma_suppressed.x, C_chroma_suppressed.y));\n\t\t\t}\n\t\t}\n\t}\n\n\tlet final_alpha = src_color.a * mask;\n\treturn vec4<f32>(clamp(final_rgb, vec3<f32>(0.0), vec3<f32>(1.0)) * final_alpha, final_alpha);\n}\n`;\nconst colorKeyData = new Float32Array(12);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 3),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getColorKeyResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `colorkey_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst colorKeyModule = device.createShaderModule({\n\t\t\tlabel: `colorkey_${format}.wgsl`,\n\t\t\tcode: COLORKEY_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `ColorKeyPipeline_${format}`,\n\t\t\tmodule: colorKeyModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\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\tcolorKeyPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nfunction hexToRgb(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3) h = h.split(\"\").map((c) => c + c).join(\"\");\n\treturn [\n\t\tparseInt(h.substring(0, 2), 16) / 255,\n\t\tparseInt(h.substring(2, 4), 16) / 255,\n\t\tparseInt(h.substring(4, 6), 16) / 255\n\t];\n}\nconst ColorKeyWebGPURenderer = 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 !== \"ColorKey\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"colorkey_node\";\n\tconst similarityInput = op.similarityHandleId ? op.inputs?.[op.similarityHandleId] : null;\n\tconst hasSimilaritySig = !!(similarityInput?.connectionValid && (similarityInput.outputItem?.type === \"Signal\" || similarityInput.outputItem?.type === \"Numeric\"));\n\tconst similaritySd = hasSimilaritySig && similarityInput?.outputItem?.data ? similarityInput.outputItem.data : null;\n\tlet similarity = .4;\n\tlet hasStaticSimilaritySig = false;\n\tif (!hasSimilaritySig) if (similarityInput?.connectionValid && similarityInput.outputItem?.type === \"Number\") similarity = Math.max(0, Math.min(1, Number(similarityInput.outputItem.data ?? .4)));\n\telse similarity = Math.max(0, Math.min(1, Number(op.similarity ?? .4)));\n\telse if (similaritySd) {\n\t\tsimilarity = Math.max(0, Math.min(1, Number(similaritySd.offset ?? 0)));\n\t\thasStaticSimilaritySig = true;\n\t}\n\tconst smoothnessInput = op.smoothnessHandleId ? op.inputs?.[op.smoothnessHandleId] : null;\n\tconst hasSmoothnessSig = !!(smoothnessInput?.connectionValid && (smoothnessInput.outputItem?.type === \"Signal\" || smoothnessInput.outputItem?.type === \"Numeric\"));\n\tconst smoothnessSd = hasSmoothnessSig && smoothnessInput?.outputItem?.data ? smoothnessInput.outputItem.data : null;\n\tlet smoothness = .1;\n\tlet hasStaticSmoothnessSig = false;\n\tif (!hasSmoothnessSig) if (smoothnessInput?.connectionValid && smoothnessInput.outputItem?.type === \"Number\") smoothness = Math.max(0, Math.min(1, Number(smoothnessInput.outputItem.data ?? .1)));\n\telse smoothness = Math.max(0, Math.min(1, Number(op.smoothness ?? .1)));\n\telse if (smoothnessSd) {\n\t\tsmoothness = Math.max(0, Math.min(1, Number(smoothnessSd.offset ?? 0)));\n\t\thasStaticSmoothnessSig = true;\n\t}\n\tconst spillInput = op.spillSuppressionHandleId ? op.inputs?.[op.spillSuppressionHandleId] : null;\n\tconst hasSpillSig = !!(spillInput?.connectionValid && (spillInput.outputItem?.type === \"Signal\" || spillInput.outputItem?.type === \"Numeric\"));\n\tconst spillSd = hasSpillSig && spillInput?.outputItem?.data ? spillInput.outputItem.data : null;\n\tlet spillSuppression = .2;\n\tlet hasStaticSpillSig = false;\n\tif (!hasSpillSig) if (spillInput?.connectionValid && spillInput.outputItem?.type === \"Number\") spillSuppression = Math.max(0, Math.min(1, Number(spillInput.outputItem.data ?? .2)));\n\telse spillSuppression = Math.max(0, Math.min(1, Number(op.spillSuppression ?? .2)));\n\telse if (spillSd) {\n\t\tspillSuppression = Math.max(0, Math.min(1, Number(spillSd.offset ?? 0)));\n\t\thasStaticSpillSig = true;\n\t}\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { colorKeyPipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getColorKeyResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tlet similarityView;\n\tif (hasStaticSimilaritySig && similaritySd) similarityView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, similaritySd.nodeId ?? `${nodeId}_similarity_sig`, elapsedSeconds, durationSeconds, similaritySd, width, height, props.renderId, frame, fps);\n\telse similarityView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tlet smoothnessView;\n\tif (hasStaticSmoothnessSig && smoothnessSd) smoothnessView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, smoothnessSd.nodeId ?? `${nodeId}_smoothness_sig`, elapsedSeconds, durationSeconds, smoothnessSd, width, height, props.renderId, frame, fps);\n\telse smoothnessView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tlet spillView;\n\tif (hasStaticSpillSig && spillSd) spillView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, spillSd.nodeId ?? `${nodeId}_spill_sig`, elapsedSeconds, durationSeconds, spillSd, width, height, props.renderId, frame, fps);\n\telse spillView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tconst [keyR, keyG, keyB] = hexToRgb(op.keyColor ?? \"#00ff00\");\n\tcolorKeyData[0] = similarity;\n\tcolorKeyData[1] = smoothness;\n\tcolorKeyData[2] = spillSuppression;\n\tcolorKeyData[3] = op.colorSpace === \"RGB\" ? 1 : 0;\n\tcolorKeyData[4] = op.spillSuppressionType === \"None\" ? 2 : op.spillSuppressionType === \"Neutralize\" ? 1 : 0;\n\tcolorKeyData[5] = keyR;\n\tcolorKeyData[6] = keyG;\n\tcolorKeyData[7] = keyB;\n\tcolorKeyData[8] = hasStaticSimilaritySig ? 1 : 0;\n\tcolorKeyData[9] = hasStaticSmoothnessSig ? 1 : 0;\n\tcolorKeyData[10] = hasStaticSpillSig ? 1 : 0;\n\tcolorKeyData[11] = 0;\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst singleBuffer = ctx.renderer.getTemporaryBuffer(colorKeyData);\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: singleBuffer }\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: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: similarityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: smoothnessView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: spillView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\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: ColorKeyWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-eo_mW2uK.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-sfqZK6L5.mjs","names":[],"sources":["../../../nodes/node-colorkey/dist/renderers-eo_mW2uK.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst COLORKEY_SHADER = `\nstruct ColorKeyUniforms {\n\tsimilarity : f32,\n\tsmoothness : f32,\n\tspillSuppression : f32,\n\tcolorSpace : f32, // 0 for YUV, 1 for RGB\n\tspillSuppressionType : f32, // 0 for Desaturate, 1 for Neutralize, 2 for None\n\tkeyR : f32,\n\tkeyG : f32,\n\tkeyB : f32,\n\thasSimilaritySig : f32,\n\thasSmoothnessSig : f32,\n\thasSpillSig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : ColorKeyUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var similaritySigTex : texture_2d<f32>;\n@group(2) @binding(1) var smoothnessSigTex : texture_2d<f32>;\n@group(2) @binding(2) var spillSigTex : texture_2d<f32>;\n@group(2) @binding(3) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn rgb2yuv(rgb: vec3<f32>) -> vec3<f32> {\n\tlet y = 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b;\n\tlet u = -0.169 * rgb.r - 0.331 * rgb.g + 0.500 * rgb.b;\n\tlet v = 0.500 * rgb.r - 0.419 * rgb.g - 0.081 * rgb.b;\n\treturn vec3<f32>(y, u, v);\n}\n\nfn yuv2rgb(yuv: vec3<f32>) -> vec3<f32> {\n\tlet r = yuv.x + 1.402 * yuv.z;\n\tlet g = yuv.x - 0.344 * yuv.y - 0.714 * yuv.z;\n\tlet b = yuv.x + 1.772 * yuv.y;\n\treturn vec3<f32>(r, g, b);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet src_color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (src_color.a < 1e-5) {\n\t\treturn src_color;\n\t}\n\n\t// Unpremultiply alpha for keying and grading\n\tlet unpremult_rgb = src_color.rgb / src_color.a;\n\n\t// Resolve dynamic signals if connected, otherwise use static uniform values\n\tvar similarity = u.similarity;\n\tif (u.hasSimilaritySig > 0.5) {\n\t\tsimilarity = textureSampleLevel(similaritySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tvar smoothness = u.smoothness;\n\tif (u.hasSmoothnessSig > 0.5) {\n\t\tsmoothness = textureSampleLevel(smoothnessSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tvar spillSuppression = u.spillSuppression;\n\tif (u.hasSpillSig > 0.5) {\n\t\tspillSuppression = textureSampleLevel(spillSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet keyColor = vec3<f32>(u.keyR, u.keyG, u.keyB);\n\n\t// 1. Calculate similarity distance\n\tvar dist = 0.0;\n\tif (u.colorSpace < 0.5) {\n\t\t// YUV (Chroma Distance)\n\t\tlet C_yuv = rgb2yuv(unpremult_rgb);\n\t\tlet K_yuv = rgb2yuv(keyColor);\n\t\tdist = distance(C_yuv.yz, K_yuv.yz);\n\t} else {\n\t\t// RGB (Exact Distance)\n\t\tdist = distance(unpremult_rgb, keyColor);\n\t}\n\n\t// 2. Calculate transparency mask\n\tvar mask = 0.0;\n\tif (smoothness < 0.0001) {\n\t\tmask = select(0.0, 1.0, dist >= similarity);\n\t} else {\n\t\tmask = smoothstep(similarity, similarity + smoothness, dist);\n\t}\n\n\t// 3. Apply spill suppression\n\tvar final_rgb = unpremult_rgb;\n\tif (u.spillSuppressionType < 2.5) { // 0 for Desaturate, 1 for Neutralize, 2 for None\n\t\tlet C_yuv = rgb2yuv(unpremult_rgb);\n\t\tlet K_yuv = rgb2yuv(keyColor);\n\t\tlet K_chroma = K_yuv.yz;\n\t\tlet K_len_sq = dot(K_chroma, K_chroma);\n\n\t\tif (K_len_sq > 1e-6) {\n\t\t\tlet C_chroma = C_yuv.yz;\n\t\t\tlet proj = dot(C_chroma, K_chroma) / K_len_sq;\n\t\t\tif (proj > 0.0) {\n\t\t\t\tlet C_para = proj * K_chroma;\n\t\t\t\tvar C_chroma_suppressed = C_chroma;\n\n\t\t\t\tif (u.spillSuppressionType < 0.5) {\n\t\t\t\t\t// Desaturate\n\t\t\t\t\tC_chroma_suppressed = C_chroma - spillSuppression * C_para;\n\t\t\t\t} else {\n\t\t\t\t\t// Neutralize (completely shift to neutral gray chroma)\n\t\t\t\t\tC_chroma_suppressed = C_chroma - C_para;\n\t\t\t\t}\n\n\t\t\t\tfinal_rgb = yuv2rgb(vec3<f32>(C_yuv.x, C_chroma_suppressed.x, C_chroma_suppressed.y));\n\t\t\t}\n\t\t}\n\t}\n\n\tlet final_alpha = src_color.a * mask;\n\treturn vec4<f32>(clamp(final_rgb, vec3<f32>(0.0), vec3<f32>(1.0)) * final_alpha, final_alpha);\n}\n`;\nconst colorKeyData = new Float32Array(12);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 3),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getColorKeyResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `colorkey_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst colorKeyModule = device.createShaderModule({\n\t\t\tlabel: `colorkey_${format}.wgsl`,\n\t\t\tcode: COLORKEY_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `ColorKeyPipeline_${format}`,\n\t\t\tmodule: colorKeyModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\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\tcolorKeyPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nfunction hexToRgb(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3) h = h.split(\"\").map((c) => c + c).join(\"\");\n\treturn [\n\t\tparseInt(h.substring(0, 2), 16) / 255,\n\t\tparseInt(h.substring(2, 4), 16) / 255,\n\t\tparseInt(h.substring(4, 6), 16) / 255\n\t];\n}\nconst ColorKeyWebGPURenderer = 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 !== \"ColorKey\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"colorkey_node\";\n\tconst similarityInput = op.similarityHandleId ? op.inputs?.[op.similarityHandleId] : null;\n\tconst hasSimilaritySig = !!(similarityInput?.connectionValid && (similarityInput.outputItem?.type === \"Signal\" || similarityInput.outputItem?.type === \"Numeric\"));\n\tconst similaritySd = hasSimilaritySig && similarityInput?.outputItem?.data ? similarityInput.outputItem.data : null;\n\tlet similarity = .4;\n\tlet hasStaticSimilaritySig = false;\n\tif (!hasSimilaritySig) if (similarityInput?.connectionValid && similarityInput.outputItem?.type === \"Number\") similarity = Math.max(0, Math.min(1, Number(similarityInput.outputItem.data ?? .4)));\n\telse similarity = Math.max(0, Math.min(1, Number(op.similarity ?? .4)));\n\telse if (similaritySd) {\n\t\tsimilarity = Math.max(0, Math.min(1, Number(similaritySd.offset ?? 0)));\n\t\thasStaticSimilaritySig = true;\n\t}\n\tconst smoothnessInput = op.smoothnessHandleId ? op.inputs?.[op.smoothnessHandleId] : null;\n\tconst hasSmoothnessSig = !!(smoothnessInput?.connectionValid && (smoothnessInput.outputItem?.type === \"Signal\" || smoothnessInput.outputItem?.type === \"Numeric\"));\n\tconst smoothnessSd = hasSmoothnessSig && smoothnessInput?.outputItem?.data ? smoothnessInput.outputItem.data : null;\n\tlet smoothness = .1;\n\tlet hasStaticSmoothnessSig = false;\n\tif (!hasSmoothnessSig) if (smoothnessInput?.connectionValid && smoothnessInput.outputItem?.type === \"Number\") smoothness = Math.max(0, Math.min(1, Number(smoothnessInput.outputItem.data ?? .1)));\n\telse smoothness = Math.max(0, Math.min(1, Number(op.smoothness ?? .1)));\n\telse if (smoothnessSd) {\n\t\tsmoothness = Math.max(0, Math.min(1, Number(smoothnessSd.offset ?? 0)));\n\t\thasStaticSmoothnessSig = true;\n\t}\n\tconst spillInput = op.spillSuppressionHandleId ? op.inputs?.[op.spillSuppressionHandleId] : null;\n\tconst hasSpillSig = !!(spillInput?.connectionValid && (spillInput.outputItem?.type === \"Signal\" || spillInput.outputItem?.type === \"Numeric\"));\n\tconst spillSd = hasSpillSig && spillInput?.outputItem?.data ? spillInput.outputItem.data : null;\n\tlet spillSuppression = .2;\n\tlet hasStaticSpillSig = false;\n\tif (!hasSpillSig) if (spillInput?.connectionValid && spillInput.outputItem?.type === \"Number\") spillSuppression = Math.max(0, Math.min(1, Number(spillInput.outputItem.data ?? .2)));\n\telse spillSuppression = Math.max(0, Math.min(1, Number(op.spillSuppression ?? .2)));\n\telse if (spillSd) {\n\t\tspillSuppression = Math.max(0, Math.min(1, Number(spillSd.offset ?? 0)));\n\t\thasStaticSpillSig = true;\n\t}\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { colorKeyPipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getColorKeyResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tlet similarityView;\n\tif (hasStaticSimilaritySig && similaritySd) similarityView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, similaritySd.nodeId ?? `${nodeId}_similarity_sig`, elapsedSeconds, durationSeconds, similaritySd, width, height, props.renderId, frame, fps);\n\telse similarityView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tlet smoothnessView;\n\tif (hasStaticSmoothnessSig && smoothnessSd) smoothnessView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, smoothnessSd.nodeId ?? `${nodeId}_smoothness_sig`, elapsedSeconds, durationSeconds, smoothnessSd, width, height, props.renderId, frame, fps);\n\telse smoothnessView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tlet spillView;\n\tif (hasStaticSpillSig && spillSd) spillView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, spillSd.nodeId ?? `${nodeId}_spill_sig`, elapsedSeconds, durationSeconds, spillSd, width, height, props.renderId, frame, fps);\n\telse spillView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tconst [keyR, keyG, keyB] = hexToRgb(op.keyColor ?? \"#00ff00\");\n\tcolorKeyData[0] = similarity;\n\tcolorKeyData[1] = smoothness;\n\tcolorKeyData[2] = spillSuppression;\n\tcolorKeyData[3] = op.colorSpace === \"RGB\" ? 1 : 0;\n\tcolorKeyData[4] = op.spillSuppressionType === \"None\" ? 2 : op.spillSuppressionType === \"Neutralize\" ? 1 : 0;\n\tcolorKeyData[5] = keyR;\n\tcolorKeyData[6] = keyG;\n\tcolorKeyData[7] = keyB;\n\tcolorKeyData[8] = hasStaticSimilaritySig ? 1 : 0;\n\tcolorKeyData[9] = hasStaticSmoothnessSig ? 1 : 0;\n\tcolorKeyData[10] = hasStaticSpillSig ? 1 : 0;\n\tcolorKeyData[11] = 0;\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst singleBuffer = ctx.renderer.getTemporaryBuffer(colorKeyData);\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: singleBuffer }\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: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: similarityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: smoothnessView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: spillView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\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: ColorKeyWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-eo_mW2uK.mjs.map"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import "./chunk-D8S17ehY.mjs";
2
- import "./dist-D12-a3-x.mjs";
3
- import { n as renderers_default, t as GradientMapWebGPURenderer } from "./renderer-CyCtm0UV.mjs";
1
+ import "./chunk-W71TSjRM.mjs";
2
+ import "./dist-CWLLnigL.mjs";
3
+ import { n as renderers_default, t as GradientMapWebGPURenderer } from "./renderer-lHNTgiOM.mjs";
4
4
 
5
5
  export { GradientMapWebGPURenderer, renderers_default as default };
@@ -1,6 +1,6 @@
1
- import { Cn as resolveString, xn as resolveNumber } from "./dist-ByxHoMQI.mjs";
2
- import { n as defineRenderer } from "./renderer-DrWeb39d.mjs";
3
- import { Dt as AudioSignalComputePipeline, Rn as signalRegistry, it as shaderStore } from "./dist-D12-a3-x.mjs";
1
+ import { Cn as resolveString, xn as resolveNumber } from "./dist-Bf2_efYP.mjs";
2
+ import { n as defineRenderer } from "./renderer-DcvjSolU.mjs";
3
+ import { Ot as AudioSignalComputePipeline, it as shaderStore, zn as signalRegistry } from "./dist-CWLLnigL.mjs";
4
4
 
5
5
  //#region ../../nodes/node-audio-signal-extractor/dist/renderers-CP8CFWDs.mjs
6
6
  const audioSignalExtractorAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {
@@ -49,4 +49,4 @@ var renderers_default = defineRenderer({ audioProcessor: audioSignalExtractorAud
49
49
 
50
50
  //#endregion
51
51
  export { renderers_default as t };
52
- //# sourceMappingURL=renderers-CP8CFWDs-BH1gUTYa.mjs.map
52
+ //# sourceMappingURL=renderers-CP8CFWDs-DRoslK4F.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderers-CP8CFWDs-BH1gUTYa.mjs","names":[],"sources":["../../../nodes/node-audio-signal-extractor/dist/renderers-CP8CFWDs.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveNumber, resolveString } from \"@framefields/node-sdk\";\nimport { AudioSignalComputePipeline, shaderStore, signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst audioSignalExtractorAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) return;\n\tif (!channels || channels.length === 0 || channels[0].length === 0) return;\n\tconst op = virtualMedia.operation || {};\n\tconst nodeId = op.nodeId || op.id || \"audio-signal-extractor\";\n\tconst fps = ctx.fps ?? 24;\n\tconst mode = resolveString(op.extractionMode, \"\");\n\tconst curveStr = resolveString(op.curve, \"\");\n\tconst config = {\n\t\textractionMode: mode || void 0,\n\t\tattackMs: resolveNumber(op.attackMs, 10),\n\t\treleaseMs: resolveNumber(op.releaseMs, 120),\n\t\tsensitivity: resolveNumber(op.sensitivity, 1),\n\t\tnoiseFloorDb: resolveNumber(op.noiseFloorDb, -45),\n\t\tdynamicRangeDb: resolveNumber(op.dynamicRangeDb, 36),\n\t\tsmoothing: resolveNumber(op.smoothing, .15),\n\t\tcurve: curveStr || void 0,\n\t\tbeatThreshold: resolveNumber(op.beatThreshold, .55),\n\t\tbeatDecayMs: resolveNumber(op.beatDecayMs, 80)\n\t};\n\tconst signals = await AudioSignalComputePipeline.extractFeatures(ctx.device, channels, sampleRate, fps, config, 512);\n\tsignalRegistry.registerBuffer(ctx.device, nodeId, signals.primaryBuffer, ctx.renderId);\n\tsignalRegistry.registerBuffer(ctx.device, `${nodeId}_beat`, signals.beatBuffer, ctx.renderId);\n\tsignalRegistry.registerBuffer(ctx.device, `${nodeId}_bass`, signals.bassBuffer, ctx.renderId);\n\tsignalRegistry.registerBuffer(ctx.device, `${nodeId}_energy`, signals.energyBuffer, ctx.renderId);\n\tsignalRegistry.registerTexture(ctx.device, nodeId, signals.texture, signals.textureView, ctx.renderId);\n\tsignalRegistry.registerTexture(ctx.device, `${nodeId}_beat`, signals.texture, signals.textureView, ctx.renderId);\n\tsignalRegistry.registerTexture(ctx.device, `${nodeId}_bass`, signals.texture, signals.textureView, ctx.renderId);\n\tsignalRegistry.registerTexture(ctx.device, `${nodeId}_energy`, signals.texture, signals.textureView, ctx.renderId);\n\tconst fnName = `signal_${nodeId.replace(/[^a-zA-Z0-9]/g, \"_\")}`;\n\tconst wgsl = `\nfn ${fnName}(t: f32, x: f32, y: f32, z: f32, i: u32, n: u32, frame: u32, color: vec4f, t_elapsed: f32, duration: f32) -> f32 {\n return 0.0f;\n}\n`;\n\tshaderStore.register(nodeId, {\n\t\twgsl,\n\t\tname: fnName,\n\t\toutputType: \"f32\",\n\t\tfnParams: []\n\t}, ctx.renderId);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: audioSignalExtractorAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CP8CFWDs.mjs.map"],"mappings":";;;;;AAKA,MAAM,qCAAqC,OAAO,UAAU,YAAY,cAAc,QAAQ;AAC7F,KAAI,CAAC,KAAK,OAAQ;AAClB,KAAI,CAAC,YAAY,SAAS,WAAW,KAAK,SAAS,GAAG,WAAW,EAAG;CACpE,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM;CACrC,MAAM,MAAM,IAAI,OAAO;CACvB,MAAM,OAAO,cAAc,GAAG,gBAAgB,GAAG;CACjD,MAAM,WAAW,cAAc,GAAG,OAAO,GAAG;CAC5C,MAAM,SAAS;EACd,gBAAgB,QAAQ,KAAK;EAC7B,UAAU,cAAc,GAAG,UAAU,GAAG;EACxC,WAAW,cAAc,GAAG,WAAW,IAAI;EAC3C,aAAa,cAAc,GAAG,aAAa,EAAE;EAC7C,cAAc,cAAc,GAAG,cAAc,IAAI;EACjD,gBAAgB,cAAc,GAAG,gBAAgB,GAAG;EACpD,WAAW,cAAc,GAAG,WAAW,IAAI;EAC3C,OAAO,YAAY,KAAK;EACxB,eAAe,cAAc,GAAG,eAAe,IAAI;EACnD,aAAa,cAAc,GAAG,aAAa,GAAG;EAC9C;CACD,MAAM,UAAU,MAAM,2BAA2B,gBAAgB,IAAI,QAAQ,UAAU,YAAY,KAAK,QAAQ,IAAI;AACpH,gBAAe,eAAe,IAAI,QAAQ,QAAQ,QAAQ,eAAe,IAAI,SAAS;AACtF,gBAAe,eAAe,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,YAAY,IAAI,SAAS;AAC7F,gBAAe,eAAe,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,YAAY,IAAI,SAAS;AAC7F,gBAAe,eAAe,IAAI,QAAQ,GAAG,OAAO,UAAU,QAAQ,cAAc,IAAI,SAAS;AACjG,gBAAe,gBAAgB,IAAI,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,aAAa,IAAI,SAAS;AACtG,gBAAe,gBAAgB,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,SAAS,QAAQ,aAAa,IAAI,SAAS;AAChH,gBAAe,gBAAgB,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,SAAS,QAAQ,aAAa,IAAI,SAAS;AAChH,gBAAe,gBAAgB,IAAI,QAAQ,GAAG,OAAO,UAAU,QAAQ,SAAS,QAAQ,aAAa,IAAI,SAAS;CAClH,MAAM,SAAS,UAAU,OAAO,QAAQ,iBAAiB,IAAI;CAC7D,MAAM,OAAO;KACT,OAAO;;;;AAIX,aAAY,SAAS,QAAQ;EAC5B;EACA,MAAM;EACN,YAAY;EACZ,UAAU,EAAE;EACZ,EAAE,IAAI,SAAS;;AAKjB,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,oCAAoC,CAAC"}
1
+ {"version":3,"file":"renderers-CP8CFWDs-DRoslK4F.mjs","names":[],"sources":["../../../nodes/node-audio-signal-extractor/dist/renderers-CP8CFWDs.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveNumber, resolveString } from \"@framefields/node-sdk\";\nimport { AudioSignalComputePipeline, shaderStore, signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst audioSignalExtractorAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) return;\n\tif (!channels || channels.length === 0 || channels[0].length === 0) return;\n\tconst op = virtualMedia.operation || {};\n\tconst nodeId = op.nodeId || op.id || \"audio-signal-extractor\";\n\tconst fps = ctx.fps ?? 24;\n\tconst mode = resolveString(op.extractionMode, \"\");\n\tconst curveStr = resolveString(op.curve, \"\");\n\tconst config = {\n\t\textractionMode: mode || void 0,\n\t\tattackMs: resolveNumber(op.attackMs, 10),\n\t\treleaseMs: resolveNumber(op.releaseMs, 120),\n\t\tsensitivity: resolveNumber(op.sensitivity, 1),\n\t\tnoiseFloorDb: resolveNumber(op.noiseFloorDb, -45),\n\t\tdynamicRangeDb: resolveNumber(op.dynamicRangeDb, 36),\n\t\tsmoothing: resolveNumber(op.smoothing, .15),\n\t\tcurve: curveStr || void 0,\n\t\tbeatThreshold: resolveNumber(op.beatThreshold, .55),\n\t\tbeatDecayMs: resolveNumber(op.beatDecayMs, 80)\n\t};\n\tconst signals = await AudioSignalComputePipeline.extractFeatures(ctx.device, channels, sampleRate, fps, config, 512);\n\tsignalRegistry.registerBuffer(ctx.device, nodeId, signals.primaryBuffer, ctx.renderId);\n\tsignalRegistry.registerBuffer(ctx.device, `${nodeId}_beat`, signals.beatBuffer, ctx.renderId);\n\tsignalRegistry.registerBuffer(ctx.device, `${nodeId}_bass`, signals.bassBuffer, ctx.renderId);\n\tsignalRegistry.registerBuffer(ctx.device, `${nodeId}_energy`, signals.energyBuffer, ctx.renderId);\n\tsignalRegistry.registerTexture(ctx.device, nodeId, signals.texture, signals.textureView, ctx.renderId);\n\tsignalRegistry.registerTexture(ctx.device, `${nodeId}_beat`, signals.texture, signals.textureView, ctx.renderId);\n\tsignalRegistry.registerTexture(ctx.device, `${nodeId}_bass`, signals.texture, signals.textureView, ctx.renderId);\n\tsignalRegistry.registerTexture(ctx.device, `${nodeId}_energy`, signals.texture, signals.textureView, ctx.renderId);\n\tconst fnName = `signal_${nodeId.replace(/[^a-zA-Z0-9]/g, \"_\")}`;\n\tconst wgsl = `\nfn ${fnName}(t: f32, x: f32, y: f32, z: f32, i: u32, n: u32, frame: u32, color: vec4f, t_elapsed: f32, duration: f32) -> f32 {\n return 0.0f;\n}\n`;\n\tshaderStore.register(nodeId, {\n\t\twgsl,\n\t\tname: fnName,\n\t\toutputType: \"f32\",\n\t\tfnParams: []\n\t}, ctx.renderId);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: audioSignalExtractorAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CP8CFWDs.mjs.map"],"mappings":";;;;;AAKA,MAAM,qCAAqC,OAAO,UAAU,YAAY,cAAc,QAAQ;AAC7F,KAAI,CAAC,KAAK,OAAQ;AAClB,KAAI,CAAC,YAAY,SAAS,WAAW,KAAK,SAAS,GAAG,WAAW,EAAG;CACpE,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM;CACrC,MAAM,MAAM,IAAI,OAAO;CACvB,MAAM,OAAO,cAAc,GAAG,gBAAgB,GAAG;CACjD,MAAM,WAAW,cAAc,GAAG,OAAO,GAAG;CAC5C,MAAM,SAAS;EACd,gBAAgB,QAAQ,KAAK;EAC7B,UAAU,cAAc,GAAG,UAAU,GAAG;EACxC,WAAW,cAAc,GAAG,WAAW,IAAI;EAC3C,aAAa,cAAc,GAAG,aAAa,EAAE;EAC7C,cAAc,cAAc,GAAG,cAAc,IAAI;EACjD,gBAAgB,cAAc,GAAG,gBAAgB,GAAG;EACpD,WAAW,cAAc,GAAG,WAAW,IAAI;EAC3C,OAAO,YAAY,KAAK;EACxB,eAAe,cAAc,GAAG,eAAe,IAAI;EACnD,aAAa,cAAc,GAAG,aAAa,GAAG;EAC9C;CACD,MAAM,UAAU,MAAM,2BAA2B,gBAAgB,IAAI,QAAQ,UAAU,YAAY,KAAK,QAAQ,IAAI;AACpH,gBAAe,eAAe,IAAI,QAAQ,QAAQ,QAAQ,eAAe,IAAI,SAAS;AACtF,gBAAe,eAAe,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,YAAY,IAAI,SAAS;AAC7F,gBAAe,eAAe,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,YAAY,IAAI,SAAS;AAC7F,gBAAe,eAAe,IAAI,QAAQ,GAAG,OAAO,UAAU,QAAQ,cAAc,IAAI,SAAS;AACjG,gBAAe,gBAAgB,IAAI,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,aAAa,IAAI,SAAS;AACtG,gBAAe,gBAAgB,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,SAAS,QAAQ,aAAa,IAAI,SAAS;AAChH,gBAAe,gBAAgB,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,SAAS,QAAQ,aAAa,IAAI,SAAS;AAChH,gBAAe,gBAAgB,IAAI,QAAQ,GAAG,OAAO,UAAU,QAAQ,SAAS,QAAQ,aAAa,IAAI,SAAS;CAClH,MAAM,SAAS,UAAU,OAAO,QAAQ,iBAAiB,IAAI;CAC7D,MAAM,OAAO;KACT,OAAO;;;;AAIX,aAAY,SAAS,QAAQ;EAC5B;EACA,MAAM;EACN,YAAY;EACZ,UAAU,EAAE;EACZ,EAAE,IAAI,SAAS;;AAKjB,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,oCAAoC,CAAC"}
@@ -1,4 +1,4 @@
1
- import "../index-9_4X2ro1.mjs";
2
- import "../index-svAgwTY_.mjs";
3
- import { A as assertSamLicenseAccepted, B as sam3Precision, C as Sam3Precision, D as Sam3TrackerOptions, E as Sam3Tracker, F as sam3DenseDecoder, G as validateSam3Prompts, H as sam3Run, I as sam3EncoderFiles, L as sam3Floats, M as ensureSamModelsRegistered, N as sam2Revision, O as SamLicenseOptions, P as sam2Tokens, R as sam3Mask, S as Sam3Options, T as Sam3TextSelector, U as sam3SupportGraphs, V as sam3Revision, W as validateSam2Prompts, _ as Sam2TrackerOptions, a as SAM_MODELS, b as Sam3ModelKey, c as Sam2Graph, d as Sam2Model, f as Sam2ModelKey, g as Sam2Tracker, h as Sam2Prompt, i as SAM_LICENSE_TERMS_URL, j as decodeSam2Mask, k as SamModelKey, l as Sam2Memory, m as Sam2Point, n as SAM3_ENCODER, o as Sam2FrameResult, p as Sam2Options, r as SAM_LICENSE, s as Sam2FrameTracker, t as SAM2_EXPORTS, u as Sam2MemoryBank, v as Sam3FrameResult, w as Sam3Prompt, x as Sam3ObjectResult, y as Sam3MemoryBank, z as sam3Position } from "../index-DBhswLMO.mjs";
1
+ import "../index-COYNQ_mf.mjs";
2
+ import "../index-CEU_Zsb9.mjs";
3
+ import { A as assertSamLicenseAccepted, B as sam3Precision, C as Sam3Precision, D as Sam3TrackerOptions, E as Sam3Tracker, F as sam3DenseDecoder, G as validateSam3Prompts, H as sam3Run, I as sam3EncoderFiles, L as sam3Floats, M as ensureSamModelsRegistered, N as sam2Revision, O as SamLicenseOptions, P as sam2Tokens, R as sam3Mask, S as Sam3Options, T as Sam3TextSelector, U as sam3SupportGraphs, V as sam3Revision, W as validateSam2Prompts, _ as Sam2TrackerOptions, a as SAM_MODELS, b as Sam3ModelKey, c as Sam2Graph, d as Sam2Model, f as Sam2ModelKey, g as Sam2Tracker, h as Sam2Prompt, i as SAM_LICENSE_TERMS_URL, j as decodeSam2Mask, k as SamModelKey, l as Sam2Memory, m as Sam2Point, n as SAM3_ENCODER, o as Sam2FrameResult, p as Sam2Options, r as SAM_LICENSE, s as Sam2FrameTracker, t as SAM2_EXPORTS, u as Sam2MemoryBank, v as Sam3FrameResult, w as Sam3Prompt, x as Sam3ObjectResult, y as Sam3MemoryBank, z as sam3Position } from "../index-C8YwZ6k1.mjs";
4
4
  export { SAM2_EXPORTS, SAM3_ENCODER, SAM_LICENSE, SAM_LICENSE_TERMS_URL, SAM_MODELS, Sam2FrameResult, Sam2FrameTracker, Sam2Graph, Sam2Memory, Sam2MemoryBank, Sam2Model, Sam2ModelKey, Sam2Options, Sam2Point, Sam2Prompt, Sam2Tracker, Sam2TrackerOptions, Sam3FrameResult, Sam3MemoryBank, Sam3ModelKey, Sam3ObjectResult, Sam3Options, Sam3Precision, Sam3Prompt, Sam3TextSelector, Sam3Tracker, Sam3TrackerOptions, SamLicenseOptions, SamModelKey, assertSamLicenseAccepted, decodeSam2Mask, ensureSamModelsRegistered, sam2Revision, sam2Tokens, sam3DenseDecoder, sam3EncoderFiles, sam3Floats, sam3Mask, sam3Position, sam3Precision, sam3Revision, sam3Run, sam3SupportGraphs, validateSam2Prompts, validateSam3Prompts };
@@ -1,3 +1,3 @@
1
- import { C as sam3Run, E as validateSam3Prompts, S as sam3Revision, T as validateSam2Prompts, _ as sam3EncoderFiles, a as SAM_MODELS, b as sam3Position, c as Sam3MemoryBank, d as assertSamLicenseAccepted, f as decodeSam2Mask, g as sam3DenseDecoder, h as sam2Tokens, i as SAM_LICENSE_TERMS_URL, l as Sam3TextSelector, m as sam2Revision, n as SAM3_ENCODER, o as Sam2MemoryBank, p as ensureSamModelsRegistered, r as SAM_LICENSE, s as Sam2Tracker, t as SAM2_EXPORTS, u as Sam3Tracker, v as sam3Floats, w as sam3SupportGraphs, x as sam3Precision, y as sam3Mask } from "../dist-Dq5TkNDI.mjs";
1
+ import { C as sam3Run, E as validateSam3Prompts, S as sam3Revision, T as validateSam2Prompts, _ as sam3EncoderFiles, a as SAM_MODELS, b as sam3Position, c as Sam3MemoryBank, d as assertSamLicenseAccepted, f as decodeSam2Mask, g as sam3DenseDecoder, h as sam2Tokens, i as SAM_LICENSE_TERMS_URL, l as Sam3TextSelector, m as sam2Revision, n as SAM3_ENCODER, o as Sam2MemoryBank, p as ensureSamModelsRegistered, r as SAM_LICENSE, s as Sam2Tracker, t as SAM2_EXPORTS, u as Sam3Tracker, v as sam3Floats, w as sam3SupportGraphs, x as sam3Precision, y as sam3Mask } from "../dist-Dg9LMWoX.mjs";
2
2
 
3
3
  export { SAM2_EXPORTS, SAM3_ENCODER, SAM_LICENSE, SAM_LICENSE_TERMS_URL, SAM_MODELS, Sam2MemoryBank, Sam2Tracker, Sam3MemoryBank, Sam3TextSelector, Sam3Tracker, assertSamLicenseAccepted, decodeSam2Mask, ensureSamModelsRegistered, sam2Revision, sam2Tokens, sam3DenseDecoder, sam3EncoderFiles, sam3Floats, sam3Mask, sam3Position, sam3Precision, sam3Revision, sam3Run, sam3SupportGraphs, validateSam2Prompts, validateSam3Prompts };
@@ -1,8 +1,8 @@
1
- import "../chunk-D8S17ehY.mjs";
2
- import { $ as FrameSignal, Fn as SineSignalOptions, Li as signal, Pn as SignalValue, Ri as signalBuilder, Tn as SignalContext, Tr as cosineSignal, wr as computed, xn as Signal, zi as sineSignal } from "../index-9_4X2ro1.mjs";
3
- import { F as SignalRegistry, G as buildWGSLSignalFn, I as SignalRegistryResource, it as signalRegistry, s as AudioSignalComputePipeline, y as MasterAudioEntry } from "../index-Bzo1uj8h.mjs";
4
- import "../renderer-DoPEPlbG.mjs";
5
- import "../renderer-B-inTgyb.mjs";
6
- import { i as index_d_exports, n as index_d_exports$1, r as index_d_exports$3, t as index_d_exports$2 } from "../index-f4IF1vRH.mjs";
7
- import { i as _default, n as AudioSignalOptions, r as ExtractedAudioSignalsBundle, t as AudioSignal } from "../audio-D6tBMbHh.mjs";
8
- export { AudioSignal, AudioSignalComputePipeline, index_d_exports as AudioSignalExtractorNode, AudioSignalOptions, ExtractedAudioSignalsBundle, FrameSignal, MasterAudioEntry, Signal, SignalContext, index_d_exports$1 as SignalGateNode, index_d_exports$2 as SignalMathNode, index_d_exports$3 as SignalNode, SignalRegistry, SignalRegistryResource, SignalValue, SineSignalOptions, buildWGSLSignalFn, computed, cosineSignal, _default as modulateRenderer, signal, signalBuilder, signalRegistry, sineSignal };
1
+ import "../chunk-W71TSjRM.mjs";
2
+ import { $ as FrameSignal, Fn as SineSignalOptions, Li as signal, Pn as SignalValue, Ri as signalBuilder, Tn as SignalContext, Tr as cosineSignal, wr as computed, xn as Signal, zi as sineSignal } from "../index-COYNQ_mf.mjs";
3
+ import { I as SignalRegistry, K as buildWGSLSignalFn, L as SignalRegistryResource, at as signalRegistry, b as MasterAudioEntry, c as AudioSignalComputePipeline } from "../index-BuiZzc6i.mjs";
4
+ import "../renderer-BVKOQarx.mjs";
5
+ import "../renderer-88C3QpKL.mjs";
6
+ import { i as index_d_exports, n as index_d_exports$1, r as index_d_exports$3, t as index_d_exports$2 } from "../index-Bly-7YM1.mjs";
7
+ import { a as ExtractedAudioSignalsBundle, i as AudioSignalOptions, n as AudioPitchSignals, o as _default, r as AudioSignal, t as AudioPitchOptions } from "../audio-CYZkDwae.mjs";
8
+ export { AudioPitchOptions, AudioPitchSignals, AudioSignal, AudioSignalComputePipeline, index_d_exports as AudioSignalExtractorNode, AudioSignalOptions, ExtractedAudioSignalsBundle, FrameSignal, MasterAudioEntry, Signal, SignalContext, index_d_exports$1 as SignalGateNode, index_d_exports$2 as SignalMathNode, index_d_exports$3 as SignalNode, SignalRegistry, SignalRegistryResource, SignalValue, SineSignalOptions, buildWGSLSignalFn, computed, cosineSignal, _default as modulateRenderer, signal, signalBuilder, signalRegistry, sineSignal };