hyperframes 0.8.190 → 0.8.191

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/dist/{add-DBKN5H7H.js → add-S2ZQYG52.js} +11 -11
  2. package/dist/{animatedGifPrep-YVBKKLQY.js → animatedGifPrep-3JA2CQ3U.js} +6 -6
  3. package/dist/api.js +14 -14
  4. package/dist/{asset-2OHQKUMQ.js → asset-2CNTAPOC.js} +2 -2
  5. package/dist/{assetCataloger-O3QAUWIK.js → assetCataloger-5HXLXL7C.js} +6 -6
  6. package/dist/{audio-IR3JGCMM.js → audio-DZTSYHXS.js} +12 -12
  7. package/dist/{auth-J6TAJLGD.js → auth-GX3M6TJ4.js} +1 -1
  8. package/dist/{autoUpdate-D7BJJUT2.js → autoUpdate-EDIWE4Z5.js} +2 -2
  9. package/dist/{backgroundChecks-AILHY2YZ.js → backgroundChecks-VPUPJ7UI.js} +3 -3
  10. package/dist/backgroundChecksWorker.js +3 -3
  11. package/dist/{batchRender-QZKFVWEI.js → batchRender-JHIIDBJR.js} +3 -3
  12. package/dist/{beats-6LOEKZPB.js → beats-PZRVTRYW.js} +4 -4
  13. package/dist/{benchmark-RJMHI3YW.js → benchmark-22UFDW2N.js} +8 -8
  14. package/dist/{browser-Q3Q36FE3.js → browser-VRDWYIUM.js} +3 -3
  15. package/dist/{bundleWithLocalizedFonts-RWHFMSFL.js → bundleWithLocalizedFonts-23QDKFSN.js} +2 -2
  16. package/dist/{capture-FO3ZZCT4.js → capture-NFCBXHDE.js} +2 -2
  17. package/dist/{capture-2PNTGVYV.js → capture-TOCLXYMJ.js} +9 -9
  18. package/dist/{captureCompositionFrame-WTMLWVEJ.js → captureCompositionFrame-BEM6MF7F.js} +13 -11
  19. package/dist/{catalog-LUZYPUYT.js → catalog-NXS35KM7.js} +11 -11
  20. package/dist/{catch-up-TUTLUTFP.js → catch-up-6WJBUI2C.js} +4 -4
  21. package/dist/{check-K2TBTJZS.js → check-WVEBMWN5.js} +33 -33
  22. package/dist/{checkBrowser-JT7CXDT6.js → checkBrowser-RT45HJ36.js} +28 -28
  23. package/dist/{chunk-L34DPWY4.js → chunk-2WNVHZHA.js} +6 -6
  24. package/dist/{chunk-TSFA2Y5C.js → chunk-3NRB7YXW.js} +3 -2
  25. package/dist/{chunk-EQF6TVWB.js → chunk-3WJT2JCX.js} +32 -25
  26. package/dist/{chunk-SUSSMCWL.js → chunk-3XI7MIZB.js} +1 -1
  27. package/dist/{chunk-56IDMP37.js → chunk-7A65UCMI.js} +1 -1
  28. package/dist/{chunk-XNLYMHX2.js → chunk-7FF36MAD.js} +1 -1
  29. package/dist/{chunk-S7C6EM7N.js → chunk-7LUJE3II.js} +1 -1
  30. package/dist/{chunk-JLSXXMRU.js → chunk-7NKJS5KM.js} +1 -1
  31. package/dist/{chunk-OTQXYTQZ.js → chunk-7ZJEQY7Q.js} +1 -1
  32. package/dist/{chunk-EPOYPP36.js → chunk-ALEF2F5N.js} +2 -2
  33. package/dist/{chunk-2FFOLLU2.js → chunk-AQB5M53R.js} +3 -3
  34. package/dist/{chunk-FUHI34T4.js → chunk-BFFLKQVB.js} +3 -3
  35. package/dist/{chunk-E7DXKMKU.js → chunk-CINKQY6M.js} +3 -3
  36. package/dist/{chunk-BT64TTSE.js → chunk-COETAXRN.js} +1 -1
  37. package/dist/{chunk-ZFFKWHXN.js → chunk-COWQITWP.js} +1 -1
  38. package/dist/{chunk-BWPY64WA.js → chunk-CXMXJEVY.js} +1 -1
  39. package/dist/{chunk-Y5L5I4US.js → chunk-DOOSC34Z.js} +5 -5
  40. package/dist/{chunk-CWYS2UNQ.js → chunk-EFCKV7MY.js} +1 -1
  41. package/dist/{chunk-EUUHVDMN.js → chunk-FBDOHH3Q.js} +1 -1
  42. package/dist/{chunk-IARWN467.js → chunk-GLG5JWLI.js} +1 -1
  43. package/dist/{chunk-56IOFIYB.js → chunk-GM3WIOO6.js} +1 -1
  44. package/dist/{chunk-DRTIIAIZ.js → chunk-HYW6HTAK.js} +1 -1
  45. package/dist/{chunk-DX7VEUBO.js → chunk-JGTRVG32.js} +1 -1
  46. package/dist/{chunk-UZ7RJDEC.js → chunk-JJJCFKMF.js} +1 -1
  47. package/dist/{chunk-7JHTNUF2.js → chunk-JOLZ3BSL.js} +1 -1
  48. package/dist/{chunk-JB7LML5B.js → chunk-JTPHFYZI.js} +3 -3
  49. package/dist/{chunk-EU5HTY3E.js → chunk-JYSSPQDT.js} +56 -21
  50. package/dist/{chunk-STJ2ANMF.js → chunk-KAC2WR7P.js} +1 -1
  51. package/dist/{chunk-R4QASDTN.js → chunk-KGMHMYWI.js} +2 -2
  52. package/dist/{chunk-RDHEG7RX.js → chunk-KHCTBZGJ.js} +3 -3
  53. package/dist/{chunk-FANFO5HI.js → chunk-KV72BP7O.js} +9 -9
  54. package/dist/{chunk-AYFF3GX6.js → chunk-LBNEH6IQ.js} +1 -1
  55. package/dist/{chunk-DIV37NUE.js → chunk-LM265QNK.js} +1 -1
  56. package/dist/{chunk-F6DNM676.js → chunk-MSM6VRQ4.js} +2 -2
  57. package/dist/{chunk-45U3KY7Z.js → chunk-NJGTNWQY.js} +5 -5
  58. package/dist/{chunk-OAPYPSEB.js → chunk-NMDUSCCE.js} +141 -32
  59. package/dist/{chunk-WCT6KGGT.js → chunk-OV6KHXLX.js} +1 -1
  60. package/dist/{chunk-3QLT727N.js → chunk-RE3EEBWC.js} +3 -3
  61. package/dist/{chunk-A5YHWTSP.js → chunk-RQBB7PYT.js} +2 -2
  62. package/dist/{chunk-RBGNU7VD.js → chunk-RWYUK7LM.js} +1 -1
  63. package/dist/{chunk-S2IEO6TH.js → chunk-SMEF3TRJ.js} +26 -14
  64. package/dist/{chunk-HJZ5CPZA.js → chunk-T5YF32WV.js} +5 -5
  65. package/dist/{chunk-XBGEWNGQ.js → chunk-TADJOIFW.js} +1 -1
  66. package/dist/{chunk-OOAVKK2W.js → chunk-TFGO5YMI.js} +1 -1
  67. package/dist/{chunk-FVD44EQX.js → chunk-TFMZ4RKM.js} +50 -19
  68. package/dist/{chunk-CWVSJA52.js → chunk-TJKE4EYX.js} +3 -3
  69. package/dist/{chunk-6HYHHMX3.js → chunk-TRZVS6TL.js} +2 -2
  70. package/dist/{chunk-76ITJYXX.js → chunk-U5GTDAQL.js} +5 -5
  71. package/dist/{chunk-B7JFAXDP.js → chunk-UNR3P7IF.js} +2 -2
  72. package/dist/{chunk-TSQAPPRS.js → chunk-VYQYVYQ5.js} +2 -2
  73. package/dist/{chunk-TTZTGXKG.js → chunk-W3CS2KFV.js} +1 -1
  74. package/dist/{chunk-KUMUK6QS.js → chunk-WHAEJX26.js} +7 -7
  75. package/dist/{chunk-WLG4OYH7.js → chunk-WJEVUPVD.js} +1 -1
  76. package/dist/{chunk-WBUO6WH6.js → chunk-WQ3X5OH4.js} +1 -1
  77. package/dist/{chunk-GGVGOY6M.js → chunk-WY3TQ2PT.js} +1 -1
  78. package/dist/{chunk-KNQQZRB2.js → chunk-XMSQRDAK.js} +2 -2
  79. package/dist/{chunk-YT5VLUHM.js → chunk-XWOCXIKR.js} +1 -1
  80. package/dist/{chunk-K4664CDS.js → chunk-ZHKUIC7X.js} +26 -12
  81. package/dist/{clean-UVTWBPXK.js → clean-3VIU2BSK.js} +14 -14
  82. package/dist/cli.js +53 -53
  83. package/dist/{cloud-M42IPKFD.js → cloud-NA3J4XW2.js} +4 -4
  84. package/dist/{cloudrun-CTNX64R6.js → cloudrun-4MHOF7UT.js} +4 -4
  85. package/dist/commands/layout-audit.browser.js +64 -3
  86. package/dist/{compare-MQI7TG5M.js → compare-ZR7XRPPT.js} +29 -26
  87. package/dist/{compiler-EJE3HLCS.js → compiler-MA2ELZPG.js} +3 -3
  88. package/dist/{component-QSYOSFVV.js → component-ZJSOPUAM.js} +3 -3
  89. package/dist/{compositions-ITDFE7K4.js → compositions-WA5V2SHF.js} +10 -10
  90. package/dist/{delete-NTGTENKJ.js → delete-UC427UEA.js} +2 -2
  91. package/dist/{deploy-AOJOXEYX.js → deploy-B5UO4UIK.js} +1 -1
  92. package/dist/{dist-NHW2JQCA.js → dist-BPK37SAB.js} +2 -2
  93. package/dist/{dist-JH32CBQL.js → dist-XGPSPKKP.js} +1 -1
  94. package/dist/docs/rendering.md +2 -2
  95. package/dist/{doctor-Q6DAYVSQ.js → doctor-ZERCTKEK.js} +10 -10
  96. package/dist/{events-PV3CDO4A.js → events-CNIXB2QK.js} +3 -3
  97. package/dist/{events-BQIBYPCF.js → events-DCOZQERS.js} +2 -2
  98. package/dist/{feedback-BZH26JQE.js → feedback-YBD5ITTY.js} +6 -6
  99. package/dist/{ffmpeg-KU7RNT3U.js → ffmpeg-V4BBFDTG.js} +6 -6
  100. package/dist/{figma-PBGZUEIL.js → figma-Z45ZYVGE.js} +3 -3
  101. package/dist/fontLocalizeCli.js +8 -8
  102. package/dist/{get-MM2JZ5ET.js → get-23NXQWCD.js} +2 -2
  103. package/dist/{gpuPolicy-DQE2CD5T.js → gpuPolicy-H6ABHVEB.js} +6 -6
  104. package/dist/{grade-compare-YTDQ7YXW.js → grade-compare-ZPX2G3UV.js} +26 -26
  105. package/dist/{help-M4B2DN7E.js → help-EP4CDPLO.js} +1 -1
  106. package/dist/{history-ZW4UYKAJ.js → history-E5OSXO74.js} +6 -6
  107. package/dist/hyperframe.manifest.json +1 -1
  108. package/dist/hyperframe.runtime.iife.js +64 -64
  109. package/dist/hyperframes-player.global.js +1 -1
  110. package/dist/{info-L7LQAXLK.js → info-2HHGSW5H.js} +7 -7
  111. package/dist/{init-HTSQ535A.js → init-ENEG6RZT.js} +26 -26
  112. package/dist/{inspect-EWF2THRR.js → inspect-PVQK4E2A.js} +26 -26
  113. package/dist/{installer-PQKH2S7C.js → installer-YGGLEOSF.js} +4 -4
  114. package/dist/{keyframes-X2QKJ4DP.js → keyframes-UWSYS2SL.js} +6 -6
  115. package/dist/{lambda-BURM66GP.js → lambda-L3LPXC2M.js} +7 -7
  116. package/dist/{layout-3Z3SJGZZ.js → layout-JVL4QREC.js} +26 -26
  117. package/dist/{lint-OMNZ2K5J.js → lint-JXQ72DDB.js} +7 -7
  118. package/dist/{lintProject-XM3DLUKG.js → lintProject-F7IC7WY4.js} +1 -1
  119. package/dist/{list-5ZSQEH6N.js → list-UFMLM3VV.js} +2 -2
  120. package/dist/{login-YNCQPHLA.js → login-CKGMWQJN.js} +4 -4
  121. package/dist/{manager-N6XXRQN3.js → manager-U6OP3EXB.js} +7 -7
  122. package/dist/{media-treatment-EOKBRJPY.js → media-treatment-MFMEWCDY.js} +12 -12
  123. package/dist/{models-6T4CCKUV.js → models-QA3TJ75Y.js} +10 -10
  124. package/dist/{motionShot-KXKMYZ3A.js → motionShot-NV2OPJHD.js} +14 -14
  125. package/dist/{normalize-audio-VWB7RHHA.js → normalize-audio-JWJRUKK2.js} +4 -4
  126. package/dist/{open-32SQCNUP.js → open-PTJNDRER.js} +11 -11
  127. package/dist/{parakeetRunner-BXW2WX6Q.js → parakeetRunner-B5FCWWOO.js} +11 -11
  128. package/dist/{pipeline-V5ONFRCY.js → pipeline-N26NA6ZG.js} +7 -7
  129. package/dist/{play-BBL262JE.js → play-45D6X6TV.js} +17 -17
  130. package/dist/{preflight-LCNGQFNY.js → preflight-MFOHPUOI.js} +7 -7
  131. package/dist/{present-RY4HO4ZQ.js → present-IFBUDI4D.js} +13 -13
  132. package/dist/{preview-BLLPCCLG.js → preview-MQRLXQOV.js} +18 -17
  133. package/dist/{producer-QG4AQ35S.js → producer-2QG7HLAW.js} +1 -1
  134. package/dist/{projectConfig-LN3NR5OM.js → projectConfig-I4FTZXHB.js} +6 -6
  135. package/dist/{publication-TXMCS4KM.js → publication-3GOFXCGU.js} +2 -2
  136. package/dist/{publish-57VURD7Z.js → publish-3B2TZCFH.js} +8 -8
  137. package/dist/{remove-background-VEWVIO3A.js → remove-background-RK4BJDBF.js} +8 -8
  138. package/dist/{render-SP7WAUB4.js → render-BV6FWFX3.js} +7 -6
  139. package/dist/{render-XMN3NJIQ.js → render-PW3XGS7B.js} +28 -28
  140. package/dist/{render-4E7QDVOI.js → render-SJ4HFPFU.js} +13 -13
  141. package/dist/{render-batch-7ULP5RIJ.js → render-batch-GKX54O6N.js} +7 -6
  142. package/dist/renderSetupWorker.js +1 -1
  143. package/dist/{resolver-D3XERO6U.js → resolver-RQJ7CNXD.js} +4 -4
  144. package/dist/{sherpa-5B5G426W.js → sherpa-XZPG7QFF.js} +10 -10
  145. package/dist/{sites-5PWHAMEG.js → sites-Q2S3DZY4.js} +2 -1
  146. package/dist/skills/hyperframes/references/captions.md +1 -1
  147. package/dist/skills/hyperframes-cli/references/cloudrun.md +1 -1
  148. package/dist/skills/hyperframes-cli/references/lambda.md +1 -1
  149. package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +2 -2
  150. package/dist/skills/hyperframes-cli/references/preview-render.md +1 -1
  151. package/dist/skills/hyperframes-cli/references/upgrade-info-misc.md +0 -8
  152. package/dist/skills/media-use/audio/references/transcribe.md +2 -2
  153. package/dist/skills/media-use/references/audio.md +1 -1
  154. package/dist/{skills-RXHRF7O7.js → skills-EYLB2V6F.js} +5 -5
  155. package/dist/{skillsUpdateCheck-JOTDZJAE.js → skillsUpdateCheck-TE6K5ROM.js} +3 -3
  156. package/dist/{snapshot-DN4MP4VN.js → snapshot-FE4T3SCN.js} +48 -33
  157. package/dist/{src-W6Y5ZYRQ.js → src-SEJ7LNNB.js} +7 -7
  158. package/dist/{src-XSDYRKLG.js → src-ZOXSEJCD.js} +5 -5
  159. package/dist/{staticProjectServer-JMFGTPMX.js → staticProjectServer-LSVIRDRO.js} +14 -14
  160. package/dist/studio/assets/{hyperframes-player-0HXJPmYC.js → hyperframes-player-Bv9hQ3v7.js} +1 -1
  161. package/dist/studio/assets/index-CBO8uz7-.css +1 -0
  162. package/dist/studio/assets/{index-BYw97F07.js → index-D_QqfWhx.js} +124 -123
  163. package/dist/studio/assets/{index-DsSfhjUS.js → index-Df14bh-L.js} +1 -1
  164. package/dist/studio/index.html +2 -2
  165. package/dist/{studio-api-SZ4OMFPN.js → studio-api-SL2Z76NU.js} +7 -7
  166. package/dist/{studioServer-LWO33H7D.js → studioServer-BADWVIHU.js} +44 -44
  167. package/dist/{telemetry-K3AFDKOP.js → telemetry-RN6VYEID.js} +3 -3
  168. package/dist/{timeline-NYQOAQDH.js → timeline-JBTCIPLU.js} +15 -15
  169. package/dist/{tokens-K7YWUVOK.js → tokens-A7V7UHNK.js} +2 -2
  170. package/dist/{transcribe-ANPUQDZD.js → transcribe-E4BOSNM4.js} +9 -9
  171. package/dist/{transcribe-QAUMODXM.js → transcribe-NTUCJGFI.js} +16 -16
  172. package/dist/{updateCheck-RNR4HMDI.js → updateCheck-M7UAYLUR.js} +2 -2
  173. package/dist/{upgrade-MKUGZZPA.js → upgrade-A2COSIMB.js} +2 -2
  174. package/dist/{urlDownloader-5USPXLCS.js → urlDownloader-MBSQYART.js} +5 -5
  175. package/dist/{validate-OJHPDLC5.js → validate-NODZYBHY.js} +20 -20
  176. package/dist/{video-BCKRR6LU.js → video-LBCUUYK7.js} +6 -6
  177. package/dist/warmCheck.js +33 -33
  178. package/package.json +1 -1
  179. package/dist/studio/assets/index-B3vk3hfU.css +0 -1
@@ -6,8 +6,8 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
 
8
8
  // src/version.ts
9
- var VERSION = true ? "0.8.190" : "0.0.0-dev";
10
- var PRODUCER_VERSION = true ? "0.8.190" : "0.0.0-dev";
9
+ var VERSION = true ? "0.8.191" : "0.0.0-dev";
10
+ var PRODUCER_VERSION = true ? "0.8.191" : "0.0.0-dev";
11
11
 
12
12
  export {
13
13
  VERSION,
@@ -14,24 +14,24 @@ import {
14
14
  } from "./chunk-6JR2XUEE.js";
15
15
  import {
16
16
  readCompositionFps
17
- } from "./chunk-XNLYMHX2.js";
17
+ } from "./chunk-7FF36MAD.js";
18
18
  import {
19
19
  HF_AUDIO_GROUP_ATTR,
20
20
  extractAudioMetadata,
21
21
  extractMediaMetadata
22
- } from "./chunk-OAPYPSEB.js";
22
+ } from "./chunk-NMDUSCCE.js";
23
23
  import {
24
24
  byStart,
25
25
  fpsToNumber,
26
26
  parseFpsWithDefault
27
- } from "./chunk-56IOFIYB.js";
27
+ } from "./chunk-GM3WIOO6.js";
28
28
  import {
29
29
  HF_AUDIO_AUTOMATION_ATTR,
30
30
  HF_AUDIO_FX_ATTR,
31
31
  parseAudioFxChain,
32
32
  parseAutomation,
33
33
  resolveAutomation
34
- } from "./chunk-DIV37NUE.js";
34
+ } from "./chunk-LM265QNK.js";
35
35
  import {
36
36
  isSubCompositionHost,
37
37
  topLevelElements,
@@ -40,7 +40,7 @@ import {
40
40
  import {
41
41
  resolveReferencedDuration,
42
42
  resolveReferencedStart
43
- } from "./chunk-TSFA2Y5C.js";
43
+ } from "./chunk-3NRB7YXW.js";
44
44
  import {
45
45
  resolveAuthoredAssetFile
46
46
  } from "./chunk-6BNTGNGD.js";
@@ -26,7 +26,7 @@ import {
26
26
  renderFrameIdForRenderId,
27
27
  resolveAuthoredTimingWindow,
28
28
  toFps
29
- } from "./chunk-56IOFIYB.js";
29
+ } from "./chunk-GM3WIOO6.js";
30
30
  import {
31
31
  AUDIO_GROUP_RENDER_ID_ATTR,
32
32
  COLOR_GRADING_SOURCE_HIDDEN_ATTR,
@@ -63,7 +63,7 @@ import {
63
63
  sourceTimeAt,
64
64
  timeAtSourceTime,
65
65
  volumeSegmentSampleCount
66
- } from "./chunk-DIV37NUE.js";
66
+ } from "./chunk-LM265QNK.js";
67
67
  import {
68
68
  clampAudioGain,
69
69
  clipGain,
@@ -83,7 +83,7 @@ import {
83
83
  } from "./chunk-4UMPIPCQ.js";
84
84
  import {
85
85
  resolveReferencedStart
86
- } from "./chunk-TSFA2Y5C.js";
86
+ } from "./chunk-3NRB7YXW.js";
87
87
  import {
88
88
  FFMPEG_PATH_ENV,
89
89
  FFPROBE_PATH_ENV,
@@ -3735,6 +3735,7 @@ async function produceDrawElementFrameBatch(page, times, width, height, quality
3735
3735
  const { t, fid } = frame;
3736
3736
  try {
3737
3737
  if (aw.__hf && typeof aw.__hf.seek === "function") aw.__hf.seek(t);
3738
+ await aw.__hfWaitForSeekCompletion?.();
3738
3739
  await aw.__hfDecodeDynamicCssBackgroundImages?.();
3739
3740
  aw.__hf3d?.update();
3740
3741
  const accel = (aw.__hf_accel_canvases ?? []).filter((c) => root.contains(c));
@@ -5738,16 +5739,60 @@ async function listUnregisteredTimelineIds(page) {
5738
5739
  })()`);
5739
5740
  return Array.isArray(evaluated) ? evaluated.map((id) => String(id)) : [];
5740
5741
  }
5741
- async function waitForSubCompositionTimelines(session, page, timeoutMs) {
5742
+ function isScriptFailure(session) {
5743
+ const outcome = session.subTimelineWaitOutcome;
5744
+ return outcome === "script_failure" || outcome === "timeout" && session.pageErrors.length > 0;
5745
+ }
5746
+ async function isolateUnregisteredCompositions(page) {
5747
+ const isolated = await page.evaluate(`(function() {
5748
+ var timelines = (window.__timelines = window.__timelines || {});
5749
+ var out = [];
5750
+ if (!window.gsap) return out;
5751
+ var broken = [];
5752
+ var live = 0;
5753
+ var hosts = document.querySelectorAll("[data-composition-id]");
5754
+ for (var i = 0; i < hosts.length; i++) {
5755
+ var host = hosts[i];
5756
+ var id = host.getAttribute("data-composition-id");
5757
+ if (!id || host.hasAttribute("data-no-timeline")) continue;
5758
+ var isRoot = !host.parentElement || !host.parentElement.closest("[data-composition-id]");
5759
+ if (timelines[id]) {
5760
+ if (!isRoot) live++;
5761
+ } else if (isRoot) {
5762
+ return out;
5763
+ } else {
5764
+ broken.push(host);
5765
+ }
5766
+ }
5767
+ if (live === 0) return out;
5768
+ broken.forEach(function(host) {
5769
+ var tl = window.gsap.timeline({ paused: true });
5770
+ var duration = parseFloat(host.getAttribute("data-duration"));
5771
+ if (duration > 0) tl.set({}, {}, duration);
5772
+ var id = host.getAttribute("data-composition-id");
5773
+ timelines[id] = tl;
5774
+ out.push({ compositionId: id, elementId: host.id || host.getAttribute("data-hf-id") || null });
5775
+ });
5776
+ if (out.length && typeof window.__hfForceTimelineRebind === "function") window.__hfForceTimelineRebind();
5777
+ return out;
5778
+ })()`);
5779
+ return Array.isArray(isolated) ? isolated : [];
5780
+ }
5781
+ async function waitForSubCompositionTimelines(session, page, timeoutMs, options = {}) {
5742
5782
  const memo = session.subTimelineWaitMemo;
5743
5783
  session.subTimelineWaitOutcome = await pollSubCompositionTimelines(page, timeoutMs, {
5744
5784
  getScriptLoadFailures: () => session.scriptLoadFailures,
5785
+ getPageErrors: () => session.pageErrors,
5786
+ scriptErrorGraceMs: options.scriptErrorGraceMs,
5745
5787
  onPending: (ids) => {
5746
5788
  session.pendingTimelineIds = [...ids];
5747
5789
  },
5748
5790
  shouldStop: () => session.vfxFailure !== void 0,
5749
5791
  knownUnregisteredIds: memo.unregisteredIds
5750
5792
  });
5793
+ if (isScriptFailure(session) && session.scriptLoadFailures.length === 0) {
5794
+ session.isolatedCompositions = await isolateUnregisteredCompositions(page);
5795
+ }
5751
5796
  const cleanTimeout = session.subTimelineWaitOutcome === "timeout" && session.vfxFailure === void 0 && session.pageErrors.length === 0 && session.scriptLoadFailures.length === 0;
5752
5797
  if (cleanTimeout) {
5753
5798
  memo.unregisteredIds = session.pendingTimelineIds ?? [];
@@ -5757,6 +5802,8 @@ async function pollSubCompositionTimelines(page, timeoutMs, {
5757
5802
  intervalMs = 150,
5758
5803
  getScriptLoadFailures,
5759
5804
  scriptFailureGraceMs = 2e3,
5805
+ getPageErrors,
5806
+ scriptErrorGraceMs = 5e3,
5760
5807
  onPending,
5761
5808
  shouldStop,
5762
5809
  knownUnregisteredIds = []
@@ -5778,16 +5825,22 @@ async function pollSubCompositionTimelines(page, timeoutMs, {
5778
5825
  const deadline = start + timeoutMs;
5779
5826
  let ready = false;
5780
5827
  let scriptFailureBail = false;
5828
+ let errorSeenAt;
5781
5829
  for (; ; ) {
5782
5830
  ready = Boolean(await page.evaluate(expression));
5783
5831
  if (ready || shouldStop?.()) break;
5784
5832
  const now = Date.now();
5785
5833
  if (now >= deadline) break;
5786
5834
  const failures = getScriptLoadFailures?.() ?? [];
5787
- if (failures.length > 0 && now - start >= scriptFailureGraceMs) {
5835
+ const errors = getPageErrors?.() ?? [];
5836
+ const failed = failures.length > 0 ? failures : errors;
5837
+ const graceMs = failures.length > 0 ? scriptFailureGraceMs : scriptErrorGraceMs;
5838
+ if (failed.length > 0) errorSeenAt ??= now;
5839
+ const sinceFailure = failures.length > 0 ? now - start : now - (errorSeenAt ?? now);
5840
+ if (failed.length > 0 && sinceFailure >= graceMs) {
5788
5841
  scriptFailureBail = true;
5789
5842
  console.warn(
5790
- `[FrameCapture] Sub-composition timeline wait cut short after ${now - start}ms: script resource(s) failed to load (${failures.join(", ")}), so the timeline registration they carry can never arrive. Fix the script reference; the render proceeds without those animations.`
5843
+ `[FrameCapture] Sub-composition timeline wait cut short after ${now - start}ms: script(s) failed (${failed.join(", ")}), so the timeline registration they carry can never arrive. Fix the script.`
5791
5844
  );
5792
5845
  break;
5793
5846
  }
@@ -5821,7 +5874,7 @@ async function pollVideosReady(page, skipIds, timeoutMs, intervalMs = 100) {
5821
5874
  return Boolean(
5822
5875
  await page.evaluate((skipIdList) => {
5823
5876
  const skip = new Set(skipIdList);
5824
- const vids = Array.from(document.querySelectorAll("video")).filter((v) => !skip.has(v.id));
5877
+ const vids = Array.from(document.querySelectorAll("video")).filter((v) => !skip.has(v.id)).filter((v) => !v.closest("[data-hidden]"));
5825
5878
  return vids.length === 0 || vids.every((v) => {
5826
5879
  const ve = v;
5827
5880
  if (ve.readyState >= 2) return true;
@@ -5935,15 +5988,31 @@ function recordCaptureWarnings(session, warnings) {
5935
5988
  function recordSubTimelineWarning(session, timeoutMs) {
5936
5989
  const outcome = session.subTimelineWaitOutcome;
5937
5990
  if (outcome === "ready" || !outcome) return;
5938
- const threwThenTimedOut = outcome === "timeout" && session.pageErrors.length > 0;
5939
- const scriptFailure = outcome === "script_failure" || threwThenTimedOut;
5991
+ const threwThenTimedOut = session.pageErrors.length > 0 && session.scriptLoadFailures.length === 0;
5992
+ const scriptFailure = isScriptFailure(session);
5940
5993
  const sources = [...session.scriptLoadFailures, ...session.pageErrors];
5941
5994
  const pending = session.pendingTimelineIds ?? [];
5942
5995
  const pendingSuffix = pending.length > 0 ? ` (still unregistered: ${pending.join(", ")})` : "";
5996
+ const isolated = session.isolatedCompositions ?? [];
5997
+ if (isolated.length > 0) {
5998
+ recordCaptureWarnings(session, [
5999
+ {
6000
+ code: "script_error_isolated",
6001
+ message: `A composition script failed, so its animation was skipped and the render went on: ${isolated.map((c) => c.elementId ?? c.compositionId).join(", ")} (${sources.join(", ")}).`,
6002
+ details: {
6003
+ sources,
6004
+ pendingCompositionIds: [...pending],
6005
+ isolatedElements: isolated,
6006
+ failureOwner: "user"
6007
+ }
6008
+ }
6009
+ ]);
6010
+ return;
6011
+ }
5943
6012
  recordCaptureWarnings(session, [
5944
6013
  {
5945
6014
  code: scriptFailure ? "sub_timeline_script_failure" : "sub_timeline_readiness_timeout",
5946
- message: threwThenTimedOut ? `A composition script threw and a timeline did not register within ${timeoutMs}ms${pendingSuffix} (${sources.join(", ")}). Fix the error; a composition animated by CSS or rAF rather than a GSAP timeline must mark its host with data-no-timeline.` : scriptFailure ? `A sub-composition timeline script failed to load (${sources.join(", ")})` : `Sub-composition timelines did not become ready within ${timeoutMs}ms${pendingSuffix}. This can be intentional: a composition driven by CSS animations or rAF never registers window.__timelines[id], and marking its host with data-no-timeline skips the wait entirely. Otherwise, a composition that sets up asynchronously must register window.__timelines[id] once setup completes.`,
6015
+ message: threwThenTimedOut ? `A composition script threw before its timeline registered${pendingSuffix} (${sources.join(", ")}). Fix the error; a composition animated by CSS or rAF rather than a GSAP timeline must mark its host with data-no-timeline.` : scriptFailure ? `A sub-composition timeline script failed to load (${sources.join(", ")})` : `Sub-composition timelines did not become ready within ${timeoutMs}ms${pendingSuffix}. This can be intentional: a composition driven by CSS animations or rAF never registers window.__timelines[id], and marking its host with data-no-timeline skips the wait entirely. Otherwise, a composition that sets up asynchronously must register window.__timelines[id] once setup completes.`,
5947
6016
  details: {
5948
6017
  timeoutMs,
5949
6018
  sources,
@@ -6219,7 +6288,7 @@ async function initializeSession(session) {
6219
6288
  if (!videosReady) {
6220
6289
  const failedVideos = await page.evaluate((skipIdList) => {
6221
6290
  const skip = new Set(skipIdList);
6222
- return Array.from(document.querySelectorAll("video")).filter((v) => !skip.has(v.id)).filter((v) => v.readyState < 2 && !v.error).map((v) => v.src || v.getAttribute("src") || "(no src)").join(", ");
6291
+ return Array.from(document.querySelectorAll("video")).filter((v) => !skip.has(v.id)).filter((v) => !v.closest("[data-hidden]")).filter((v) => v.readyState < 2 && !v.error).map((v) => v.src || v.getAttribute("src") || "(no src)").join(", ");
6223
6292
  }, skipVideoIds);
6224
6293
  console.warn(
6225
6294
  `[FrameCapture] Some video elements did not decode within ${pageReadyTimeout}ms: ${failedVideos}. Continuing render. Affected videos will appear as blank/black frames.`
@@ -6315,7 +6384,7 @@ async function initializeSession(session) {
6315
6384
  if (!bfVideosReady) {
6316
6385
  const failedVideos = await page.evaluate((skipIdList) => {
6317
6386
  const skip = new Set(skipIdList);
6318
- return Array.from(document.querySelectorAll("video")).filter((v) => !skip.has(v.id)).filter((v) => v.readyState < 2 && !v.error).map((v) => v.src || v.getAttribute("src") || "(no src)").join(", ");
6387
+ return Array.from(document.querySelectorAll("video")).filter((v) => !skip.has(v.id)).filter((v) => !v.closest("[data-hidden]")).filter((v) => v.readyState < 2 && !v.error).map((v) => v.src || v.getAttribute("src") || "(no src)").join(", ");
6319
6388
  }, bfSkipVideoIds);
6320
6389
  console.warn(
6321
6390
  `[FrameCapture] Some video elements did not decode within ${pageReadyTimeout}ms: ${failedVideos}. Continuing render. Affected videos will appear as blank/black frames.`
@@ -7028,6 +7097,44 @@ function resolveSessionMotionBlur(session) {
7028
7097
  }
7029
7098
  return plan;
7030
7099
  }
7100
+ async function judgeSmallDrawElementFrame(session, frameIndex, buffer, redraw) {
7101
+ const sizes = session.deFrameSizes ??= [];
7102
+ const sorted = sizes.length >= 12 ? [...sizes].sort((a, b) => a - b) : null;
7103
+ const median = sorted ? sorted[sorted.length >> 1] ?? 0 : 0;
7104
+ const floor = Math.max(session.deAbsFloor ?? 2e4, median * 0.12);
7105
+ let kept = buffer;
7106
+ if (buffer.length < floor && !session.deAcceptedSmall?.equals(buffer)) {
7107
+ const suspect = () => new DrawElementCaptureError(
7108
+ frameIndex,
7109
+ `suspect small frame (${buffer.length}B < ${Math.round(floor)}B)`
7110
+ );
7111
+ if (session.beginFrameTimeTicks > 0) throw suspect();
7112
+ const retry = await redraw();
7113
+ if (retry.equals(buffer)) {
7114
+ session.deAbsFloor = Math.min(session.deAbsFloor ?? 2e4, Math.floor(buffer.length / 2));
7115
+ session.deAcceptedSmall = buffer;
7116
+ } else if (retry.length < floor) {
7117
+ throw suspect();
7118
+ } else {
7119
+ kept = retry;
7120
+ }
7121
+ }
7122
+ if (sizes.length >= 60) sizes.shift();
7123
+ sizes.push(kept.length);
7124
+ return kept;
7125
+ }
7126
+ async function redrawDrawElementFrame(session, frameIndex, time, seekOptions, heldVideoTime) {
7127
+ const { page, options } = session;
7128
+ await prepareFrameForCapture(session, frameIndex, time, seekOptions, heldVideoTime);
7129
+ return captureDrawElementFrame(
7130
+ page,
7131
+ options.width,
7132
+ options.height,
7133
+ options.format ?? "jpeg",
7134
+ options.quality ?? 80,
7135
+ true
7136
+ );
7137
+ }
7031
7138
  async function captureFrameSurface(session, frameIndex, time, seekOptions, heldVideoTime) {
7032
7139
  const { page, options } = session;
7033
7140
  const { quantizedTime, seekMs, beforeCaptureMs } = await prepareFrameForCapture(
@@ -7087,19 +7194,12 @@ async function captureFrameSurface(session, frameIndex, time, seekOptions, heldV
7087
7194
  session.beginFrameTimeTicks === 0
7088
7195
  );
7089
7196
  if ((options.format ?? "jpeg") !== "png" && process.env.HF_FORCE_DRAWELEMENT !== "1") {
7090
- const sizes = session.deFrameSizes ??= [];
7091
- const sorted = sizes.length >= 12 ? [...sizes].sort((a, b) => a - b) : null;
7092
- const median = sorted ? sorted[sorted.length >> 1] ?? 0 : 0;
7093
- const floor = Math.max(2e4, median * 0.12);
7094
- if (screenshotBuffer.length < floor) {
7095
- throw new DrawElementCaptureError(
7096
- frameIndex,
7097
- `suspect small frame (${screenshotBuffer.length}B < ${Math.round(floor)}B)`
7098
- );
7099
- } else {
7100
- if (sizes.length >= 60) sizes.shift();
7101
- sizes.push(screenshotBuffer.length);
7102
- }
7197
+ screenshotBuffer = await judgeSmallDrawElementFrame(
7198
+ session,
7199
+ frameIndex,
7200
+ screenshotBuffer,
7201
+ () => redrawDrawElementFrame(session, frameIndex, time, seekOptions, heldVideoTime)
7202
+ );
7103
7203
  }
7104
7204
  } catch (err) {
7105
7205
  if (isRecoverableDrawElementError(err)) {
@@ -8880,7 +8980,9 @@ async function extractAudioMetadata(filePath, options) {
8880
8980
  channels: audioStream.channels || 2,
8881
8981
  audioCodec,
8882
8982
  bitrate: output.format.bit_rate ? parseInt(output.format.bit_rate) : void 0,
8883
- latestStreamLeadSeconds: latestStreamLeadSeconds(output)
8983
+ latestStreamLeadSeconds: latestStreamLeadSeconds(output),
8984
+ audioStreamLeadSeconds: streamLeadSeconds(output, audioStream),
8985
+ audioStreamCount: output.streams.filter((s) => s.codec_type === "audio").length
8884
8986
  };
8885
8987
  })();
8886
8988
  if (options?.signal) return probePromise;
@@ -15440,7 +15542,8 @@ function parseAudioElements(html) {
15440
15542
  return elements;
15441
15543
  }
15442
15544
  var FAIL_ON_READ_ERROR_INSTEAD_OF_ENDING_THERE = ["-xerror"];
15443
- async function extractAudioSegment(srcPath, outputPath, stage, mediaStart, duration, playbackRate = 1, signal, config) {
15545
+ var SIDECAR_WARM_UP_SECONDS = 1;
15546
+ async function extractAudioSegment(srcPath, outputPath, stage, mediaStart, duration, playbackRate = 1, signal, config, audioSidecarUrl) {
15444
15547
  const ffmpegProcessTimeout = config?.ffmpegProcessTimeout ?? DEFAULT_CONFIG.ffmpegProcessTimeout;
15445
15548
  const outputDir = dirname7(outputPath);
15446
15549
  if (!existsSync11(outputDir)) mkdirSync7(outputDir, { recursive: true });
@@ -15454,18 +15557,21 @@ async function extractAudioSegment(srcPath, outputPath, stage, mediaStart, durat
15454
15557
  const inputSeek = mediaStart >= (metadata?.latestStreamLeadSeconds ?? 0);
15455
15558
  const start = formatFilterNumber(mediaStart);
15456
15559
  const timestampTrim = inputSeek ? null : `atrim=start=${start}:end=${formatFilterNumber(mediaStart + sourceDuration)},asetpts=PTS-${start}/TB,aresample=async=1:first_pts=0`;
15560
+ const fromSidecar = audioSidecarUrl !== void 0 && inputSeek && normalizedPlaybackRate === 1;
15561
+ const warmUp = fromSidecar ? Math.min(SIDECAR_WARM_UP_SECONDS, mediaStart) : 0;
15457
15562
  const outputArgs = preparedAudioOutputArgs(
15458
15563
  metadata,
15459
15564
  normalizedPlaybackRate,
15460
15565
  duration,
15461
- timestampTrim
15566
+ warmUp > 0 ? `atrim=start=${warmUp},asetpts=PTS-STARTPTS` : timestampTrim
15462
15567
  );
15568
+ const readFrom = fromSidecar ? audioSidecarUrl : srcPath;
15463
15569
  const args = [
15464
15570
  ...readsUrl ? FAIL_ON_READ_ERROR_INSTEAD_OF_ENDING_THERE : [],
15465
- ...urlInputArgs(srcPath),
15466
- ...inputSeek ? ["-ss", String(mediaStart), "-t", String(sourceDuration)] : [],
15571
+ ...urlInputArgs(readFrom),
15572
+ ...inputSeek ? ["-ss", String(mediaStart - warmUp), "-t", String(sourceDuration + warmUp)] : [],
15467
15573
  "-i",
15468
- srcPath
15574
+ readFrom
15469
15575
  ];
15470
15576
  args.push("-vn", "-acodec", "pcm_s16le", "-ar", "48000", ...outputArgs);
15471
15577
  if (normalizedPlaybackRate !== 1) args.push("-t", String(duration));
@@ -15909,10 +16015,12 @@ async function processCompositionAudio(elements, baseDir, workDir, outputPath, t
15909
16015
  try {
15910
16016
  let srcPath = element.src;
15911
16017
  let readInPlace = false;
16018
+ let audioSidecarUrl;
15912
16019
  if (!isHttpUrl(srcPath)) {
15913
16020
  srcPath = resolveProjectRelativeSrc(element.src, baseDir, compiledDir);
15914
16021
  const remoteUrl = config?.urlByAbsentLocalPath?.get(srcPath);
15915
16022
  if (remoteUrl) {
16023
+ audioSidecarUrl = config?.audioSidecarUrlByLocalPath?.get(srcPath);
15916
16024
  srcPath = remoteUrl;
15917
16025
  readInPlace = true;
15918
16026
  }
@@ -15990,7 +16098,8 @@ async function processCompositionAudio(elements, baseDir, workDir, outputPath, t
15990
16098
  element.end - element.start,
15991
16099
  element.playbackRate,
15992
16100
  effectiveSignal,
15993
- config
16101
+ config,
16102
+ audioSidecarUrl
15994
16103
  );
15995
16104
  if (!extractResult.success) {
15996
16105
  failures.push(
@@ -10,7 +10,7 @@ import {
10
10
  isDevice,
11
11
  isQuality,
12
12
  render
13
- } from "./chunk-JB7LML5B.js";
13
+ } from "./chunk-JTPHFYZI.js";
14
14
 
15
15
  // src/api/removeBackground.ts
16
16
  import { resolve } from "path";
@@ -7,10 +7,10 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  parseFeedbackRating,
9
9
  trackRenderFeedback
10
- } from "./chunk-OOAVKK2W.js";
10
+ } from "./chunk-TFGO5YMI.js";
11
11
  import {
12
12
  shouldTrack
13
- } from "./chunk-TTZTGXKG.js";
13
+ } from "./chunk-W3CS2KFV.js";
14
14
  import {
15
15
  c
16
16
  } from "./chunk-ZTZA4UWZ.js";
@@ -84,7 +84,7 @@ async function getDoctorSummary() {
84
84
  try {
85
85
  const [{ getSystemMeta }, { findFFmpeg }] = await Promise.all([
86
86
  import("./system-7F3UEHQT.js"),
87
- import("./ffmpeg-KU7RNT3U.js")
87
+ import("./ffmpeg-V4BBFDTG.js")
88
88
  ]);
89
89
  const sys = getSystemMeta();
90
90
  const parts = [
@@ -8,10 +8,10 @@ import {
8
8
  DEFAULT_VP9_CPU_USED,
9
9
  isHttpUrl,
10
10
  runFfmpeg
11
- } from "./chunk-OAPYPSEB.js";
11
+ } from "./chunk-NMDUSCCE.js";
12
12
  import {
13
13
  parseAnimatedGifMetadata
14
- } from "./chunk-56IOFIYB.js";
14
+ } from "./chunk-GM3WIOO6.js";
15
15
  import {
16
16
  parseHTML
17
17
  } from "./chunk-SDYDNHEE.js";
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  setHostHandlesSigint
9
- } from "./chunk-OAPYPSEB.js";
9
+ } from "./chunk-NMDUSCCE.js";
10
10
  import {
11
11
  processAncestorSnapshot,
12
12
  processIdentity,
@@ -6,23 +6,23 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveProject
9
- } from "./chunk-OTQXYTQZ.js";
9
+ } from "./chunk-7ZJEQY7Q.js";
10
10
  import {
11
11
  installPageFunctionGuard,
12
12
  resolveCliChromeGpuMode,
13
13
  seekCompositionTimeline,
14
14
  waitForRuntimeReady
15
- } from "./chunk-EU5HTY3E.js";
15
+ } from "./chunk-JYSSPQDT.js";
16
16
  import {
17
17
  launchManagedBrowser,
18
18
  resolveManagedGpuMode
19
- } from "./chunk-GGVGOY6M.js";
19
+ } from "./chunk-WY3TQ2PT.js";
20
20
  import {
21
21
  pageNavigationTimeoutMs
22
- } from "./chunk-CWVSJA52.js";
22
+ } from "./chunk-TJKE4EYX.js";
23
23
  import {
24
24
  resolveCompositionViewportFromHtml
25
- } from "./chunk-ZFFKWHXN.js";
25
+ } from "./chunk-COWQITWP.js";
26
26
  import {
27
27
  defineCommand
28
28
  } from "./chunk-S3S4TGEH.js";
@@ -33,13 +33,16 @@ import {
33
33
  import {
34
34
  c
35
35
  } from "./chunk-ZTZA4UWZ.js";
36
+ import {
37
+ resolveNaturalMediaTimelineDuration
38
+ } from "./chunk-LM265QNK.js";
36
39
  import {
37
40
  decodeWellFormedEscapes
38
41
  } from "./chunk-BSQ7XANM.js";
39
42
  import {
40
43
  printDeprecationNotice,
41
44
  withMeta
42
- } from "./chunk-STJ2ANMF.js";
45
+ } from "./chunk-KAC2WR7P.js";
43
46
  import {
44
47
  normalizeErrorMessage
45
48
  } from "./chunk-KNU5COPB.js";
@@ -139,7 +142,12 @@ async function auditClipDurations(page, analyzeClipMediaFit, extraWaitMs) {
139
142
  id: el.id || el.getAttribute("src") || `(${el.tagName.toLowerCase()})`,
140
143
  kind: el.tagName === "AUDIO" ? "Audio" : "Video",
141
144
  slot,
142
- mediaStart: parseFloat(el.getAttribute("data-media-start") ?? "0") || 0,
145
+ attributes: {
146
+ "data-media-start": el.getAttribute("data-media-start"),
147
+ "data-playback-start": el.getAttribute("data-playback-start"),
148
+ "data-playback-rate": el.getAttribute("data-playback-rate"),
149
+ "data-automation": el.getAttribute("data-automation")
150
+ },
143
151
  duration: el.duration,
144
152
  loop: el.loop || el.getAttribute("data-loop") === "true"
145
153
  });
@@ -153,7 +161,11 @@ async function auditClipDurations(page, analyzeClipMediaFit, extraWaitMs) {
153
161
  unreadable.push(clip.id);
154
162
  continue;
155
163
  }
156
- const mediaSeconds = Math.max(0, clip.duration - clip.mediaStart);
164
+ const mediaSeconds = resolveNaturalMediaTimelineDuration(
165
+ { getAttribute: (name) => clip.attributes[name] ?? null },
166
+ clip.duration
167
+ );
168
+ if (mediaSeconds === null) continue;
157
169
  const fit = analyzeClipMediaFit({ slotSeconds: clip.slot, mediaSeconds, loop: clip.loop });
158
170
  if (!fit) continue;
159
171
  warnings.push({
@@ -227,7 +239,7 @@ function extractCompositionErrorsFromLint(lintResult) {
227
239
  async function localizeRemoteAssets(html) {
228
240
  let dir;
229
241
  try {
230
- const { loadProducer } = await import("./producer-QG4AQ35S.js");
242
+ const { loadProducer } = await import("./producer-2QG7HLAW.js");
231
243
  const { localizeRemoteMediaSources, localizeRemoteImageSources, localizeRemoteFontFaces } = await loadProducer();
232
244
  dir = mkdtempSync(join(tmpdir(), "hf-validate-assets-"));
233
245
  const assetDir = dir;
@@ -248,10 +260,10 @@ async function localizeRemoteAssets(html) {
248
260
  }
249
261
  async function validateInBrowser(project, opts) {
250
262
  const projectDir = project.dir;
251
- const { bundleToSingleHtml } = await import("./compiler-EJE3HLCS.js");
263
+ const { bundleToSingleHtml } = await import("./compiler-MA2ELZPG.js");
252
264
  const { ensureBrowser } = await import("./manager-UHWEKPXC.js");
253
- const { serveStaticProjectHtml } = await import("./staticProjectServer-JMFGTPMX.js");
254
- const { lintProject } = await import("./lintProject-XM3DLUKG.js");
265
+ const { serveStaticProjectHtml } = await import("./staticProjectServer-LSVIRDRO.js");
266
+ const { lintProject } = await import("./lintProject-F7IC7WY4.js");
255
267
  const lintResult = await lintProject(projectDir);
256
268
  const compositionErrors = extractCompositionErrorsFromLint(lintResult);
257
269
  const html = await bundleToSingleHtml(projectDir);
@@ -272,9 +284,9 @@ async function validateInBrowser(project, opts) {
272
284
  try {
273
285
  const browser = await ensureBrowser();
274
286
  const puppeteer = await import("puppeteer-core");
275
- const { buildChromeArgs, analyzeClipMediaFit } = await import("./src-XSDYRKLG.js");
287
+ const { buildChromeArgs, analyzeClipMediaFit } = await import("./src-ZOXSEJCD.js");
276
288
  const requestedGpuMode = resolveCliChromeGpuMode();
277
- const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu, resolveLocalWebGpu } = await import("./gpuPolicy-DQE2CD5T.js");
289
+ const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu, resolveLocalWebGpu } = await import("./gpuPolicy-H6ABHVEB.js");
278
290
  const resolvedGpuMode = await resolveManagedGpuMode(requestedGpuMode, browser.executablePath);
279
291
  const requiresWebGpu = compositionRequiresWebGpu(html);
280
292
  const { gpuConfig, softwareWebGpu } = resolveLocalWebGpu(resolvedGpuMode, requiresWebGpu);
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  getMimeType,
9
9
  injectMediaCodecMapIntoHtml
10
- } from "./chunk-L34DPWY4.js";
10
+ } from "./chunk-2WNVHZHA.js";
11
11
  import {
12
12
  PROXY_VARIANT_CONFIG,
13
13
  ProxyCapacityError,
@@ -18,17 +18,17 @@ import {
18
18
  recordProxyRequest,
19
19
  resolveProxy,
20
20
  resolveProxyVariantRequest
21
- } from "./chunk-BT64TTSE.js";
21
+ } from "./chunk-COETAXRN.js";
22
22
  import {
23
23
  findStageProxyBox
24
- } from "./chunk-ZFFKWHXN.js";
24
+ } from "./chunk-COWQITWP.js";
25
25
  import {
26
26
  resolveAutoProxy
27
- } from "./chunk-UZ7RJDEC.js";
27
+ } from "./chunk-JJJCFKMF.js";
28
28
  import {
29
29
  PREVIEW_PROXY_BOX_PARAM,
30
30
  parsePreviewProxyBox
31
- } from "./chunk-56IOFIYB.js";
31
+ } from "./chunk-GM3WIOO6.js";
32
32
  import {
33
33
  decodeWellFormedEscapes
34
34
  } from "./chunk-BSQ7XANM.js";
@@ -11,7 +11,7 @@ import {
11
11
  distroLabel,
12
12
  getFFmpegInstallHint,
13
13
  parseLddMissingLibs
14
- } from "./chunk-IARWN467.js";
14
+ } from "./chunk-GLG5JWLI.js";
15
15
  import {
16
16
  ensureBrowser,
17
17
  findBrowser
@@ -8,7 +8,7 @@ import {
8
8
  flush,
9
9
  shouldTrack,
10
10
  trackEvent
11
- } from "./chunk-TTZTGXKG.js";
11
+ } from "./chunk-W3CS2KFV.js";
12
12
  import {
13
13
  CliRuntimeError
14
14
  } from "./chunk-JVBRJMOP.js";