framefields 2.11.0 → 2.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE.md +4 -0
- package/dist/audio/index.d.mts +6 -5
- package/dist/audio/index.mjs +13 -13
- package/dist/{audio-CYZkDwae.d.mts → audio-CHV33Od9.d.mts} +3 -4
- package/dist/audio-CHV33Od9.d.mts.map +1 -0
- package/dist/{audio-BuCVk1IQ.mjs → audio-DHzLQ_RG.mjs} +4 -4
- package/dist/{audio-BuCVk1IQ.mjs.map → audio-DHzLQ_RG.mjs.map} +1 -1
- package/dist/{audio-KHBadECb.mjs → audio-DS9Jg2ls.mjs} +1 -1
- package/dist/{audio-KHBadECb.mjs.map → audio-DS9Jg2ls.mjs.map} +1 -1
- package/dist/{check-result-Culfu7Nx.mjs → check-result-DZWx73V8.mjs} +1 -1
- package/dist/{check-result-Culfu7Nx.mjs.map → check-result-DZWx73V8.mjs.map} +1 -1
- package/dist/cli/check-worker.mjs +51 -51
- package/dist/cli/check-worker.mjs.map +1 -1
- package/dist/cli/local-worker.d.mts +28 -0
- package/dist/cli/local-worker.d.mts.map +1 -0
- package/dist/cli/local-worker.mjs +83 -0
- package/dist/cli/local-worker.mjs.map +1 -0
- package/dist/cli.mjs +390 -124
- package/dist/cli.mjs.map +1 -1
- package/dist/cloud/index.d.mts +16 -3
- package/dist/cloud/index.d.mts.map +1 -1
- package/dist/cloud/index.mjs +2 -2
- package/dist/cloud-Cj1TIme8.mjs +685 -0
- package/dist/cloud-Cj1TIme8.mjs.map +1 -0
- package/dist/components/index.d.mts +15 -14
- package/dist/components/index.mjs +47 -47
- package/dist/{dist-CySGkG54.mjs → dist-BSKAbyea.mjs} +2 -2
- package/dist/dist-BSKAbyea.mjs.map +1 -0
- package/dist/{dist-CNGv-JTX.mjs → dist-B_rSWeOz.mjs} +1 -1
- package/dist/{dist-Bf2_efYP.mjs → dist-C8XSqfTx.mjs} +1 -1
- package/dist/{dist-Bf2_efYP.mjs.map → dist-C8XSqfTx.mjs.map} +1 -1
- package/dist/{dist-EQX3TUUl.mjs → dist-CUNvNDS3.mjs} +129 -82
- package/dist/dist-CUNvNDS3.mjs.map +1 -0
- package/dist/dist-CiTgmfUw.mjs +502 -0
- package/dist/dist-CiTgmfUw.mjs.map +1 -0
- package/dist/{dist-CWLLnigL.mjs → dist-D3BeAZ7X.mjs} +315 -84
- package/dist/dist-D3BeAZ7X.mjs.map +1 -0
- package/dist/{dist-BIE8fvlv.mjs → dist-DgZpN6IK.mjs} +1 -1
- package/dist/{dist-BIE8fvlv.mjs.map → dist-DgZpN6IK.mjs.map} +1 -1
- package/dist/{dist-Dg9LMWoX.mjs → dist-Kbf-JTry.mjs} +2 -2
- package/dist/{dist-Dg9LMWoX.mjs.map → dist-Kbf-JTry.mjs.map} +1 -1
- package/dist/effects/index.d.mts +6 -6
- package/dist/effects/index.mjs +36 -36
- package/dist/{effects-DKLbLXF7.mjs → effects-BiDgCK1L.mjs} +3 -3
- package/dist/{effects-DKLbLXF7.mjs.map → effects-BiDgCK1L.mjs.map} +1 -1
- package/dist/fonts/index.d.mts +1 -1
- package/dist/fonts/index.mjs +3 -3
- package/dist/{fonts-gPbGbShD.mjs → fonts-DeDPWdvJ.mjs} +2 -2
- package/dist/{fonts-gPbGbShD.mjs.map → fonts-DeDPWdvJ.mjs.map} +1 -1
- package/dist/{gpu-CpkJJLQP.mjs → gpu-CWjgql4C.mjs} +11 -3
- package/dist/gpu-CWjgql4C.mjs.map +1 -0
- package/dist/index-BFTtXosj.d.mts +63 -0
- package/dist/index-BFTtXosj.d.mts.map +1 -0
- package/dist/{index-BW0Q1ygn.d.mts → index-C5sgRLlG.d.mts} +1 -1
- package/dist/{index-BW0Q1ygn.d.mts.map → index-C5sgRLlG.d.mts.map} +1 -1
- package/dist/{index-CdCrae-I.d.mts → index-CnZhBlob.d.mts} +2 -2
- package/dist/index-CnZhBlob.d.mts.map +1 -0
- package/dist/{index-D2i9J9Zq.d.mts → index-D68eGFNE.d.mts} +3 -30
- package/dist/index-D68eGFNE.d.mts.map +1 -0
- package/dist/{index-CEU_Zsb9.d.mts → index-DBh3WphX.d.mts} +25 -23
- package/dist/index-DBh3WphX.d.mts.map +1 -0
- package/dist/{index-gOVtTm-P.d.mts → index-DQ1U3HC3.d.mts} +14 -6
- package/dist/index-DQ1U3HC3.d.mts.map +1 -0
- package/dist/{index-jSDEM-uE.d.mts → index-Dibc_xpC.d.mts} +6 -6
- package/dist/{index-jSDEM-uE.d.mts.map → index-Dibc_xpC.d.mts.map} +1 -1
- package/dist/{index-Cro-818i.d.mts → index-E2IXX0Cz.d.mts} +88 -14
- package/dist/index-E2IXX0Cz.d.mts.map +1 -0
- package/dist/{index-BuiZzc6i.d.mts → index-X2u96TEo.d.mts} +162 -5
- package/dist/index-X2u96TEo.d.mts.map +1 -0
- package/dist/{index-Bly-7YM1.d.mts → index-YB9j9KUx.d.mts} +3 -3
- package/dist/{index-Bly-7YM1.d.mts.map → index-YB9j9KUx.d.mts.map} +1 -1
- package/dist/{index-COYNQ_mf.d.mts → index-a6JrbAK0.d.mts} +1 -1
- package/dist/{index-COYNQ_mf.d.mts.map → index-a6JrbAK0.d.mts.map} +1 -1
- package/dist/{index-C8YwZ6k1.d.mts → index-rtCXNxGO.d.mts} +2 -2
- package/dist/{index-C8YwZ6k1.d.mts.map → index-rtCXNxGO.d.mts.map} +1 -1
- package/dist/index.d.mts +16 -15
- package/dist/index.mjs +58 -58
- package/dist/preview/index.d.mts +5 -4
- package/dist/preview/index.mjs +12 -12
- package/dist/{preview-BToKUTtZ.mjs → preview-PDz7o2xg.mjs} +323 -35
- package/dist/preview-PDz7o2xg.mjs.map +1 -0
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-QF4JWVO3.mjs → chunk-35XSD4QM.mjs} +15 -15
- package/dist/preview-engine/{chunk-ZF2MEFKO.mjs → chunk-3DOIE4DV.mjs} +1 -1
- package/dist/preview-engine/{chunk-JDB7PMRI.mjs → chunk-3IT7LHWR.mjs} +1 -1
- package/dist/preview-engine/{chunk-DNNGWS2C.mjs → chunk-3MLGWUSK.mjs} +1 -1
- package/dist/preview-engine/{chunk-KVOFO273.mjs → chunk-3QJ5GRBH.mjs} +1 -1
- package/dist/preview-engine/{chunk-54Q5CKSV.mjs → chunk-3QTHW2CD.mjs} +1 -1
- package/dist/preview-engine/chunk-44V4V5LD.mjs +1 -0
- package/dist/preview-engine/chunk-4P3MMJWD.mjs +1 -0
- package/dist/preview-engine/chunk-4YT5YJIF.mjs +1 -0
- package/dist/preview-engine/{chunk-BJXNKMSY.mjs → chunk-64L4GUOF.mjs} +20 -6
- package/dist/preview-engine/{chunk-UMJ3VGKN.mjs → chunk-6B3NOY5W.mjs} +1 -1
- package/dist/preview-engine/chunk-77MT33VR.mjs +1 -0
- package/dist/preview-engine/{chunk-BRV7TQDV.mjs → chunk-77WWW75O.mjs} +1 -1
- package/dist/preview-engine/chunk-7M5LE6EM.mjs +483 -0
- package/dist/preview-engine/chunk-A6OAPDIA.mjs +1 -0
- package/dist/preview-engine/chunk-ADLIF544.mjs +39 -0
- package/dist/preview-engine/{chunk-OLB4TQLQ.mjs → chunk-AKVRG7UU.mjs} +1 -1
- package/dist/preview-engine/{chunk-CIVEZJYF.mjs → chunk-CRBOK3JT.mjs} +1 -1
- package/dist/preview-engine/chunk-CSLSWUUT.mjs +1 -0
- package/dist/preview-engine/{chunk-ACBBBOUM.mjs → chunk-CYM75INB.mjs} +1 -1
- package/dist/preview-engine/{chunk-JSYG6OWZ.mjs → chunk-D7OMXGIZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-EPRINA4V.mjs → chunk-E7BKWHOT.mjs} +10 -10
- package/dist/preview-engine/{chunk-NOKPBMIP.mjs → chunk-EWDJMJO5.mjs} +1 -1
- package/dist/preview-engine/{chunk-5KSBS3AL.mjs → chunk-EYE3GNL5.mjs} +1 -1
- package/dist/preview-engine/chunk-FRJPXWAG.mjs +1 -0
- package/dist/preview-engine/{chunk-IKVJ4MW5.mjs → chunk-G4ZTSLZU.mjs} +1 -1
- package/dist/preview-engine/{chunk-VZLIRYAL.mjs → chunk-GAMAKN5L.mjs} +1 -1
- package/dist/preview-engine/{chunk-ZIXPWP2B.mjs → chunk-ICWD36H6.mjs} +1 -1
- package/dist/preview-engine/{chunk-OELPPLML.mjs → chunk-IEEV5RB3.mjs} +1 -1
- package/dist/preview-engine/chunk-JAAFSVAG.mjs +1 -0
- package/dist/preview-engine/{chunk-YVZTRH4Y.mjs → chunk-KDCM7S3S.mjs} +1 -1
- package/dist/preview-engine/chunk-LZNHGH56.mjs +5 -0
- package/dist/preview-engine/{chunk-O63FLYWC.mjs → chunk-N2VISDTG.mjs} +1 -1
- package/dist/preview-engine/{chunk-GN3NDRLI.mjs → chunk-NCQHOGZK.mjs} +1 -1
- package/dist/preview-engine/{chunk-YKM7JDQY.mjs → chunk-NJO2BIJX.mjs} +1 -1
- package/dist/preview-engine/{chunk-7GMHSTRP.mjs → chunk-NTSALWFF.mjs} +1 -1
- package/dist/preview-engine/{chunk-PKNUTHPI.mjs → chunk-NVXFEDJS.mjs} +1 -1
- package/dist/preview-engine/{chunk-VFQH5KVS.mjs → chunk-ONHY4KNY.mjs} +1 -1
- package/dist/preview-engine/{chunk-Z24UEN4P.mjs → chunk-PD2HKW2S.mjs} +1 -1
- package/dist/preview-engine/chunk-PH3UUX6A.mjs +138 -0
- package/dist/preview-engine/chunk-PIHG6HJO.mjs +1 -0
- package/dist/preview-engine/{chunk-YHMBGJP6.mjs → chunk-QPT2Y2GZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-4AGQN53P.mjs → chunk-QXLFTCLC.mjs} +1 -1
- package/dist/preview-engine/{chunk-65NANVQL.mjs → chunk-R4H52Q7S.mjs} +1 -1
- package/dist/preview-engine/{chunk-FQL4IJZN.mjs → chunk-RN7J5TRU.mjs} +1 -1
- package/dist/preview-engine/{chunk-26XWIHW3.mjs → chunk-RVCLMO5Q.mjs} +1 -1
- package/dist/preview-engine/{chunk-VQA4DYZU.mjs → chunk-RYSV44B4.mjs} +1 -1
- package/dist/preview-engine/{chunk-TEWRQKX3.mjs → chunk-SFHWP65D.mjs} +1 -1
- package/dist/preview-engine/{chunk-RDWLLITE.mjs → chunk-SMHEMYCV.mjs} +1 -1
- package/dist/preview-engine/{chunk-EXEO245X.mjs → chunk-SV3ZNZQU.mjs} +1 -1
- package/dist/preview-engine/{chunk-32WC4FRR.mjs → chunk-UE7Y65C3.mjs} +3 -3
- package/dist/preview-engine/chunk-UFPA36D2.mjs +2227 -0
- package/dist/preview-engine/{chunk-EAWJXW4J.mjs → chunk-UVEDFIPN.mjs} +1 -1
- package/dist/preview-engine/{chunk-6LTINEA4.mjs → chunk-VMXJZ4KQ.mjs} +1 -1
- package/dist/preview-engine/{chunk-IBPYV6HF.mjs → chunk-W4XR6F5G.mjs} +1 -1
- package/dist/preview-engine/{chunk-UI3VH33L.mjs → chunk-WPYWCWWL.mjs} +1 -1
- package/dist/preview-engine/{chunk-GHTG5XV6.mjs → chunk-XYCR3STG.mjs} +84 -25
- package/dist/preview-engine/{chunk-WFMUDL55.mjs → chunk-YAPGJZPI.mjs} +1 -1
- package/dist/preview-engine/{chunk-LMXMBX4J.mjs → chunk-YJ4DSRDY.mjs} +1 -1
- package/dist/preview-engine/{chunk-CCORQLMR.mjs → chunk-YOJKIMU5.mjs} +1 -1
- package/dist/preview-engine/{chunk-UGB6JKVS.mjs → chunk-ZHNEZZ6A.mjs} +1 -1
- package/dist/preview-engine/{chunk-LFNCWMKS.mjs → chunk-ZZMI3WOT.mjs} +1 -1
- package/dist/preview-engine/components.mjs +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/fonts.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +1 -1
- package/dist/preview-engine/player.mjs +5 -5
- package/dist/preview-engine/{renderers-53EI26GL.mjs → renderers-3FZVDYRQ.mjs} +1 -1
- package/dist/preview-engine/renderers-3KEBYOOF.mjs +1 -0
- package/dist/preview-engine/{renderers-6YVZUQOH.mjs → renderers-4RPQSUUZ.mjs} +1 -1
- package/dist/preview-engine/renderers-5EGFXFPF.mjs +1 -0
- package/dist/preview-engine/renderers-5SJHYUTM.mjs +1 -0
- package/dist/preview-engine/renderers-66MWDUN6.mjs +1 -0
- package/dist/preview-engine/{renderers-CCRZNGVK.mjs → renderers-6FENMFSC.mjs} +1 -1
- package/dist/preview-engine/renderers-77OXJ2GY.mjs +1 -0
- package/dist/preview-engine/renderers-7LI4QKHO.mjs +1 -0
- package/dist/preview-engine/renderers-AFTUFMQQ.mjs +1 -0
- package/dist/preview-engine/{renderers-CYJAVWHT.mjs → renderers-AIZRIW2R.mjs} +1 -1
- package/dist/preview-engine/{renderers-OGOW3NA4.mjs → renderers-BDI2BDBA.mjs} +1 -1
- package/dist/preview-engine/renderers-BDXCO6NR.mjs +1 -0
- package/dist/preview-engine/{renderers-EN7LXJLG.mjs → renderers-BUZ67FNZ.mjs} +1 -1
- package/dist/preview-engine/renderers-DMTGKURQ.mjs +1 -0
- package/dist/preview-engine/renderers-DU7KPFVV.mjs +1 -0
- package/dist/preview-engine/{renderers-WSABL3QO.mjs → renderers-ECXMT5BD.mjs} +1 -1
- package/dist/preview-engine/{renderers-MOEC2XZZ.mjs → renderers-EILFSWSJ.mjs} +1 -1
- package/dist/preview-engine/renderers-EPSF5CSQ.mjs +1 -0
- package/dist/preview-engine/{renderers-X6CORAES.mjs → renderers-EVEWFJ7U.mjs} +1 -1
- package/dist/preview-engine/renderers-F6PT2LON.mjs +1 -0
- package/dist/preview-engine/renderers-F7WPJXKT.mjs +1 -0
- package/dist/preview-engine/renderers-FIFF267S.mjs +1 -0
- package/dist/preview-engine/{renderers-GQM3KMV3.mjs → renderers-FQISHQEN.mjs} +1 -1
- package/dist/preview-engine/{renderers-HKLCB4U6.mjs → renderers-FXAVFNUN.mjs} +1 -1
- package/dist/preview-engine/{renderers-P2HORBZ6.mjs → renderers-GITAVRYZ.mjs} +1 -1
- package/dist/preview-engine/renderers-GTKRV225.mjs +1 -0
- package/dist/preview-engine/{renderers-KCGK33Y2.mjs → renderers-HG6JZIZO.mjs} +1 -1
- package/dist/preview-engine/{renderers-I6QKZ7CH.mjs → renderers-HHWMIDN3.mjs} +1 -1
- package/dist/preview-engine/renderers-HI3SRJVD.mjs +1 -0
- package/dist/preview-engine/{renderers-7CAHX35U.mjs → renderers-HXEDI4BD.mjs} +1 -1
- package/dist/preview-engine/{renderers-77PDUMYI.mjs → renderers-HXNSDJBY.mjs} +1 -1
- package/dist/preview-engine/{renderers-ACUJMDEK.mjs → renderers-I2ZOUFRU.mjs} +1 -1
- package/dist/preview-engine/renderers-JHFD4LHZ.mjs +1 -0
- package/dist/preview-engine/{renderers-IHGAWLUF.mjs → renderers-JMSAW7VY.mjs} +1 -1
- package/dist/preview-engine/renderers-KGVZUFHD.mjs +1 -0
- package/dist/preview-engine/{renderers-RN2MHIFK.mjs → renderers-KICDB5Y6.mjs} +1 -1
- package/dist/preview-engine/{renderers-C7SI3NIE.mjs → renderers-KKULMOV4.mjs} +1 -1
- package/dist/preview-engine/{renderers-HSFQIILN.mjs → renderers-KMVMPYY7.mjs} +1 -1
- package/dist/preview-engine/renderers-LN7WPG6I.mjs +1 -0
- package/dist/preview-engine/{renderers-BOBVXYAA.mjs → renderers-LWW4RF6D.mjs} +1 -1
- package/dist/preview-engine/renderers-LY57CZZB.mjs +1 -0
- package/dist/preview-engine/renderers-MBMJWZEW.mjs +1 -0
- package/dist/preview-engine/{renderers-VVP5WQOY.mjs → renderers-MPFU74I3.mjs} +1 -1
- package/dist/preview-engine/{renderers-H6PBHEYU.mjs → renderers-MW53LTMB.mjs} +1 -1
- package/dist/preview-engine/{renderers-PPZK6VEW.mjs → renderers-NQC4DPX4.mjs} +1 -1
- package/dist/preview-engine/renderers-OJWWIVNW.mjs +1 -0
- package/dist/preview-engine/{renderers-4IBFDW2S.mjs → renderers-PC2GOZDT.mjs} +1 -1
- package/dist/preview-engine/{renderers-UG2C3C7T.mjs → renderers-Q77UPEYE.mjs} +1 -1
- package/dist/preview-engine/renderers-QHXCFDHI.mjs +1 -0
- package/dist/preview-engine/renderers-RDYJRNAR.mjs +1 -0
- package/dist/preview-engine/renderers-RENLKAA7.mjs +1 -0
- package/dist/preview-engine/renderers-RHMRWX46.mjs +1 -0
- package/dist/preview-engine/{renderers-5XLGCEOA.mjs → renderers-RIPXT4AL.mjs} +1 -1
- package/dist/preview-engine/{renderers-FY2HOQCS.mjs → renderers-SFVFAS3C.mjs} +1 -1
- package/dist/preview-engine/{renderers-VIGZYJYX.mjs → renderers-SWQVCJHB.mjs} +1 -1
- package/dist/preview-engine/renderers-SZVDZDY7.mjs +1 -0
- package/dist/preview-engine/renderers-TTXTV4PC.mjs +228 -0
- package/dist/preview-engine/renderers-TYSLUZ53.mjs +1 -0
- package/dist/preview-engine/{renderers-6LNDAO4B.mjs → renderers-U4IXWMD6.mjs} +1 -1
- package/dist/preview-engine/renderers-VEHYARKY.mjs +1 -0
- package/dist/preview-engine/renderers-VRXAG3FR.mjs +1 -0
- package/dist/preview-engine/{renderers-33FCFHDR.mjs → renderers-VUQAZ56P.mjs} +1 -1
- package/dist/preview-engine/renderers-W5YFMLSB.mjs +1 -0
- package/dist/preview-engine/renderers-XKDWUK56.mjs +1 -0
- package/dist/preview-engine/renderers-XKSBNCLZ.mjs +1 -0
- package/dist/preview-engine/renderers-XLQXVD37.mjs +1 -0
- package/dist/preview-engine/renderers-ZHSOWEMQ.mjs +1 -0
- package/dist/preview-engine/renderers-ZMDRNYSS.mjs +1 -0
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/preview-engine/{src-4IUYUKIZ.mjs → src-YXNX4MLK.mjs} +1 -1
- package/dist/{program-Bc860ko5.mjs → program-Bn6ko_I4.mjs} +44 -17
- package/dist/program-Bn6ko_I4.mjs.map +1 -0
- package/dist/renderer/index.d.mts +4 -3
- package/dist/renderer/index.mjs +3 -3
- package/dist/{renderer-B3Dme2es.mjs → renderer--Q0pM9Vh.mjs} +5 -5
- package/dist/{renderer-B3Dme2es.mjs.map → renderer--Q0pM9Vh.mjs.map} +1 -1
- package/dist/renderer-1aSF5BmY.mjs +5 -0
- package/dist/{renderer-CAWnCsQc.mjs → renderer-45ifiDkn.mjs} +5 -5
- package/dist/{renderer-CAWnCsQc.mjs.map → renderer-45ifiDkn.mjs.map} +1 -1
- package/dist/{renderer-Cz-n883J.mjs → renderer-549d94qG.mjs} +5 -5
- package/dist/{renderer-Cz-n883J.mjs.map → renderer-549d94qG.mjs.map} +1 -1
- package/dist/{renderer-BhsrlGKp.mjs → renderer-B-LUGB9h.mjs} +74 -21
- package/dist/renderer-B-LUGB9h.mjs.map +1 -0
- package/dist/renderer-B2e4Gr9u.mjs +5 -0
- package/dist/{renderer-B1LD29TV.mjs → renderer-B5b-ehRb.mjs} +3 -3
- package/dist/{renderer-B1LD29TV.mjs.map → renderer-B5b-ehRb.mjs.map} +1 -1
- package/dist/renderer-B6fz4j50.mjs +5 -0
- package/dist/{renderer-_9gbYS-3.mjs → renderer-BCTUqJG7.mjs} +5 -5
- package/dist/{renderer-_9gbYS-3.mjs.map → renderer-BCTUqJG7.mjs.map} +1 -1
- package/dist/renderer-BEftIYw-.mjs +5 -0
- package/dist/{renderer-C9BSXyrq.mjs → renderer-BHPgkoEL.mjs} +4 -4
- package/dist/{renderer-C9BSXyrq.mjs.map → renderer-BHPgkoEL.mjs.map} +1 -1
- package/dist/renderer-BHTnO-7e.mjs +5 -0
- package/dist/{renderer-fs8f1QeE.mjs → renderer-BIieU9pY.mjs} +5 -5
- package/dist/{renderer-fs8f1QeE.mjs.map → renderer-BIieU9pY.mjs.map} +1 -1
- package/dist/{renderer-DwK9jsER.mjs → renderer-BKi6jDi_.mjs} +4 -4
- package/dist/{renderer-DwK9jsER.mjs.map → renderer-BKi6jDi_.mjs.map} +1 -1
- package/dist/renderer-BMlnQqTO.mjs +5 -0
- package/dist/{renderer-BNJ6Jk7-.mjs → renderer-BMpmmYOq.mjs} +4 -4
- package/dist/{renderer-BNJ6Jk7-.mjs.map → renderer-BMpmmYOq.mjs.map} +1 -1
- package/dist/{renderer-DkqZmfm8.mjs → renderer-BO_wuUKA.mjs} +5 -5
- package/dist/{renderer-DkqZmfm8.mjs.map → renderer-BO_wuUKA.mjs.map} +1 -1
- package/dist/renderer-BOzcFezY.mjs +5 -0
- package/dist/{renderer-Bxjb0HYU.mjs → renderer-BPOh9x5X.mjs} +4 -4
- package/dist/{renderer-Bxjb0HYU.mjs.map → renderer-BPOh9x5X.mjs.map} +1 -1
- package/dist/{renderer-Ros7XQg2.mjs → renderer-BPiWsrC2.mjs} +3 -3
- package/dist/{renderer-Ros7XQg2.mjs.map → renderer-BPiWsrC2.mjs.map} +1 -1
- package/dist/{renderer-lHNTgiOM.mjs → renderer-BUj7jE6t.mjs} +3 -3
- package/dist/{renderer-lHNTgiOM.mjs.map → renderer-BUj7jE6t.mjs.map} +1 -1
- package/dist/renderer-BVbjJIKJ.mjs +5 -0
- package/dist/renderer-BXsHKf4k.mjs +5 -0
- package/dist/{renderer-D0aAZHC7.mjs → renderer-BZgJj8Cl.mjs} +4 -4
- package/dist/{renderer-D0aAZHC7.mjs.map → renderer-BZgJj8Cl.mjs.map} +1 -1
- package/dist/{renderer-V4dhrf_h.mjs → renderer-BgjPbgbn.mjs} +6 -6
- package/dist/{renderer-V4dhrf_h.mjs.map → renderer-BgjPbgbn.mjs.map} +1 -1
- package/dist/{renderer-BaIJIfJ6.mjs → renderer-BjgFpwVK.mjs} +5 -5
- package/dist/{renderer-BaIJIfJ6.mjs.map → renderer-BjgFpwVK.mjs.map} +1 -1
- package/dist/renderer-Bks49NVl.mjs +5 -0
- package/dist/{renderer-CU8v-LxD.mjs → renderer-BlZgyBSo.mjs} +5 -5
- package/dist/{renderer-CU8v-LxD.mjs.map → renderer-BlZgyBSo.mjs.map} +1 -1
- package/dist/{renderer-B6Oeahe_.mjs → renderer-BqUAyzCZ.mjs} +5 -5
- package/dist/{renderer-B6Oeahe_.mjs.map → renderer-BqUAyzCZ.mjs.map} +1 -1
- package/dist/{renderer-h62QaJYz.mjs → renderer-Br8km655.mjs} +4 -4
- package/dist/{renderer-h62QaJYz.mjs.map → renderer-Br8km655.mjs.map} +1 -1
- package/dist/{renderer-sfqZK6L5.mjs → renderer-BsMZ5Iaq.mjs} +4 -4
- package/dist/{renderer-sfqZK6L5.mjs.map → renderer-BsMZ5Iaq.mjs.map} +1 -1
- package/dist/{renderer-g_1t2je9.mjs → renderer-BtgqTg2K.mjs} +3 -3
- package/dist/{renderer-DcvjSolU.mjs → renderer-BuvKGwk3.mjs} +11 -2
- package/dist/{renderer-DcvjSolU.mjs.map → renderer-BuvKGwk3.mjs.map} +1 -1
- package/dist/{renderer-BOrMBwQS.mjs → renderer-C-3qhk5x.mjs} +2 -2
- package/dist/{renderer-BOrMBwQS.mjs.map → renderer-C-3qhk5x.mjs.map} +1 -1
- package/dist/{renderer-CLAvn9c6.mjs → renderer-C-GTxnfv.mjs} +4 -4
- package/dist/{renderer-CLAvn9c6.mjs.map → renderer-C-GTxnfv.mjs.map} +1 -1
- package/dist/renderer-C-t7qFKr.mjs +5 -0
- package/dist/{renderer-BDZC3o3N.mjs → renderer-C1ctHdXl.mjs} +4 -4
- package/dist/{renderer-BDZC3o3N.mjs.map → renderer-C1ctHdXl.mjs.map} +1 -1
- package/dist/renderer-C24n-6CX.mjs +6 -0
- package/dist/{renderer-pNmI-A9o.mjs → renderer-C7m7Yxgc.mjs} +5 -5
- package/dist/{renderer-pNmI-A9o.mjs.map → renderer-C7m7Yxgc.mjs.map} +1 -1
- package/dist/{renderer-Bf4-N7k7.mjs → renderer-C9dqx3U7.mjs} +5 -5
- package/dist/{renderer-Bf4-N7k7.mjs.map → renderer-C9dqx3U7.mjs.map} +1 -1
- package/dist/renderer-CCReX-7M.mjs +5 -0
- package/dist/{renderer-JHByuUNb.mjs → renderer-CE4535aW.mjs} +3 -3
- package/dist/{renderer-JHByuUNb.mjs.map → renderer-CE4535aW.mjs.map} +1 -1
- package/dist/renderer-CIxFQrAm.mjs +5 -0
- package/dist/{renderer-ByjaseAo.mjs → renderer-CL-vyXgX.mjs} +5 -5
- package/dist/{renderer-ByjaseAo.mjs.map → renderer-CL-vyXgX.mjs.map} +1 -1
- package/dist/renderer-CLHBMIqJ.mjs +5 -0
- package/dist/renderer-CMJKi-Ye.mjs +5 -0
- package/dist/{renderer-B-CMRUag.mjs → renderer-CMnlgAGs.mjs} +4 -4
- package/dist/{renderer-B-CMRUag.mjs.map → renderer-CMnlgAGs.mjs.map} +1 -1
- package/dist/{renderer-BNHcwxw9.mjs → renderer-CQFMyC_c.mjs} +4 -4
- package/dist/{renderer-BNHcwxw9.mjs.map → renderer-CQFMyC_c.mjs.map} +1 -1
- package/dist/{renderer-DgPn_SOC.mjs → renderer-CYwVNbUh.mjs} +4 -4
- package/dist/{renderer-DgPn_SOC.mjs.map → renderer-CYwVNbUh.mjs.map} +1 -1
- package/dist/{renderer-DLPhfwbR.mjs → renderer-CZ5mwBW1.mjs} +3 -3
- package/dist/{renderer-DLPhfwbR.mjs.map → renderer-CZ5mwBW1.mjs.map} +1 -1
- package/dist/{renderer-4ZUv3X1I.mjs → renderer-C_1eqfI0.mjs} +5 -5
- package/dist/{renderer-4ZUv3X1I.mjs.map → renderer-C_1eqfI0.mjs.map} +1 -1
- package/dist/renderer-C_H3mHZa.mjs +5 -0
- package/dist/{renderer-B1esRxGy.mjs → renderer-CciiDHuU.mjs} +4 -4
- package/dist/{renderer-B1esRxGy.mjs.map → renderer-CciiDHuU.mjs.map} +1 -1
- package/dist/renderer-CfkTdR5B.mjs +5 -0
- package/dist/{renderer-ynFRJh7G.mjs → renderer-CgK7Q1G8.mjs} +3 -3
- package/dist/{renderer-CR0mDPYY.mjs → renderer-CnL8Cmmr.mjs} +3 -3
- package/dist/renderer-CnhkXJ0R.mjs +5 -0
- package/dist/{renderer-fwKnV9zs.mjs → renderer-Cp_HOmp7.mjs} +5 -5
- package/dist/{renderer-fwKnV9zs.mjs.map → renderer-Cp_HOmp7.mjs.map} +1 -1
- package/dist/renderer-CqpyVsq_.mjs +5 -0
- package/dist/renderer-CtWgIpTE.mjs +5 -0
- package/dist/{renderer-riIFosX6.mjs → renderer-Cu3iKMSJ.mjs} +5 -5
- package/dist/{renderer-riIFosX6.mjs.map → renderer-Cu3iKMSJ.mjs.map} +1 -1
- package/dist/{renderer-D4f8f66C.mjs → renderer-CuPAQjDK.mjs} +4 -4
- package/dist/{renderer-D4f8f66C.mjs.map → renderer-CuPAQjDK.mjs.map} +1 -1
- package/dist/{renderer-CxGx1Lhi.mjs → renderer-CwlY8Tb-.mjs} +3 -3
- package/dist/{renderer-CxGx1Lhi.mjs.map → renderer-CwlY8Tb-.mjs.map} +1 -1
- package/dist/{renderer-o68mVeyk.mjs → renderer-CxSFvKd1.mjs} +4 -4
- package/dist/{renderer-o68mVeyk.mjs.map → renderer-CxSFvKd1.mjs.map} +1 -1
- package/dist/{renderer-CrR8Mpxq.mjs → renderer-CyUiXLRa.mjs} +5 -5
- package/dist/{renderer-CrR8Mpxq.mjs.map → renderer-CyUiXLRa.mjs.map} +1 -1
- package/dist/renderer-CyuKr5ca.mjs +5 -0
- package/dist/renderer-CzgcZXKH.mjs +3 -0
- package/dist/{renderer-Bx14Wnxl.mjs → renderer-D-GWBoVT.mjs} +58 -4
- package/dist/renderer-D-GWBoVT.mjs.map +1 -0
- package/dist/{renderer-BwrfKKqw.mjs → renderer-D-fzEZfX.mjs} +4 -4
- package/dist/{renderer-BwrfKKqw.mjs.map → renderer-D-fzEZfX.mjs.map} +1 -1
- package/dist/renderer-D5yp74NL.mjs +3 -0
- package/dist/{renderer-DAn9xiQT.mjs → renderer-D8gN7aqk.mjs} +4 -4
- package/dist/{renderer-DAn9xiQT.mjs.map → renderer-D8gN7aqk.mjs.map} +1 -1
- package/dist/renderer-D9ON_1Hf.mjs +5 -0
- package/dist/renderer-DAnTgh4o.mjs +5 -0
- package/dist/{renderer-Dpl6poqD.mjs → renderer-DGOMfyh8.mjs} +2 -2
- package/dist/{renderer-Dpl6poqD.mjs.map → renderer-DGOMfyh8.mjs.map} +1 -1
- package/dist/{renderer-Rw87u1Cr.mjs → renderer-DGb_wgTW.mjs} +6 -6
- package/dist/{renderer-Rw87u1Cr.mjs.map → renderer-DGb_wgTW.mjs.map} +1 -1
- package/dist/{renderer-Co6UFbZB.mjs → renderer-DJPZs_zV.mjs} +5 -5
- package/dist/{renderer-Co6UFbZB.mjs.map → renderer-DJPZs_zV.mjs.map} +1 -1
- package/dist/renderer-DKJOon6y.d.mts +1 -0
- package/dist/{renderer-DOkbn1ot.mjs → renderer-DOZPZTxe.mjs} +5 -5
- package/dist/{renderer-DOkbn1ot.mjs.map → renderer-DOZPZTxe.mjs.map} +1 -1
- package/dist/{renderer-DaXQgGg3.mjs → renderer-DRal7Goa.mjs} +5 -5
- package/dist/{renderer-DaXQgGg3.mjs.map → renderer-DRal7Goa.mjs.map} +1 -1
- package/dist/renderer-DWgpivA3.mjs +5 -0
- package/dist/{renderer-Bo7shNdU.mjs → renderer-DXFJv_e6.mjs} +4 -4
- package/dist/{renderer-Bo7shNdU.mjs.map → renderer-DXFJv_e6.mjs.map} +1 -1
- package/dist/renderer-Dh_qNNwR.mjs +5 -0
- package/dist/renderer-DkCpXPMP.mjs +5 -0
- package/dist/{renderer-eMCTAa9e.mjs → renderer-Dp5ChuOs.mjs} +4 -4
- package/dist/{renderer-eMCTAa9e.mjs.map → renderer-Dp5ChuOs.mjs.map} +1 -1
- package/dist/{renderer-1uoKiILq.mjs → renderer-DpZballM.mjs} +3 -3
- package/dist/{renderer-1uoKiILq.mjs.map → renderer-DpZballM.mjs.map} +1 -1
- package/dist/renderer-Dre-6cDR.mjs +5 -0
- package/dist/renderer-Ds5z4_HX.mjs +5 -0
- package/dist/{renderer-7ow5Acsg.mjs → renderer-DwGlDNOV.mjs} +3 -3
- package/dist/{renderer-7ow5Acsg.mjs.map → renderer-DwGlDNOV.mjs.map} +1 -1
- package/dist/{renderer-q7q6k_cD.mjs → renderer-DxB_OfLs.mjs} +4 -4
- package/dist/{renderer-q7q6k_cD.mjs.map → renderer-DxB_OfLs.mjs.map} +1 -1
- package/dist/{renderer-DFJWPqOJ.mjs → renderer-Dz6P-rPI.mjs} +3 -3
- package/dist/{renderer-DFJWPqOJ.mjs.map → renderer-Dz6P-rPI.mjs.map} +1 -1
- package/dist/{renderer-BURhYcpA.mjs → renderer-FPiLBwj5.mjs} +4 -4
- package/dist/{renderer-BURhYcpA.mjs.map → renderer-FPiLBwj5.mjs.map} +1 -1
- package/dist/renderer-HGSCOMyP.mjs +5 -0
- package/dist/renderer-KMY8W-cJ.mjs +5 -0
- package/dist/{renderer-D-QVGphn.mjs → renderer-KgsVk9c6.mjs} +4 -4
- package/dist/{renderer-D-QVGphn.mjs.map → renderer-KgsVk9c6.mjs.map} +1 -1
- package/dist/{renderer-COcKhouz.mjs → renderer-LXhEPCmy.mjs} +5 -5
- package/dist/{renderer-COcKhouz.mjs.map → renderer-LXhEPCmy.mjs.map} +1 -1
- package/dist/{renderer-HDj9Zb-O.mjs → renderer-NBMmvqWl.mjs} +20 -7
- package/dist/renderer-NBMmvqWl.mjs.map +1 -0
- package/dist/{renderer-DE9Jik9K.mjs → renderer-Nnu32rqg.mjs} +3 -3
- package/dist/{renderer-DE9Jik9K.mjs.map → renderer-Nnu32rqg.mjs.map} +1 -1
- package/dist/renderer-R21YvXz3.mjs +5 -0
- package/dist/{renderer-celhuAL7.mjs → renderer-RAq3LnNy.mjs} +3 -3
- package/dist/{renderer-celhuAL7.mjs.map → renderer-RAq3LnNy.mjs.map} +1 -1
- package/dist/renderer-RtzCz37W.mjs +5 -0
- package/dist/{renderer-50JEMaVo.mjs → renderer-RzkU_O1i.mjs} +5 -5
- package/dist/{renderer-50JEMaVo.mjs.map → renderer-RzkU_O1i.mjs.map} +1 -1
- package/dist/{renderer-Bbxh4N8Y.mjs → renderer-S9tVGneU.mjs} +95 -80
- package/dist/renderer-S9tVGneU.mjs.map +1 -0
- package/dist/{renderer-BSELd5vU.mjs → renderer-SJyp9-62.mjs} +3 -3
- package/dist/{renderer-BSELd5vU.mjs.map → renderer-SJyp9-62.mjs.map} +1 -1
- package/dist/{renderer-jnAIhWn_.mjs → renderer-_54hiCq0.mjs} +5 -5
- package/dist/{renderer-jnAIhWn_.mjs.map → renderer-_54hiCq0.mjs.map} +1 -1
- package/dist/{renderer-88C3QpKL.d.mts → renderer-aRk849b3.d.mts} +2 -2
- package/dist/{renderer-88C3QpKL.d.mts.map → renderer-aRk849b3.d.mts.map} +1 -1
- package/dist/{renderer-BQetXCcZ.mjs → renderer-dGEMVaZ3.mjs} +4 -4
- package/dist/{renderer-BQetXCcZ.mjs.map → renderer-dGEMVaZ3.mjs.map} +1 -1
- package/dist/{renderer-RvI3qRUI.mjs → renderer-dRXP2dJU.mjs} +5 -5
- package/dist/{renderer-RvI3qRUI.mjs.map → renderer-dRXP2dJU.mjs.map} +1 -1
- package/dist/{renderer-D06HxSXO.mjs → renderer-g9SstkTz.mjs} +3 -3
- package/dist/renderer-iMrqAjix.mjs +5 -0
- package/dist/{renderer-BJ-7WRgO.mjs → renderer-opVuiAQR.mjs} +3 -3
- package/dist/{renderer-BJ-7WRgO.mjs.map → renderer-opVuiAQR.mjs.map} +1 -1
- package/dist/{renderer-KKk7myX1.mjs → renderer-puQhVfDS.mjs} +5 -5
- package/dist/{renderer-KKk7myX1.mjs.map → renderer-puQhVfDS.mjs.map} +1 -1
- package/dist/renderer-sMed1u1O.mjs +5 -0
- package/dist/renderer-tsAuo46l.mjs +5 -0
- package/dist/{renderer-TKZCA0B9.mjs → renderer-vll8LX0I.mjs} +211 -72
- package/dist/renderer-vll8LX0I.mjs.map +1 -0
- package/dist/{renderers-CP8CFWDs-DRoslK4F.mjs → renderers-CP8CFWDs-BRQyvcut.mjs} +4 -4
- package/dist/{renderers-CP8CFWDs-DRoslK4F.mjs.map → renderers-CP8CFWDs-BRQyvcut.mjs.map} +1 -1
- package/dist/sam/index.d.mts +3 -3
- package/dist/sam/index.mjs +1 -1
- package/dist/signals/index.d.mts +7 -7
- package/dist/signals/index.mjs +8 -8
- package/dist/{signals-BfJ1aqpT.mjs → signals-tiho_9fp.mjs} +4 -4
- package/dist/{signals-BfJ1aqpT.mjs.map → signals-tiho_9fp.mjs.map} +1 -1
- package/dist/{src-Bnr8DUC--BRDqRF6I.mjs → src-BU6vm9sP-DdTHmCr4.mjs} +76 -11
- package/dist/src-BU6vm9sP-DdTHmCr4.mjs.map +1 -0
- package/dist/{src-BYp6r-cS.mjs → src-BzFGotRc.mjs} +250 -30
- package/dist/src-BzFGotRc.mjs.map +1 -0
- package/dist/storage/index.d.mts +206 -0
- package/dist/storage/index.d.mts.map +1 -0
- package/dist/storage/index.mjs +3 -0
- package/package.json +67 -59
- package/dist/audio-CYZkDwae.d.mts.map +0 -1
- package/dist/cloud-xcfV4J03.mjs +0 -233
- package/dist/cloud-xcfV4J03.mjs.map +0 -1
- package/dist/dist-CWLLnigL.mjs.map +0 -1
- package/dist/dist-CySGkG54.mjs.map +0 -1
- package/dist/dist-EQX3TUUl.mjs.map +0 -1
- package/dist/gpu-CpkJJLQP.mjs.map +0 -1
- package/dist/index-BuiZzc6i.d.mts.map +0 -1
- package/dist/index-CEU_Zsb9.d.mts.map +0 -1
- package/dist/index-CdCrae-I.d.mts.map +0 -1
- package/dist/index-Cro-818i.d.mts.map +0 -1
- package/dist/index-D2i9J9Zq.d.mts.map +0 -1
- package/dist/index-gOVtTm-P.d.mts.map +0 -1
- package/dist/preview-BToKUTtZ.mjs.map +0 -1
- package/dist/preview-engine/chunk-4FY4TNST.mjs +0 -1
- package/dist/preview-engine/chunk-7LDSMOO3.mjs +0 -1
- package/dist/preview-engine/chunk-AGAZJZWI.mjs +0 -1
- package/dist/preview-engine/chunk-BXPM5SJ3.mjs +0 -1
- package/dist/preview-engine/chunk-C4M3B2Q2.mjs +0 -1
- package/dist/preview-engine/chunk-CIVJXFWH.mjs +0 -4
- package/dist/preview-engine/chunk-D73ZKPFN.mjs +0 -138
- package/dist/preview-engine/chunk-KOVN277Z.mjs +0 -1
- package/dist/preview-engine/chunk-M4QANUJI.mjs +0 -480
- package/dist/preview-engine/chunk-P4Y3PMJF.mjs +0 -1
- package/dist/preview-engine/chunk-SE2C623Z.mjs +0 -5
- package/dist/preview-engine/chunk-XF6DYP6B.mjs +0 -1974
- package/dist/preview-engine/chunk-XYGDTPO7.mjs +0 -39
- package/dist/preview-engine/chunk-YGKO4NIU.mjs +0 -1
- package/dist/preview-engine/renderers-2NGIILMI.mjs +0 -1
- package/dist/preview-engine/renderers-466Z77BH.mjs +0 -1
- package/dist/preview-engine/renderers-4KRENGZA.mjs +0 -1
- package/dist/preview-engine/renderers-4W52BQEU.mjs +0 -1
- package/dist/preview-engine/renderers-55PRAS7G.mjs +0 -1
- package/dist/preview-engine/renderers-5LLYINHW.mjs +0 -1
- package/dist/preview-engine/renderers-63N3Y2XO.mjs +0 -1
- package/dist/preview-engine/renderers-6ROVFDIN.mjs +0 -1
- package/dist/preview-engine/renderers-A4RVLPMG.mjs +0 -1
- package/dist/preview-engine/renderers-A53P4J6O.mjs +0 -1
- package/dist/preview-engine/renderers-AFJ3373L.mjs +0 -1
- package/dist/preview-engine/renderers-ATFWTA3U.mjs +0 -1
- package/dist/preview-engine/renderers-BPYJXHBU.mjs +0 -1
- package/dist/preview-engine/renderers-D3ZF7FXT.mjs +0 -1
- package/dist/preview-engine/renderers-D7YN6B4B.mjs +0 -1
- package/dist/preview-engine/renderers-DBLASKF5.mjs +0 -1
- package/dist/preview-engine/renderers-DC5ZYYHM.mjs +0 -1
- package/dist/preview-engine/renderers-J6ZEXW5L.mjs +0 -1
- package/dist/preview-engine/renderers-JV4MF46Q.mjs +0 -1
- package/dist/preview-engine/renderers-KQKH4ZIX.mjs +0 -1
- package/dist/preview-engine/renderers-MDHPQY6D.mjs +0 -1
- package/dist/preview-engine/renderers-MEITHN4N.mjs +0 -1
- package/dist/preview-engine/renderers-MN3HSBTJ.mjs +0 -1
- package/dist/preview-engine/renderers-NTG3QGNH.mjs +0 -1
- package/dist/preview-engine/renderers-OU4SFMB2.mjs +0 -1
- package/dist/preview-engine/renderers-P6TIBJIG.mjs +0 -1
- package/dist/preview-engine/renderers-POJWQ7L3.mjs +0 -1
- package/dist/preview-engine/renderers-RJ7S6VHD.mjs +0 -1
- package/dist/preview-engine/renderers-RJJAJZYN.mjs +0 -1
- package/dist/preview-engine/renderers-UEQ733VK.mjs +0 -1
- package/dist/preview-engine/renderers-ULO2AW2U.mjs +0 -1
- package/dist/preview-engine/renderers-UPVHGHCK.mjs +0 -1
- package/dist/preview-engine/renderers-UZHSNNIM.mjs +0 -1
- package/dist/preview-engine/renderers-V5KWZL2C.mjs +0 -1
- package/dist/preview-engine/renderers-WL372W36.mjs +0 -228
- package/dist/preview-engine/renderers-YMXKYOHQ.mjs +0 -1
- package/dist/preview-engine/renderers-YWDAZ2NZ.mjs +0 -1
- package/dist/program-Bc860ko5.mjs.map +0 -1
- package/dist/renderer--Ymc_4XJ.mjs +0 -5
- package/dist/renderer-B-OdV-eq.mjs +0 -5
- package/dist/renderer-B65fwoA2.mjs +0 -5
- package/dist/renderer-B92Ahkcv.mjs +0 -5
- package/dist/renderer-B9z2AK31.mjs +0 -5
- package/dist/renderer-BIF3Dg3Z.mjs +0 -5
- package/dist/renderer-BJUVaIAT.mjs +0 -5
- package/dist/renderer-BKRDMbI-.mjs +0 -5
- package/dist/renderer-BSwhyVWa.mjs +0 -5
- package/dist/renderer-BUqSZn2X.mjs +0 -5
- package/dist/renderer-BVKOQarx.d.mts +0 -99
- package/dist/renderer-BVKOQarx.d.mts.map +0 -1
- package/dist/renderer-BbmvjqK9.mjs +0 -3
- package/dist/renderer-Bbxh4N8Y.mjs.map +0 -1
- package/dist/renderer-BhsrlGKp.mjs.map +0 -1
- package/dist/renderer-Bpe4k_x6.mjs +0 -5
- package/dist/renderer-Bx14Wnxl.mjs.map +0 -1
- package/dist/renderer-C1NjG0CJ.mjs +0 -5
- package/dist/renderer-C7Puyst9.mjs +0 -5
- package/dist/renderer-CGA_7320.mjs +0 -5
- package/dist/renderer-CLnFkXO7.mjs +0 -5
- package/dist/renderer-CMQIT1Kh.mjs +0 -5
- package/dist/renderer-CQ1rwjIh.mjs +0 -5
- package/dist/renderer-CT8h0boY.mjs +0 -5
- package/dist/renderer-Cb0lszt3.mjs +0 -5
- package/dist/renderer-Ci7oLye9.mjs +0 -5
- package/dist/renderer-CjqXB3CZ.mjs +0 -5
- package/dist/renderer-CqTV04zQ.mjs +0 -5
- package/dist/renderer-CtWeRtHK.mjs +0 -5
- package/dist/renderer-CzolnwCo.mjs +0 -5
- package/dist/renderer-D6qhcx_C.mjs +0 -5
- package/dist/renderer-DDfEf0jt.mjs +0 -5
- package/dist/renderer-DDpa8ztp.mjs +0 -5
- package/dist/renderer-DbQBqzmx.mjs +0 -5
- package/dist/renderer-DfUcwMKa.mjs +0 -5
- package/dist/renderer-DgIjNANM.mjs +0 -6
- package/dist/renderer-Dsh6Tgu0.mjs +0 -3
- package/dist/renderer-DuIwR9GT.mjs +0 -5
- package/dist/renderer-Dv4u2c14.mjs +0 -5
- package/dist/renderer-HDj9Zb-O.mjs.map +0 -1
- package/dist/renderer-IE1yu3lZ.mjs +0 -5
- package/dist/renderer-PY_wnEN0.mjs +0 -5
- package/dist/renderer-TKZCA0B9.mjs.map +0 -1
- package/dist/renderer-gv24VyzO.mjs +0 -5
- package/dist/renderer-nN6lPZf9.mjs +0 -5
- package/dist/src-BYp6r-cS.mjs.map +0 -1
- package/dist/src-Bnr8DUC--BRDqRF6I.mjs.map +0 -1
- /package/dist/{chunk-W71TSjRM.mjs → chunk-DOL2i2sR.mjs} +0 -0
- /package/dist/{renderer-B6rZUBwE.mjs → renderer-Co2YqWX0.mjs} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-Bbxh4N8Y.mjs","names":["resolve","HeadlessWebGPURenderer","options","fs","AudioCopier","options","start","fs"],"sources":["../../renderer/dist/headless-webgpu-renderer-qPWYs6BY.mjs","../../renderer/dist/index.mjs","../src/renderer/framegrid.ts"],"sourcesContent":["import { createRequire } from \"node:module\";\nimport { preloadCompositionFonts } from \"@framefields/renderers\";\nimport pino from \"pino\";\nimport * as webcodecs from \"@napi-rs/webcodecs\";\nimport { VideoFrame } from \"@napi-rs/webcodecs\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { audioRegistry, registerWebGPURenderer } from \"@framefields/node-sdk\";\nimport { exec, spawn } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport fs$1 from \"node:fs/promises\";\nimport os from \"node:os\";\nimport { compositionStateStore, drawCompositionTree, mixAudioTracks, preflightMediaTime } from \"@framefields/compositions\";\nimport { frameCount, getMediaType, resolveFrameRequest, takeRenderDiagnostics, updateClockSignals } from \"@framefields/core\";\nimport { NodeSurfaceProvider, SlugFontCache, WebGPUAudioProcessor, clearAllVideoCache, ensureDevice, getRenderer2D, initHeadlessWebGPU, inputStore, lutStore, mediaDecoderCache, shaderStore, textureCache } from \"@framefields/webgpu-renderers\";\nimport { AudioSample, AudioSampleSource, FilePathTarget, Mp3OutputFormat, Mp4OutputFormat, Output, QUALITY_HIGH, QUALITY_LOW, QUALITY_VERY_HIGH, QUALITY_VERY_LOW, VideoSample, VideoSampleSource, WebMOutputFormat } from \"mediabunny\";\nimport sharp from \"sharp\";\nimport { Canvas, Image } from \"skia-canvas\";\nimport { registerMediabunnyServer } from \"@mediabunny/server\";\n\n//#region src/logger.ts\nconst env = typeof process !== \"undefined\" ? process.env : void 0;\n/**\n* \"json\" (pino lines, for log collectors) or \"text\" (one short line each, for\n* people and agents reading a terminal). `FRAMEFIELDS_LOG_FORMAT` picks one;\n* otherwise production is JSON and everything else text.\n*/\nfunction resolveLogFormat(vars = env) {\n\tconst format = vars?.FRAMEFIELDS_LOG_FORMAT?.toLowerCase();\n\tif (format === \"json\" || format === \"text\") return format;\n\treturn vars?.NODE_ENV === \"production\" ? \"json\" : \"text\";\n}\nconst LEVEL_TAGS = {\n\t40: \"warn: \",\n\t50: \"error: \",\n\t60: \"fatal: \"\n};\n/**\n* Turns pino's JSON lines into `[framefields] Rendered 40% (…)`: the message\n* without its `[Component]` prefix, the level only for warnings and errors,\n* and an error's message (its stack reaches the caller with the throw).\n*/\nfunction textLogStream(write = (line) => process.stderr.write(line)) {\n\treturn { write(json) {\n\t\tlet entry;\n\t\ttry {\n\t\t\tentry = JSON.parse(json);\n\t\t} catch {\n\t\t\twrite(json);\n\t\t\treturn;\n\t\t}\n\t\tconst msg = String(entry.msg ?? \"\").replace(/^\\[[^\\]]+\\]\\s*/, \"\");\n\t\twrite(`[framefields] ${LEVEL_TAGS[entry.level ?? 0] ?? \"\"}${msg}${entry.err?.message ? `: ${entry.err.message}` : \"\"}\\n`);\n\t} };\n}\nconst options = {\n\tlevel: env?.LOG_LEVEL || \"info\",\n\ttimestamp: pino.stdTimeFunctions.isoTime,\n\tbase: { component: \"renderer\" }\n};\nconst rendererLogger = resolveLogFormat() === \"text\" ? pino(options, textLogStream()) : pino(options);\n\n//#endregion\n//#region src/asset-preloader.ts\n/**\n* Preloads only the fonts (and emoji) a VirtualMediaData tree's text uses, so\n* typography renders correctly on Node.js without loading its media. Shared\n* with the browser preview; emoji need a font set with\n* `FontManager.registerEmojiFont()`.\n*/\nasync function preloadFonts(media, device = null) {\n\tif (!media) return;\n\tawait preloadCompositionFonts(media, device, (err, what) => rendererLogger.error(err, `[HeadlessMediaRenderer] Failed to preload ${what}`));\n}\n\n//#endregion\n//#region src/dma-staging-ring.ts\n/**\n* Pipelined Asynchronous DMA Staging Ring for WebGPU.\n*\n* Implements double-buffered (or N-buffered) GPU staging buffers to overlap\n* GPU render passes with asynchronous DMA host transfers and WebCodecs hardware encoding.\n* Eliminates GPU stalls by allowing Frame i+1 to execute on the GPU while Frame i\n* is asynchronously mapped and consumed by the hardware video encoder.\n*/\nvar DmaStagingRing = class {\n\twidth;\n\theight;\n\tcapacity;\n\tbytesPerRow;\n\tunpaddedBytesPerRow;\n\tbufferSize;\n\tformat;\n\tdevice;\n\tslots;\n\tisDestroyed = false;\n\tconstructor(device, options$1) {\n\t\tthis.device = device;\n\t\tthis.width = options$1.width;\n\t\tthis.height = options$1.height;\n\t\tthis.capacity = Math.max(2, options$1.capacity ?? 2);\n\t\tthis.format = options$1.format ?? \"rgba8unorm\";\n\t\tthis.unpaddedBytesPerRow = this.width * 4;\n\t\tconst rowAlignment = 256;\n\t\tthis.bytesPerRow = Math.ceil(this.unpaddedBytesPerRow / rowAlignment) * rowAlignment;\n\t\tthis.bufferSize = this.bytesPerRow * this.height;\n\t\tthis.slots = [];\n\t\tfor (let i = 0; i < this.capacity; i++) {\n\t\t\tconst buffer = device.createBuffer({\n\t\t\t\tsize: this.bufferSize,\n\t\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t\t\t});\n\t\t\tthis.slots.push({\n\t\t\t\tindex: i,\n\t\t\t\tbuffer,\n\t\t\t\tstatus: \"idle\",\n\t\t\t\tinFlightFrame: null,\n\t\t\t\tmapPromise: null\n\t\t\t});\n\t\t}\n\t}\n\t/**\n\t* Prepares the staging buffer slot for writing by ensuring any prior mapping\n\t* from a previous cycle has been completed and unmapped.\n\t*/\n\tasync prepareSlot(frameIndex) {\n\t\tthis.checkDestroyed();\n\t\tconst slot = this.slots[frameIndex % this.capacity];\n\t\tif (!slot) return;\n\t\tif (slot.status === \"mapping\" && slot.mapPromise) await slot.mapPromise;\n\t\tif (slot.status === \"mapped\") {\n\t\t\tslot.buffer.unmap();\n\t\t\tslot.status = \"idle\";\n\t\t\tslot.inFlightFrame = null;\n\t\t\tslot.mapPromise = null;\n\t\t}\n\t}\n\t/**\n\t* Records a GPU-to-buffer DMA copy command into the provided command encoder.\n\t*/\n\tstageTexture(encoder, texture, frameIndex) {\n\t\tthis.checkDestroyed();\n\t\tconst slot = this.slots[frameIndex % this.capacity];\n\t\tif (!slot) throw new Error(`Invalid slot index for frame ${frameIndex}`);\n\t\tif (slot.status === \"mapped\" || slot.status === \"mapping\") throw new Error(`Staging buffer slot ${slot.index} is busy (status: ${slot.status}) for frame ${frameIndex}. Call prepareSlot() before staging.`);\n\t\tencoder.copyTextureToBuffer({ texture }, {\n\t\t\tbuffer: slot.buffer,\n\t\t\tbytesPerRow: this.bytesPerRow\n\t\t}, [this.width, this.height]);\n\t\tslot.status = \"rendering\";\n\t\tslot.inFlightFrame = frameIndex;\n\t}\n\t/**\n\t* Initiates asynchronous DMA mapping on the slot for the specified frame.\n\t* Must be called immediately after submitting the command encoder to the device queue.\n\t*/\n\tscheduleMap(frameIndex) {\n\t\tthis.checkDestroyed();\n\t\tconst slot = this.slots[frameIndex % this.capacity];\n\t\tif (!slot) throw new Error(`Invalid slot index for frame ${frameIndex}`);\n\t\tslot.status = \"mapping\";\n\t\tconst mapPromise = slot.buffer.mapAsync(GPUMapMode.READ).then(() => {\n\t\t\tslot.status = \"mapped\";\n\t\t});\n\t\tslot.mapPromise = mapPromise;\n\t\treturn mapPromise;\n\t}\n\t/**\n\t* Awaits asynchronous mapping and extracts pixels into a tightly packed Uint8Array.\n\t* The slot remains in the \"mapped\" state until releaseFrame() is called.\n\t*/\n\tasync readFramePixels(frameIndex) {\n\t\tthis.checkDestroyed();\n\t\tconst slot = this.slots[frameIndex % this.capacity];\n\t\tif (!slot) throw new Error(`Invalid slot index for frame ${frameIndex}`);\n\t\tif (slot.mapPromise) await slot.mapPromise;\n\t\tif (slot.status !== \"mapped\") throw new Error(`Staging slot ${slot.index} is not mapped (status: ${slot.status}) for frame ${frameIndex}`);\n\t\tconst mappedRange = slot.buffer.getMappedRange();\n\t\tconst sourceView = new Uint8Array(mappedRange);\n\t\tconst output = new Uint8Array(this.unpaddedBytesPerRow * this.height);\n\t\tif (this.bytesPerRow === this.unpaddedBytesPerRow) output.set(sourceView);\n\t\telse for (let y = 0; y < this.height; y++) {\n\t\t\tconst srcOffset = y * this.bytesPerRow;\n\t\t\tconst dstOffset = y * this.unpaddedBytesPerRow;\n\t\t\toutput.set(sourceView.subarray(srcOffset, srcOffset + this.unpaddedBytesPerRow), dstOffset);\n\t\t}\n\t\treturn output;\n\t}\n\t/**\n\t* Awaits asynchronous mapping, extracts pixels, and immediately unmaps the staging buffer,\n\t* returning the slot to \"idle\" state so it can be reused immediately.\n\t*/\n\tasync readAndReleaseFrame(frameIndex) {\n\t\tconst pixels = await this.readFramePixels(frameIndex);\n\t\tthis.releaseFrame(frameIndex);\n\t\treturn pixels;\n\t}\n\t/**\n\t* Directly reads the mapped staging buffer into a WebCodecs VideoFrame,\n\t* bypassing redundant intermediate JS allocations when row pitches align,\n\t* and immediately unmaps the buffer.\n\t*/\n\tasync readFrameToVideoFrame(frameIndex, timestampUs, colorSpace, inspect) {\n\t\tthis.checkDestroyed();\n\t\tconst slot = this.slots[frameIndex % this.capacity];\n\t\tif (!slot) throw new Error(`Invalid slot index for frame ${frameIndex}`);\n\t\tif (slot.mapPromise) await slot.mapPromise;\n\t\tif (slot.status !== \"mapped\") throw new Error(`Staging slot ${slot.index} is not mapped (status: ${slot.status}) for frame ${frameIndex}`);\n\t\tconst mappedRange = slot.buffer.getMappedRange();\n\t\tconst sourceView = new Uint8Array(mappedRange);\n\t\tlet pixelData;\n\t\tif (this.bytesPerRow === this.unpaddedBytesPerRow) pixelData = sourceView;\n\t\telse {\n\t\t\tpixelData = new Uint8Array(this.unpaddedBytesPerRow * this.height);\n\t\t\tfor (let y = 0; y < this.height; y++) {\n\t\t\t\tconst srcOffset = y * this.bytesPerRow;\n\t\t\t\tconst dstOffset = y * this.unpaddedBytesPerRow;\n\t\t\t\tpixelData.set(sourceView.subarray(srcOffset, srcOffset + this.unpaddedBytesPerRow), dstOffset);\n\t\t\t}\n\t\t}\n\t\tinspect?.(pixelData);\n\t\tconst vf = new VideoFrame(pixelData, {\n\t\t\tformat: \"RGBA\",\n\t\t\tcodedWidth: this.width,\n\t\t\tcodedHeight: this.height,\n\t\t\ttimestamp: timestampUs,\n\t\t\tcolorSpace: {\n\t\t\t\tprimaries: colorSpace?.primaries ?? \"bt709\",\n\t\t\t\ttransfer: colorSpace?.transfer ?? \"bt709\",\n\t\t\t\tmatrix: colorSpace?.matrix ?? \"bt709\",\n\t\t\t\tfullRange: colorSpace?.fullRange ?? false\n\t\t\t}\n\t\t});\n\t\tthis.releaseFrame(frameIndex);\n\t\treturn vf;\n\t}\n\t/**\n\t* Unmaps the staging buffer for the specified frame and marks the slot idle.\n\t*/\n\treleaseFrame(frameIndex) {\n\t\tconst slot = this.slots[frameIndex % this.capacity];\n\t\tif (!slot) return;\n\t\tif (slot.status === \"mapped\") {\n\t\t\ttry {\n\t\t\t\tslot.buffer.unmap();\n\t\t\t} catch (_) {}\n\t\t\tslot.status = \"idle\";\n\t\t\tslot.inFlightFrame = null;\n\t\t\tslot.mapPromise = null;\n\t\t}\n\t}\n\t/**\n\t* Returns current status info for each slot in the ring.\n\t*/\n\tgetSlotInfos() {\n\t\treturn this.slots.map((slot) => ({\n\t\t\tindex: slot.index,\n\t\t\tstatus: slot.status,\n\t\t\tinFlightFrame: slot.inFlightFrame\n\t\t}));\n\t}\n\t/**\n\t* Destroys all staging buffers and releases resources.\n\t*/\n\tdestroy() {\n\t\tif (this.isDestroyed) return;\n\t\tthis.isDestroyed = true;\n\t\tfor (const slot of this.slots) {\n\t\t\tif (slot.status === \"mapped\") try {\n\t\t\t\tslot.buffer.unmap();\n\t\t\t} catch (_) {}\n\t\t\tslot.status = \"idle\";\n\t\t\tslot.inFlightFrame = null;\n\t\t\tslot.mapPromise = null;\n\t\t}\n\t\tthis.slots.length = 0;\n\t}\n\tcheckDestroyed() {\n\t\tif (this.isDestroyed) throw new Error(\"DmaStagingRing has been destroyed\");\n\t}\n};\n\n//#endregion\n//#region src/generated/node-renderers.ts\nconst BUILTIN_NODE_RENDERERS = [\n\t{\n\t\tpackageName: \"@framefields/node-lut\",\n\t\tops: [\"ApplyLUT\"],\n\t\tload: () => import(\"@framefields/node-lut/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-ascii\",\n\t\tops: [\"Ascii\"],\n\t\tload: () => import(\"@framefields/node-ascii/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-audio-compressor\",\n\t\tops: [\"AudioCompressor\"],\n\t\tload: () => import(\"@framefields/node-audio-compressor/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-audio-delay\",\n\t\tops: [\"AudioDelay\"],\n\t\tload: () => import(\"@framefields/node-audio-delay/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-audio-fade\",\n\t\tops: [\"AudioFade\"],\n\t\tload: () => import(\"@framefields/node-audio-fade/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-audio-noise-gate\",\n\t\tops: [\"AudioNoiseGate\"],\n\t\tload: () => import(\"@framefields/node-audio-noise-gate/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-audio-parametric-eq\",\n\t\tops: [\"AudioParametricEq\"],\n\t\tload: () => import(\"@framefields/node-audio-parametric-eq/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-audio-reverb\",\n\t\tops: [\"AudioReverb\"],\n\t\tload: () => import(\"@framefields/node-audio-reverb/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-audio-signal-extractor\",\n\t\tops: [\"AudioSignalExtractor\"],\n\t\tload: () => import(\"@framefields/node-audio-signal-extractor/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-blur\",\n\t\tops: [\"Blur\"],\n\t\tload: () => import(\"@framefields/node-blur/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-camera-parallax-3d\",\n\t\tops: [\"CameraParallax3D\"],\n\t\tload: () => import(\"@framefields/node-camera-parallax-3d/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-canvas-generator\",\n\t\tops: [\"CanvasGenerator\"],\n\t\tload: () => import(\"@framefields/node-canvas-generator/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-channel-merger\",\n\t\tops: [\"ChannelMerger\"],\n\t\tload: () => import(\"@framefields/node-channel-merger/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-channel-splitter\",\n\t\tops: [\"ChannelSplitter\"],\n\t\tload: () => import(\"@framefields/node-channel-splitter/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-color-balance\",\n\t\tops: [\"ColorBalance\"],\n\t\tload: () => import(\"@framefields/node-color-balance/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-colorkey\",\n\t\tops: [\"ColorKey\"],\n\t\tload: () => import(\"@framefields/node-colorkey/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-compositor\",\n\t\tops: [\"Compositor\"],\n\t\tload: () => import(\"@framefields/node-compositor/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-contour\",\n\t\tops: [\"Contour\"],\n\t\tload: () => import(\"@framefields/node-contour/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-corner-pin\",\n\t\tops: [\"CornerPin\"],\n\t\tload: () => import(\"@framefields/node-corner-pin/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-crop\",\n\t\tops: [\"Crop\"],\n\t\tload: () => import(\"@framefields/node-crop/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-crt\",\n\t\tops: [\"CRT\"],\n\t\tload: () => import(\"@framefields/node-crt/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-curves\",\n\t\tops: [\"Curves\"],\n\t\tload: () => import(\"@framefields/node-curves/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-datamosh\",\n\t\tops: [\"Datamosh\"],\n\t\tload: () => import(\"@framefields/node-datamosh/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-deflicker\",\n\t\tops: [\"TemporalDeflicker\", \"Deflicker\"],\n\t\tload: () => import(\"@framefields/node-deflicker/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-displacement-map\",\n\t\tops: [\"DisplacementMap\"],\n\t\tload: () => import(\"@framefields/node-displacement-map/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-dither\",\n\t\tops: [\"Dither\"],\n\t\tload: () => import(\"@framefields/node-dither/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-extract-frame\",\n\t\tops: [\"ExtractFrame\"],\n\t\tload: () => import(\"@framefields/node-extract-frame/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-extract-lut\",\n\t\tops: [\"ExtractLUT\"],\n\t\tload: () => import(\"@framefields/node-extract-lut/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-film-grain\",\n\t\tops: [\"FilmGrain\"],\n\t\tload: () => import(\"@framefields/node-film-grain/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-flip\",\n\t\tops: [\"Flip\"],\n\t\tload: () => import(\"@framefields/node-flip/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-gooey\",\n\t\tops: [\"Gooey\"],\n\t\tload: () => import(\"@framefields/node-gooey/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-gradient-map\",\n\t\tops: [\"GradientMap\"],\n\t\tload: () => import(\"@framefields/node-gradient-map/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-halftone-screen\",\n\t\tops: [\"HalftoneScreen\"],\n\t\tload: () => import(\"@framefields/node-halftone-screen/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-high-pass\",\n\t\tops: [\"HighPass\"],\n\t\tload: () => import(\"@framefields/node-high-pass/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-iridescence\",\n\t\tops: [\"Iridescence\"],\n\t\tload: () => import(\"@framefields/node-iridescence/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-kaleidoscope\",\n\t\tops: [\"Kaleidoscope\"],\n\t\tload: () => import(\"@framefields/node-kaleidoscope/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-kenburns\",\n\t\tops: [\"KenBurns\"],\n\t\tload: () => import(\"@framefields/node-kenburns/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-layer-style\",\n\t\tops: [\"LayerStyle\"],\n\t\tload: () => import(\"@framefields/node-layer-style/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-levels\",\n\t\tops: [\"Levels\"],\n\t\tload: () => import(\"@framefields/node-levels/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-liquify\",\n\t\tops: [\"Liquify\"],\n\t\tload: () => import(\"@framefields/node-liquify/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-mask-math\",\n\t\tops: [\"MaskMath\"],\n\t\tload: () => import(\"@framefields/node-mask-math/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-mesh-warp\",\n\t\tops: [\"MeshWarp\"],\n\t\tload: () => import(\"@framefields/node-mesh-warp/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-modulate\",\n\t\tops: [\"Modulate\"],\n\t\tload: () => import(\"@framefields/node-modulate/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-noise-generator\",\n\t\tops: [\"NoiseGenerator\"],\n\t\tload: () => import(\"@framefields/node-noise-generator/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-op-art\",\n\t\tops: [\"OpArt\"],\n\t\tload: () => import(\"@framefields/node-op-art/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-paint\",\n\t\tops: [\"Paint\"],\n\t\tload: () => import(\"@framefields/node-paint/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-painterly\",\n\t\tops: [\"Painterly\"],\n\t\tload: () => import(\"@framefields/node-painterly/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-particles\",\n\t\tops: [\"Particles\"],\n\t\tload: () => import(\"@framefields/node-particles/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-patch-heal\",\n\t\tops: [\"PatchHeal\"],\n\t\tload: () => import(\"@framefields/node-patch-heal/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-pixelate\",\n\t\tops: [\"Pixelate\"],\n\t\tload: () => import(\"@framefields/node-pixelate/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-posterize\",\n\t\tops: [\"Posterize\"],\n\t\tload: () => import(\"@framefields/node-posterize/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-procedural-vfx\",\n\t\tops: [\"ProceduralVFX\"],\n\t\tload: () => import(\"@framefields/node-procedural-vfx/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-refine-edge\",\n\t\tops: [\"RefineEdge\"],\n\t\tload: () => import(\"@framefields/node-refine-edge/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-refraction-caustics\",\n\t\tops: [\"RefractionCaustics3D\"],\n\t\tload: () => import(\"@framefields/node-refraction-caustics/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-relight-3d\",\n\t\tops: [\"Relight3D\"],\n\t\tload: () => import(\"@framefields/node-relight-3d/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-resizer-scaler\",\n\t\tops: [\"ResizerScaler\"],\n\t\tload: () => import(\"@framefields/node-resizer-scaler/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-rgb-split\",\n\t\tops: [\"RGBSplit\"],\n\t\tload: () => import(\"@framefields/node-rgb-split/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-rotate\",\n\t\tops: [\"Rotate\"],\n\t\tload: () => import(\"@framefields/node-rotate/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-selective-color\",\n\t\tops: [\"SelectiveColor\"],\n\t\tload: () => import(\"@framefields/node-selective-color/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-shadows-highlights\",\n\t\tops: [\"ShadowsHighlights\"],\n\t\tload: () => import(\"@framefields/node-shadows-highlights/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-shape-generator\",\n\t\tops: [\"ShapeGenerator\"],\n\t\tload: () => import(\"@framefields/node-shape-generator/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-signal-gate\",\n\t\tops: [\"SignalGate\"],\n\t\tload: () => import(\"@framefields/node-signal-gate/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-stereo-panning\",\n\t\tops: [\"StereoPanning\"],\n\t\tload: () => import(\"@framefields/node-stereo-panning/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-tile-offset\",\n\t\tops: [\"TileOffset\"],\n\t\tload: () => import(\"@framefields/node-tile-offset/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-toon\",\n\t\tops: [\"Toon\"],\n\t\tload: () => import(\"@framefields/node-toon/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-trails\",\n\t\tops: [\"Trails\"],\n\t\tload: () => import(\"@framefields/node-trails/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-unsharp-mask\",\n\t\tops: [\"UnsharpMask\"],\n\t\tload: () => import(\"@framefields/node-unsharp-mask/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-vignette\",\n\t\tops: [\"Vignette\"],\n\t\tload: () => import(\"@framefields/node-vignette/renderer\")\n\t},\n\t{\n\t\tpackageName: \"@framefields/node-vision\",\n\t\tops: [\"Vision\"],\n\t\tload: () => import(\"@framefields/node-vision/renderer\")\n\t}\n];\n\n//#endregion\n//#region src/node-manifest.ts\n/**\n* The `framefields` block of a node package's `package.json`.\n*\n* This is the single declaration of a node's op: renderer discovery, the\n* effects generator (`scripts/generate-effects.ts`) and the skill catalog all\n* read it from here. There is deliberately no fallback that derives an op from\n* the package name. See `spec/sync-node.md` §5.1.\n*/\nconst NODE_KINDS = [\n\t\"effect\",\n\t\"audio\",\n\t\"source\",\n\t\"signal\",\n\t\"utility\"\n];\nconst IDENTIFIER = /^[A-Za-z][A-Za-z0-9]*$/;\nvar NodeManifestError = class extends Error {\n\tconstructor(problems) {\n\t\tsuper(`Invalid node manifest(s):\\n${problems.map((p) => ` - ${p}`).join(\"\\n\")}`);\n\t\tthis.problems = problems;\n\t\tthis.name = \"NodeManifestError\";\n\t}\n};\nfunction isRecord(value) {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n/**\n* Validates one parsed `package.json`. Returns the manifest, or the list of\n* problems that make it unusable. Never throws.\n*/\nfunction parseNodeManifest(pkg, dir, nodePath = dir) {\n\tconst problems = [];\n\tif (!isRecord(pkg)) return { problems: [`${dir}: package.json is not an object`] };\n\tconst block = pkg.framefields;\n\tif (!isRecord(block)) return { problems: [`${dir}: package.json has no \"framefields\" block (expected { \"type\": \"<Op>\", \"kind\": \"<kind>\" })`] };\n\tconst { type, kind, aliases, schema, className, factory, custom } = block;\n\tif (typeof type !== \"string\" || !IDENTIFIER.test(type)) problems.push(`${dir}: framefields.type must be an op identifier`);\n\tif (typeof kind !== \"string\" || !NODE_KINDS.includes(kind)) problems.push(`${dir}: framefields.kind must be one of ${NODE_KINDS.join(\", \")}`);\n\tif (aliases !== void 0 && !(Array.isArray(aliases) && aliases.every((a) => typeof a === \"string\" && IDENTIFIER.test(a)))) problems.push(`${dir}: framefields.aliases must be an array of op identifiers`);\n\tfor (const [key, value] of Object.entries({\n\t\tschema,\n\t\tclassName,\n\t\tfactory\n\t})) if (value !== void 0 && (typeof value !== \"string\" || !IDENTIFIER.test(value))) problems.push(`${dir}: framefields.${key} must be an identifier`);\n\tif (custom !== void 0 && typeof custom !== \"boolean\") problems.push(`${dir}: framefields.custom must be a boolean`);\n\tif (problems.length > 0) return { problems };\n\tconst exportsField = isRecord(pkg.exports) ? pkg.exports[\"./renderer\"] : null;\n\tconst legacy = isRecord(pkg.gatewai) ? pkg.gatewai : {};\n\treturn {\n\t\tproblems,\n\t\tmanifest: {\n\t\t\tdir,\n\t\t\tpath: nodePath,\n\t\t\tpackageName: typeof pkg.name === \"string\" ? pkg.name : dir,\n\t\t\ttype,\n\t\t\tkind,\n\t\t\taliases: aliases ?? [],\n\t\t\tschema,\n\t\t\tclassName,\n\t\t\tfactory,\n\t\t\tcustom: custom === true,\n\t\t\tenabled: legacy.enabled !== false,\n\t\t\trendererExports: isRecord(exportsField) ? exportsField : void 0\n\t\t}\n\t};\n}\n/**\n* Reads every `nodes/node-*` package and returns its manifest, sorted by\n* directory name. Throws a single {@link NodeManifestError} listing every\n* problem: a missing or malformed block, or an op/alias claimed twice.\n*/\nfunction loadNodeManifests(nodesDir) {\n\tconst problems = [];\n\tconst manifests = [];\n\tconst dirs = fs.readdirSync(nodesDir).filter((d) => d.startsWith(\"node-\") && fs.existsSync(path.join(nodesDir, d, \"package.json\"))).sort();\n\tfor (const dir of dirs) {\n\t\tconst nodePath = path.join(nodesDir, dir);\n\t\tlet pkg;\n\t\ttry {\n\t\t\tpkg = JSON.parse(fs.readFileSync(path.join(nodePath, \"package.json\"), \"utf-8\"));\n\t\t} catch (err) {\n\t\t\tproblems.push(`${dir}: package.json is not valid JSON (${String(err)})`);\n\t\t\tcontinue;\n\t\t}\n\t\tconst parsed = parseNodeManifest(pkg, dir, nodePath);\n\t\tproblems.push(...parsed.problems);\n\t\tif (parsed.manifest) manifests.push(parsed.manifest);\n\t}\n\tconst owners = /* @__PURE__ */ new Map();\n\tfor (const manifest of manifests) for (const op of [manifest.type, ...manifest.aliases]) {\n\t\tconst owner = owners.get(op);\n\t\tif (owner) problems.push(`${manifest.dir}: op \"${op}\" is already declared by ${owner}`);\n\t\telse owners.set(op, manifest.dir);\n\t}\n\tif (problems.length > 0) throw new NodeManifestError(problems);\n\treturn manifests;\n}\n\n//#endregion\n//#region src/dynamic-node-discovery.ts\nlet __filename = \"\";\nlet __dirname = \"\";\nif (typeof process !== \"undefined\" && !!process.versions?.node) {\n\t__filename = fileURLToPath(import.meta.url);\n\t__dirname = path.dirname(__filename);\n}\n/** Locates the workspace `nodes/` directory by climbing up from this file. */\nfunction findNodesDir(startDir = __dirname) {\n\tlet nodesDir = path.resolve(startDir, \"../../../nodes\");\n\tlet currentDir = startDir;\n\twhile (true) {\n\t\tif (fs.existsSync(nodesDir)) {\n\t\t\tif (fs.readdirSync(nodesDir).some((d) => d.startsWith(\"node-\") && fs.existsSync(path.join(nodesDir, d, \"package.json\")))) return nodesDir;\n\t\t}\n\t\tconst parentDir = path.dirname(currentDir);\n\t\tif (parentDir === currentDir) return null;\n\t\tcurrentDir = parentDir;\n\t\tnodesDir = path.resolve(currentDir, \"nodes\");\n\t}\n}\n/**\n* Picks the renderer entry file: development source in dev/vitest, otherwise\n* the bundled dist, falling back to source when dist has not been built.\n*/\nfunction resolveRendererEntry(nodePath, rendererExports) {\n\tconst exists = (rel) => !!rel && fs.existsSync(path.join(nodePath, rel));\n\tif ((process.env.NODE_ENV !== \"production\" || Boolean(process.env.VITEST)) && exists(rendererExports.development)) return rendererExports.development;\n\tconst bundled = rendererExports.import || rendererExports.default;\n\tif (exists(bundled)) return bundled;\n\tif (exists(rendererExports.development)) return rendererExports.development;\n}\nasync function registerNode(manifest) {\n\tif (!manifest.rendererExports) return;\n\tconst entry = resolveRendererEntry(manifest.path, manifest.rendererExports);\n\tif (!entry) return;\n\tconst mod = await import(pathToFileURL(path.join(manifest.path, entry)).href);\n\tregisterPlugin([manifest.type, ...manifest.aliases], mod?.default);\n}\nfunction registerPlugin(ops, rendererPlugin) {\n\tif (!rendererPlugin) return;\n\tif (rendererPlugin.WebGPURenderer) for (const op of ops) registerWebGPURenderer(op, rendererPlugin.WebGPURenderer);\n\tif (rendererPlugin.audioProcessor) for (const op of ops) audioRegistry.register(op, rendererPlugin.audioProcessor);\n}\n/**\n* Registers the renderers bundled with this package. They are imported by\n* package name, so they resolve from `node_modules` (or the published bundle)\n* and never depend on a `nodes/` directory on disk.\n*/\nasync function registerBuiltinNodeRenderers() {\n\tconst failed = [];\n\tawait Promise.all(BUILTIN_NODE_RENDERERS.map(async ({ packageName, ops, load }) => {\n\t\ttry {\n\t\t\tregisterPlugin(ops, (await load()).default);\n\t\t} catch (err) {\n\t\t\tfailed.push(packageName);\n\t\t\tconsole.error(`[HeadlessWebGPURenderer] Failed to load renderer ${packageName}:`, err);\n\t\t}\n\t}));\n\tif (failed.length === BUILTIN_NODE_RENDERERS.length) throw new Error(\"[HeadlessWebGPURenderer] No built-in node renderers could be loaded.\");\n}\n/**\n* Registers the built-in node renderers, then any extra nodes found in the\n* directory named by `FRAMEFIELDS_NODES_DIR` (local node development). A node in\n* that directory overrides the built-in renderer for the same op.\n*/\nasync function discoverAndRegisterNodeRenderers() {\n\tif (typeof process === \"undefined\" || !process.versions?.node) return;\n\tawait registerBuiltinNodeRenderers();\n\tconst extraDir = process.env.FRAMEFIELDS_NODES_DIR;\n\tif (!extraDir) return;\n\tconst nodesDir = path.resolve(extraDir);\n\tif (!fs.existsSync(nodesDir)) {\n\t\tconsole.warn(`[HeadlessWebGPURenderer] FRAMEFIELDS_NODES_DIR does not exist: ${nodesDir}`);\n\t\treturn;\n\t}\n\trendererLogger.debug(`[HeadlessWebGPURenderer] Discovering node renderers in: ${nodesDir}`);\n\tconst manifests = loadNodeManifests(nodesDir);\n\tfor (const manifest of manifests) {\n\t\tif (!manifest.enabled) continue;\n\t\ttry {\n\t\t\tawait registerNode(manifest);\n\t\t} catch (err) {\n\t\t\tconsole.error(`[HeadlessWebGPURenderer] Failed to discover renderer for node ${manifest.dir}:`, err);\n\t\t}\n\t}\n}\n\n//#endregion\n//#region src/video-encoders.ts\nlet nodeAv;\n/**\n* node-av as @mediabunny/server loads it, with software encoders as the\n* default. The patch and the HardwareContext instances returned to the server\n* must come from that exact module instance, so the file is resolved from the\n* server package and imported natively (a `require()` can be routed through\n* a loader such as tsx and produce a second copy).\n*/\nfunction loadNodeAv() {\n\tnodeAv ??= (async () => {\n\t\tconst av = await import(pathToFileURL(createRequire(createRequire(import.meta.url).resolve(\"@mediabunny/server\")).resolve(\"node-av\")).href);\n\t\tpreferSoftwareEncoders(av);\n\t\treturn av;\n\t})();\n\treturn nodeAv;\n}\n/**\n* Software encoders to use per codec, best first. @mediabunny/server takes\n* `Codec.findEncoder(id)` as its software encoder, which returns whichever\n* encoder FFmpeg registered first. In node-av's linux-arm64 build that is a\n* hardware encoder (h264_rkmpp, hevc_rkmpp), which fails without Rockchip\n* hardware.\n*/\nconst SOFTWARE_ENCODERS = {\n\tAV_CODEC_ID_H264: [\"libx264\", \"libopenh264\"],\n\tAV_CODEC_ID_HEVC: [\"libx265\"],\n\tAV_CODEC_ID_VP8: [\"libvpx\"],\n\tAV_CODEC_ID_VP9: [\"libvpx-vp9\"],\n\tAV_CODEC_ID_AV1: [\n\t\t\"libsvtav1\",\n\t\t\"libaom-av1\",\n\t\t\"libdav1d\"\n\t]\n};\nlet patched = false;\n/** Makes `Codec.findEncoder` return a software encoder when one exists. */\nfunction preferSoftwareEncoders(av) {\n\tif (patched) return;\n\tpatched = true;\n\tconst byId = /* @__PURE__ */ new Map();\n\tfor (const [constant, names] of Object.entries(SOFTWARE_ENCODERS)) {\n\t\tconst id = av[constant];\n\t\tif (typeof id === \"number\") byId.set(id, names);\n\t}\n\tconst findEncoder = av.Codec.findEncoder.bind(av.Codec);\n\tav.Codec.findEncoder = ((id) => {\n\t\tfor (const name of byId.get(id) ?? []) {\n\t\t\tconst codec = av.Codec.findEncoderByName(name);\n\t\t\tif (codec) return codec;\n\t\t}\n\t\treturn findEncoder(id);\n\t});\n}\n/**\n* Opens the encoder with the settings @mediabunny/server uses and encodes one\n* frame. A hardware encoder can be compiled in and still be unusable: no such\n* hardware (rkmpp on a non-Rockchip board), or a GPU without an encoder block\n* (NVIDIA A100/H100 have no NVENC).\n*/\nasync function encoderWorks(av, codec) {\n\tconst ctx = new av.CodecContext();\n\tconst frame = new av.Frame();\n\tconst packet = new av.Packet();\n\ttry {\n\t\tctx.allocContext3(codec);\n\t\tconst formats = codec.pixelFormats;\n\t\tconst pixelFormat = !formats || formats.includes(av.AV_PIX_FMT_YUV420P) ? av.AV_PIX_FMT_YUV420P : formats[0];\n\t\tctx.width = 256;\n\t\tctx.height = 256;\n\t\tctx.pixelFormat = pixelFormat;\n\t\tctx.timeBase = new av.Rational(1, 1e6);\n\t\tctx.framerate = new av.Rational(30, 1);\n\t\tctx.gopSize = 60;\n\t\tctx.bitRate = 1000000n;\n\t\tif (await ctx.open2() < 0) return false;\n\t\tframe.alloc();\n\t\tframe.format = pixelFormat;\n\t\tframe.width = 256;\n\t\tframe.height = 256;\n\t\tif (frame.getBuffer() < 0) return false;\n\t\tframe.pts = 0n;\n\t\tpacket.alloc();\n\t\tif (await ctx.sendFrame(frame) < 0) return false;\n\t\tif (await ctx.sendFrame(null) < 0) return false;\n\t\tfor (;;) {\n\t\t\tconst ret = await ctx.receivePacket(packet);\n\t\t\tif (ret >= 0) return true;\n\t\t\tif (ret !== av.AVERROR_EAGAIN) return false;\n\t\t}\n\t} catch {\n\t\treturn false;\n\t} finally {\n\t\tpacket.free();\n\t\tframe.free();\n\t\tctx.freeContext();\n\t}\n}\n/** True when the env turns hardware video encoding/decoding off. */\nfunction hardwareDisabled() {\n\tconst value = process.env.FRAMEFIELDS_HW_CODECS?.toLowerCase();\n\treturn value === \"0\" || value === \"off\" || value === \"false\";\n}\n/**\n* Returns the `hardwareContext` option for registerMediabunnyServer: the\n* platform's hardware context for codecs whose hardware encoder actually\n* works (NVENC, VideoToolbox, ...), and null otherwise, so that codec is\n* encoded in software. Each codec is tested once per process.\n*\n* The server calls this before it picks any encoder (unless the encoder is\n* created with \"prefer-software\"), so the software default is patched in by\n* then.\n*/\nfunction hardwareContextResolver(forceSoftware) {\n\tlet hw;\n\tconst verdicts = /* @__PURE__ */ new Map();\n\tconst resolve = async (codecId) => {\n\t\tconst av = await loadNodeAv();\n\t\tif (forceSoftware || hardwareDisabled()) return null;\n\t\tif (hw === void 0) hw = av.HardwareContext.auto();\n\t\tif (!hw) return null;\n\t\tconst encoder = hw.getEncoderCodec(codecId);\n\t\tif (!encoder) return hw;\n\t\tif (await encoderWorks(av, encoder)) {\n\t\t\trendererLogger.info({\n\t\t\t\tencoder: encoder.name,\n\t\t\t\tdevice: hw.deviceTypeName\n\t\t\t}, \"[video-encoders] Using hardware video encoder\");\n\t\t\treturn hw;\n\t\t}\n\t\trendererLogger.warn({\n\t\t\tencoder: encoder.name,\n\t\t\tdevice: hw.deviceTypeName\n\t\t}, \"[video-encoders] Hardware video encoder unusable; encoding in software\");\n\t\treturn null;\n\t};\n\treturn (codecId) => {\n\t\tlet verdict = verdicts.get(codecId);\n\t\tif (!verdict) {\n\t\t\tverdict = resolve(codecId).catch(async (err) => {\n\t\t\t\tawait loadNodeAv();\n\t\t\t\trendererLogger.warn({ err: err instanceof Error ? err.message : String(err) }, \"[video-encoders] Hardware probe failed; encoding in software\");\n\t\t\t\treturn null;\n\t\t\t});\n\t\t\tverdicts.set(codecId, verdict);\n\t\t}\n\t\treturn verdict;\n\t};\n}\n/**\n* Options for registerMediabunnyServer: hardware video codecs when they work,\n* software (libx264, libx265, libvpx, SVT-AV1) otherwise. `forceSoftware`\n* keeps every codec in software (used on AMD). Create encoders with\n* \"prefer-hardware\" so this decides; \"prefer-software\" skips it.\n*/\nfunction videoCodecServerOptions(forceSoftware) {\n\treturn { hardwareContext: hardwareContextResolver(forceSoftware) };\n}\n\n//#endregion\n//#region src/bootstrap-mediabunny.ts\nconst isAMD = () => {\n\tif (process.platform !== \"linux\") return false;\n\ttry {\n\t\tif (fs.existsSync(\"/sys/module/amdgpu\") || fs.existsSync(\"/dev/kfd\")) return true;\n\t\tconst drmDir = \"/sys/class/drm\";\n\t\tif (fs.existsSync(drmDir)) {\n\t\t\tconst files = fs.readdirSync(drmDir);\n\t\t\tfor (const file of files) {\n\t\t\t\tconst vendorPath = `${drmDir}/${file}/device/vendor`;\n\t\t\t\tif (fs.existsSync(vendorPath)) {\n\t\t\t\t\tif (fs.readFileSync(vendorPath, \"utf8\").trim() === \"0x1002\") return true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {}\n\treturn false;\n};\nconst bootstrapMediabunny = () => {\n\tregisterMediabunnyServer(videoCodecServerOptions(isAMD()));\n\tfor (const key of Object.keys(webcodecs)) if (typeof globalThis[key] === \"undefined\") globalThis[key] = webcodecs[key];\n};\n\n//#endregion\n//#region src/render-reporter.ts\nconst LOG_PREFIX = \"[HeadlessWebGPURenderer]\";\n/** A milestone reached sooner than this after the last line is not logged. */\nconst MIN_LOG_GAP_MS = 1e3;\n/**\n* Quiet time before the first \"still …\" line of a phase. Each one doubles it\n* up to the cap, so a long phase adds a few lines rather than one a minute.\n*/\nconst HEARTBEAT_FIRST_MS = 1e4;\nconst HEARTBEAT_MAX_MS = 5 * 6e4;\nconst ACTIVITY = {\n\tprepare: \"preparing\",\n\trender: \"rendering\",\n\taudio: \"mixing audio\",\n\t\"audio-encode\": \"encoding audio\",\n\tmux: \"muxing\",\n\tconvert: \"converting to GIF\",\n\tdone: \"finishing\"\n};\n/**\n* Reports a render's progress to the log and to `onProgress`.\n*\n* The log stays short whatever the length of the film, so it fits an agent's\n* context: one line per phase, frame lines only at percent milestones, and a\n* \"still …\" line when a phase goes quiet, backing off from 10 s to 5 min.\n* `onProgress` gets every update; the \"still …\" lines are log-only, so a stall\n* detector fed by `onProgress` still sees a hang.\n*/\nvar RenderReporter = class {\n\trenderId;\n\ttotalFrames;\n\tonProgress;\n\tmilestonePercent;\n\tlog;\n\tnow;\n\tstartedAt;\n\tphaseMs = /* @__PURE__ */ new Map();\n\tphase = \"prepare\";\n\tphaseStartedAt;\n\tframe = 0;\n\tphaseProgress;\n\tdetail;\n\tlastMilestone = 0;\n\t/** Last phase or milestone line; \"still …\" lines don't count. */\n\tlastLogAt;\n\theartbeatMs = HEARTBEAT_FIRST_MS;\n\theartbeat;\n\tconstructor(options$1) {\n\t\tthis.renderId = options$1.renderId;\n\t\tthis.totalFrames = options$1.totalFrames;\n\t\tthis.onProgress = options$1.onProgress;\n\t\tthis.milestonePercent = options$1.milestonePercent ?? 10;\n\t\tthis.log = options$1.log ?? rendererLogger;\n\t\tthis.now = options$1.now ?? (() => performance.now());\n\t\tthis.startedAt = this.now();\n\t\tthis.phaseStartedAt = this.startedAt;\n\t\tthis.lastLogAt = this.startedAt;\n\t}\n\t/** Starts a phase: logs `message` and emits a progress event. */\n\tstage(phase, message, fields = {}) {\n\t\tthis.closePhase();\n\t\tthis.phase = phase;\n\t\tthis.phaseProgress = void 0;\n\t\tthis.detail = void 0;\n\t\tthis.heartbeatMs = HEARTBEAT_FIRST_MS;\n\t\tif (phase !== \"render\" && phase !== \"prepare\") this.frame = this.totalFrames;\n\t\tthis.info(message, fields);\n\t\tthis.emit();\n\t}\n\t/** Records a finished frame; logs at each milestone. */\n\tframeDone(frame) {\n\t\tthis.frame = frame;\n\t\tconst percent = frame / this.totalFrames * 100;\n\t\tconst milestone = frame >= this.totalFrames ? 100 : Math.floor(percent / this.milestonePercent) * this.milestonePercent;\n\t\tconst { fps, etaSec } = this.rate();\n\t\tif (milestone > this.lastMilestone) {\n\t\t\tthis.lastMilestone = milestone;\n\t\t\tif (milestone === 100 || this.now() - this.lastLogAt >= MIN_LOG_GAP_MS) {\n\t\t\t\tconst tail = milestone === 100 ? `in ${formatDuration(this.now() - this.phaseStartedAt)}` : `eta ${formatDuration(etaSec * 1e3)}`;\n\t\t\t\tthis.info(`Rendered ${milestone}% (${frame}/${this.totalFrames} frames) · ${fps.toFixed(1)} fps · ${tail}`, {\n\t\t\t\t\tfps: round1(fps),\n\t\t\t\t\tetaSec\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis.emit({\n\t\t\tfps: round1(fps),\n\t\t\tetaSec\n\t\t});\n\t}\n\t/** Updates what the current phase is doing; shown in \"still …\" lines. */\n\tupdate(detail, phaseProgress) {\n\t\tthis.detail = detail;\n\t\tthis.phaseProgress = phaseProgress;\n\t\tthis.emit();\n\t}\n\t/** Logs the summary and emits the \"done\" event. */\n\tfinish(fields = {}) {\n\t\tthis.closePhase();\n\t\tthis.phase = \"done\";\n\t\tthis.frame = this.totalFrames;\n\t\tthis.stopHeartbeat();\n\t\tconst total = this.now() - this.startedAt;\n\t\tconst parts = [...this.phaseMs].map(([phase, ms]) => `${phase} ${formatDuration(ms)}`);\n\t\tconst size = fields.bytes !== void 0 ? ` (${formatBytes(fields.bytes)})` : \"\";\n\t\tthis.log.info({\n\t\t\trenderId: this.renderId,\n\t\t\tphase: \"done\",\n\t\t\telapsedMs: Math.round(total),\n\t\t\tphaseMs: Object.fromEntries([...this.phaseMs].map(([phase, ms]) => [phase, Math.round(ms)])),\n\t\t\t...fields\n\t\t}, `${LOG_PREFIX} Done in ${formatDuration(total)}${size}: ${parts.join(\" · \")}`);\n\t\tthis.emit();\n\t}\n\t/** Logs which phase the render stopped in. */\n\tfail(error, aborted) {\n\t\tthis.stopHeartbeat();\n\t\tconst elapsed = formatDuration(this.now() - this.startedAt);\n\t\tconst fields = {\n\t\t\trenderId: this.renderId,\n\t\t\tphase: this.phase,\n\t\t\tframe: this.frame,\n\t\t\ttotalFrames: this.totalFrames,\n\t\t\telapsedMs: Math.round(this.now() - this.startedAt)\n\t\t};\n\t\tif (aborted) this.log.warn(fields, `${LOG_PREFIX} Aborted while ${ACTIVITY[this.phase]} after ${elapsed}`);\n\t\telse this.log.error({\n\t\t\t...fields,\n\t\t\terr: error\n\t\t}, `${LOG_PREFIX} Failed while ${ACTIVITY[this.phase]} after ${elapsed}`);\n\t}\n\t/** Stops the \"still …\" timer. Safe to call more than once. */\n\tdispose() {\n\t\tthis.stopHeartbeat();\n\t}\n\tclosePhase() {\n\t\tconst now = this.now();\n\t\tthis.phaseMs.set(this.phase, (this.phaseMs.get(this.phase) ?? 0) + (now - this.phaseStartedAt));\n\t\tthis.phaseStartedAt = now;\n\t}\n\trate() {\n\t\tconst seconds = Math.max(.001, (this.now() - this.phaseStartedAt) / 1e3);\n\t\tconst fps = this.frame / seconds;\n\t\treturn {\n\t\t\tfps,\n\t\t\tetaSec: Math.round((this.totalFrames - this.frame) / Math.max(fps, .001))\n\t\t};\n\t}\n\tinfo(message, fields = {}) {\n\t\tthis.log.info({\n\t\t\trenderId: this.renderId,\n\t\t\tphase: this.phase,\n\t\t\tframe: this.frame,\n\t\t\ttotalFrames: this.totalFrames,\n\t\t\t...fields\n\t\t}, `${LOG_PREFIX} ${message}`);\n\t\tthis.lastLogAt = this.now();\n\t\tthis.armHeartbeat();\n\t}\n\temit(extra = {}) {\n\t\tthis.onProgress?.({\n\t\t\tphase: this.phase,\n\t\t\tframe: this.frame,\n\t\t\ttotalFrames: this.totalFrames,\n\t\t\telapsedMs: Math.round(this.now() - this.startedAt),\n\t\t\t...this.phaseProgress !== void 0 && { phaseProgress: this.phaseProgress },\n\t\t\t...this.detail !== void 0 && { detail: this.detail },\n\t\t\t...extra\n\t\t});\n\t}\n\tarmHeartbeat() {\n\t\tthis.stopHeartbeat();\n\t\tthis.heartbeat = setTimeout(() => this.beat(), this.heartbeatMs);\n\t\tthis.heartbeat.unref?.();\n\t}\n\tbeat() {\n\t\tconst inPhase = formatDuration(this.now() - this.phaseStartedAt);\n\t\tlet what = \"\";\n\t\tif (this.phase === \"render\") what = ` (frame ${this.frame}/${this.totalFrames})`;\n\t\telse if (this.detail || this.phaseProgress !== void 0) what = ` (${[this.phaseProgress !== void 0 ? `${Math.floor(this.phaseProgress * 100)}%` : \"\", this.detail].filter(Boolean).join(\", \")})`;\n\t\tthis.log.info({\n\t\t\trenderId: this.renderId,\n\t\t\tphase: this.phase,\n\t\t\tframe: this.frame,\n\t\t\ttotalFrames: this.totalFrames\n\t\t}, `${LOG_PREFIX} Still ${ACTIVITY[this.phase]}${what}, ${inPhase} in this phase`);\n\t\tthis.heartbeatMs = Math.min(this.heartbeatMs * 2, HEARTBEAT_MAX_MS);\n\t\tthis.armHeartbeat();\n\t}\n\tstopHeartbeat() {\n\t\tif (this.heartbeat) clearTimeout(this.heartbeat);\n\t\tthis.heartbeat = void 0;\n\t}\n};\n/** \"4.2s\", \"2m 05s\", \"1h 02m\". */\nfunction formatDuration(ms) {\n\tconst s = Math.max(0, ms) / 1e3;\n\tif (s < 60) return `${s.toFixed(1)}s`;\n\tconst total = Math.round(s);\n\tconst h = Math.floor(total / 3600);\n\tconst m = Math.floor(total % 3600 / 60);\n\tconst sec = total % 60;\n\tif (h > 0) return `${h}h ${String(m).padStart(2, \"0\")}m`;\n\treturn `${m}m ${String(sec).padStart(2, \"0\")}s`;\n}\nfunction formatBytes(bytes) {\n\tif (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n\treturn `${(bytes / 1024 / 1024).toFixed(1)} MB`;\n}\nfunction round1(n) {\n\treturn Math.round(n * 10) / 10;\n}\n\n//#endregion\n//#region src/video-qa.ts\nconst DEFAULTS = {\n\tblackPixelThreshold: .1,\n\tblackFrameRatio: .98,\n\tminBlackSec: .5,\n\tminFrozenSec: 2,\n\tsilenceDbfs: -60,\n\tminSilenceSec: 2,\n\tlufsTolerance: 1\n};\nconst SAMPLE_STEP = 4;\nconst FROZEN_DIFF = .25;\n/** Measures frames handed to it in order, as RGBA bytes. */\nvar FrameInspector = class {\n\tblackLuma;\n\tblackRatio;\n\tblack = [];\n\tsameAsPrevious = [];\n\tlumaSum = 0;\n\tprevious = null;\n\tconstructor(options$1 = {}) {\n\t\tthis.blackLuma = (options$1.blackPixelThreshold ?? DEFAULTS.blackPixelThreshold) * 255;\n\t\tthis.blackRatio = options$1.blackFrameRatio ?? DEFAULTS.blackFrameRatio;\n\t}\n\tget frameCount() {\n\t\treturn this.black.length;\n\t}\n\tinspect(rgba, width, height) {\n\t\tconst cols = Math.ceil(width / SAMPLE_STEP);\n\t\tconst rows = Math.ceil(height / SAMPLE_STEP);\n\t\tconst luma = new Uint8Array(cols * rows);\n\t\tlet blackCount = 0;\n\t\tlet sum = 0;\n\t\tlet k = 0;\n\t\tfor (let y = 0; y < height; y += SAMPLE_STEP) {\n\t\t\tlet p = y * width * 4;\n\t\t\tfor (let x = 0; x < width; x += SAMPLE_STEP, p += SAMPLE_STEP * 4) {\n\t\t\t\tconst l = .2126 * rgba[p] + .7152 * rgba[p + 1] + .0722 * rgba[p + 2];\n\t\t\t\tluma[k++] = l;\n\t\t\t\tsum += l;\n\t\t\t\tif (l <= this.blackLuma) blackCount++;\n\t\t\t}\n\t\t}\n\t\tconst n = luma.length;\n\t\tthis.lumaSum += sum / n / 255;\n\t\tthis.black.push(blackCount / n >= this.blackRatio);\n\t\tlet same = false;\n\t\tif (this.previous && this.previous.length === n) {\n\t\t\tlet diff = 0;\n\t\t\tfor (let i = 0; i < n; i++) diff += Math.abs(luma[i] - this.previous[i]);\n\t\t\tsame = diff / n < FROZEN_DIFF;\n\t\t}\n\t\tthis.sameAsPrevious.push(same);\n\t\tthis.previous = luma;\n\t}\n\tstats(expectedFrames, encodedFrames, fps, width, height, options$1 = {}) {\n\t\tconst minBlack = Math.max(1, Math.round((options$1.minBlackSec ?? DEFAULTS.minBlackSec) * fps));\n\t\tconst minFrozen = Math.max(2, Math.round((options$1.minFrozenSec ?? DEFAULTS.minFrozenSec) * fps));\n\t\tconst blackSegments = runs(this.black, minBlack).map(([a, b]) => ({\n\t\t\tstartSec: a / fps,\n\t\t\tendSec: b / fps\n\t\t}));\n\t\tconst frozenSegments = runs(this.sameAsPrevious, minFrozen - 1).map(([a, b]) => ({\n\t\t\tstartSec: (a - 1) / fps,\n\t\t\tendSec: b / fps\n\t\t}));\n\t\treturn {\n\t\t\texpectedFrames,\n\t\t\tencodedFrames,\n\t\t\tfps,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tmeanLuma: this.frameCount > 0 ? this.lumaSum / this.frameCount : 0,\n\t\t\tblackSegments,\n\t\t\tfrozenSegments\n\t\t};\n\t}\n};\n/** [start, end) index ranges where flags hold for at least minLength in a row. */\nfunction runs(flags, minLength) {\n\tconst out = [];\n\tlet start = -1;\n\tfor (let i = 0; i <= flags.length; i++) if (i < flags.length && flags[i]) {\n\t\tif (start < 0) start = i;\n\t} else if (start >= 0) {\n\t\tif (i - start >= minLength) out.push([start, i]);\n\t\tstart = -1;\n\t}\n\treturn out;\n}\nconst toDb = (power) => power > 0 ? 10 * Math.log10(power) : -Infinity;\n/** Measures a mixed audio track (one Float32Array per channel). */\nfunction analyzeAudio(channels, sampleRate, options$1 = {}) {\n\tconst length = channels[0]?.length ?? 0;\n\tlet peak = 0;\n\tlet sumSquares = 0;\n\tlet clipped = 0;\n\tfor (const ch of channels) for (let i = 0; i < length; i++) {\n\t\tconst v = Math.abs(ch[i]);\n\t\tif (v > peak) peak = v;\n\t\tif (v >= .9999) clipped++;\n\t\tsumSquares += v * v;\n\t}\n\tconst total = length * Math.max(1, channels.length);\n\tconst silenceDbfs = options$1.silenceDbfs ?? DEFAULTS.silenceDbfs;\n\tconst window = Math.max(1, Math.round(sampleRate * .1));\n\tconst silent = [];\n\tfor (let start = 0; start < length; start += window) {\n\t\tconst end = Math.min(length, start + window);\n\t\tlet s = 0;\n\t\tfor (const ch of channels) for (let i = start; i < end; i++) s += ch[i] * ch[i];\n\t\tsilent.push(toDb(s / ((end - start) * channels.length)) < silenceDbfs);\n\t}\n\tconst silentSegments = runs(silent, Math.max(1, Math.round((options$1.minSilenceSec ?? DEFAULTS.minSilenceSec) / .1))).map(([a, b]) => ({\n\t\tstartSec: a * window / sampleRate,\n\t\tendSec: Math.min(length, b * window) / sampleRate\n\t}));\n\tconst peakDbfs = 20 * Math.log10(Math.max(peak, 1e-12));\n\treturn {\n\t\tsampleRate,\n\t\tchannels: channels.length,\n\t\tdurationSec: length / sampleRate,\n\t\tpeakDbfs,\n\t\trmsDbfs: toDb(sumSquares / Math.max(1, total)),\n\t\tintegratedLufs: peakDbfs < silenceDbfs ? null : integratedLoudness(channels, sampleRate),\n\t\tclippedSamples: clipped,\n\t\tsilentSegments\n\t};\n}\n/** BS.1770 K-weighting stage 1: +4 dB high shelf around 1.5 kHz (the head). */\nfunction highShelf(sampleRate) {\n\tconst A = 10 ** (4 / 40);\n\tconst w0 = 2 * Math.PI * 1500 / sampleRate;\n\tconst cos = Math.cos(w0);\n\tconst alpha = Math.sin(w0) / (2 / Math.SQRT2);\n\tconst sq = 2 * Math.sqrt(A) * alpha;\n\tconst a0 = A + 1 - (A - 1) * cos + sq;\n\treturn {\n\t\tb0: A * (A + 1 + (A - 1) * cos + sq) / a0,\n\t\tb1: -2 * A * (A - 1 + (A + 1) * cos) / a0,\n\t\tb2: A * (A + 1 + (A - 1) * cos - sq) / a0,\n\t\ta1: 2 * (A - 1 - (A + 1) * cos) / a0,\n\t\ta2: (A + 1 - (A - 1) * cos - sq) / a0\n\t};\n}\n/** BS.1770 K-weighting stage 2: 38 Hz high pass, Q 0.5 (the RLB curve). */\nfunction highPass(sampleRate) {\n\tconst w0 = 2 * Math.PI * 38 / sampleRate;\n\tconst cos = Math.cos(w0);\n\tconst alpha = Math.sin(w0) / (2 * .5);\n\tconst a0 = 1 + alpha;\n\treturn {\n\t\tb0: (1 + cos) / 2 / a0,\n\t\tb1: -(1 + cos) / a0,\n\t\tb2: (1 + cos) / 2 / a0,\n\t\ta1: -2 * cos / a0,\n\t\ta2: (1 - alpha) / a0\n\t};\n}\nfunction filter(input, f) {\n\tconst out = new Float32Array(input.length);\n\tlet x1 = 0;\n\tlet x2 = 0;\n\tlet y1 = 0;\n\tlet y2 = 0;\n\tfor (let i = 0; i < input.length; i++) {\n\t\tconst x = input[i];\n\t\tconst y = f.b0 * x + f.b1 * x1 + f.b2 * x2 - f.a1 * y1 - f.a2 * y2;\n\t\tout[i] = y;\n\t\tx2 = x1;\n\t\tx1 = x;\n\t\ty2 = y1;\n\t\ty1 = y;\n\t}\n\treturn out;\n}\n/**\n* ITU-R BS.1770-4 integrated loudness (LUFS): K-weighted mean square in\n* 400 ms blocks with 75% overlap, gated at -70 LUFS and then at 10 LU below\n* the mean of what passed. Channels weigh 1 (stereo and mono layouts).\n*/\nfunction integratedLoudness(channels, sampleRate) {\n\tconst shelf = highShelf(sampleRate);\n\tconst hp = highPass(sampleRate);\n\tconst weighted = channels.map((ch) => filter(filter(ch, shelf), hp));\n\tconst length = weighted[0]?.length ?? 0;\n\tconst block = Math.round(.4 * sampleRate);\n\tconst hop = Math.round(.1 * sampleRate);\n\tif (length < block) return null;\n\tconst blockPower = [];\n\tfor (let start = 0; start + block <= length; start += hop) {\n\t\tlet power = 0;\n\t\tfor (const ch of weighted) {\n\t\t\tlet s = 0;\n\t\t\tfor (let i = start; i < start + block; i++) s += ch[i] * ch[i];\n\t\t\tpower += s / block;\n\t\t}\n\t\tblockPower.push(power);\n\t}\n\tconst lufs = (power) => -.691 + toDb(power);\n\tconst mean = (xs) => xs.reduce((a, b) => a + b, 0) / xs.length;\n\tconst absolute = blockPower.filter((p) => lufs(p) > -70);\n\tif (absolute.length === 0) return null;\n\tconst relativeGate = lufs(mean(absolute)) - 10;\n\tconst gated = absolute.filter((p) => lufs(p) > relativeGate);\n\treturn gated.length > 0 ? lufs(mean(gated)) : null;\n}\n/** Turn measurements and document diagnostics into a report with issues. */\nfunction buildQaReport(parts) {\n\tconst { video, audio, options: options$1 = {} } = parts;\n\tconst issues = [];\n\tconst at = (s) => `${s.startSec.toFixed(2)}–${s.endSec.toFixed(2)} s`;\n\tif (video) {\n\t\tif (video.encodedFrames !== video.expectedFrames) issues.push({\n\t\t\tseverity: \"error\",\n\t\t\tcode: \"frames_missing\",\n\t\t\tmessage: `${video.encodedFrames} of ${video.expectedFrames} frames were encoded`\n\t\t});\n\t\tfor (const s of video.blackSegments) issues.push({\n\t\t\tseverity: \"warning\",\n\t\t\tcode: \"black_frames\",\n\t\t\tmessage: `Black frames at ${at(s)}`,\n\t\t\t...s\n\t\t});\n\t\tfor (const s of video.frozenSegments) issues.push({\n\t\t\tseverity: \"info\",\n\t\t\tcode: \"frozen_video\",\n\t\t\tmessage: `Picture does not change at ${at(s)}`,\n\t\t\t...s\n\t\t});\n\t}\n\tif (audio) if (audio.integratedLufs === null) issues.push({\n\t\tseverity: \"info\",\n\t\tcode: \"audio_silent\",\n\t\tmessage: \"The audio track is silent\"\n\t});\n\telse {\n\t\tif (audio.clippedSamples > 0) issues.push({\n\t\t\tseverity: \"warning\",\n\t\t\tcode: \"audio_clipping\",\n\t\t\tmessage: `${audio.clippedSamples} audio sample(s) at or beyond full scale (peak ${audio.peakDbfs.toFixed(1)} dBFS)`\n\t\t});\n\t\tfor (const s of audio.silentSegments) issues.push({\n\t\t\tseverity: \"info\",\n\t\t\tcode: \"audio_silence\",\n\t\t\tmessage: `Silence at ${at(s)}`,\n\t\t\t...s\n\t\t});\n\t\tif (options$1.targetLufs !== void 0) {\n\t\t\tconst off = audio.integratedLufs - options$1.targetLufs;\n\t\t\tconst tolerance = options$1.lufsTolerance ?? DEFAULTS.lufsTolerance;\n\t\t\tif (Math.abs(off) > tolerance) issues.push({\n\t\t\t\tseverity: \"warning\",\n\t\t\t\tcode: \"loudness_off_target\",\n\t\t\t\tmessage: `Integrated loudness ${audio.integratedLufs.toFixed(1)} LUFS is ${Math.abs(off).toFixed(1)} LU ${off > 0 ? \"above\" : \"below\"} the ${options$1.targetLufs} LUFS target`\n\t\t\t});\n\t\t}\n\t}\n\tfor (const d of parts.diagnostics ?? []) issues.push({\n\t\tseverity: d.severity,\n\t\tcode: d.code,\n\t\tmessage: d.message,\n\t\t...d.layerId !== void 0 && { layerId: d.layerId }\n\t});\n\treturn {\n\t\tpassed: !issues.some((i) => i.severity !== \"info\"),\n\t\t...video && { video },\n\t\t...audio && { audio },\n\t\tissues\n\t};\n}\n/** A short human- and agent-readable summary of a report. */\nfunction formatQaReport(report) {\n\tconst lines = [`QA ${report.passed ? \"passed\" : \"FAILED\"}`];\n\tconst v = report.video;\n\tif (v) lines.push(` video: ${v.encodedFrames}/${v.expectedFrames} frames, ${v.width}x${v.height} @ ${v.fps} fps, mean luma ${v.meanLuma.toFixed(2)}`);\n\tconst a = report.audio;\n\tif (a) {\n\t\tconst lufs = a.integratedLufs === null ? \"silent\" : `${a.integratedLufs.toFixed(1)} LUFS`;\n\t\tlines.push(` audio: ${a.durationSec.toFixed(2)} s, ${lufs}, peak ${a.peakDbfs.toFixed(1)} dBFS, rms ${a.rmsDbfs.toFixed(1)} dBFS`);\n\t}\n\tfor (const i of report.issues) lines.push(` ${i.severity.padEnd(7)} ${i.code}: ${i.message}`);\n\treturn lines.join(\"\\n\");\n}\n\n//#endregion\n//#region src/zero-copy-webcodecs-pipeline.ts\n/**\n* High-performance hardware video encoding pipeline integrating WebGPU textures with WebCodecs.\n*\n* Provides:\n* 1. Direct hardware acceleration when running with WebCodecs / OffscreenCanvas.\n* 2. Pipelined asynchronous double-buffered DMA staging ring for headless Node.js (Dawn native),\n* allowing GPU Frame i+1 rendering to overlap concurrently with Frame i hardware encoding.\n*/\nvar ZeroCopyWebCodecsPipeline = class {\n\twidth;\n\theight;\n\tfps;\n\tringCapacity;\n\tdevice;\n\tvideoSource;\n\tstagingRing;\n\tcolorSpace;\n\tdirectCanvasSource;\n\tonFrame;\n\tinFlightFrames = [];\n\tcycleStartTimes = /* @__PURE__ */ new Map();\n\ttotalFramesEnqueued = 0;\n\ttotalFramesEncoded = 0;\n\ttotalGpuSubmitTimeMs = 0;\n\ttotalEncodeTimeMs = 0;\n\ttotalCycleTimeMs = 0;\n\tmaxCycleTimeMs = 0;\n\tminCycleTimeMs = Number.POSITIVE_INFINITY;\n\tpipelineStartTime = 0;\n\tconstructor(device, options$1) {\n\t\tthis.device = device;\n\t\tthis.width = options$1.width;\n\t\tthis.height = options$1.height;\n\t\tthis.fps = options$1.fps;\n\t\tthis.videoSource = options$1.videoSource;\n\t\tthis.ringCapacity = Math.max(2, options$1.ringCapacity ?? 2);\n\t\tthis.colorSpace = options$1.colorSpace;\n\t\tthis.directCanvasSource = options$1.directCanvasSource;\n\t\tthis.onFrame = options$1.onFrame;\n\t\tthis.stagingRing = new DmaStagingRing(device, {\n\t\t\twidth: this.width,\n\t\t\theight: this.height,\n\t\t\tcapacity: this.ringCapacity\n\t\t});\n\t\tthis.pipelineStartTime = performance.now();\n\t}\n\t/**\n\t* Returns true if direct zero-copy from an OffscreenCanvas or texture is active.\n\t*/\n\tcanDirectZeroCopy() {\n\t\treturn this.directCanvasSource !== void 0 && this.directCanvasSource !== null;\n\t}\n\t/**\n\t* Enqueues a rendered GPU texture frame into the pipeline.\n\t*\n\t* Uses double-buffered DMA staging: if the staging ring has reached capacity,\n\t* the oldest in-flight frame is asynchronously consumed and added to the video encoder\n\t* before staging the new frame, guaranteeing constant bounded VRAM usage and zero GPU stalls.\n\t*/\n\tasync enqueueFrame(frameIndex, targetTexture, encoder) {\n\t\tconst cycleStartTime = performance.now();\n\t\tif (this.inFlightFrames.length >= this.ringCapacity) {\n\t\t\tconst oldestFrame = this.inFlightFrames.shift();\n\t\t\tif (oldestFrame !== void 0) await this.consumeAndEncode(oldestFrame);\n\t\t}\n\t\tif (this.canDirectZeroCopy()) {\n\t\t\tconst gpuStart = performance.now();\n\t\t\tthis.device.queue.submit([encoder.finish()]);\n\t\t\tthis.totalGpuSubmitTimeMs += performance.now() - gpuStart;\n\t\t\tthis.cycleStartTimes.set(frameIndex, cycleStartTime);\n\t\t\tthis.totalFramesEnqueued++;\n\t\t\tawait this.consumeAndEncode(frameIndex);\n\t\t} else {\n\t\t\tawait this.stagingRing.prepareSlot(frameIndex);\n\t\t\tthis.stagingRing.stageTexture(encoder, targetTexture, frameIndex);\n\t\t\tconst gpuStart = performance.now();\n\t\t\tthis.device.queue.submit([encoder.finish()]);\n\t\t\tthis.totalGpuSubmitTimeMs += performance.now() - gpuStart;\n\t\t\tthis.stagingRing.scheduleMap(frameIndex);\n\t\t\tthis.inFlightFrames.push(frameIndex);\n\t\t\tthis.cycleStartTimes.set(frameIndex, cycleStartTime);\n\t\t\tthis.totalFramesEnqueued++;\n\t\t}\n\t}\n\t/**\n\t* Drains all remaining in-flight frames in the pipeline, ensuring every enqueued\n\t* frame has been encoded and added to the video sample source.\n\t*/\n\tasync drain() {\n\t\twhile (this.inFlightFrames.length > 0) {\n\t\t\tconst frameIndex = this.inFlightFrames.shift();\n\t\t\tif (frameIndex !== void 0) await this.consumeAndEncode(frameIndex);\n\t\t}\n\t}\n\t/**\n\t* Returns runtime throughput, latency, and pipeline statistics.\n\t*/\n\tgetStats() {\n\t\tconst totalElapsedMs = performance.now() - this.pipelineStartTime;\n\t\tconst throughputFps = totalElapsedMs > 0 ? this.totalFramesEncoded / totalElapsedMs * 1e3 : 0;\n\t\tconst avgSubmit = this.totalFramesEnqueued > 0 ? this.totalGpuSubmitTimeMs / this.totalFramesEnqueued : 0;\n\t\tconst avgEncode = this.totalFramesEncoded > 0 ? this.totalEncodeTimeMs / this.totalFramesEncoded : 0;\n\t\tconst avgCycle = this.totalFramesEncoded > 0 ? this.totalCycleTimeMs / this.totalFramesEncoded : 0;\n\t\treturn {\n\t\t\ttotalFramesEnqueued: this.totalFramesEnqueued,\n\t\t\ttotalFramesEncoded: this.totalFramesEncoded,\n\t\t\taverageGpuSubmitTimeMs: avgSubmit,\n\t\t\taverageEncodeTimeMs: avgEncode,\n\t\t\taverageCycleTimeMs: avgCycle,\n\t\t\tmaxCycleTimeMs: this.maxCycleTimeMs,\n\t\t\tminCycleTimeMs: Number.isFinite(this.minCycleTimeMs) ? this.minCycleTimeMs : 0,\n\t\t\tthroughputFps,\n\t\t\tringCapacity: this.ringCapacity,\n\t\t\tisDirectZeroCopy: this.canDirectZeroCopy()\n\t\t};\n\t}\n\t/**\n\t* Destroys the pipeline and releases all staging buffers.\n\t*/\n\tdestroy() {\n\t\tthis.inFlightFrames.length = 0;\n\t\tthis.cycleStartTimes.clear();\n\t\tthis.stagingRing.destroy();\n\t}\n\tasync consumeAndEncode(frameIndex) {\n\t\tconst encodeStart = performance.now();\n\t\tconst timestampUs = frameIndex / this.fps * 1e6;\n\t\tif (this.canDirectZeroCopy()) {\n\t\t\tconst sample = new VideoSample(this.directCanvasSource, {\n\t\t\t\tduration: 1 / this.fps,\n\t\t\t\ttimestamp: frameIndex / this.fps\n\t\t\t});\n\t\t\ttry {\n\t\t\t\tawait this.videoSource.add(sample);\n\t\t\t} finally {\n\t\t\t\tsample.close();\n\t\t\t}\n\t\t} else {\n\t\t\tconst onFrame = this.onFrame;\n\t\t\tconst vf = await this.stagingRing.readFrameToVideoFrame(frameIndex, timestampUs, this.colorSpace, onFrame && ((rgba) => onFrame(rgba, frameIndex)));\n\t\t\ttry {\n\t\t\t\tconst sample = new VideoSample(vf, {\n\t\t\t\t\tduration: 1 / this.fps,\n\t\t\t\t\ttimestamp: frameIndex / this.fps\n\t\t\t\t});\n\t\t\t\ttry {\n\t\t\t\t\tawait this.videoSource.add(sample);\n\t\t\t\t} finally {\n\t\t\t\t\tsample.close();\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tvf.close();\n\t\t\t}\n\t\t}\n\t\tconst now = performance.now();\n\t\tthis.totalEncodeTimeMs += now - encodeStart;\n\t\tthis.totalFramesEncoded++;\n\t\tconst cycleStart = this.cycleStartTimes.get(frameIndex);\n\t\tif (cycleStart !== void 0) {\n\t\t\tconst cycleDuration = now - cycleStart;\n\t\t\tthis.cycleStartTimes.delete(frameIndex);\n\t\t\tthis.totalCycleTimeMs += cycleDuration;\n\t\t\tif (cycleDuration > this.maxCycleTimeMs) this.maxCycleTimeMs = cycleDuration;\n\t\t\tif (cycleDuration < this.minCycleTimeMs) this.minCycleTimeMs = cycleDuration;\n\t\t}\n\t}\n};\n\n//#endregion\n//#region src/headless-webgpu-renderer.ts\nglobalThis[Symbol.for(\"framefields.vision.backend\")] = (info) => {\n\trendererLogger.info(info, info.backend === \"webgpu\" ? \"[vision] Inference on the GPU (WebGPU)\" : `[vision] Inference on the ${info.backend.toUpperCase()}`);\n};\nasync function convertMp4ToGif(inputMp4Path, outputGifPath) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst ffmpeg = spawn(\"ffmpeg\", [\n\t\t\t\"-i\",\n\t\t\tinputMp4Path,\n\t\t\t\"-vf\",\n\t\t\t\"split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\",\n\t\t\t\"-y\",\n\t\t\toutputGifPath\n\t\t]);\n\t\tlet errorOutput = \"\";\n\t\tffmpeg.stderr.on(\"data\", (data) => {\n\t\t\terrorOutput += data.toString();\n\t\t});\n\t\tffmpeg.on(\"close\", async (code) => {\n\t\t\tif (code === 0) resolve();\n\t\t\telse {\n\t\t\t\trendererLogger.error({\n\t\t\t\t\tcode,\n\t\t\t\t\terr: errorOutput\n\t\t\t\t}, \"[convertMp4ToGif] ffmpeg conversion failed\");\n\t\t\t\treject(/* @__PURE__ */ new Error(`ffmpeg exited with code ${code}: ${errorOutput}`));\n\t\t\t}\n\t\t});\n\t\tffmpeg.on(\"error\", (err) => {\n\t\t\trendererLogger.error({ err }, \"[convertMp4ToGif] ffmpeg spawn error\");\n\t\t\treject(err);\n\t\t});\n\t});\n}\nbootstrapMediabunny();\nconst globalObj = globalThis;\nif (typeof globalThis !== \"undefined\") {\n\tglobalObj.__IS_HEADLESS_RENDERER__ = true;\n\tglobalObj.__GATEWAI_DELAYS__ ??= /* @__PURE__ */ new Set();\n}\nif (typeof globalThis.requestAnimationFrame === \"undefined\") {\n\tglobalObj.requestAnimationFrame = (cb) => setTimeout(cb, 0);\n\tglobalObj.cancelAnimationFrame = (id) => clearTimeout(id);\n}\nconst dummyDomElement = {\n\tclientWidth: 1920,\n\tclientHeight: 1080,\n\tgetBoundingClientRect: () => ({\n\t\tx: 0,\n\t\ty: 0,\n\t\tleft: 0,\n\t\ttop: 0,\n\t\tright: 1920,\n\t\tbottom: 1080,\n\t\twidth: 1920,\n\t\theight: 1080\n\t}),\n\tstyle: {},\n\tappendChild: () => {},\n\tremoveChild: () => {},\n\taddEventListener: () => {},\n\tremoveEventListener: () => {},\n\tgetAttribute: () => null\n};\nif (typeof globalThis.OffscreenCanvas === \"undefined\") globalObj.OffscreenCanvas = Canvas;\nif (typeof globalThis.HTMLCanvasElement === \"undefined\") globalObj.HTMLCanvasElement = Canvas;\nif (typeof globalThis.Image === \"undefined\") globalObj.Image = Image;\nif (typeof globalThis.window === \"undefined\") globalObj.window = globalThis;\nif (!globalThis.location) globalObj.location = new URL(\"http://localhost\");\nif (typeof globalThis.IntersectionObserver === \"undefined\") globalObj.IntersectionObserver = class IntersectionObserver {\n\tobserve() {}\n\tunobserve() {}\n\tdisconnect() {}\n};\nif (typeof globalThis.document === \"undefined\") globalObj.document = {\n\tcreateElement: (tag) => {\n\t\tif (tag === \"canvas\") return new Canvas(1, 1);\n\t\treturn { ...dummyDomElement };\n\t},\n\tgetElementsByTagName: () => [],\n\tdocumentElement: dummyDomElement,\n\tbody: dummyDomElement\n};\nelse {\n\tconst docObj = globalThis.document;\n\tif (typeof docObj.getElementsByTagName === \"undefined\") docObj.getElementsByTagName = () => [];\n\tdocObj.documentElement ??= dummyDomElement;\n\tdocObj.body ??= dummyDomElement;\n}\nconst skiaProto = Canvas.prototype;\nif (typeof skiaProto.getBoundingClientRect === \"undefined\") skiaProto.getBoundingClientRect = function() {\n\tconst width = this.width || 512;\n\tconst height = this.height || 512;\n\treturn {\n\t\tx: 0,\n\t\ty: 0,\n\t\tleft: 0,\n\t\ttop: 0,\n\t\tright: width,\n\t\tbottom: height,\n\t\twidth,\n\t\theight\n\t};\n};\nif (!(\"style\" in skiaProto)) Object.defineProperty(skiaProto, \"style\", {\n\tget() {\n\t\tthis._style ??= {};\n\t\treturn this._style;\n\t},\n\tconfigurable: true\n});\nif (!(\"clientWidth\" in skiaProto)) Object.defineProperty(skiaProto, \"clientWidth\", {\n\tget() {\n\t\treturn this.width || 512;\n\t},\n\tconfigurable: true\n});\nif (!(\"clientHeight\" in skiaProto)) Object.defineProperty(skiaProto, \"clientHeight\", {\n\tget() {\n\t\treturn this.height || 512;\n\t},\n\tconfigurable: true\n});\nif (!(\"parentElement\" in skiaProto)) Object.defineProperty(skiaProto, \"parentElement\", {\n\tget() {\n\t\treturn dummyDomElement;\n\t},\n\tconfigurable: true\n});\nif (typeof skiaProto.addEventListener === \"undefined\") skiaProto.addEventListener = () => {};\nif (typeof skiaProto.removeEventListener === \"undefined\") skiaProto.removeEventListener = () => {};\nif (typeof skiaProto.getAttribute === \"undefined\") skiaProto.getAttribute = () => null;\nconst CPU_COUNT = os.cpus().length;\nconst TOTAL_WORKER_BUDGET = Math.max(1, CPU_COUNT - 3);\nconst MAX_CONCURRENT_RENDERS = Math.max(1, Math.min(3, Math.floor(TOTAL_WORKER_BUDGET / 3)));\nconst QUEUE_TIMEOUT_MS = 120 * 6e4;\nvar RenderSemaphore = class {\n\t_running = 0;\n\t_max;\n\t_queue = [];\n\tconstructor(max) {\n\t\tthis._max = max;\n\t}\n\tacquire(timeoutMs = QUEUE_TIMEOUT_MS) {\n\t\tif (this._running < this._max) {\n\t\t\tthis._running++;\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tconst idx = this._queue.findIndex((e) => e.resolve === resolve);\n\t\t\t\tif (idx !== -1) this._queue.splice(idx, 1);\n\t\t\t\treject(/* @__PURE__ */ new Error(`Render queue timeout after ${timeoutMs}ms (${this._queue.length} queued, ${this._running}/${this._max} active)`));\n\t\t\t}, timeoutMs);\n\t\t\tthis._queue.push({\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t\ttimer\n\t\t\t});\n\t\t});\n\t}\n\trelease() {\n\t\tif (this._queue.length > 0) {\n\t\t\tconst next = this._queue.shift();\n\t\t\tclearTimeout(next.timer);\n\t\t\tnext.resolve();\n\t\t} else this._running--;\n\t}\n\tget stats() {\n\t\treturn {\n\t\t\tactive: this._running,\n\t\t\tqueued: this._queue.length,\n\t\t\tmax: this._max\n\t\t};\n\t}\n};\nconst renderSemaphore = new RenderSemaphore(MAX_CONCURRENT_RENDERS);\n/**\n* Ids for still renders without a caller id. Media caches (video decoders,\n* last-good frames) are keyed by render id, so a fresh id per still would\n* open a new decoder for every frame of a frame-by-frame export. Stills\n* borrow an idle id instead: consecutive stills reuse it (and its decoders);\n* concurrent stills get distinct ones.\n*/\nconst idleStillIds = [];\nconst takeStillId = () => idleStillIds.pop() ?? `img-${randomUUID()}`;\nconst returnStillId = (id) => {\n\tidleStillIds.push(id);\n};\nasync function fileSize(file) {\n\ttry {\n\t\treturn (await fs$1.stat(file)).size;\n\t} catch {\n\t\treturn;\n\t}\n}\n/** The frames a render covers, checked against the composition's length. */\nfunction resolveFrameRange(frames, total) {\n\tif (!frames) return {\n\t\tstart: 0,\n\t\tend: total,\n\t\ttotal\n\t};\n\tconst { start, end } = frames;\n\tif (!Number.isInteger(start) || !Number.isInteger(end) || start < 0 || end <= start || end > total) throw new Error(`Invalid frames { start: ${start}, end: ${end} }: need integers with 0 <= start < end <= ${total} (the composition's frame count).`);\n\treturn {\n\t\tstart,\n\t\tend,\n\t\ttotal\n\t};\n}\n/**\n* Mixes the composition's whole audio timeline and encodes it into `source`\n* in 100 ms samples. Returns its QA stats when `qaOptions` is set.\n*/\nasync function encodeAudioTrack(job) {\n\tconst { reporter } = job;\n\treporter.stage(\"audio\", \"Mixing audio\");\n\tconst { channels, sampleRate } = await mixAudioTracks(job.virtualMedia, job.fps, 48e3, job.device, job.renderId, { onProgress: ({ done, total, source }) => reporter.update(total > 0 ? `${done}/${total} clips${source ? `: ${source}` : \"\"}` : \"no audio clips\", total > 0 ? done / total : void 0) });\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) throw new Error(\"mixAudioTracks returned no channels\");\n\tconst totalSamples = channels[0].length;\n\tconst chunkSize = Math.round(.1 * sampleRate);\n\treporter.stage(\"audio-encode\", `Encoding ${(totalSamples / sampleRate).toFixed(1)}s of audio (${job.codec})`);\n\tfor (let offset = 0; offset < totalSamples; offset += chunkSize) {\n\t\tconst currentChunk = Math.min(chunkSize, totalSamples - offset);\n\t\tconst interleaved = new Float32Array(currentChunk * numChannels);\n\t\tfor (let i = 0; i < currentChunk; i++) for (let ch = 0; ch < numChannels; ch++) interleaved[i * numChannels + ch] = channels[ch]?.[offset + i] ?? 0;\n\t\tconst sample = new AudioSample({\n\t\t\tdata: interleaved,\n\t\t\tformat: \"f32\",\n\t\t\tnumberOfChannels: numChannels,\n\t\t\tsampleRate,\n\t\t\ttimestamp: offset / sampleRate\n\t\t});\n\t\ttry {\n\t\t\tawait job.source.add(sample);\n\t\t} finally {\n\t\t\tsample.close();\n\t\t}\n\t\tconst written = offset + currentChunk;\n\t\treporter.update(`${(written / sampleRate).toFixed(1)}s/${(totalSamples / sampleRate).toFixed(1)}s`, written / totalSamples);\n\t}\n\treturn job.qaOptions ? analyzeAudio(channels, sampleRate, job.qaOptions) : void 0;\n}\nfunction toEvenDimension(n) {\n\tconst v = Math.round(n);\n\treturn v % 2 === 0 ? v : v + 1;\n}\nfunction resolveQuality(quality) {\n\tswitch (quality) {\n\t\tcase \"very_low\": return QUALITY_VERY_LOW;\n\t\tcase \"low\": return QUALITY_LOW;\n\t\tcase \"high\": return QUALITY_HIGH;\n\t\tcase \"very_high\": return QUALITY_VERY_HIGH;\n\t\tdefault: return QUALITY_VERY_HIGH;\n\t}\n}\nlet cachedVramUsage = \"N/A\";\nlet vramProbeInFlight = false;\nfunction refreshVramUsage() {\n\tif (vramProbeInFlight) return;\n\tvramProbeInFlight = true;\n\texec(\"nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader,nounits\", {\n\t\tencoding: \"utf-8\",\n\t\ttimeout: 2e3\n\t}, (err, stdout) => {\n\t\tvramProbeInFlight = false;\n\t\tif (err || !stdout) return;\n\t\tconst [used, total] = stdout.trim().split(\",\").map((s) => s.trim());\n\t\tif (used && total) cachedVramUsage = `${used}MB / ${total}MB`;\n\t});\n}\nfunction getVramUsage() {\n\treturn cachedVramUsage;\n}\nconst DEFAULT_RING_CAPACITY = 2;\nconst MIN_RING_CAPACITY = 2;\nconst MAX_RING_CAPACITY = 8;\nfunction resolveRingCapacity(explicit) {\n\tconst fromEnv = Number(process.env.FRAMEFIELDS_RING_CAPACITY);\n\tconst requested = explicit ?? (Number.isFinite(fromEnv) && fromEnv > 0 ? fromEnv : NaN);\n\tif (!Number.isFinite(requested) || requested <= 0) return DEFAULT_RING_CAPACITY;\n\treturn Math.max(MIN_RING_CAPACITY, Math.min(MAX_RING_CAPACITY, Math.floor(requested)));\n}\nvar NodeSurfacePool = class {\n\tidle = [];\n\tmaxIdle = 2;\n\tacquire(device, width, height) {\n\t\tconst index = this.idle.findIndex((entry) => entry.device === device && entry.surface.width === width && entry.surface.height === height);\n\t\tif (index >= 0) {\n\t\t\tconst [entry] = this.idle.splice(index, 1);\n\t\t\tif (entry) return entry.surface;\n\t\t}\n\t\tfor (let i = this.idle.length - 1; i >= 0; i--) {\n\t\t\tconst entry = this.idle[i];\n\t\t\tif (entry && entry.device !== device) {\n\t\t\t\tthis.idle.splice(i, 1);\n\t\t\t\ttry {\n\t\t\t\t\tentry.surface.destroy();\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t}\n\t\treturn new NodeSurfaceProvider(device, width, height);\n\t}\n\trelease(device, surface) {\n\t\tif (this.idle.length >= this.maxIdle) {\n\t\t\ttry {\n\t\t\t\tsurface.destroy();\n\t\t\t} catch {}\n\t\t\treturn;\n\t\t}\n\t\tthis.idle.push({\n\t\t\tdevice,\n\t\t\tsurface\n\t\t});\n\t}\n\tdestroy() {\n\t\tfor (const entry of this.idle.splice(0)) try {\n\t\t\tentry.surface.destroy();\n\t\t} catch {}\n\t}\n};\nconst nodeSurfacePool = new NodeSurfacePool();\nfunction formatLutAsCube(lut) {\n\tconst lines = [\n\t\t\"# Created by Gatewai\",\n\t\tlut.type === \"3D\" ? `LUT_3D_SIZE ${lut.size}` : `LUT_1D_SIZE ${lut.size}`,\n\t\t\"\"\n\t];\n\tfor (const p of lut.points) lines.push(`${p[0].toFixed(6)} ${p[1].toFixed(6)} ${p[2].toFixed(6)}`);\n\treturn lines.join(\"\\n\");\n}\nvar HeadlessWebGPURenderer = class HeadlessWebGPURenderer {\n\tstatic isInitialized = false;\n\tstatic initPromise = null;\n\tstatic initFailureCount = 0;\n\tstatic MAX_INIT_FAILURES = 3;\n\tstatic nextRetryAt = 0;\n\tstatic initialize() {\n\t\tif (HeadlessWebGPURenderer.isInitialized) return Promise.resolve();\n\t\tif (HeadlessWebGPURenderer.initFailureCount >= HeadlessWebGPURenderer.MAX_INIT_FAILURES) return Promise.reject(/* @__PURE__ */ new Error(\"GPU initialization permanently failed — circuit breaker open\"));\n\t\tif (Date.now() < HeadlessWebGPURenderer.nextRetryAt) return Promise.reject(/* @__PURE__ */ new Error(\"GPU initialization in backoff period\"));\n\t\tif (HeadlessWebGPURenderer.initPromise) return HeadlessWebGPURenderer.initPromise;\n\t\tHeadlessWebGPURenderer.initPromise = (async () => {\n\t\t\ttry {\n\t\t\t\trendererLogger.debug(\"[HeadlessWebGPURenderer] Initializing headless WebGPU…\");\n\t\t\t\tawait initHeadlessWebGPU();\n\t\t\t\trendererLogger.debug(\"[HeadlessWebGPURenderer] Scanning node renderers…\");\n\t\t\t\tawait discoverAndRegisterNodeRenderers();\n\t\t\t\tHeadlessWebGPURenderer.isInitialized = true;\n\t\t\t\tHeadlessWebGPURenderer.initPromise = null;\n\t\t\t\tHeadlessWebGPURenderer.initFailureCount = 0;\n\t\t\t\tHeadlessWebGPURenderer.nextRetryAt = 0;\n\t\t\t\trendererLogger.debug(\"[HeadlessWebGPURenderer] Initialization complete.\");\n\t\t\t} catch (error) {\n\t\t\t\tHeadlessWebGPURenderer.initFailureCount++;\n\t\t\t\tHeadlessWebGPURenderer.nextRetryAt = Date.now() + 5e3 * 2 ** HeadlessWebGPURenderer.initFailureCount;\n\t\t\t\tHeadlessWebGPURenderer.initPromise = null;\n\t\t\t\trendererLogger.error({\n\t\t\t\t\terr: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tfailureCount: HeadlessWebGPURenderer.initFailureCount,\n\t\t\t\t\tnextRetryAt: new Date(HeadlessWebGPURenderer.nextRetryAt).toISOString()\n\t\t\t\t}, \"[HeadlessWebGPURenderer] Initialization failed\");\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t})();\n\t\treturn HeadlessWebGPURenderer.initPromise;\n\t}\n\tasync renderImage(virtualMedia, frame = 0, fps = 24, options$1 = {}) {\n\t\tawait HeadlessWebGPURenderer.initialize();\n\t\tawait preflightMediaTime(virtualMedia, fps);\n\t\tconst width = toEvenDimension(virtualMedia.metadata.width ?? 0);\n\t\tconst height = toEvenDimension(virtualMedia.metadata.height ?? 0);\n\t\tif (!width || !height) throw new Error(`Invalid dimensions: ${width}x${height}`);\n\t\tconst pooledId = options$1.renderId ? void 0 : takeStillId();\n\t\tconst renderId = options$1.renderId ?? pooledId;\n\t\trendererLogger.debug({\n\t\t\trenderId,\n\t\t\tframe,\n\t\t\t...renderSemaphore.stats\n\t\t}, \"[HeadlessWebGPURenderer] Acquiring slot for image render\");\n\t\tawait renderSemaphore.acquire();\n\t\tlet surface;\n\t\tlet renderer;\n\t\tconst device = await ensureDevice();\n\t\ttry {\n\t\t\tawait preloadFonts(virtualMedia, device);\n\t\t\tsurface = nodeSurfacePool.acquire(device, width, height);\n\t\t\trenderer = getRenderer2D(device, surface.colorFormat);\n\t\t\tconst ctx = {\n\t\t\t\tdevice,\n\t\t\t\trenderer,\n\t\t\t\tsurface\n\t\t\t};\n\t\t\tupdateClockSignals(frame, fps, virtualMedia.metadata.durationMs ?? void 0);\n\t\t\tif (frame === 0 || lutStore.hasPending(device) || SlugFontCache.hasPending()) {\n\t\t\t\tconst preEncoder = device.createCommandEncoder();\n\t\t\t\tconst dummyTex = renderer.getTemporaryTexture(width, height);\n\t\t\t\tconst dummyView = dummyTex.createView();\n\t\t\t\trenderer.beginFrame(preEncoder, dummyView, {\n\t\t\t\t\tr: 0,\n\t\t\t\t\tg: 0,\n\t\t\t\t\tb: 0,\n\t\t\t\t\ta: 0\n\t\t\t\t}, width, height, \"clear\").end();\n\t\t\t\tawait drawCompositionTree(ctx, preEncoder, dummyView, dummyTex, width, height, virtualMedia, {\n\t\t\t\t\tframe,\n\t\t\t\t\tcompositionFrame: frame,\n\t\t\t\t\tfps,\n\t\t\t\t\tisHeadless: true,\n\t\t\t\t\trenderId,\n\t\t\t\t\tvirtualMedia,\n\t\t\t\t\tcontainerWidth: width,\n\t\t\t\t\tcontainerHeight: height,\n\t\t\t\t\tisVideoMode: virtualMedia.operation?.dataType === \"Video\"\n\t\t\t\t});\n\t\t\t\tdevice.queue.submit([preEncoder.finish()]);\n\t\t\t\tawait lutStore.awaitAllPending(device);\n\t\t\t}\n\t\t\tcompositionStateStore.setState(renderId, frame, fps, true);\n\t\t\tconst encoder = device.createCommandEncoder();\n\t\t\tconst targetView = surface.getCurrentTextureView();\n\t\t\tconst targetTexture = surface.getCurrentTexture();\n\t\t\trenderer.beginFrame(encoder, targetView, {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}, width, height, \"clear\").end();\n\t\t\tawait drawCompositionTree(ctx, encoder, targetView, targetTexture, width, height, virtualMedia, {\n\t\t\t\tframe,\n\t\t\t\tcompositionFrame: frame,\n\t\t\t\tfps,\n\t\t\t\tisHeadless: true,\n\t\t\t\trenderId,\n\t\t\t\tvirtualMedia,\n\t\t\t\tcontainerWidth: width,\n\t\t\t\tcontainerHeight: height,\n\t\t\t\tisVideoMode: virtualMedia.operation?.dataType === \"Video\"\n\t\t\t});\n\t\t\tdevice.queue.submit([encoder.finish()]);\n\t\t\tconst pixels = await surface.readPixels();\n\t\t\tconst pixelsArr = new Uint8Array(pixels.buffer, pixels.byteOffset, pixels.byteLength);\n\t\t\tif (options$1.format === \"rgba\") return Buffer.from(pixelsArr);\n\t\t\treturn await sharp(Buffer.from(pixelsArr), { raw: {\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tchannels: 4\n\t\t\t} }).png().toBuffer();\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tclearAllVideoCache();\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\tshaderStore.clear(renderId);\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\tmediaDecoderCache.tick();\n\t\t\t} catch {}\n\t\t\tif (pooledId) returnStillId(pooledId);\n\t\t\tif (surface) nodeSurfacePool.release(device, surface);\n\t\t\ttry {\n\t\t\t\ttextureCache.destroy();\n\t\t\t} catch {}\n\t\t\trenderSemaphore.release();\n\t\t\trendererLogger.debug({\n\t\t\t\trenderId,\n\t\t\t\t...renderSemaphore.stats\n\t\t\t}, \"[HeadlessWebGPURenderer] Image render slot released\");\n\t\t}\n\t}\n\t/**\n\t* Renders a single frame to a PNG buffer at a specified timestamp in milliseconds or frame index.\n\t*/\n\tasync renderFrame(source, options$1 = {}) {\n\t\tconst vm = typeof source === \"object\" && source !== null && \"toVirtualMedia\" in source ? source.toVirtualMedia() : source;\n\t\tconst fps = options$1.fps ?? (vm.metadata?.fps || 30);\n\t\tconst { frame } = resolveFrameRequest(options$1, fps);\n\t\treturn this.renderImage(vm, frame, fps, {\n\t\t\trenderId: options$1.renderId,\n\t\t\tformat: options$1.format\n\t\t});\n\t}\n\t/**\n\t* Measures what frames cost to render across the timeline, for planning a\n\t* split render (`planChunks`). At `samples` evenly spaced points (default\n\t* 12) it renders three consecutive frames and times the last two, so\n\t* effects that carry state (trails, particles) are caught up and their\n\t* replay is not counted. Encoding is not included.\n\t*/\n\tasync probeRender(source, options$1 = {}) {\n\t\tconst vm = \"toVirtualMedia\" in source ? source.toVirtualMedia() : source;\n\t\tconst fps = vm.metadata.fps;\n\t\tif (!fps) throw new Error(\"probeRender: the composition has no fps.\");\n\t\tlet durationMs = vm.metadata.durationMs;\n\t\tif (!durationMs || durationMs <= 0) {\n\t\t\tdurationMs = await this.resolveMediaDuration(vm, fps);\n\t\t\tvm.metadata.durationMs = durationMs;\n\t\t}\n\t\tconst totalFrames = frameCount(durationMs, fps);\n\t\tconst count = Math.max(1, Math.min(Math.floor(options$1.samples ?? 12), totalFrames));\n\t\tconst last = Math.max(0, totalFrames - 3);\n\t\tconst renderId = `probe-${randomUUID()}`;\n\t\tconst render = (frame) => this.renderImage(vm, Math.min(frame, totalFrames - 1), fps, {\n\t\t\trenderId,\n\t\t\tformat: \"rgba\"\n\t\t});\n\t\tconst samples = [];\n\t\ttry {\n\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\toptions$1.signal?.throwIfAborted();\n\t\t\t\tconst at = count === 1 ? 0 : Math.round(i * last / (count - 1));\n\t\t\t\tawait render(at);\n\t\t\t\tconst started = performance.now();\n\t\t\t\tawait render(at + 1);\n\t\t\t\tawait render(at + 2);\n\t\t\t\tsamples.push({\n\t\t\t\t\tframe: Math.min(at + 1, totalFrames - 1),\n\t\t\t\t\tms: (performance.now() - started) / 2\n\t\t\t\t});\n\t\t\t\toptions$1.onSample?.(i + 1, count);\n\t\t\t}\n\t\t} finally {\n\t\t\tmediaDecoderCache.clearNode(renderId);\n\t\t}\n\t\treturn {\n\t\t\ttotalFrames,\n\t\t\tfps,\n\t\t\tdurationMs,\n\t\t\tsamples\n\t\t};\n\t}\n\t/**\n\t* Mixes the composition's full audio timeline (clips, effects, synthesized\n\t* tracks) to stereo PCM, exactly as `renderVideo` muxes it.\n\t*/\n\tasync renderAudio(virtualMedia, options$1 = {}) {\n\t\tawait HeadlessWebGPURenderer.initialize();\n\t\tconst fps = options$1.fps ?? (virtualMedia.metadata?.fps || 30);\n\t\tawait preflightMediaTime(virtualMedia, fps);\n\t\tawait renderSemaphore.acquire();\n\t\ttry {\n\t\t\tconst device = await ensureDevice();\n\t\t\treturn await mixAudioTracks(virtualMedia, fps, options$1.sampleRate ?? 48e3, device, `aud-${randomUUID()}`);\n\t\t} finally {\n\t\t\trenderSemaphore.release();\n\t\t}\n\t}\n\tasync renderLut(virtualMedia, frame = 0, fps = 24) {\n\t\tawait HeadlessWebGPURenderer.initialize();\n\t\tconst width = 32;\n\t\tconst height = 32;\n\t\tconst renderId = `lut-${randomUUID()}`;\n\t\trendererLogger.debug({\n\t\t\trenderId,\n\t\t\tframe,\n\t\t\t...renderSemaphore.stats\n\t\t}, \"[HeadlessWebGPURenderer] Acquiring slot for LUT render\");\n\t\tawait renderSemaphore.acquire();\n\t\tlet surface;\n\t\tlet renderer;\n\t\tconst device = await ensureDevice();\n\t\tlet lutData = null;\n\t\tconst lutSub = lutStore.onChange((key) => {\n\t\t\tconst raw = lutStore.getRawData(key);\n\t\t\tif (raw) lutData = raw;\n\t\t});\n\t\ttry {\n\t\t\tawait preloadFonts(virtualMedia, device);\n\t\t\tsurface = new NodeSurfaceProvider(device, width, height);\n\t\t\trenderer = getRenderer2D(device, surface.colorFormat);\n\t\t\tconst ctx = {\n\t\t\t\tdevice,\n\t\t\t\trenderer,\n\t\t\t\tsurface\n\t\t\t};\n\t\t\tif (frame === 0 || lutStore.hasPending(device) || SlugFontCache.hasPending()) {\n\t\t\t\tconst preEncoder = device.createCommandEncoder();\n\t\t\t\tconst dummyTex = renderer.getTemporaryTexture(width, height);\n\t\t\t\tconst dummyView = dummyTex.createView();\n\t\t\t\trenderer.beginFrame(preEncoder, dummyView, {\n\t\t\t\t\tr: 0,\n\t\t\t\t\tg: 0,\n\t\t\t\t\tb: 0,\n\t\t\t\t\ta: 0\n\t\t\t\t}, width, height, \"clear\").end();\n\t\t\t\tawait drawCompositionTree(ctx, preEncoder, dummyView, dummyTex, width, height, virtualMedia, {\n\t\t\t\t\tframe,\n\t\t\t\t\tcompositionFrame: frame,\n\t\t\t\t\tfps,\n\t\t\t\t\tisHeadless: true,\n\t\t\t\t\trenderId,\n\t\t\t\t\tvirtualMedia,\n\t\t\t\t\tcontainerWidth: width,\n\t\t\t\t\tcontainerHeight: height,\n\t\t\t\t\tisVideoMode: virtualMedia.operation?.dataType === \"Video\"\n\t\t\t\t});\n\t\t\t\tdevice.queue.submit([preEncoder.finish()]);\n\t\t\t\tawait lutStore.awaitAllPending(device);\n\t\t\t}\n\t\t\tcompositionStateStore.setState(renderId, frame, fps, true);\n\t\t\tconst encoder = device.createCommandEncoder();\n\t\t\tconst targetView = surface.getCurrentTextureView();\n\t\t\tconst targetTexture = surface.getCurrentTexture();\n\t\t\trenderer.beginFrame(encoder, targetView, {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}, width, height, \"clear\").end();\n\t\t\tawait drawCompositionTree(ctx, encoder, targetView, targetTexture, width, height, virtualMedia, {\n\t\t\t\tframe,\n\t\t\t\tcompositionFrame: frame,\n\t\t\t\tfps,\n\t\t\t\tisHeadless: true,\n\t\t\t\trenderId,\n\t\t\t\tvirtualMedia,\n\t\t\t\tcontainerWidth: width,\n\t\t\t\tcontainerHeight: height,\n\t\t\t\tisVideoMode: virtualMedia.operation?.dataType === \"Video\"\n\t\t\t});\n\t\t\tdevice.queue.submit([encoder.finish()]);\n\t\t\tawait lutStore.awaitAllPending(device);\n\t\t\tif (!lutData) lutData = lutStore.getAnyRawData();\n\t\t\tif (!lutData) throw new Error(\"No LUT data generated during rendering\");\n\t\t\tconst cubeContent = formatLutAsCube(lutData);\n\t\t\treturn Buffer.from(cubeContent, \"utf-8\");\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tlutSub();\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\tmediaDecoderCache.clearNode(renderId);\n\t\t\t\tclearAllVideoCache();\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\tshaderStore.clear(renderId);\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\tsurface?.destroy();\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\ttextureCache.destroy();\n\t\t\t} catch {}\n\t\t\trenderSemaphore.release();\n\t\t\trendererLogger.debug({\n\t\t\t\trenderId,\n\t\t\t\t...renderSemaphore.stats\n\t\t\t}, \"[HeadlessWebGPURenderer] LUT render slot released\");\n\t\t}\n\t}\n\tasync resolveMediaDuration(virtualMedia, fps) {\n\t\tlet maxDurationMs = 0;\n\t\tconst queue = [virtualMedia];\n\t\tconst sources = /* @__PURE__ */ new Set();\n\t\twhile (queue.length > 0) {\n\t\t\tconst current = queue.shift();\n\t\t\tif (current.metadata?.durationMs && current.metadata.durationMs > maxDurationMs) maxDurationMs = current.metadata.durationMs;\n\t\t\tconst op = current.operation;\n\t\t\tif (op) {\n\t\t\t\tif (typeof op.source === \"string\") sources.add(op.source);\n\t\t\t\tif (typeof op.url === \"string\") sources.add(op.url);\n\t\t\t\tif (typeof op.inputHandleId === \"string\") sources.add(op.inputHandleId);\n\t\t\t\tif (Array.isArray(op.layout)) for (const node of op.layout) {\n\t\t\t\t\tif (node.inputHandleId) sources.add(node.inputHandleId);\n\t\t\t\t\tif (node.src) sources.add(node.src);\n\t\t\t\t\tif (typeof node.durationFrames === \"number\") {\n\t\t\t\t\t\tconst durMs = ((typeof node.startFrame === \"number\" ? node.startFrame : 0) + node.durationFrames) / fps * 1e3;\n\t\t\t\t\t\tif (durMs > maxDurationMs) maxDurationMs = durMs;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (current.children) queue.push(...current.children);\n\t\t}\n\t\tfor (const src of sources) try {\n\t\t\tconst sec = await (await inputStore.acquire(src)).computeDuration();\n\t\t\tif (Number.isFinite(sec) && sec > 0) {\n\t\t\t\tconst ms = Math.round(sec * 1e3);\n\t\t\t\tif (ms > maxDurationMs) maxDurationMs = ms;\n\t\t\t}\n\t\t} catch (_) {}\n\t\treturn maxDurationMs > 0 ? maxDurationMs : 1e3;\n\t}\n\tasync renderVideo(virtualMedia, options$1) {\n\t\tawait HeadlessWebGPURenderer.initialize();\n\t\tconst codecOption = options$1?.codec ?? \"h264\";\n\t\tconst isMp3 = codecOption === \"mp3\";\n\t\tconst isWebM = codecOption === \"vp8\" || codecOption === \"vp9\" || codecOption === \"opus\";\n\t\tconst mediaType = getMediaType(virtualMedia);\n\t\tconst isLut = mediaType === \"LUT\" || virtualMedia.operation?.dataType === \"LUT\";\n\t\tconst isAudioOnly = isMp3 || codecOption === \"aac\" || codecOption === \"opus\" || mediaType === \"Audio\";\n\t\tconst fps = virtualMedia.metadata.fps ?? (isAudioOnly || isLut ? 24 : void 0);\n\t\tif (!fps) {\n\t\t\tconst dataType = mediaType ?? virtualMedia.dataType ?? \"Unknown\";\n\t\t\tconst op = virtualMedia.operation?.op ?? virtualMedia.op ?? \"Unknown\";\n\t\t\tthrow new Error(`FPS is missing from virtualMedia metadata (dataType: \"${dataType}\", operation: \"${op}\")`);\n\t\t}\n\t\tawait preflightMediaTime(virtualMedia, fps);\n\t\tconst width = toEvenDimension(virtualMedia.metadata.width ?? (isAudioOnly ? 1280 : 0));\n\t\tconst height = toEvenDimension(virtualMedia.metadata.height ?? (isAudioOnly ? 720 : 0));\n\t\tif (!width || !height) throw new Error(`Invalid dimensions: ${width}x${height}`);\n\t\tlet durationMs = virtualMedia.metadata.durationMs;\n\t\tif (!durationMs || durationMs <= 0) {\n\t\t\tdurationMs = await this.resolveMediaDuration(virtualMedia, fps);\n\t\t\tvirtualMedia.metadata.durationMs = durationMs;\n\t\t}\n\t\tconst range = resolveFrameRange(options$1?.frames, frameCount(durationMs, fps));\n\t\tif (isAudioOnly && (options$1?.frames || options$1?.audio === false)) throw new Error(`An audio-only render (codec \"${codecOption}\") takes neither \\`frames\\` nor \\`audio: false\\`.`);\n\t\tconst totalFrames = range.end - range.start;\n\t\tconst renderId = `vid-${randomUUID()}`;\n\t\tconst qaOptions = options$1?.qa === true ? {} : options$1?.qa ? options$1.qa : void 0;\n\t\tconst inspector = qaOptions ? new FrameInspector(qaOptions) : void 0;\n\t\tlet videoQa;\n\t\tlet audioQa;\n\t\tconst videoCodec = codecOption === \"vp9\" ? \"vp9\" : codecOption === \"vp8\" ? \"vp8\" : \"avc\";\n\t\tconst audioCodec = options$1?.audioCodec ?? (isMp3 ? \"mp3\" : isWebM ? \"opus\" : \"aac\");\n\t\tconst quality = resolveQuality(options$1?.quality);\n\t\trendererLogger.debug({\n\t\t\trenderId,\n\t\t\ttotalFrames,\n\t\t\tfps,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tcodec: codecOption,\n\t\t\t...renderSemaphore.stats\n\t\t}, \"[HeadlessWebGPURenderer] Acquiring slot for video render (inline)\");\n\t\tif (renderSemaphore.stats.active >= renderSemaphore.stats.max) rendererLogger.info({\n\t\t\trenderId,\n\t\t\t...renderSemaphore.stats\n\t\t}, `[HeadlessWebGPURenderer] Waiting for a render slot (${renderSemaphore.stats.active} running, ${renderSemaphore.stats.queued} queued)`);\n\t\tawait renderSemaphore.acquire();\n\t\tconst reporter = new RenderReporter({\n\t\t\trenderId,\n\t\t\ttotalFrames,\n\t\t\tonProgress: options$1?.onProgress\n\t\t});\n\t\tconst seconds = `${(durationMs / 1e3).toFixed(1)}s`;\n\t\treporter.stage(\"prepare\", isAudioOnly ? `Preparing ${seconds} of audio (${audioCodec})` : `Preparing ${totalFrames} frames (${seconds}) at ${width}x${height}, ${fps} fps, ${codecOption}`, {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tfps,\n\t\t\tdurationMs,\n\t\t\tcodec: codecOption\n\t\t});\n\t\tlet lastCpuUsage = process.cpuUsage();\n\t\tlet lastCpuTime = process.hrtime.bigint();\n\t\tconst getCpuUsage = () => {\n\t\t\tconst curCpuUsage = process.cpuUsage();\n\t\t\tconst curCpuTime = process.hrtime.bigint();\n\t\t\tconst userDiff = curCpuUsage.user - lastCpuUsage.user;\n\t\t\tconst sysDiff = curCpuUsage.system - lastCpuUsage.system;\n\t\t\tconst timeDiff = Number(curCpuTime - lastCpuTime) / 1e3;\n\t\t\tlastCpuUsage = curCpuUsage;\n\t\t\tlastCpuTime = curCpuTime;\n\t\t\tif (timeDiff === 0) return \"0.0%\";\n\t\t\tconst cpus = os.cpus().length || 1;\n\t\t\treturn `${((userDiff + sysDiff) / timeDiff * 100 / cpus).toFixed(1)}%`;\n\t\t};\n\t\tconst getRamUsage = () => {\n\t\t\tconst mem = process.memoryUsage();\n\t\t\tconst freeMem = os.freemem();\n\t\t\tconst totalMem = os.totalmem();\n\t\t\tconst usedMem = totalMem - freeMem;\n\t\t\tconst heapUsedMb = Math.round(mem.heapUsed / 1024 / 1024);\n\t\t\tconst heapTotalMb = Math.round(mem.heapTotal / 1024 / 1024);\n\t\t\treturn `Process: ${Math.round(mem.rss / 1024 / 1024)}MB RSS (${heapUsedMb}MB/${heapTotalMb}MB Heap), System: ${Math.round(usedMem / 1024 / 1024)}MB/${Math.round(totalMem / 1024 / 1024)}MB`;\n\t\t};\n\t\tlet statsInterval;\n\t\tif (process.env.NODE_ENV === \"production\") statsInterval = setInterval(() => {\n\t\t\trefreshVramUsage();\n\t\t\trendererLogger.info({\n\t\t\t\trenderId,\n\t\t\t\tcpu: getCpuUsage(),\n\t\t\t\tram: getRamUsage(),\n\t\t\t\tvram: getVramUsage(),\n\t\t\t\trenderQueue: renderSemaphore.stats\n\t\t\t}, \"[HeadlessWebGPURenderer] Performance Stats\");\n\t\t}, 5e3);\n\t\tconst tempDir = os.tmpdir();\n\t\tconst extension = isMp3 ? \"mp3\" : isWebM ? \"webm\" : \"mp4\";\n\t\tconst tempFilePath = path.join(tempDir, `render-${renderId}.${extension}`);\n\t\tconst tempGifPath = path.join(tempDir, `render-${renderId}.gif`);\n\t\tconst target = new FilePathTarget(tempFilePath);\n\t\tconst output = new Output({\n\t\t\tformat: isMp3 ? new Mp3OutputFormat() : isWebM ? new WebMOutputFormat() : new Mp4OutputFormat(),\n\t\t\ttarget\n\t\t});\n\t\tlet videoSource;\n\t\tif (!isAudioOnly) {\n\t\t\tvideoSource = new VideoSampleSource({\n\t\t\t\tcodec: videoCodec,\n\t\t\t\tbitrate: quality,\n\t\t\t\tlatencyMode: \"realtime\",\n\t\t\t\thardwareAcceleration: \"prefer-hardware\"\n\t\t\t});\n\t\t\toutput.addVideoTrack(videoSource);\n\t\t}\n\t\tlet audioSource;\n\t\tif (options$1?.audio !== false) {\n\t\t\taudioSource = new AudioSampleSource({\n\t\t\t\tcodec: audioCodec,\n\t\t\t\tbitrate: quality\n\t\t\t});\n\t\t\toutput.addAudioTrack(audioSource);\n\t\t}\n\t\tlet outputStarted = false;\n\t\tlet outputFinalized = false;\n\t\tlet surface;\n\t\tlet renderer;\n\t\tlet pipeline;\n\t\ttry {\n\t\t\tconst device = await ensureDevice();\n\t\t\tawait output.start();\n\t\t\toutputStarted = true;\n\t\t\tawait preloadFonts(virtualMedia, device);\n\t\t\tif (!isAudioOnly && videoSource) {\n\t\t\t\tsurface = new NodeSurfaceProvider(device, width, height);\n\t\t\t\trenderer = getRenderer2D(device, surface.colorFormat);\n\t\t\t\tpipeline = new ZeroCopyWebCodecsPipeline(device, {\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tfps,\n\t\t\t\t\tvideoSource,\n\t\t\t\t\tringCapacity: resolveRingCapacity(options$1?.ringCapacity),\n\t\t\t\t\tonFrame: inspector ? (rgba) => inspector.inspect(rgba, width, height) : void 0\n\t\t\t\t});\n\t\t\t\tconst ctx = surface && renderer ? {\n\t\t\t\t\tdevice,\n\t\t\t\t\trenderer,\n\t\t\t\t\tsurface\n\t\t\t\t} : null;\n\t\t\t\tconst prePass = async (frame) => {\n\t\t\t\t\tif (!ctx || !renderer) return;\n\t\t\t\t\tconst preEncoder = device.createCommandEncoder();\n\t\t\t\t\tconst dummyTex = renderer.getTemporaryTexture(width, height);\n\t\t\t\t\tconst dummyView = dummyTex.createView();\n\t\t\t\t\trenderer.beginFrame(preEncoder, dummyView, {\n\t\t\t\t\t\tr: 0,\n\t\t\t\t\t\tg: 0,\n\t\t\t\t\t\tb: 0,\n\t\t\t\t\t\ta: 0\n\t\t\t\t\t}, width, height, \"clear\").end();\n\t\t\t\t\tawait drawCompositionTree(ctx, preEncoder, dummyView, dummyTex, width, height, virtualMedia, {\n\t\t\t\t\t\tframe,\n\t\t\t\t\t\tcompositionFrame: frame,\n\t\t\t\t\t\tfps,\n\t\t\t\t\t\tisHeadless: true,\n\t\t\t\t\t\trenderId,\n\t\t\t\t\t\tvirtualMedia,\n\t\t\t\t\t\tcontainerWidth: width,\n\t\t\t\t\t\tcontainerHeight: height,\n\t\t\t\t\t\tisVideoMode: virtualMedia.operation?.dataType === \"Video\"\n\t\t\t\t\t});\n\t\t\t\t\tdevice.queue.submit([preEncoder.finish()]);\n\t\t\t\t\tawait lutStore.awaitAllPending(device);\n\t\t\t\t};\n\t\t\t\tupdateClockSignals(range.start, fps, durationMs);\n\t\t\t\tawait prePass(range.start);\n\t\t\t\treporter.stage(\"render\", range.start === 0 && totalFrames === range.total ? `Rendering ${totalFrames} frames` : `Rendering frames ${range.start}–${range.end - 1} of ${range.total}`);\n\t\t\t\tfor (let i = range.start; i < range.end; i++) {\n\t\t\t\t\toptions$1?.signal?.throwIfAborted();\n\t\t\t\t\tif (ctx && surface && renderer && pipeline) {\n\t\t\t\t\t\tif (i > range.start && (lutStore.hasPending(device) || SlugFontCache.hasPending())) {\n\t\t\t\t\t\t\tupdateClockSignals(i, fps, durationMs);\n\t\t\t\t\t\t\tawait prePass(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcompositionStateStore.setState(renderId, i, fps, true);\n\t\t\t\t\t\tupdateClockSignals(i, fps, durationMs);\n\t\t\t\t\t\tmediaDecoderCache.tick();\n\t\t\t\t\t\tconst encoder = device.createCommandEncoder();\n\t\t\t\t\t\tconst targetView = surface.getCurrentTextureView();\n\t\t\t\t\t\tconst targetTexture = surface.getCurrentTexture();\n\t\t\t\t\t\trenderer.beginFrame(encoder, targetView, {\n\t\t\t\t\t\t\tr: 0,\n\t\t\t\t\t\t\tg: 0,\n\t\t\t\t\t\t\tb: 0,\n\t\t\t\t\t\t\ta: 0\n\t\t\t\t\t\t}, width, height, \"clear\").end();\n\t\t\t\t\t\tawait drawCompositionTree(ctx, encoder, targetView, targetTexture, width, height, virtualMedia, {\n\t\t\t\t\t\t\tframe: i,\n\t\t\t\t\t\t\tcompositionFrame: i,\n\t\t\t\t\t\t\tfps,\n\t\t\t\t\t\t\tisHeadless: true,\n\t\t\t\t\t\t\trenderId,\n\t\t\t\t\t\t\tvirtualMedia,\n\t\t\t\t\t\t\tcontainerWidth: width,\n\t\t\t\t\t\t\tcontainerHeight: height,\n\t\t\t\t\t\t\tisVideoMode: virtualMedia.operation?.dataType === \"Video\"\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst done = i - range.start + 1;\n\t\t\t\t\t\tawait pipeline.enqueueFrame(done - 1, targetTexture, encoder);\n\t\t\t\t\t\tif (done < totalFrames) reporter.frameDone(done);\n\t\t\t\t\t} else throw new Error(\"Invalid render context state\");\n\t\t\t\t}\n\t\t\t\tif (pipeline) {\n\t\t\t\t\tawait pipeline.drain();\n\t\t\t\t\treporter.frameDone(totalFrames);\n\t\t\t\t\tconst pipelineStats = pipeline.getStats();\n\t\t\t\t\tif (inspector && qaOptions) videoQa = inspector.stats(totalFrames, pipelineStats.totalFramesEncoded, fps, width, height, qaOptions);\n\t\t\t\t\trendererLogger.debug({\n\t\t\t\t\t\trenderId,\n\t\t\t\t\t\ttotalFrames,\n\t\t\t\t\t\t...pipelineStats\n\t\t\t\t\t}, `[HeadlessWebGPURenderer] All frames rendered and encoded (avg cycle: ${pipelineStats.averageCycleTimeMs.toFixed(2)}ms, throughput: ${pipelineStats.throughputFps.toFixed(1)} fps)`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (audioSource) {\n\t\t\t\toptions$1?.signal?.throwIfAborted();\n\t\t\t\taudioQa = await encodeAudioTrack({\n\t\t\t\t\tvirtualMedia,\n\t\t\t\t\tfps,\n\t\t\t\t\tdevice,\n\t\t\t\t\trenderId,\n\t\t\t\t\tsource: audioSource,\n\t\t\t\t\tcodec: audioCodec,\n\t\t\t\t\treporter,\n\t\t\t\t\tqaOptions\n\t\t\t\t});\n\t\t\t}\n\t\t\toptions$1?.signal?.throwIfAborted();\n\t\t\treporter.stage(\"mux\", `Muxing ${extension}`);\n\t\t\tawait output.finalize();\n\t\t\toutputFinalized = true;\n\t\t\tconst qa = qaOptions ? buildQaReport({\n\t\t\t\tvideo: videoQa,\n\t\t\t\taudio: audioQa,\n\t\t\t\tdiagnostics: takeRenderDiagnostics(renderId),\n\t\t\t\toptions: qaOptions\n\t\t\t}) : void 0;\n\t\t\tconst cleanup = async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait fs$1.unlink(tempFilePath).catch(() => {});\n\t\t\t\t\tif (codecOption === \"gif\") await fs$1.unlink(tempGifPath).catch(() => {});\n\t\t\t\t} catch {}\n\t\t\t};\n\t\t\tif (codecOption === \"gif\") {\n\t\t\t\treporter.stage(\"convert\", \"Converting to GIF (ffmpeg)\");\n\t\t\t\tawait convertMp4ToGif(tempFilePath, tempGifPath);\n\t\t\t\treporter.finish({ bytes: await fileSize(tempGifPath) });\n\t\t\t\treturn {\n\t\t\t\t\tfilePath: tempGifPath,\n\t\t\t\t\tcleanup,\n\t\t\t\t\t...qa && { qa }\n\t\t\t\t};\n\t\t\t}\n\t\t\treporter.finish({ bytes: await fileSize(tempFilePath) });\n\t\t\treturn {\n\t\t\t\tfilePath: tempFilePath,\n\t\t\t\tcleanup,\n\t\t\t\t...qa && { qa }\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treporter.fail(error, options$1?.signal?.aborted === true);\n\t\t\tif (outputStarted && !outputFinalized) try {\n\t\t\t\tawait output.finalize();\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\tawait fs$1.unlink(tempFilePath).catch(() => {});\n\t\t\t\tif (codecOption === \"gif\") await fs$1.unlink(tempGifPath).catch(() => {});\n\t\t\t} catch {}\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\treporter.dispose();\n\t\t\tif (statsInterval) clearInterval(statsInterval);\n\t\t\ttry {\n\t\t\t\trenderer?.destroy();\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\tpipeline?.destroy();\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\tsurface?.destroy();\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\tmediaDecoderCache.clearNode(renderId);\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\tclearAllVideoCache();\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\ttextureCache.destroy();\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\tWebGPUAudioProcessor.clearCache(renderId);\n\t\t\t} catch {}\n\t\t\ttry {\n\t\t\t\tshaderStore.clear(renderId);\n\t\t\t} catch {}\n\t\t\ttakeRenderDiagnostics(renderId);\n\t\t\trenderSemaphore.release();\n\t\t\trendererLogger.debug({\n\t\t\t\trenderId,\n\t\t\t\t...renderSemaphore.stats\n\t\t\t}, \"[HeadlessWebGPURenderer] Video render slot released\");\n\t\t}\n\t}\n};\nconst HeadlessMediaRenderer = HeadlessWebGPURenderer;\n\n//#endregion\nexport { preloadFonts as _, FrameInspector as a, textLogStream as b, formatQaReport as c, findNodesDir as d, NODE_KINDS as f, DmaStagingRing as g, parseNodeManifest as h, ZeroCopyWebCodecsPipeline as i, integratedLoudness as l, loadNodeManifests as m, HeadlessWebGPURenderer as n, analyzeAudio as o, NodeManifestError as p, renderSemaphore as r, buildQaReport as s, HeadlessMediaRenderer as t, discoverAndRegisterNodeRenderers as u, rendererLogger as v, resolveLogFormat as y };\n//# sourceMappingURL=headless-webgpu-renderer-qPWYs6BY.mjs.map","import { _ as preloadFonts, a as FrameInspector, b as textLogStream, c as formatQaReport, d as findNodesDir, f as NODE_KINDS, g as DmaStagingRing, h as parseNodeManifest, i as ZeroCopyWebCodecsPipeline, l as integratedLoudness, m as loadNodeManifests, n as HeadlessWebGPURenderer, o as analyzeAudio, p as NodeManifestError, r as renderSemaphore, s as buildQaReport, t as HeadlessMediaRenderer, u as discoverAndRegisterNodeRenderers, v as rendererLogger, y as resolveLogFormat } from \"./headless-webgpu-renderer-qPWYs6BY.mjs\";\nimport path from \"node:path\";\nimport fs from \"node:fs/promises\";\nimport { SlugFontCache, clearAllVideoCache, clearHeadlessFonts, inputStore, lutStore, mediaDecoderCache, textureCache } from \"@framefields/webgpu-renderers\";\nimport { ALL_FORMATS, EncodedAudioPacketSource, EncodedPacketSink, EncodedVideoPacketSource, FilePathSource, FilePathTarget, Input, Mp4OutputFormat, Output, WebMOutputFormat } from \"mediabunny\";\n\n//#region src/chunk-plan.ts\nfunction planChunks(options) {\n\tconst total = options.totalFrames;\n\tif (!Number.isInteger(total) || total < 1) throw new Error(`planChunks: totalFrames must be a positive integer, got ${total}.`);\n\tconst overheadSec = options.overheadSec ?? 90;\n\tconst maxWorkers = Math.max(1, Math.floor(options.maxWorkers ?? 10));\n\tconst minChunkFrames = Math.max(1, Math.floor(options.minChunkFrames ?? 60));\n\tconst cost = frameCosts(total, options.samples);\n\tconst workSec = cost.reduce((sum, ms) => sum + ms, 0) / 1e3;\n\tconst wanted = workerCount(options.workers ?? 1, workSec, overheadSec, options.efficiency ?? .85);\n\tconst chunks = splitByCost(cost, Math.max(1, Math.min(wanted, maxWorkers, Math.floor(total / minChunkFrames))), minChunkFrames);\n\tconst longest = Math.max(...chunks.map((c) => c.workSec));\n\treturn {\n\t\tworkers: chunks.length,\n\t\tworkSec,\n\t\tetaSec: overheadSec + longest,\n\t\tchunks\n\t};\n}\nfunction workerCount(workers, workSec, overheadSec, efficiency) {\n\tif (workers !== \"auto\") {\n\t\tif (!Number.isInteger(workers) || workers < 1) throw new Error(`planChunks: workers must be a positive integer or \"auto\", got ${workers}.`);\n\t\treturn workers;\n\t}\n\tif (!(efficiency > 0 && efficiency < 1)) throw new Error(`planChunks: efficiency must be between 0 and 1, got ${efficiency}.`);\n\tconst minChunkSec = overheadSec * efficiency / (1 - efficiency);\n\treturn minChunkSec > 0 ? Math.max(1, Math.floor(workSec / minChunkSec)) : Number.POSITIVE_INFINITY;\n}\n/** Per-frame cost in ms: linear between samples, flat beyond the first and last. */\nfunction frameCosts(total, samples) {\n\tconst sorted = samples.filter((s$1) => Number.isFinite(s$1.frame) && Number.isFinite(s$1.ms) && s$1.ms >= 0).toSorted((a, b) => a.frame - b.frame);\n\tif (sorted.length === 0) throw new Error(\"planChunks: needs at least one frame cost sample.\");\n\tconst cost = new Float64Array(total);\n\tlet s = 0;\n\tfor (let f = 0; f < total; f++) {\n\t\twhile (s + 1 < sorted.length && sorted[s + 1].frame <= f) s++;\n\t\tconst a = sorted[s];\n\t\tconst b = sorted[s + 1];\n\t\tcost[f] = !b || f <= a.frame ? a.ms : a.ms + (b.ms - a.ms) * (f - a.frame) / (b.frame - a.frame);\n\t}\n\treturn cost;\n}\n/**\n* Cuts the frames into `count` contiguous chunks of about equal total cost,\n* none shorter than `minFrames` (`count × minFrames` must fit).\n*/\nfunction splitByCost(cost, count, minFrames) {\n\tconst total = cost.reduce((sum, ms) => sum + ms, 0);\n\tconst chunks = [];\n\tlet start = 0;\n\tlet acc = 0;\n\tlet chunkMs = 0;\n\tfor (let f = 0; f < cost.length; f++) {\n\t\tacc += cost[f];\n\t\tchunkMs += cost[f];\n\t\tconst cut = total * (chunks.length + 1) / count;\n\t\tconst framesLeft = cost.length - (f + 1);\n\t\tconst chunksLeft = count - chunks.length - 1;\n\t\tconst long = f + 1 - start >= minFrames;\n\t\tconst roomAfter = framesLeft >= minFrames * chunksLeft;\n\t\tif (chunksLeft > 0 && long && (acc >= cut && roomAfter || framesLeft === minFrames * chunksLeft)) {\n\t\t\tchunks.push({\n\t\t\t\tstart,\n\t\t\t\tend: f + 1,\n\t\t\t\tworkSec: chunkMs / 1e3\n\t\t\t});\n\t\t\tstart = f + 1;\n\t\t\tchunkMs = 0;\n\t\t}\n\t}\n\tchunks.push({\n\t\tstart,\n\t\tend: cost.length,\n\t\tworkSec: chunkMs / 1e3\n\t});\n\treturn chunks;\n}\n\n//#endregion\n//#region src/job-reset.ts\n/**\n* Drops every cache keyed by a file path or URL: media inputs and decoders,\n* textures, LUTs, fonts and downloaded font files. A long-lived worker calls this between jobs,\n* because the next checkout may hold different bytes at the same path. The\n* GPU device and compiled pipelines stay warm.\n*/\nfunction resetRenderCaches() {\n\tclearAllVideoCache();\n\tmediaDecoderCache.destroy();\n\ttextureCache.destroy();\n\tinputStore.clear();\n\tlutStore.destroy();\n\tSlugFontCache.destroy();\n\tclearHeadlessFonts();\n}\n\n//#endregion\n//#region src/stitch.ts\n/**\n* Joins the chunks of one render split across workers. Each chunk is made\n* with `renderVideo({ frames, audio: false })`, starts on a keyframe and\n* timestamps from 0; the stitch copies their encoded frames into one track,\n* shifted to follow each other, and copies in the audio track of a separate\n* audio-only render. Nothing is decoded or re-encoded, so it needs no GPU.\n*/\nasync function stitchChunks(options) {\n\tif (options.chunks.length === 0) throw new Error(\"stitchChunks needs at least one chunk.\");\n\tconst inputs = [];\n\tconst open = (file) => {\n\t\tconst input = new Input({\n\t\t\tsource: new FilePathSource(file),\n\t\t\tformats: ALL_FORMATS\n\t\t});\n\t\tinputs.push(input);\n\t\treturn input;\n\t};\n\tlet output;\n\ttry {\n\t\tconst chunks = await Promise.all(options.chunks.map((file) => openVideoChunk(file, open(file))));\n\t\tconst [reference] = chunks;\n\t\tfor (const chunk of chunks.slice(1)) assertSameEncoding(reference, chunk);\n\t\tconst webm = (await reference.input.getMimeType()).includes(\"webm\");\n\t\tawait fs.mkdir(path.dirname(path.resolve(options.outputPath)), { recursive: true });\n\t\toutput = new Output({\n\t\t\tformat: webm ? new WebMOutputFormat() : new Mp4OutputFormat(),\n\t\t\ttarget: new FilePathTarget(options.outputPath)\n\t\t});\n\t\tconst video = new EncodedVideoPacketSource(reference.codec);\n\t\toutput.addVideoTrack(video);\n\t\tconst audio = options.audio ? await AudioCopier.open(options.audio, open(options.audio), output) : void 0;\n\t\tawait output.start();\n\t\tconst written = await copyVideo(chunks, video, audio, options.signal);\n\t\tawait audio?.writeUntil(Number.POSITIVE_INFINITY, options.signal);\n\t\tawait output.finalize();\n\t\toutput = void 0;\n\t\treturn {\n\t\t\tfilePath: options.outputPath,\n\t\t\t...written\n\t\t};\n\t} catch (error) {\n\t\tif (output) {\n\t\t\tawait output.cancel().catch(() => {});\n\t\t\tawait fs.rm(options.outputPath, { force: true });\n\t\t}\n\t\tthrow error;\n\t} finally {\n\t\tfor (const input of inputs) input.dispose();\n\t}\n}\nasync function openVideoChunk(file, input) {\n\tconst track = await input.getPrimaryVideoTrack();\n\tif (!track) throw new Error(`Chunk ${file} has no video track.`);\n\tconst codec = await track.getCodec();\n\tconst config = await track.getDecoderConfig();\n\tif (!codec || !config) throw new Error(`Chunk ${file}: its video codec cannot be read.`);\n\treturn {\n\t\tfile,\n\t\tinput,\n\t\ttrack,\n\t\tcodec,\n\t\tconfig\n\t};\n}\n/**\n* Copied frames are decoded with the first chunk's codec configuration, so\n* every chunk must have been encoded with the same one.\n*/\nfunction assertSameEncoding(reference, chunk) {\n\tconst a = reference.config;\n\tconst b = chunk.config;\n\tconst differs = a.codec !== b.codec ? `codec ${b.codec}, not ${a.codec}` : a.codedWidth !== b.codedWidth || a.codedHeight !== b.codedHeight ? `size ${b.codedWidth}x${b.codedHeight}, not ${a.codedWidth}x${a.codedHeight}` : !sameBytes(a.description, b.description) ? \"different encoder parameters (SPS/PPS)\" : void 0;\n\tif (differs) throw new Error(`Chunk ${chunk.file} has ${differs} than ${reference.file}. Render every chunk with the same framefields version, codec and quality, on the same GPU type.`);\n}\nfunction sameBytes(a, b) {\n\tif (!a || !b) return a === b;\n\tconst x = toBytes(a);\n\tconst y = toBytes(b);\n\treturn x.length === y.length && x.every((v, i) => v === y[i]);\n}\nfunction toBytes(data) {\n\treturn ArrayBuffer.isView(data) ? new Uint8Array(data.buffer, data.byteOffset, data.byteLength) : new Uint8Array(data);\n}\n/** Writes every chunk's frames, each chunk starting where the last one ended. */\nasync function copyVideo(chunks, video, audio, signal) {\n\tlet offset = 0;\n\tlet frames = 0;\n\tfor (const chunk of chunks) {\n\t\tlet first;\n\t\tlet end = offset;\n\t\tfor await (const packet of new EncodedPacketSink(chunk.track).packets()) {\n\t\t\tsignal?.throwIfAborted();\n\t\t\tif (first === void 0) {\n\t\t\t\tif (packet.type !== \"key\") throw new Error(`Chunk ${chunk.file} does not start on a keyframe.`);\n\t\t\t\tfirst = packet.timestamp;\n\t\t\t}\n\t\t\tconst timestamp = offset + packet.timestamp - first;\n\t\t\tawait audio?.writeUntil(timestamp, signal);\n\t\t\tawait video.add(packet.clone({ timestamp }), frames === 0 ? { decoderConfig: chunk.config } : void 0);\n\t\t\tframes++;\n\t\t\tend = Math.max(end, timestamp + packet.duration);\n\t\t}\n\t\tif (first === void 0) throw new Error(`Chunk ${chunk.file} has no video frames.`);\n\t\toffset = end;\n\t}\n\treturn {\n\t\tframes,\n\t\tdurationSec: offset\n\t};\n}\n/** Copies an audio track's packets in timestamp order, as far as asked. */\nvar AudioCopier = class AudioCopier {\n\tpackets;\n\t/** The next packet to write; `undefined` until read, `null` at the end. */\n\tnext;\n\twritten = 0;\n\tconstructor(track, config, source) {\n\t\tthis.config = config;\n\t\tthis.source = source;\n\t\tthis.packets = new EncodedPacketSink(track).packets();\n\t}\n\tstatic async open(file, input, output) {\n\t\tconst track = await input.getPrimaryAudioTrack();\n\t\tif (!track) throw new Error(`Audio file ${file} has no audio track.`);\n\t\tconst config = await track.getDecoderConfig();\n\t\tconst codec = await track.getCodec();\n\t\tif (!config || !codec) throw new Error(`Audio file ${file}: its codec cannot be read.`);\n\t\tconst source = new EncodedAudioPacketSource(codec);\n\t\toutput.addAudioTrack(source);\n\t\treturn new AudioCopier(track, config, source);\n\t}\n\tasync writeUntil(timestamp, signal) {\n\t\tfor (;;) {\n\t\t\tif (this.next === void 0) this.next = (await this.packets.next()).value ?? null;\n\t\t\tconst packet = this.next;\n\t\t\tif (!packet || packet.timestamp > timestamp) return;\n\t\t\tsignal?.throwIfAborted();\n\t\t\tawait this.source.add(packet, this.written === 0 ? { decoderConfig: this.config } : void 0);\n\t\t\tthis.written++;\n\t\t\tthis.next = void 0;\n\t\t}\n\t}\n};\n\n//#endregion\nexport { DmaStagingRing, FrameInspector, HeadlessMediaRenderer, HeadlessWebGPURenderer, NODE_KINDS, NodeManifestError, ZeroCopyWebCodecsPipeline, analyzeAudio, buildQaReport, discoverAndRegisterNodeRenderers, findNodesDir, formatQaReport, integratedLoudness, loadNodeManifests, parseNodeManifest, planChunks, preloadFonts, renderSemaphore, rendererLogger, resetRenderCaches, resolveLogFormat, stitchChunks, textLogStream };\n//# sourceMappingURL=index.mjs.map","import fs from \"node:fs/promises\";\nimport {\n\tassertFps,\n\tframeCount,\n\tresolveFrameRequest,\n\ttype VirtualMediaData,\n} from \"@framefields/core\";\nimport { Canvas, loadImage } from \"skia-canvas\";\nimport { HeadlessMediaRenderer } from \"./index.js\";\n\nexport interface FrameSamplePoint {\n\tframe: number;\n\t/** Exact timestamp of the selected frame; round only when displaying labels. */\n\ttimeMs: number;\n}\n\nexport interface FrameGridOptions {\n\t/**\n\t * Start frame index for sampling (inclusive). Defaults to 0.\n\t */\n\tstartFrame?: number;\n\n\t/**\n\t * End frame index for sampling (inclusive). Defaults to startFrame + 30.\n\t */\n\tendFrame?: number;\n\n\t/**\n\t * Step interval between sampled frames. Must be >= 1. Defaults to 5.\n\t */\n\tstepFrames?: number;\n\n\t/**\n\t * Explicit list of frame indices to sample. Overrides startFrame/endFrame/stepFrames.\n\t */\n\tframes?: number[];\n\n\t/**\n\t * Start time in milliseconds (alternative to startFrame).\n\t */\n\tstartMs?: number;\n\n\t/**\n\t * End time in milliseconds (alternative to endFrame).\n\t */\n\tendMs?: number;\n\n\t/**\n\t * Step interval in milliseconds (alternative to stepFrames).\n\t */\n\tstepMs?: number;\n\n\t/**\n\t * Explicit list of timestamps in milliseconds to sample.\n\t */\n\ttimesMs?: number[];\n\n\t/**\n\t * Media pipeline FPS override. Composition FPS is authoritative; a mismatch throws.\n\t * If omitted, reads from media/composition metadata or defaults to 24.\n\t */\n\tfps?: number;\n\n\t/**\n\t * Number of columns in the grid. If omitted, calculated automatically to preserve balance.\n\t */\n\tcolumns?: number;\n\n\t/**\n\t * Width in pixels for each individual thumbnail cell.\n\t * Clamped to [120, 960]. Defaults to 320.\n\t */\n\tcellWidth?: number;\n\n\t/**\n\t * Explicit height for each cell. If omitted, computed from aspect ratio.\n\t */\n\tcellHeight?: number;\n\n\t/**\n\t * Gap in pixels between cells. Defaults to 12.\n\t */\n\tgap?: number;\n\n\t/**\n\t * Outer padding in pixels around the grid. Defaults to 16.\n\t */\n\tpadding?: number;\n\n\t/**\n\t * Background color for the grid canvas. Defaults to \"#090a0f\".\n\t */\n\tbackgroundColor?: string;\n\n\t/**\n\t * Whether to render frame number & millisecond badges on each cell. Defaults to true.\n\t */\n\tshowLabels?: boolean;\n\n\t/**\n\t * Whether to render the metadata header banner at the top of the grid. Defaults to true.\n\t */\n\tshowHeader?: boolean;\n\n\t/**\n\t * Custom header title text.\n\t */\n\theaderText?: string;\n\n\t/**\n\t * Optional file path to write the generated grid image directly to disk.\n\t */\n\toutputPath?: string;\n\n\t/**\n\t * Safety limit for total sampled frames to prevent memory exhaustion or oversized images.\n\t * Defaults to 64. Hard maximum is 120.\n\t */\n\tmaxFrames?: number;\n\n\t/**\n\t * Maximum allowed width for the generated image canvas. Defaults to 4096.\n\t */\n\tmaxGridWidth?: number;\n\n\t/**\n\t * Maximum allowed height for the generated image canvas. Defaults to 4096.\n\t */\n\tmaxGridHeight?: number;\n\n\t/**\n\t * Optional shared HeadlessMediaRenderer instance.\n\t */\n\trenderer?: HeadlessMediaRenderer;\n}\n\n/**\n * Resolves and validates the list of sample points from the provided options.\n */\nfunction samplingLimit(requested = 64): number {\n\tif (!Number.isSafeInteger(requested) || requested < 1)\n\t\tthrow new Error(\"[FrameGrid] maxFrames must be a positive safe integer.\");\n\treturn Math.min(requested, 120);\n}\n\nfunction checkSampleCount(count: number, limit: number): void {\n\tif (count > limit)\n\t\tthrow new Error(\n\t\t\t`[FrameGrid] Requested frames exceeds the safety threshold of ${limit}. Increase stepFrames/stepMs or narrow the start/end range.`,\n\t\t);\n}\n\nfunction sampleRange(\n\tstart: number,\n\tend: number,\n\tstep: number,\n\tlimit: number,\n\tunit: \"frame\" | \"millisecond\",\n): number[] {\n\tif (\n\t\t!Number.isFinite(start) ||\n\t\t!Number.isFinite(end) ||\n\t\tstart < 0 ||\n\t\tend < start\n\t)\n\t\tthrow new Error(\n\t\t\t`[FrameGrid] Invalid ${unit} range: start${unit === \"frame\" ? \"Frame\" : \"Ms\"} must be <= end${unit === \"frame\" ? \"Frame\" : \"Ms\"}; bounds must be finite and nonnegative.`,\n\t\t);\n\tif (!Number.isFinite(step) || step <= 0)\n\t\tthrow new Error(\n\t\t\t`[FrameGrid] Invalid ${unit === \"frame\" ? \"stepFrames\" : \"stepMs\"}: ${step}. Must be > 0 and finite.`,\n\t\t);\n\tif (unit === \"frame\" && ![start, end, step].every(Number.isSafeInteger))\n\t\tthrow new Error(\n\t\t\t\"[FrameGrid] Frame bounds and stepFrames must be safe integers.\",\n\t\t);\n\tconst values: number[] = [];\n\tfor (let i = 0; ; i++) {\n\t\tconst value = start + i * step;\n\t\tif (!Number.isFinite(value))\n\t\t\tthrow new Error(\"[FrameGrid] Range arithmetic overflow.\");\n\t\tif (i > 0 && value <= values[i - 1])\n\t\t\tthrow new Error(\"[FrameGrid] Step does not advance the sampling range.\");\n\t\tif (value > end) break;\n\t\tcheckSampleCount(i + 1, limit);\n\t\tvalues.push(value);\n\t}\n\treturn values;\n}\n\n/** Resolve bounded samples. Explicit endpoints may lie outside the export window. */\nexport function resolveSamplePoints(\n\toptions: FrameGridOptions,\n\tdefaultFps = 24,\n\tdurationMs?: number,\n): { samples: FrameSamplePoint[]; fps: number } {\n\tconst fps = options.fps ?? defaultFps;\n\tassertFps(fps);\n\tconst limit = samplingLimit(options.maxFrames);\n\tlet samples: FrameSamplePoint[];\n\tif (options.frames?.length) {\n\t\tcheckSampleCount(options.frames.length, limit);\n\t\tsamples = options.frames.map((frame) =>\n\t\t\tresolveFrameRequest({ frame }, fps),\n\t\t);\n\t} else if (options.timesMs?.length) {\n\t\tcheckSampleCount(options.timesMs.length, limit);\n\t\tsamples = options.timesMs.map((atMs) => resolveFrameRequest({ atMs }, fps));\n\t} else {\n\t\tsamples = rangeSamples(options, fps, durationMs, limit);\n\t}\n\tif (!samples.length)\n\t\tthrow new Error(\"[FrameGrid] Zero frames were resolved for sampling.\");\n\treturn { samples, fps };\n}\n\nfunction rangeSamples(\n\toptions: FrameGridOptions,\n\tfps: number,\n\tdurationMs: number | undefined,\n\tlimit: number,\n): FrameSamplePoint[] {\n\tconst lastFrame =\n\t\tdurationMs === undefined ? undefined : frameCount(durationMs, fps) - 1;\n\tif (\n\t\toptions.startMs !== undefined ||\n\t\toptions.endMs !== undefined ||\n\t\toptions.stepMs !== undefined\n\t) {\n\t\tconst start = options.startMs ?? 0;\n\t\tconst end =\n\t\t\toptions.endMs ??\n\t\t\t(lastFrame === undefined ? start + 1000 : (lastFrame / fps) * 1000);\n\t\treturn sampleRange(\n\t\t\tstart,\n\t\t\tend,\n\t\t\toptions.stepMs ?? 5000 / fps,\n\t\t\tlimit,\n\t\t\t\"millisecond\",\n\t\t).map((atMs) => resolveFrameRequest({ atMs }, fps));\n\t}\n\tconst start = options.startFrame ?? 0;\n\tconst end = options.endFrame ?? Math.min(start + 30, lastFrame ?? start + 30);\n\treturn sampleRange(start, end, options.stepFrames ?? 5, limit, \"frame\").map(\n\t\t(frame) => resolveFrameRequest({ frame }, fps),\n\t);\n}\n\n/**\n * Computes grid layout dimensions, ensuring resulting canvas does not exceed size limits.\n */\nexport function computeGridLayout(\n\tnumSamples: number,\n\taspectRatio: number,\n\toptions: FrameGridOptions,\n): {\n\tcolumns: number;\n\trows: number;\n\tcellWidth: number;\n\tcellHeight: number;\n\ttotalWidth: number;\n\ttotalHeight: number;\n\theaderHeight: number;\n\tgap: number;\n\tpadding: number;\n} {\n\tconst gap = options.gap ?? 12;\n\tconst padding = options.padding ?? 16;\n\tconst showHeader = options.showHeader ?? true;\n\tconst headerHeight = showHeader ? 54 : 0;\n\tconst maxGridWidth = options.maxGridWidth ?? 4096;\n\tconst maxGridHeight = options.maxGridHeight ?? 4096;\n\n\tlet columns = options.columns;\n\tif (!columns || columns <= 0) {\n\t\tif (numSamples <= 4) columns = numSamples;\n\t\telse if (numSamples <= 9) columns = 3;\n\t\telse if (numSamples <= 16) columns = 4;\n\t\telse if (numSamples <= 25) columns = 5;\n\t\telse columns = 6;\n\t}\n\tcolumns = Math.min(columns, numSamples);\n\tconst rows = Math.ceil(numSamples / columns);\n\n\tlet cellWidth = Math.max(120, Math.min(options.cellWidth ?? 320, 960));\n\tlet cellHeight =\n\t\toptions.cellHeight ??\n\t\tMath.round(cellWidth / (aspectRatio > 0 ? aspectRatio : 16 / 9));\n\n\tlet totalWidth = columns * cellWidth + (columns - 1) * gap + padding * 2;\n\tlet totalHeight =\n\t\trows * cellHeight + (rows - 1) * gap + padding * 2 + headerHeight;\n\n\t// Downscale thumbnail size if the unconstrained canvas exceeds max dimensions\n\tif (totalWidth > maxGridWidth || totalHeight > maxGridHeight) {\n\t\tconst scaleFactor = Math.min(\n\t\t\t(maxGridWidth - (columns - 1) * gap - padding * 2) /\n\t\t\t\t(columns * cellWidth),\n\t\t\t(maxGridHeight - (rows - 1) * gap - padding * 2 - headerHeight) /\n\t\t\t\t(rows * cellHeight),\n\t\t);\n\n\t\tif (scaleFactor < 0.25) {\n\t\t\tthrow new Error(\n\t\t\t\t`[FrameGrid] Cannot fit ${numSamples} cells (${columns}x${rows}) into max dimensions ` +\n\t\t\t\t\t`[${maxGridWidth}x${maxGridHeight}]. Reduce cell count or decrease cellWidth.`,\n\t\t\t);\n\t\t}\n\n\t\tcellWidth = Math.max(100, Math.floor(cellWidth * scaleFactor));\n\t\tcellHeight = Math.round(\n\t\t\tcellWidth / (aspectRatio > 0 ? aspectRatio : 16 / 9),\n\t\t);\n\n\t\ttotalWidth = columns * cellWidth + (columns - 1) * gap + padding * 2;\n\t\ttotalHeight =\n\t\t\trows * cellHeight + (rows - 1) * gap + padding * 2 + headerHeight;\n\t}\n\n\treturn {\n\t\tcolumns,\n\t\trows,\n\t\tcellWidth,\n\t\tcellHeight,\n\t\ttotalWidth,\n\t\ttotalHeight,\n\t\theaderHeight,\n\t\tgap,\n\t\tpadding,\n\t};\n}\n\nexport type FrameGridRenderable = {\n\ttoVirtualMedia(): VirtualMediaData;\n\trenderFrame(options: {\n\t\tframe?: number;\n\t\tatMs?: number;\n\t\tfps?: number;\n\t\trenderer?: HeadlessMediaRenderer;\n\t}): Promise<Buffer>;\n\tfps?: number;\n\tdurationMs?: number;\n\twidth?: number;\n\theight?: number;\n};\n\n/**\n * Renders a sequence of frames from a Composition or Media pipeline into a unified image grid (contact sheet).\n * Ideal for visual inspection of kinetic motion, transitions, easing, and layout stability.\n */\nexport async function renderFrameGrid(\n\ttarget: FrameGridRenderable,\n\toptions: FrameGridOptions = {},\n): Promise<Buffer> {\n\tconst defaultFps = target.fps ?? 24;\n\tconst durationMs = target.durationMs;\n\tconst { samples, fps } = resolveSamplePoints(options, defaultFps, durationMs);\n\n\tconst compWidth = target.width ?? 1920;\n\tconst compHeight = target.height ?? 1080;\n\tconst aspectRatio =\n\t\tcompWidth > 0 && compHeight > 0 ? compWidth / compHeight : 16 / 9;\n\n\tconst layout = computeGridLayout(samples.length, aspectRatio, options);\n\tconst renderer = options.renderer ?? new HeadlessMediaRenderer();\n\n\t// Render each frame sequentially to manage GPU resources cleanly\n\tconst frameBuffers: Buffer[] = [];\n\tfor (const sample of samples) {\n\t\tconst buf = await target.renderFrame({\n\t\t\tframe: sample.frame,\n\t\t\tfps,\n\t\t\trenderer,\n\t\t});\n\t\tframeBuffers.push(buf);\n\t}\n\n\t// Composite into a single grid canvas using skia-canvas\n\tconst canvas = new Canvas(layout.totalWidth, layout.totalHeight);\n\tconst ctx = canvas.getContext(\"2d\");\n\n\t// Fill background\n\tctx.fillStyle = options.backgroundColor ?? \"#090a0f\";\n\tctx.fillRect(0, 0, layout.totalWidth, layout.totalHeight);\n\n\t// Header banner\n\tif (options.showHeader !== false && layout.headerHeight > 0) {\n\t\tconst title =\n\t\t\toptions.headerText ??\n\t\t\t`FrameGrid Conformance Review | Frames ${samples[0].frame}–${samples[samples.length - 1].frame} (Count: ${samples.length})`;\n\t\tconst subtitle = `${compWidth}×${compHeight} @ ${fps} FPS | Cell: ${layout.cellWidth}×${layout.cellHeight}px | Step: ${\n\t\t\toptions.stepFrames\n\t\t\t\t? `${options.stepFrames}f`\n\t\t\t\t: options.stepMs\n\t\t\t\t\t? `${options.stepMs}ms`\n\t\t\t\t\t: \"Custom\"\n\t\t}`;\n\n\t\tctx.fillStyle = \"#f8fafc\";\n\t\tctx.font = \"bold 15px sans-serif\";\n\t\tctx.fillText(title, layout.padding, layout.padding + 18);\n\n\t\tctx.fillStyle = \"#94a3b8\";\n\t\tctx.font = \"12px sans-serif\";\n\t\tctx.fillText(subtitle, layout.padding, layout.padding + 36);\n\n\t\t// Subtle divider line\n\t\tctx.strokeStyle = \"#1e2433\";\n\t\tctx.lineWidth = 1;\n\t\tctx.beginPath();\n\t\tctx.moveTo(layout.padding, layout.padding + 46);\n\t\tctx.lineTo(layout.totalWidth - layout.padding, layout.padding + 46);\n\t\tctx.stroke();\n\t}\n\n\tconst showLabels = options.showLabels ?? true;\n\n\t// Draw each sampled cell\n\tfor (let i = 0; i < samples.length; i++) {\n\t\tconst sample = samples[i];\n\t\tconst col = i % layout.columns;\n\t\tconst row = Math.floor(i / layout.columns);\n\n\t\tconst x = layout.padding + col * (layout.cellWidth + layout.gap);\n\t\tconst y =\n\t\t\tlayout.padding +\n\t\t\tlayout.headerHeight +\n\t\t\trow * (layout.cellHeight + layout.gap);\n\n\t\tconst img = await loadImage(frameBuffers[i]);\n\t\tctx.drawImage(img, x, y, layout.cellWidth, layout.cellHeight);\n\n\t\t// Subtle cell border\n\t\tctx.strokeStyle = \"#262b3d\";\n\t\tctx.lineWidth = 1;\n\t\tctx.strokeRect(x, y, layout.cellWidth, layout.cellHeight);\n\n\t\t// Sleek metadata pill badge\n\t\tif (showLabels) {\n\t\t\tconst label = `F:${sample.frame} • ${Math.round(sample.timeMs)}ms`;\n\n\t\t\tctx.font = \"bold 11px sans-serif\";\n\t\t\tconst textWidth = ctx.measureText(label).width;\n\t\t\tconst badgeW = textWidth + 14;\n\t\t\tconst badgeH = 20;\n\t\t\tconst badgeX = x + 6;\n\t\t\tconst badgeY = y + 6;\n\n\t\t\t// Badge backdrop\n\t\t\tctx.fillStyle = \"#090a0fee\";\n\t\t\tctx.beginPath();\n\t\t\tctx.roundRect(badgeX, badgeY, badgeW, badgeH, 4);\n\t\t\tctx.fill();\n\n\t\t\t// Badge border\n\t\t\tctx.strokeStyle = \"#6366f155\";\n\t\t\tctx.lineWidth = 1;\n\t\t\tctx.stroke();\n\n\t\t\t// Badge text\n\t\t\tctx.fillStyle = \"#e2e8f0\";\n\t\t\tctx.fillText(label, badgeX + 7, badgeY + 14);\n\t\t}\n\t}\n\n\tconst gridBuffer = await canvas.toBuffer(\"png\");\n\n\tif (options.outputPath) {\n\t\tawait fs.writeFile(options.outputPath, gridBuffer);\n\t}\n\n\treturn gridBuffer;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-BhsrlGKp.mjs","names":[],"sources":["../../../nodes/node-layer-style/dist/renderers-B2ikmOEm.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, PREMULTIPLIED_BLEND, createFullscreenPipeline, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nfunction hexToRgba(hex) {\n\tif (!hex) return [\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n\tlet cleaned = hex.trim().replace(/^#/, \"\");\n\tif (cleaned.length === 3) cleaned = cleaned.split(\"\").map((c) => c + c).join(\"\") + \"ff\";\n\telse if (cleaned.length === 6) cleaned = cleaned + \"ff\";\n\telse if (cleaned.length === 8) {} else return [\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n\tconst r = parseInt(cleaned.slice(0, 2), 16) / 255;\n\tconst g = parseInt(cleaned.slice(2, 4), 16) / 255;\n\tconst b = parseInt(cleaned.slice(4, 6), 16) / 255;\n\tconst a = parseInt(cleaned.slice(6, 8), 16) / 255;\n\treturn [\n\t\tNumber.isFinite(r) ? r : 1,\n\t\tNumber.isFinite(g) ? g : 1,\n\t\tNumber.isFinite(b) ? b : 1,\n\t\tNumber.isFinite(a) ? a : 1\n\t];\n}\nconst BLEND_MODE_MAP = {\n\tnormal: 0,\n\t\"source-over\": 0,\n\tmultiply: 1,\n\tscreen: 2,\n\toverlay: 3,\n\tdarken: 4,\n\tlighten: 5,\n\t\"color-dodge\": 6,\n\t\"color-burn\": 7,\n\t\"hard-light\": 8,\n\t\"soft-light\": 9,\n\tdifference: 10,\n\texclusion: 11,\n\thue: 12,\n\tsaturation: 13,\n\tcolor: 14,\n\tluminosity: 15,\n\t\"mask-in\": 16,\n\t\"destination-in\": 16,\n\t\"mask-out\": 17,\n\t\"destination-out\": 17,\n\t\"source-in\": 18,\n\t\"source-out\": 19,\n\t\"source-atop\": 20,\n\t\"destination-over\": 21,\n\t\"destination-atop\": 22,\n\tlighter: 23,\n\tcopy: 24,\n\txor: 25\n};\nconst BEVEL_STYLE_MAP = {\n\tInnerBevel: 0,\n\tOuterBevel: 1,\n\tEmboss: 2,\n\tPillowEmboss: 3\n};\nconst BEVEL_TECHNIQUE_MAP = {\n\tSmooth: 0,\n\tChiselHard: 1,\n\tChiselSoft: 2\n};\nconst STROKE_POS_MAP = {\n\toutside: 0,\n\tcenter: 1,\n\tinside: 2\n};\n/** Blur, glow and stroke kernels in the shader stop at this radius, px. */\nconst MAX_KERNEL = 24;\nconst WGSL_LAYER_STYLE_SHADER = `\nstruct LayerStyleUniforms {\n\t// Drop Shadow (vec4 x 3)\n\tdropShadowColor : vec4<f32>,\n\tdropShadowParams : vec4<f32>, // x: enabled, y: opacity, z: angle(rad), w: distance\n\tdropShadowParams2 : vec4<f32>, // x: spread, y: size, z: blendMode, w: pad\n\n\t// Inner Shadow (vec4 x 3)\n\tinnerShadowColor : vec4<f32>,\n\tinnerShadowParams : vec4<f32>, // x: enabled, y: opacity, z: angle(rad), w: distance\n\tinnerShadowParams2 : vec4<f32>, // x: choke, y: size, z: blendMode, w: pad\n\n\t// Outer Glow (vec4 x 3)\n\touterGlowColor : vec4<f32>,\n\touterGlowParams : vec4<f32>, // x: enabled, y: opacity, z: size, w: spread\n\touterGlowParams2 : vec4<f32>, // x: blendMode, yzw: pad\n\n\t// Inner Glow (vec4 x 3)\n\tinnerGlowColor : vec4<f32>,\n\tinnerGlowParams : vec4<f32>, // x: enabled, y: opacity, z: size, w: spread\n\tinnerGlowParams2 : vec4<f32>, // x: blendMode, yzw: pad\n\n\t// Stroke (vec4 x 3)\n\tstrokeColor : vec4<f32>,\n\tstrokeParams : vec4<f32>, // x: enabled, y: size, z: position(0:out,1:center,2:in), w: opacity\n\tstrokeParams2 : vec4<f32>, // x: blendMode, yzw: pad\n\n\t// Bevel & Emboss (vec4 x 5)\n\tbevelHighlightColor : vec4<f32>,\n\tbevelShadowColor : vec4<f32>,\n\tbevelParams1 : vec4<f32>, // x: enabled, y: style, z: technique, w: depth\n\tbevelParams2 : vec4<f32>, // x: direction(1:up, -1:down), y: size, z: soften, w: angle(rad)\n\tbevelParams3 : vec4<f32>, // x: altitude(rad), y: hlOpacity, z: shOpacity, w: pad\n\n\t// Color Overlay (vec4 x 2)\n\tcolorOverlayColor : vec4<f32>,\n\tcolorOverlayParams : vec4<f32>, // x: enabled, y: opacity, z: blendMode, w: pad\n};\n\n@group(0) @binding(0) var<uniform> u : LayerStyleUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn sampleAlpha(uv: vec2<f32>) -> f32 {\n\tif (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {\n\t\treturn 0.0;\n\t}\n\treturn textureSampleLevel(tex, samp, uv, 0.0).a;\n}\n\nfn lum(c: vec3<f32>) -> f32 {\n\treturn 0.3 * c.r + 0.59 * c.g + 0.11 * c.b;\n}\n\nfn clip_color(c: vec3<f32>) -> vec3<f32> {\n\tlet l = lum(c);\n\tlet n = min(min(c.r, c.g), c.b);\n\tlet x = max(max(c.r, c.g), c.b);\n\tvar res = c;\n\tif (n < 0.0) {\n\t\tres = l + (((res - l) * l) / max(l - n, 1e-5));\n\t}\n\tif (x > 1.0) {\n\t\tres = l + (((res - l) * (1.0 - l)) / max(x - l, 1e-5));\n\t}\n\treturn res;\n}\n\nfn set_lum(c: vec3<f32>, l: f32) -> vec3<f32> {\n\tlet diff = l - lum(c);\n\treturn clip_color(c + vec3<f32>(diff));\n}\n\nfn sat(c: vec3<f32>) -> f32 {\n\treturn max(max(c.r, c.g), c.b) - min(min(c.r, c.g), c.b);\n}\n\nfn set_sat(c: vec3<f32>, s: f32) -> vec3<f32> {\n\tlet c_min = min(min(c.r, c.g), c.b);\n\tlet c_max = max(max(c.r, c.g), c.b);\n\tif (c_max <= c_min) {\n\t\treturn vec3<f32>(0.0);\n\t}\n\treturn (c - vec3<f32>(c_min)) * s / max(c_max - c_min, 1e-5);\n}\n\nfn blendRgb(d_rgb: vec3<f32>, s_rgb: vec3<f32>, mode: u32) -> vec3<f32> {\n\tswitch (mode) {\n\t\tcase 1u: { // multiply\n\t\t\treturn d_rgb * s_rgb;\n\t\t}\n\t\tcase 2u: { // screen\n\t\t\treturn d_rgb + s_rgb - d_rgb * s_rgb;\n\t\t}\n\t\tcase 3u: { // overlay\n\t\t\treturn select(\n\t\t\t\t1.0 - 2.0 * (1.0 - d_rgb) * (1.0 - s_rgb),\n\t\t\t\t2.0 * d_rgb * s_rgb,\n\t\t\t\td_rgb < vec3<f32>(0.5)\n\t\t\t);\n\t\t}\n\t\tcase 4u: { // darken\n\t\t\treturn min(d_rgb, s_rgb);\n\t\t}\n\t\tcase 5u: { // lighten\n\t\t\treturn max(d_rgb, s_rgb);\n\t\t}\n\t\tcase 6u: { // color-dodge\n\t\t\treturn select(min(d_rgb / max(1.0 - s_rgb, vec3<f32>(1e-4)), vec3<f32>(1.0)), vec3<f32>(1.0), s_rgb >= vec3<f32>(0.999));\n\t\t}\n\t\tcase 7u: { // color-burn\n\t\t\treturn select(1.0 - min((1.0 - d_rgb) / max(s_rgb, vec3<f32>(1e-4)), vec3<f32>(1.0)), vec3<f32>(0.0), s_rgb <= vec3<f32>(0.001));\n\t\t}\n\t\tcase 8u: { // hard-light\n\t\t\treturn select(\n\t\t\t\t1.0 - 2.0 * (1.0 - d_rgb) * (1.0 - s_rgb),\n\t\t\t\t2.0 * d_rgb * s_rgb,\n\t\t\t\ts_rgb < vec3<f32>(0.5)\n\t\t\t);\n\t\t}\n\t\tcase 9u: { // soft-light\n\t\t\treturn select(\n\t\t\t\td_rgb + (2.0 * s_rgb - 1.0) * (sqrt(d_rgb) - d_rgb),\n\t\t\t\td_rgb - (1.0 - 2.0 * s_rgb) * d_rgb * (1.0 - d_rgb),\n\t\t\t\ts_rgb <= vec3<f32>(0.5)\n\t\t\t);\n\t\t}\n\t\tcase 10u: { // difference\n\t\t\treturn abs(d_rgb - s_rgb);\n\t\t}\n\t\tcase 11u: { // exclusion\n\t\t\treturn d_rgb + s_rgb - 2.0 * d_rgb * s_rgb;\n\t\t}\n\t\tcase 12u: { // hue\n\t\t\treturn set_lum(set_sat(s_rgb, sat(d_rgb)), lum(d_rgb));\n\t\t}\n\t\tcase 13u: { // saturation\n\t\t\treturn set_lum(set_sat(d_rgb, sat(s_rgb)), lum(d_rgb));\n\t\t}\n\t\tcase 14u: { // color\n\t\t\treturn set_lum(s_rgb, lum(d_rgb));\n\t\t}\n\t\tcase 15u: { // luminosity\n\t\t\treturn set_lum(d_rgb, lum(s_rgb));\n\t\t}\n\t\tdefault: { // normal / source-over\n\t\t\treturn s_rgb;\n\t\t}\n\t}\n}\n\nfn compositeLayer(dst: vec4<f32>, src: vec4<f32>, blendMode: u32) -> vec4<f32> {\n\tlet sa = clamp(src.a, 0.0, 1.0);\n\tif (sa <= 0.0001) {\n\t\treturn dst;\n\t}\n\tlet da = clamp(dst.a, 0.0, 1.0);\n\tif (da <= 0.0001) {\n\t\treturn src;\n\t}\n\n\tswitch (blendMode) {\n\t\tcase 16u: { return dst * sa; } // mask-in / destination-in\n\t\tcase 17u: { return dst * (1.0 - sa); } // mask-out / destination-out\n\t\tcase 18u: { return src * da; } // source-in\n\t\tcase 19u: { return src * (1.0 - da); } // source-out\n\t\tcase 20u: { return src * da + dst * (1.0 - sa); } // source-atop\n\t\tcase 21u: { return dst + src * (1.0 - da); } // destination-over\n\t\tcase 22u: { return dst * sa + src * (1.0 - da); } // destination-atop\n\t\tcase 23u: { return src + dst; } // lighter / add\n\t\tcase 24u: { return src; } // copy\n\t\tcase 25u: { return src * (1.0 - da) + dst * (1.0 - sa); } // xor\n\t\tdefault: {}\n\t}\n\n\tlet b_rgb = blendRgb(dst.rgb, src.rgb, blendMode);\n\tlet out_a = sa + da * (1.0 - sa);\n\tlet out_rgb = select(\n\t\t((1.0 - da) * src.rgb + (1.0 - sa) * dst.rgb + sa * da * b_rgb) / max(out_a, 1e-5),\n\t\tb_rgb,\n\t\tout_a <= 1e-4\n\t);\n\n\treturn vec4<f32>(out_rgb, out_a);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet texelSize = 1.0 / max(dimensions, vec2<f32>(1.0, 1.0));\n\tlet origColor = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tlet origA = origColor.a;\n\n\tvar result = vec4<f32>(0.0);\n\n\t// =========================================================================\n\t// 1. DROP SHADOW (Bottom Layer)\n\t// =========================================================================\n\tif (u.dropShadowParams.x > 0.5) {\n\t\tlet opacity = u.dropShadowParams.y;\n\t\tlet angle = u.dropShadowParams.z;\n\t\tlet distance = u.dropShadowParams.w;\n\t\tlet spread = u.dropShadowParams2.x;\n\t\tlet size = u.dropShadowParams2.y;\n\t\tlet blendMode = u32(u.dropShadowParams2.z);\n\n\t\tlet shadowOffset = vec2<f32>(-cos(angle), sin(angle)) * distance * texelSize;\n\t\tlet shadowCenterUv = in.uv - shadowOffset;\n\n\t\tvar shadowAccum = 0.0;\n\t\tvar shadowWeightSum = 0.0;\n\n\t\tlet sigma = max(0.5, size * 0.4);\n\t\tlet sampleRadius = min(i32(ceil(size)), ${MAX_KERNEL});\n\n\t\tif (size <= 0.5) {\n\t\t\tshadowAccum = sampleAlpha(shadowCenterUv);\n\t\t\tshadowWeightSum = 1.0;\n\t\t} else {\n\t\t\tlet stepVal = max(1, sampleRadius / 8);\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y += stepVal) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x += stepVal) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(x), f32(y)) * texelSize;\n\t\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\t\tlet weight = exp(-0.5 * distSq / (sigma * sigma));\n\t\t\t\t\tshadowAccum += sampleAlpha(shadowCenterUv + offset) * weight;\n\t\t\t\t\tshadowWeightSum += weight;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet blurredShadow = shadowAccum / max(shadowWeightSum, 1e-4);\n\t\tlet spreadFactor = spread / 100.0;\n\t\tlet finalShadowAlpha = clamp(blurredShadow / max(1.0 - spreadFactor * 0.95, 0.01), 0.0, 1.0) * opacity;\n\n\t\tif (finalShadowAlpha > 0.001) {\n\t\t\tlet shadowCol = vec4<f32>(u.dropShadowColor.rgb, finalShadowAlpha);\n\t\t\tresult = compositeLayer(result, shadowCol, blendMode);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// 2. OUTER GLOW\n\t// =========================================================================\n\tif (u.outerGlowParams.x > 0.5) {\n\t\tlet opacity = u.outerGlowParams.y;\n\t\tlet size = u.outerGlowParams.z;\n\t\tlet spread = u.outerGlowParams.w;\n\t\tlet blendMode = u32(u.outerGlowParams2.x);\n\n\t\tvar glowAccum = 0.0;\n\t\tvar glowWeightSum = 0.0;\n\t\tlet sigma = max(0.5, size * 0.4);\n\t\tlet sampleRadius = min(i32(ceil(size)), ${MAX_KERNEL});\n\n\t\tif (size <= 0.5) {\n\t\t\tglowAccum = origA;\n\t\t\tglowWeightSum = 1.0;\n\t\t} else {\n\t\t\tlet stepVal = max(1, sampleRadius / 8);\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y += stepVal) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x += stepVal) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(x), f32(y)) * texelSize;\n\t\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\t\tlet weight = exp(-0.5 * distSq / (sigma * sigma));\n\t\t\t\t\tglowAccum += sampleAlpha(in.uv + offset) * weight;\n\t\t\t\t\tglowWeightSum += weight;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet blurredGlow = glowAccum / max(glowWeightSum, 1e-4);\n\t\tlet spreadFactor = spread / 100.0;\n\t\tlet spreadGlow = clamp(blurredGlow / max(1.0 - spreadFactor * 0.95, 0.01), 0.0, 1.0);\n\t\tlet finalGlowAlpha = max(0.0, spreadGlow - origA) * opacity;\n\n\t\tif (finalGlowAlpha > 0.001) {\n\t\t\tlet glowCol = vec4<f32>(u.outerGlowColor.rgb, finalGlowAlpha);\n\t\t\tresult = compositeLayer(result, glowCol, blendMode);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// 3. OUTSIDE STROKE\n\t// =========================================================================\n\tif (u.strokeParams.x > 0.5 && u.strokeParams.z < 0.5) { // position == 0: outside\n\t\tlet size = u.strokeParams.y;\n\t\tlet opacity = u.strokeParams.w;\n\t\tlet blendMode = u32(u.strokeParams2.x);\n\n\t\tvar maxAlpha = 0.0;\n\t\tlet sampleRadius = min(i32(ceil(size)), ${MAX_KERNEL});\n\t\tlet sizeSq = size * size;\n\n\t\tfor (var y = -sampleRadius; y <= sampleRadius; y++) {\n\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x++) {\n\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\tif (distSq <= sizeSq) {\n\t\t\t\t\tlet sAlpha = sampleAlpha(in.uv + vec2<f32>(f32(x), f32(y)) * texelSize);\n\t\t\t\t\tmaxAlpha = max(maxAlpha, sAlpha);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet strokeAlpha = clamp(maxAlpha - origA, 0.0, 1.0) * opacity;\n\t\tif (strokeAlpha > 0.001) {\n\t\t\tlet strokeCol = vec4<f32>(u.strokeColor.rgb, strokeAlpha);\n\t\t\tresult = compositeLayer(result, strokeCol, blendMode);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// 4. BASE IMAGE LAYER (with Color Overlay, Bevel & Emboss, Inner Glow/Shadow)\n\t// =========================================================================\n\tif (origA > 0.001) {\n\t\tvar baseRgb = origColor.rgb;\n\n\t\t// Color Overlay\n\t\tif (u.colorOverlayParams.x > 0.5) {\n\t\t\tlet overlayOpacity = u.colorOverlayParams.y;\n\t\t\tlet overlayBlendMode = u32(u.colorOverlayParams.z);\n\t\t\tlet blendedOverlay = blendRgb(baseRgb, u.colorOverlayColor.rgb, overlayBlendMode);\n\t\t\tbaseRgb = mix(baseRgb, blendedOverlay, overlayOpacity);\n\t\t}\n\n\t\t// Bevel & Emboss\n\t\tif (u.bevelParams1.x > 0.5) {\n\t\t\tlet style = u.bevelParams1.y;\n\t\t\tlet technique = u.bevelParams1.z;\n\t\t\tlet depth = u.bevelParams1.w / 100.0;\n\t\t\tlet direction = u.bevelParams2.x;\n\t\t\tlet bevelSize = max(0.5, u.bevelParams2.y);\n\t\t\tlet soften = u.bevelParams2.z;\n\t\t\tlet lightAngle = u.bevelParams2.w;\n\t\t\tlet lightAltitude = u.bevelParams3.x;\n\t\t\tlet hlOpacity = u.bevelParams3.y;\n\t\t\tlet shOpacity = u.bevelParams3.z;\n\n\t\t\tlet lightDir = normalize(vec3<f32>(\n\t\t\t\t-cos(lightAngle) * cos(lightAltitude),\n\t\t\t\tsin(lightAngle) * cos(lightAltitude),\n\t\t\t\tsin(lightAltitude)\n\t\t\t));\n\n\t\t\tlet stepSize = max(1.0, bevelSize * 0.5 + soften) * texelSize;\n\t\t\tlet aL = sampleAlpha(in.uv - vec2<f32>(stepSize.x, 0.0));\n\t\t\tlet aR = sampleAlpha(in.uv + vec2<f32>(stepSize.x, 0.0));\n\t\t\tlet aT = sampleAlpha(in.uv - vec2<f32>(0.0, stepSize.y));\n\t\t\tlet aB = sampleAlpha(in.uv + vec2<f32>(0.0, stepSize.y));\n\n\t\t\tvar dx = (aR - aL) * depth * direction;\n\t\t\tvar dy = (aB - aT) * depth * direction;\n\n\t\t\tif (technique > 0.5) { // ChiselHard or ChiselSoft\n\t\t\t\tlet rampFactor = select(2.0, 1.5, technique > 1.5);\n\t\t\t\tdx = clamp(dx * rampFactor, -1.0, 1.0);\n\t\t\t\tdy = clamp(dy * rampFactor, -1.0, 1.0);\n\t\t\t}\n\n\t\t\tlet normal = normalize(vec3<f32>(-dx, -dy, 1.0));\n\t\t\tlet nDotL = dot(normal, lightDir);\n\n\t\t\tlet highlightAmount = max(0.0, nDotL) * hlOpacity;\n\t\t\tlet shadowAmount = max(0.0, -nDotL) * shOpacity;\n\n\t\t\tlet hlColor = mix(baseRgb, u.bevelHighlightColor.rgb + baseRgb, highlightAmount);\n\t\t\tlet shColor = mix(baseRgb, baseRgb * (1.0 - shadowAmount) + u.bevelShadowColor.rgb * shadowAmount, shadowAmount);\n\t\t\tbaseRgb = mix(shColor, hlColor, clamp(nDotL * 0.5 + 0.5, 0.0, 1.0));\n\t\t}\n\n\t\t// Inner Glow\n\t\tif (u.innerGlowParams.x > 0.5) {\n\t\t\tlet igOpacity = u.innerGlowParams.y;\n\t\t\tlet igSize = u.innerGlowParams.z;\n\t\t\tlet igSpread = u.innerGlowParams.w;\n\t\t\tlet igBlendMode = u32(u.innerGlowParams2.x);\n\n\t\t\tvar innerAccum = 0.0;\n\t\t\tvar innerWeight = 0.0;\n\t\t\tlet sigma = max(0.5, igSize * 0.4);\n\t\t\tlet sampleRadius = min(i32(ceil(igSize)), 16);\n\t\t\tlet stepVal = max(1, sampleRadius / 6);\n\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y += stepVal) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x += stepVal) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(x), f32(y)) * texelSize;\n\t\t\t\t\tlet weight = exp(-0.5 * f32(x * x + y * y) / (sigma * sigma));\n\t\t\t\t\tinnerAccum += sampleAlpha(in.uv + offset) * weight;\n\t\t\t\t\tinnerWeight += weight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet blurredInner = innerAccum / max(innerWeight, 1e-4);\n\t\t\tlet innerGlowMask = max(0.0, origA - blurredInner);\n\t\t\tlet spreadFactor = igSpread / 100.0;\n\t\t\tlet finalInnerGlowAlpha = clamp(innerGlowMask / max(1.0 - spreadFactor * 0.95, 0.01), 0.0, 1.0) * igOpacity;\n\n\t\t\tif (finalInnerGlowAlpha > 0.001) {\n\t\t\t\tlet igBlended = blendRgb(baseRgb, u.innerGlowColor.rgb, igBlendMode);\n\t\t\t\tbaseRgb = mix(baseRgb, igBlended, finalInnerGlowAlpha);\n\t\t\t}\n\t\t}\n\n\t\t// Inner Shadow\n\t\tif (u.innerShadowParams.x > 0.5) {\n\t\t\tlet isOpacity = u.innerShadowParams.y;\n\t\t\tlet isAngle = u.innerShadowParams.z;\n\t\t\tlet isDistance = u.innerShadowParams.w;\n\t\t\tlet isChoke = u.innerShadowParams2.x;\n\t\t\tlet isSize = u.innerShadowParams2.y;\n\t\t\tlet isBlendMode = u32(u.innerShadowParams2.z);\n\n\t\t\tlet isOffset = vec2<f32>(-cos(isAngle), sin(isAngle)) * isDistance * texelSize;\n\t\t\tlet shiftedA = sampleAlpha(in.uv + isOffset);\n\n\t\t\tvar isAccum = 0.0;\n\t\t\tvar isWeight = 0.0;\n\t\t\tlet sigma = max(0.5, isSize * 0.4);\n\t\t\tlet sampleRadius = min(i32(ceil(isSize)), 16);\n\t\t\tlet stepVal = max(1, sampleRadius / 6);\n\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y += stepVal) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x += stepVal) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(x), f32(y)) * texelSize;\n\t\t\t\t\tlet weight = exp(-0.5 * f32(x * x + y * y) / (sigma * sigma));\n\t\t\t\t\tlet sShifted = sampleAlpha(in.uv + isOffset + offset);\n\t\t\t\t\tlet sOrig = sampleAlpha(in.uv + offset);\n\t\t\t\t\tisAccum += max(0.0, sOrig - sShifted) * weight;\n\t\t\t\t\tisWeight += weight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet blurredIS = isAccum / max(isWeight, 1e-4);\n\t\t\tlet chokeFactor = isChoke / 100.0;\n\t\t\tlet finalISAlpha = clamp(blurredIS / max(1.0 - chokeFactor * 0.95, 0.01), 0.0, 1.0) * isOpacity;\n\n\t\t\tif (finalISAlpha > 0.001) {\n\t\t\t\tlet isBlended = blendRgb(baseRgb, u.innerShadowColor.rgb, isBlendMode);\n\t\t\t\tbaseRgb = mix(baseRgb, isBlended, finalISAlpha);\n\t\t\t}\n\t\t}\n\n\t\t// Inside Stroke\n\t\tif (u.strokeParams.x > 0.5 && u.strokeParams.z > 1.5) { // position == 2: inside\n\t\t\tlet size = u.strokeParams.y;\n\t\t\tlet opacity = u.strokeParams.w;\n\t\t\tlet blendMode = u32(u.strokeParams2.x);\n\n\t\t\tvar minAlpha = 1.0;\n\t\t\tlet sampleRadius = min(i32(ceil(size)), ${MAX_KERNEL});\n\t\t\tlet sizeSq = size * size;\n\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y++) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x++) {\n\t\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\t\tif (distSq <= sizeSq) {\n\t\t\t\t\t\tlet sAlpha = sampleAlpha(in.uv + vec2<f32>(f32(x), f32(y)) * texelSize);\n\t\t\t\t\t\tminAlpha = min(minAlpha, sAlpha);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet insideStrokeAlpha = clamp(origA - minAlpha, 0.0, 1.0) * opacity;\n\t\t\tif (insideStrokeAlpha > 0.001) {\n\t\t\t\tlet sBlended = blendRgb(baseRgb, u.strokeColor.rgb, blendMode);\n\t\t\t\tbaseRgb = mix(baseRgb, sBlended, insideStrokeAlpha);\n\t\t\t}\n\t\t}\n\n\t\tlet baseLayer = vec4<f32>(baseRgb, origA);\n\t\tresult = compositeLayer(result, baseLayer, 0u);\n\t}\n\n\t// =========================================================================\n\t// 5. CENTER STROKE\n\t// =========================================================================\n\tif (u.strokeParams.x > 0.5 && u.strokeParams.z >= 0.5 && u.strokeParams.z <= 1.5) { // position == 1: center\n\t\tlet size = u.strokeParams.y;\n\t\tlet opacity = u.strokeParams.w;\n\t\tlet blendMode = u32(u.strokeParams2.x);\n\n\t\tvar maxAlpha = 0.0;\n\t\tvar minAlpha = 1.0;\n\t\tlet halfSize = max(0.5, size * 0.5);\n\t\tlet sampleRadius = min(i32(ceil(halfSize)), ${MAX_KERNEL});\n\t\tlet halfSizeSq = halfSize * halfSize;\n\n\t\tfor (var y = -sampleRadius; y <= sampleRadius; y++) {\n\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x++) {\n\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\tif (distSq <= halfSizeSq) {\n\t\t\t\t\tlet sAlpha = sampleAlpha(in.uv + vec2<f32>(f32(x), f32(y)) * texelSize);\n\t\t\t\t\tmaxAlpha = max(maxAlpha, sAlpha);\n\t\t\t\t\tminAlpha = min(minAlpha, sAlpha);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet centerStrokeAlpha = clamp(maxAlpha - minAlpha, 0.0, 1.0) * opacity;\n\t\tif (centerStrokeAlpha > 0.001) {\n\t\t\tlet strokeCol = vec4<f32>(u.strokeColor.rgb, centerStrokeAlpha);\n\t\t\tresult = compositeLayer(result, strokeCol, blendMode);\n\t\t}\n\t}\n\n\t// Output premultiplied alpha for QuadPipeline / WebGPU rendering\n\treturn vec4<f32>(result.rgb * result.a, result.a);\n}\n`;\nconst resourcesCache = /* @__PURE__ */ new WeakMap();\nfunction getLayerStyleResources(device, format) {\n\tlet res = resourcesCache.get(device);\n\tif (res) return res;\n\tconst module = device.createShaderModule({ code: WGSL_LAYER_STYLE_SHADER });\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\tres = {\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule,\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [uniformLayout, textureLayout] }),\n\t\t\tformat,\n\t\t\tblend: PREMULTIPLIED_BLEND\n\t\t}),\n\t\tuniformLayout,\n\t\ttextureLayout\n\t};\n\tresourcesCache.set(device, res);\n\treturn res;\n}\nconst uniformBufferData = new Float32Array(88);\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"LayerStyle\" || !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 elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : (props.frame ?? 0) / (props.fps || 30);\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => {\n\t\tif (handleId && op.inputs?.[handleId]?.connectionValid) {\n\t\t\tconst outputItem = op.inputs[handleId].outputItem;\n\t\t\tif (!outputItem) return Math.max(clampMin, Math.min(clampMax, fallbackVal));\n\t\t\tif (outputItem.type === \"Number\") {\n\t\t\t\tconst numVal = typeof outputItem.data === \"number\" ? outputItem.data : outputItem.data?.value ?? fallbackVal;\n\t\t\t\treturn Math.max(clampMin, Math.min(clampMax, numVal));\n\t\t\t}\n\t\t\tif (outputItem.type === \"Signal\") {\n\t\t\t\tconst data = outputItem.data;\n\t\t\t\tif (typeof data === \"number\") return Math.max(clampMin, Math.min(clampMax, data));\n\t\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\t\tif (typeof data.value === \"number\") return Math.max(clampMin, Math.min(clampMax, data.value));\n\t\t\t\t\tconst amp = typeof data.amplitude === \"number\" ? data.amplitude : 1;\n\t\t\t\t\tconst freq = typeof data.frequency === \"number\" ? data.frequency : 1;\n\t\t\t\t\tconst phase = typeof data.phase === \"number\" ? data.phase : 0;\n\t\t\t\t\tconst offset = typeof data.offset === \"number\" ? data.offset : fallbackVal;\n\t\t\t\t\tconst t = elapsedSeconds;\n\t\t\t\t\tconst computed = offset + amp * Math.sin(2 * Math.PI * freq * t + phase);\n\t\t\t\t\treturn Math.max(clampMin, Math.min(clampMax, computed));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn Math.max(clampMin, Math.min(clampMax, fallbackVal));\n\t};\n\tconst childW = width;\n\tconst childH = height;\n\tconst childTex = ctx.renderer.getTemporaryTexture(childW, childH, [...props.excludeTextures || [], targetTexture]);\n\tconst childView = childTex.createView();\n\tctx.renderer.beginFrame(encoder, childView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, childW, childH, \"clear\").end();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\tcontainerWidth: childW,\n\t\tcontainerHeight: childH\n\t}, childView, childTex, childW, childH);\n\tconst inputTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tchildTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst inputView = inputTex.createView();\n\tconst inputPass = ctx.renderer.beginFrame(encoder, inputView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\");\n\tctx.renderer.drawTexture(inputPass, childTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: childW,\n\t\theight: childH\n\t}, { opacity: 1 });\n\tinputPass.end();\n\tconst { pipeline, uniformLayout, textureLayout } = getLayerStyleResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst ds = op.dropShadow ?? {};\n\tconst is = op.innerShadow ?? {};\n\tconst og = op.outerGlow ?? {};\n\tconst ig = op.innerGlow ?? {};\n\tconst st = op.stroke ?? {};\n\tconst be = op.bevelEmboss ?? {};\n\tconst co = op.colorOverlay ?? {};\n\tconst dsCol = hexToRgba(ds.color ?? \"#000000\");\n\tconst dsOpacity = resolveField(op.dropShadowOpacityHandleId, ds.opacity ?? .75, 0, 1);\n\tconst dsAngle = resolveField(op.dropShadowAngleHandleId, ds.angle ?? 120, 0, 360) * Math.PI / 180;\n\tconst dsDist = resolveField(op.dropShadowDistanceHandleId, ds.distance ?? 10, 0, 500);\n\tconst dsSpread = resolveField(op.dropShadowSpreadHandleId, ds.spread ?? 0, 0, 100);\n\tconst dsSize = resolveField(op.dropShadowSizeHandleId, ds.size ?? 10, 0, 250);\n\tconst dsBlend = BLEND_MODE_MAP[ds.blendMode ?? \"multiply\"] ?? 1;\n\tconst isCol = hexToRgba(is.color ?? \"#000000\");\n\tconst isOpacity = resolveField(op.innerShadowOpacityHandleId, is.opacity ?? .75, 0, 1);\n\tconst isAngle = resolveField(op.innerShadowAngleHandleId, is.angle ?? 120, 0, 360) * Math.PI / 180;\n\tconst isDist = resolveField(op.innerShadowDistanceHandleId, is.distance ?? 5, 0, 500);\n\tconst isChoke = resolveField(op.innerShadowChokeHandleId, is.choke ?? 0, 0, 100);\n\tconst isSize = resolveField(op.innerShadowSizeHandleId, is.size ?? 5, 0, 250);\n\tconst isBlend = BLEND_MODE_MAP[is.blendMode ?? \"multiply\"] ?? 1;\n\tconst ogCol = hexToRgba(og.color ?? \"#ffffff\");\n\tconst ogOpacity = resolveField(op.outerGlowOpacityHandleId, og.opacity ?? .75, 0, 1);\n\tconst ogSize = resolveField(op.outerGlowSizeHandleId, og.size ?? 15, 0, 250);\n\tconst ogSpread = resolveField(op.outerGlowSpreadHandleId, og.spread ?? 0, 0, 100);\n\tconst ogBlend = BLEND_MODE_MAP[og.blendMode ?? \"screen\"] ?? 2;\n\tconst igCol = hexToRgba(ig.color ?? \"#ffffff\");\n\tconst igOpacity = resolveField(op.innerGlowOpacityHandleId, ig.opacity ?? .75, 0, 1);\n\tconst igSize = resolveField(op.innerGlowSizeHandleId, ig.size ?? 15, 0, 250);\n\tconst igSpread = resolveField(op.innerGlowSpreadHandleId, ig.spread ?? 0, 0, 100);\n\tconst igBlend = BLEND_MODE_MAP[ig.blendMode ?? \"screen\"] ?? 2;\n\tconst stCol = hexToRgba(st.color ?? \"#ffffff\");\n\tconst stSize = resolveField(op.strokeSizeHandleId, st.size ?? 2, 0, 100);\n\tconst stPos = STROKE_POS_MAP[st.position ?? \"outside\"] ?? 0;\n\tconst stOpacity = resolveField(op.strokeOpacityHandleId, st.opacity ?? 1, 0, 1);\n\tconst stBlend = BLEND_MODE_MAP[st.blendMode ?? \"normal\"] ?? 0;\n\tconst beHlCol = hexToRgba(be.highlightColor ?? \"#ffffff\");\n\tconst beShCol = hexToRgba(be.shadowColor ?? \"#000000\");\n\tconst beStyle = BEVEL_STYLE_MAP[be.style ?? \"InnerBevel\"] ?? 0;\n\tconst beTech = BEVEL_TECHNIQUE_MAP[be.technique ?? \"Smooth\"] ?? 0;\n\tconst beDepth = resolveField(op.bevelEmbossDepthHandleId, be.depth ?? 100, 1, 1e3);\n\tconst beDir = be.direction === \"Down\" ? -1 : 1;\n\tconst beSize = resolveField(op.bevelEmbossSizeHandleId, be.size ?? 5, 0, 250);\n\tconst beSoften = resolveField(op.bevelEmbossSoftenHandleId, be.soften ?? 0, 0, 50);\n\tconst beAngle = resolveField(op.bevelEmbossAngleHandleId, be.angle ?? 120, 0, 360) * Math.PI / 180;\n\tconst beAltitude = resolveField(op.bevelEmbossAltitudeHandleId, be.altitude ?? 30, 0, 90) * Math.PI / 180;\n\tconst beHlOpacity = resolveField(op.bevelEmbossHighlightOpacityHandleId, be.highlightOpacity ?? .75, 0, 1);\n\tconst beShOpacity = resolveField(op.bevelEmbossShadowOpacityHandleId, be.shadowOpacity ?? .75, 0, 1);\n\tconst coCol = hexToRgba(co.color ?? \"#ff0000\");\n\tconst coOpacity = resolveField(op.colorOverlayOpacityHandleId, co.opacity ?? 1, 0, 1);\n\tconst coBlend = BLEND_MODE_MAP[co.blendMode ?? \"normal\"] ?? 0;\n\tuniformBufferData.fill(0);\n\tuniformBufferData[0] = dsCol[0];\n\tuniformBufferData[1] = dsCol[1];\n\tuniformBufferData[2] = dsCol[2];\n\tuniformBufferData[3] = dsCol[3];\n\tuniformBufferData[4] = ds.enabled ? 1 : 0;\n\tuniformBufferData[5] = dsOpacity;\n\tuniformBufferData[6] = dsAngle;\n\tuniformBufferData[7] = dsDist;\n\tuniformBufferData[8] = dsSpread;\n\tuniformBufferData[9] = dsSize;\n\tuniformBufferData[10] = dsBlend;\n\tuniformBufferData[11] = 0;\n\tuniformBufferData[12] = isCol[0];\n\tuniformBufferData[13] = isCol[1];\n\tuniformBufferData[14] = isCol[2];\n\tuniformBufferData[15] = isCol[3];\n\tuniformBufferData[16] = is.enabled ? 1 : 0;\n\tuniformBufferData[17] = isOpacity;\n\tuniformBufferData[18] = isAngle;\n\tuniformBufferData[19] = isDist;\n\tuniformBufferData[20] = isChoke;\n\tuniformBufferData[21] = isSize;\n\tuniformBufferData[22] = isBlend;\n\tuniformBufferData[23] = 0;\n\tuniformBufferData[24] = ogCol[0];\n\tuniformBufferData[25] = ogCol[1];\n\tuniformBufferData[26] = ogCol[2];\n\tuniformBufferData[27] = ogCol[3];\n\tuniformBufferData[28] = og.enabled ? 1 : 0;\n\tuniformBufferData[29] = ogOpacity;\n\tuniformBufferData[30] = ogSize;\n\tuniformBufferData[31] = ogSpread;\n\tuniformBufferData[32] = ogBlend;\n\tuniformBufferData[33] = 0;\n\tuniformBufferData[34] = 0;\n\tuniformBufferData[35] = 0;\n\tuniformBufferData[36] = igCol[0];\n\tuniformBufferData[37] = igCol[1];\n\tuniformBufferData[38] = igCol[2];\n\tuniformBufferData[39] = igCol[3];\n\tuniformBufferData[40] = ig.enabled ? 1 : 0;\n\tuniformBufferData[41] = igOpacity;\n\tuniformBufferData[42] = igSize;\n\tuniformBufferData[43] = igSpread;\n\tuniformBufferData[44] = igBlend;\n\tuniformBufferData[45] = 0;\n\tuniformBufferData[46] = 0;\n\tuniformBufferData[47] = 0;\n\tuniformBufferData[48] = stCol[0];\n\tuniformBufferData[49] = stCol[1];\n\tuniformBufferData[50] = stCol[2];\n\tuniformBufferData[51] = stCol[3];\n\tuniformBufferData[52] = st.enabled ? 1 : 0;\n\tuniformBufferData[53] = stSize;\n\tuniformBufferData[54] = stPos;\n\tuniformBufferData[55] = stOpacity;\n\tuniformBufferData[56] = stBlend;\n\tuniformBufferData[57] = 0;\n\tuniformBufferData[58] = 0;\n\tuniformBufferData[59] = 0;\n\tuniformBufferData[60] = beHlCol[0];\n\tuniformBufferData[61] = beHlCol[1];\n\tuniformBufferData[62] = beHlCol[2];\n\tuniformBufferData[63] = beHlCol[3];\n\tuniformBufferData[64] = beShCol[0];\n\tuniformBufferData[65] = beShCol[1];\n\tuniformBufferData[66] = beShCol[2];\n\tuniformBufferData[67] = beShCol[3];\n\tuniformBufferData[68] = be.enabled ? 1 : 0;\n\tuniformBufferData[69] = beStyle;\n\tuniformBufferData[70] = beTech;\n\tuniformBufferData[71] = beDepth;\n\tuniformBufferData[72] = beDir;\n\tuniformBufferData[73] = beSize;\n\tuniformBufferData[74] = beSoften;\n\tuniformBufferData[75] = beAngle;\n\tuniformBufferData[76] = beAltitude;\n\tuniformBufferData[77] = beHlOpacity;\n\tuniformBufferData[78] = beShOpacity;\n\tuniformBufferData[79] = 0;\n\tuniformBufferData[80] = coCol[0];\n\tuniformBufferData[81] = coCol[1];\n\tuniformBufferData[82] = coCol[2];\n\tuniformBufferData[83] = coCol[3];\n\tuniformBufferData[84] = co.enabled ? 1 : 0;\n\tuniformBufferData[85] = coOpacity;\n\tuniformBufferData[86] = coBlend;\n\tuniformBufferData[87] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformBufferData);\n\tconst uBindGroup = ctx.device.createBindGroup({\n\t\tlayout: uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst tBindGroup = ctx.device.createBindGroup({\n\t\tlayout: textureLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: inputView\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t});\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tinputTex,\n\t\tchildTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [uBindGroup, tBindGroup]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n/**\n* How far a LayerStyle draws past its layer: the drop shadow's offset plus\n* its blur, the outer glow, an outside or centred stroke. Unknown (null)\n* when one of those sizes is driven by a connected signal. Keep in step with\n* the shader above: anything it draws farther out must count here, or a\n* compositor running the style over the layer's region will clip it.\n*/\nconst layerStyleReach = (operation) => {\n\tconst op = operation;\n\tconst driven = (handle) => typeof handle === \"string\" && op.inputs?.[handle]?.connectionValid === true;\n\tif (driven(op.dropShadowDistanceHandleId) || driven(op.dropShadowSizeHandleId) || driven(op.outerGlowSizeHandleId) || driven(op.strokeSizeHandleId)) return null;\n\tconst style = (v) => v && typeof v === \"object\" && \"_value\" in v ? v._value : v;\n\tconst kernel = (size) => Math.min(Math.ceil(size ?? 0), MAX_KERNEL);\n\tconst ds = style(op.dropShadow);\n\tconst og = style(op.outerGlow);\n\tconst st = style(op.stroke);\n\tlet r = 0;\n\tif (ds?.enabled) r = Math.max(r, (ds.distance ?? 0) + kernel(ds.size));\n\tif (og?.enabled) r = Math.max(r, kernel(og.size));\n\tif (st?.enabled && st.position !== \"inside\") r = Math.max(r, kernel(st.size));\n\treturn Math.ceil(r) + 2;\n};\nWebGPURenderer.reach = layerStyleReach;\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-B2ikmOEm.mjs.map"],"mappings":"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"}
|