hyperframes 0.8.173 → 0.8.175

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 (187) hide show
  1. package/dist/{add-V7VBTFNG.js → add-S4AOKSNH.js} +14 -15
  2. package/dist/{animatedGifPrep-62S72ZY6.js → animatedGifPrep-QRDM2NMV.js} +9 -11
  3. package/dist/api.js +19 -21
  4. package/dist/{asset-Z4JI2F6V.js → asset-DQ45BUBL.js} +2 -2
  5. package/dist/{assetCataloger-Q7LE7BCC.js → assetCataloger-NPDCMAYE.js} +9 -11
  6. package/dist/{audio-HIHNLQJ7.js → audio-OOAXEELO.js} +16 -18
  7. package/dist/{auth-4K6DSZCD.js → auth-33IY64LT.js} +2 -2
  8. package/dist/{autoUpdate-DXZDD5VT.js → autoUpdate-KGLJUGNZ.js} +2 -2
  9. package/dist/{backgroundChecks-ODMKKJ4S.js → backgroundChecks-DQPHYLVN.js} +3 -3
  10. package/dist/backgroundChecksWorker.js +3 -3
  11. package/dist/{batchRender-I4BFJGPA.js → batchRender-KXXTVNPB.js} +4 -4
  12. package/dist/{beats-7QCA6GDR.js → beats-WDYSCACS.js} +6 -7
  13. package/dist/{benchmark-IT4WTSMZ.js → benchmark-WOAULMYW.js} +11 -12
  14. package/dist/{browser-5VHM72PM.js → browser-2HX46R74.js} +5 -6
  15. package/dist/{bundleWithLocalizedFonts-MKTQCB2Y.js → bundleWithLocalizedFonts-32N7TVM6.js} +2 -2
  16. package/dist/{capture-B5Y45EWD.js → capture-5ASPHTMF.js} +22 -18
  17. package/dist/{capture-CMNNIMIL.js → capture-7LR5UVM2.js} +2 -2
  18. package/dist/{catalog-AKPJ65GY.js → catalog-LVW3RT4U.js} +15 -16
  19. package/dist/{catch-up-2SVYRMD3.js → catch-up-W6Z73GXL.js} +6 -7
  20. package/dist/{check-Q7AX6K7O.js → check-C23ZWACZ.js} +56 -52
  21. package/dist/{checkBrowser-CPXD5BZY.js → checkBrowser-WS6FSLBJ.js} +182 -88
  22. package/dist/{chunk-QVPOR7WE.js → chunk-32GKETR7.js} +22 -1
  23. package/dist/{chunk-4RDDUBOC.js → chunk-3Q4Y33FT.js} +11 -11
  24. package/dist/{chunk-2DWYRHJS.js → chunk-3SWMUZ4Y.js} +2 -2
  25. package/dist/{chunk-PBVUVNWP.js → chunk-3X3CELOP.js} +1 -1
  26. package/dist/{chunk-5E43335V.js → chunk-42T7OP4O.js} +1 -1
  27. package/dist/{chunk-TWZRU64W.js → chunk-4XM6VXLN.js} +7 -7
  28. package/dist/{chunk-6JQDH4O6.js → chunk-7E4YFL4U.js} +1 -1
  29. package/dist/{chunk-NOMPG5HQ.js → chunk-7GUAZGSW.js} +3 -3
  30. package/dist/{chunk-XRQBHOBT.js → chunk-B4VT6YU2.js} +2 -2
  31. package/dist/{chunk-2BL7BJ22.js → chunk-BHMWVRNS.js} +1 -1
  32. package/dist/{chunk-LN4SZS7W.js → chunk-CEYY3SOX.js} +3 -3
  33. package/dist/chunk-CIWX5UKC.js +16 -0
  34. package/dist/{chunk-CBOYQOLY.js → chunk-DQY6WTF7.js} +1 -1
  35. package/dist/{chunk-BCPJSBCS.js → chunk-DZMWNCHM.js} +7 -3
  36. package/dist/chunk-EEXE43II.js +3805 -0
  37. package/dist/{chunk-ROQBQHBK.js → chunk-EKDTCSCL.js} +1 -1
  38. package/dist/{chunk-L4SFGSSQ.js → chunk-FRNKM4MG.js} +1 -1
  39. package/dist/{chunk-6HKO6VWS.js → chunk-G7I3WZK4.js} +1 -1
  40. package/dist/{chunk-2TNPXPI5.js → chunk-GK2FIKIQ.js} +10 -8
  41. package/dist/chunk-HIP62XAW.js +36 -0
  42. package/dist/{chunk-FDWTZVA6.js → chunk-IUOPF3DL.js} +1 -1
  43. package/dist/{chunk-N7RTLKMM.js → chunk-J53AJK3Q.js} +2 -2
  44. package/dist/{chunk-OFFNB2SU.js → chunk-JNL3RMDG.js} +241 -6
  45. package/dist/{chunk-HCOL75LA.js → chunk-JT7PV3GL.js} +3 -3
  46. package/dist/{chunk-6RIH2NDU.js → chunk-KHR4IJAW.js} +178 -122
  47. package/dist/{chunk-WIAO42MD.js → chunk-KZHYAGC3.js} +5 -5
  48. package/dist/{chunk-C4QGOXO2.js → chunk-KZQGUXG5.js} +494 -136
  49. package/dist/{chunk-2QJDC4NT.js → chunk-LY2GLSOS.js} +1 -1
  50. package/dist/{chunk-CHALU2TF.js → chunk-LZT3NUTE.js} +1 -1
  51. package/dist/{chunk-BTPZ74Z3.js → chunk-MJZQ44NV.js} +1 -1
  52. package/dist/{chunk-YOOW26KG.js → chunk-NELZN7SV.js} +2 -2
  53. package/dist/{chunk-VFCKXTBB.js → chunk-NL5F3AD4.js} +27 -38
  54. package/dist/{chunk-X3SCQP2A.js → chunk-NSWIF4VH.js} +1 -1
  55. package/dist/{chunk-L3RCYYON.js → chunk-NWEER3QY.js} +2 -2
  56. package/dist/{chunk-3O45NOL7.js → chunk-NZRAS3FB.js} +1 -1
  57. package/dist/chunk-NZZYJOMJ.js +136 -0
  58. package/dist/{chunk-5JTRGGTX.js → chunk-O6FWDZYJ.js} +1 -1
  59. package/dist/{chunk-2YTOJ447.js → chunk-OUMYTLPP.js} +3 -3
  60. package/dist/{chunk-QURKHVV5.js → chunk-OYEDHVSI.js} +1 -1
  61. package/dist/{chunk-BYRHCRU3.js → chunk-PBKOURSI.js} +2 -2
  62. package/dist/{chunk-MWNSVO4P.js → chunk-QMQZXNGU.js} +8 -8
  63. package/dist/{chunk-XDPXSQJO.js → chunk-QWCXGTOH.js} +1 -1
  64. package/dist/{chunk-V2D4QZBC.js → chunk-RAZVWSU5.js} +3 -3
  65. package/dist/{chunk-O433SZAJ.js → chunk-RERXOG54.js} +35 -16
  66. package/dist/{chunk-IK3SOMZ4.js → chunk-S354WIFQ.js} +19 -22
  67. package/dist/{chunk-QWQ6GQTI.js → chunk-T6AGUTZJ.js} +2 -4
  68. package/dist/{chunk-PCLYCYBK.js → chunk-TNDNFZOK.js} +4 -4
  69. package/dist/{chunk-SOAXQ7Q7.js → chunk-UWUKJDTA.js} +2 -2
  70. package/dist/{chunk-KR5ZHRF2.js → chunk-V7T7WA2K.js} +2 -2
  71. package/dist/{chunk-U7EGMXQR.js → chunk-VEQ7DKPG.js} +4 -17
  72. package/dist/{chunk-JYVGYKXG.js → chunk-W2LGJSEN.js} +73 -1
  73. package/dist/{chunk-ETPPGNJB.js → chunk-W5USVP6Z.js} +2 -2
  74. package/dist/{chunk-H5C375DW.js → chunk-WDFLYDKN.js} +5 -5
  75. package/dist/{chunk-BYVBP3U5.js → chunk-XDK2FUAC.js} +9 -9
  76. package/dist/{chunk-TDPVEMBS.js → chunk-XFCLWWL3.js} +1 -1
  77. package/dist/{chunk-TNHRCZT3.js → chunk-XRRDVRCY.js} +42 -2
  78. package/dist/{chunk-4D2T6Y5Y.js → chunk-YCSCDQDS.js} +6 -6
  79. package/dist/{chunk-XZNKIYIG.js → chunk-YMU42UU2.js} +1 -1
  80. package/dist/{chunk-ODR7V2JL.js → chunk-Z2R7CFWH.js} +1 -1
  81. package/dist/{chunk-X2ALZSKK.js → chunk-ZD7QKZSS.js} +3 -3
  82. package/dist/{chunk-45IAFBUP.js → chunk-ZDOWJ3NS.js} +14 -14
  83. package/dist/{chunk-A2DMF2Q6.js → chunk-ZGSLXWH2.js} +2 -2
  84. package/dist/{chunk-KRWEUM4R.js → chunk-ZXHEOTYW.js} +1 -1
  85. package/dist/{clean-SBFI3ZKR.js → clean-KBNXV6DP.js} +18 -20
  86. package/dist/cli.js +53 -53
  87. package/dist/{cloud-IRE4HLEK.js → cloud-BWWKDRR6.js} +4 -4
  88. package/dist/{cloudrun-GIHWEBGM.js → cloudrun-P35BPQCO.js} +5 -5
  89. package/dist/commands/contrast-audit.browser.js +18 -50
  90. package/dist/{compare-S6NM2FSV.js → compare-UWJRKF5K.js} +28 -30
  91. package/dist/{compiler-WCWRB2LZ.js → compiler-5TFPJPQQ.js} +5 -6
  92. package/dist/{component-WDFZQ2HN.js → component-SWOGSIO2.js} +3 -3
  93. package/dist/{compositions-RMUBDPD4.js → compositions-PIPVEXE3.js} +14 -16
  94. package/dist/{delete-SDNARGJ4.js → delete-OXIDK7N3.js} +4 -4
  95. package/dist/{deploy-4MK3Y67M.js → deploy-NKWMPAMH.js} +19 -5
  96. package/dist/{destroy-GFQLTIY3.js → destroy-UKP522AE.js} +4 -2
  97. package/dist/{deterministicFonts-RWGQPEZU.js → deterministicFonts-L7YEEFGI.js} +1 -1
  98. package/dist/{dist-FAN2FFAV.js → dist-2FMTAVGL.js} +3 -3
  99. package/dist/{dist-65ELHZOF.js → dist-U2HCECNB.js} +3 -3
  100. package/dist/{doctor-YPCZILXV.js → doctor-KLQLFPCF.js} +14 -16
  101. package/dist/{events-Q2K7SNEZ.js → events-EGCYD45B.js} +5 -6
  102. package/dist/{events-INXDJ44V.js → events-EVTTGISX.js} +4 -5
  103. package/dist/{feedback-FRGRCTIX.js → feedback-G4WZLOVD.js} +10 -11
  104. package/dist/{ffmpeg-7BYARPLM.js → ffmpeg-QIYSAPHO.js} +24 -4
  105. package/dist/{figma-C262EFOC.js → figma-Q4CKDE7M.js} +3 -3
  106. package/dist/fontLocalizeCli.js +12 -14
  107. package/dist/{get-ZIUUGSVI.js → get-NPRQH64W.js} +4 -4
  108. package/dist/{gpuPolicy-FRLW63IY.js → gpuPolicy-L72BQRFR.js} +9 -11
  109. package/dist/{grade-compare-DN342HJC.js → grade-compare-H4NJEL4P.js} +29 -31
  110. package/dist/{help-XQPBPSBP.js → help-2S3XXDEA.js} +1 -1
  111. package/dist/{history-PF5FUC6M.js → history-X4CGCVEQ.js} +8 -9
  112. package/dist/hyperframe-runtime.js +59 -59
  113. package/dist/hyperframe.manifest.json +1 -1
  114. package/dist/hyperframe.runtime.iife.js +59 -59
  115. package/dist/hyperframes-player.global.js +3 -3
  116. package/dist/{info-PC7IKGVB.js → info-YYUISGL7.js} +10 -11
  117. package/dist/{init-ORZX3PSQ.js → init-BAAI4ZMR.js} +34 -34
  118. package/dist/{inspect-L5GRL6SP.js → inspect-LXJ3XJUZ.js} +29 -31
  119. package/dist/{installer-KXS557O7.js → installer-NY5E5HCO.js} +5 -5
  120. package/dist/{keyframes-EIZDSXUH.js → keyframes-NXXJSQWG.js} +8 -9
  121. package/dist/{lambda-U3N7MRD7.js → lambda-PG3JKNWS.js} +16 -12
  122. package/dist/{layout-WHAVE2H5.js → layout-CBFO36IE.js} +29 -31
  123. package/dist/{lint-I7PYIW56.js → lint-Y6NWQTKF.js} +11 -12
  124. package/dist/{lintProject-7IEOAXJY.js → lintProject-ARKJXDQF.js} +3 -3
  125. package/dist/{list-XXQM3WDO.js → list-VY6KIYTX.js} +4 -4
  126. package/dist/{login-64NUUDYU.js → login-426Q3H3P.js} +4 -4
  127. package/dist/{manager-B6MVBM2E.js → manager-3RRUFZ4H.js} +25 -3
  128. package/dist/{media-treatment-5XIM4A3F.js → media-treatment-ZVIXMJZJ.js} +23 -18
  129. package/dist/{models-WRB3S67Z.js → models-KC2QBPVK.js} +13 -15
  130. package/dist/{motionShot-BOFBL73C.js → motionShot-3ZSLQJ4D.js} +19 -21
  131. package/dist/{normalize-audio-PP4BSZSU.js → normalize-audio-DRU5LFYU.js} +6 -7
  132. package/dist/{open-F4CUWMZF.js → open-LPBZQ4DC.js} +14 -15
  133. package/dist/{parakeetRunner-O7QYJ7V7.js → parakeetRunner-IFY6NK5G.js} +16 -18
  134. package/dist/{pipeline-BCHSFFT3.js → pipeline-AGMCDT5A.js} +11 -13
  135. package/dist/{play-PPBR2GJK.js → play-WVWXNQED.js} +21 -23
  136. package/dist/{policies-DCSIM4AB.js → policies-5NTZOHJA.js} +2 -0
  137. package/dist/preflight-I5JGCCKM.js +52 -0
  138. package/dist/{present-Y7VTCZRZ.js → present-IPTWJUKY.js} +17 -19
  139. package/dist/{preview-53AD4OME.js → preview-JVLRQVD7.js} +34 -25
  140. package/dist/{producer-WBJDNLBF.js → producer-HKGHSAON.js} +1 -1
  141. package/dist/{progress-5AM2MZ7V.js → progress-I37JB7R4.js} +1 -0
  142. package/dist/{projectConfig-4KUGQ4P6.js → projectConfig-HDALEM6S.js} +7 -7
  143. package/dist/{publication-OFDIFS4R.js → publication-NX4VC7UU.js} +3 -3
  144. package/dist/{publish-RWWTY743.js → publish-AZRRQUXM.js} +11 -11
  145. package/dist/{remove-background-G7VK3VKP.js → remove-background-WY7KA77M.js} +12 -14
  146. package/dist/{render-52W63I3Y.js → render-BEDATKWV.js} +14 -15
  147. package/dist/{render-6CXZNXXZ.js → render-HGT3EGIK.js} +9 -4
  148. package/dist/{render-7PPMS4P6.js → render-P3PFNCBA.js} +40 -38
  149. package/dist/{render-batch-2EJVUVVN.js → render-batch-MUCDZ2WF.js} +4 -4
  150. package/dist/renderSetupWorker.js +3 -3
  151. package/dist/{resolver-FF5GV6IA.js → resolver-FLQ42X2Y.js} +5 -5
  152. package/dist/sam-IKPEJRRO.js +21 -0
  153. package/dist/{screenshotCapture-XAYELJK7.js → screenshotCapture-HXEZ3TNJ.js} +20 -3
  154. package/dist/{sherpa-QJPI6B5S.js → sherpa-SQGEFX3S.js} +15 -17
  155. package/dist/skills/hyperframes/SKILL.md +42 -0
  156. package/dist/skills/hyperframes-cli/references/cloud.md +1 -1
  157. package/dist/skills/media-use/scripts/lib/recipe-store.mjs +5 -2
  158. package/dist/{skills-H6ZJNOLH.js → skills-D2FIQ2JN.js} +11 -10
  159. package/dist/{skillsUpdateCheck-4EBGMO2A.js → skillsUpdateCheck-2OLTHCBX.js} +3 -3
  160. package/dist/{snapshot-DZRUBWRH.js → snapshot-R7U73M3N.js} +32 -34
  161. package/dist/{src-WD5GOYON.js → src-4COYCAFY.js} +8 -10
  162. package/dist/{src-ZL7ACIZ3.js → src-WOD4AEI3.js} +11 -13
  163. package/dist/{staticProjectServer-72JF5PPO.js → staticProjectServer-DG4VZO4G.js} +15 -16
  164. package/dist/{status-RGHSK3DJ.js → status-BV7QAUQD.js} +2 -3
  165. package/dist/studio/assets/{hyperframes-player-B-wEZiX3.js → hyperframes-player-BByRREAU.js} +1 -1
  166. package/dist/studio/assets/{index-DPugLDRK.js → index-CULLUqJo.js} +1 -1
  167. package/dist/studio/assets/{index-Bvkb0Zxy.js → index-Wz-WEqHg.js} +97 -97
  168. package/dist/studio/index.html +1 -1
  169. package/dist/{studio-api-BL6CLOA6.js → studio-api-RGNBVLLL.js} +9 -10
  170. package/dist/{studioServer-TRWCZZXP.js → studioServer-LC5T4OXQ.js} +48 -50
  171. package/dist/{system-VRXC6S4A.js → system-7F3UEHQT.js} +2 -3
  172. package/dist/{telemetry-FDSW3ZOZ.js → telemetry-BLOE3TWY.js} +5 -6
  173. package/dist/{timeline-ZRN336EA.js → timeline-QQPPMADL.js} +124 -51
  174. package/dist/{tokens-RMLNQHIB.js → tokens-E3SHBFDU.js} +2 -2
  175. package/dist/{transcribe-AEHHCYAL.js → transcribe-D5N7SBDO.js} +22 -24
  176. package/dist/{transcribe-SOODKU6H.js → transcribe-O2AQ5E2L.js} +12 -14
  177. package/dist/{updateCheck-OSPEYRBY.js → updateCheck-ELOZ2CID.js} +2 -2
  178. package/dist/{upgrade-AK4S7DMX.js → upgrade-JDFZEPZY.js} +2 -2
  179. package/dist/{urlDownloader-FSCMLFG7.js → urlDownloader-32OGC3EW.js} +8 -10
  180. package/dist/{validate-JJTCKZIV.js → validate-LQQEABER.js} +23 -25
  181. package/dist/{video-ZDM5CFI2.js → video-HXIM27TO.js} +9 -11
  182. package/package.json +1 -1
  183. package/dist/chunk-7JDEZNBY.js +0 -3805
  184. package/dist/chunk-7KDQAD2W.js +0 -81
  185. package/dist/chunk-BXCMXMJQ.js +0 -73
  186. package/dist/chunk-KCF6GHJP.js +0 -250
  187. package/dist/preflight-G5KP7ZKA.js +0 -32
@@ -4,33 +4,33 @@ import { dirname as __hf_dirname } from "node:path";
4
4
  var require = __hf_createRequire(import.meta.url);
5
5
  var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
+ import {
8
+ resolveCompositionViewportFromHtml
9
+ } from "./chunk-FH7WODJH.js";
7
10
  import {
8
11
  gotoWhenSent,
9
12
  launchManagedBrowser,
10
13
  resolveManagedGpuMode,
11
14
  rethrowAfterBrowserCleanup
12
- } from "./chunk-TNHRCZT3.js";
13
- import {
14
- resolveCompositionViewportFromHtml
15
- } from "./chunk-FH7WODJH.js";
15
+ } from "./chunk-XRRDVRCY.js";
16
16
  import {
17
17
  pageNavigationTimeoutMs,
18
18
  windowsChromeCrashRemediation
19
- } from "./chunk-V2D4QZBC.js";
19
+ } from "./chunk-RAZVWSU5.js";
20
20
  import {
21
21
  oneProcessOverPipe
22
22
  } from "./chunk-BRHI7EIA.js";
23
23
  import {
24
24
  resolveLocalBrowserGpuMode,
25
25
  resolveLocalWebGpu
26
- } from "./chunk-KR5ZHRF2.js";
26
+ } from "./chunk-V7T7WA2K.js";
27
27
  import {
28
28
  c
29
29
  } from "./chunk-ZTZA4UWZ.js";
30
30
  import {
31
31
  assertWebGpuAdapterAvailable,
32
32
  compositionRequiresWebGpu
33
- } from "./chunk-O433SZAJ.js";
33
+ } from "./chunk-RERXOG54.js";
34
34
  import {
35
35
  normalizeErrorMessage
36
36
  } from "./chunk-KNU5COPB.js";
@@ -39,13 +39,17 @@ import {
39
39
  import { spawn } from "child_process";
40
40
  var SHADER_TRANSITIONS_TIMEOUT_MS = 9e4;
41
41
  var CAPTURE_SETTLE_MS = 1500;
42
+ var NETWORK_IDLE_MS = 100;
42
43
  var PREFERRED_SEEK_TARGET_WAIT_MS = 500;
43
44
  var DEFAULT_POST_SEEK_FONT_WAIT_MS = 500;
44
45
  var AUDIT_SEEK_OPTIONS = {
45
46
  fallbackToBridgeAndTimelines: true,
46
47
  animationFrameSettle: "double",
47
- waitForFontsMs: 500,
48
- settleMs: 120
48
+ waitForFontsMs: 500
49
+ };
50
+ var SCREENSHOT_SEEK_OPTIONS = {
51
+ ...AUDIT_SEEK_OPTIONS,
52
+ waitForImagesMs: 120
49
53
  };
50
54
  var DENSE_GEOMETRY_SEEK_OPTIONS = {
51
55
  ...AUDIT_SEEK_OPTIONS,
@@ -101,11 +105,41 @@ async function waitForCompositionSettle(page, options) {
101
105
  }).catch(() => {
102
106
  console.warn(` ${c.warn("\u26A0")} Shader transitions did not finish pre-rendering`);
103
107
  });
104
- await page.evaluate(() => document.fonts.ready).catch(() => {
105
- });
106
- await new Promise((resolveSettle) => setTimeout(resolveSettle, CAPTURE_SETTLE_MS));
108
+ await waitForLateSubresources(page);
107
109
  return runtimeReady;
108
110
  }
111
+ async function waitForLateSubresources(page) {
112
+ let cap;
113
+ const deadline = Date.now() + CAPTURE_SETTLE_MS;
114
+ const ready = (async () => {
115
+ await page.waitForFunction(() => document.readyState === "complete", {
116
+ timeout: CAPTURE_SETTLE_MS
117
+ });
118
+ await page.waitForNetworkIdle({
119
+ idleTime: NETWORK_IDLE_MS,
120
+ timeout: Math.max(1, deadline - Date.now())
121
+ });
122
+ await page.evaluate(async () => {
123
+ await Promise.all(Array.from(document.images, (image) => image.decode().catch(() => {
124
+ })));
125
+ await document.fonts.ready;
126
+ });
127
+ })();
128
+ try {
129
+ await Promise.race([
130
+ ready,
131
+ new Promise((resolveCap) => {
132
+ cap = setTimeout(resolveCap, CAPTURE_SETTLE_MS);
133
+ })
134
+ ]);
135
+ } catch {
136
+ await new Promise((resolveCap) => setTimeout(resolveCap, Math.max(0, deadline - Date.now())));
137
+ } finally {
138
+ clearTimeout(cap);
139
+ ready.catch(() => {
140
+ });
141
+ }
142
+ }
109
143
  async function installPageFunctionGuard(page) {
110
144
  await page.evaluateOnNewDocument("self.__name = self.__name || ((fn) => fn);");
111
145
  }
@@ -114,9 +148,9 @@ async function openSettledCompositionPage(html, url, options) {
114
148
  const { ensureBrowser, findSystemBrowser } = await import("./manager-HEUPD2YB.js");
115
149
  const browser = await ensureBrowser({ signal: options.signal });
116
150
  const puppeteer = await import("puppeteer-core");
117
- const { buildChromeArgs } = await import("./src-WD5GOYON.js");
151
+ const { buildChromeArgs } = await import("./src-4COYCAFY.js");
118
152
  const requestedGpuMode = options.browserGpuMode ?? resolveCliChromeGpuMode();
119
- const answer = (await import("./staticProjectServer-72JF5PPO.js")).inProcessAnswer(url);
153
+ const answer = (await import("./staticProjectServer-DG4VZO4G.js")).inProcessAnswer(url);
120
154
  const requiresWebGpu = compositionRequiresWebGpu(html);
121
155
  let softwareWebGpu = false;
122
156
  const launch = async (executablePath) => {
@@ -183,97 +217,96 @@ ${remediation}`,
183
217
  return rethrowAfterBrowserCleanup(chromeBrowser, err);
184
218
  }
185
219
  }
220
+ function seekInPage(t, fallbackToBridgeAndTimelines, exactTime, skipDraws) {
221
+ const getProperty = (target, key) => {
222
+ if ((typeof target !== "object" || target === null) && typeof target !== "function") {
223
+ return void 0;
224
+ }
225
+ return Reflect.get(target, key);
226
+ };
227
+ const call = (fn, receiver, args) => {
228
+ if (typeof fn !== "function") return false;
229
+ Reflect.apply(fn, receiver, args);
230
+ return true;
231
+ };
232
+ const player = Reflect.get(window, "__player");
233
+ if (!player && !fallbackToBridgeAndTimelines) return;
234
+ const safe = Math.max(0, Number(t) || 0);
235
+ const renderSeek = getProperty(player, "renderSeek");
236
+ const playerSeek = getProperty(player, "seek");
237
+ const hf = Reflect.get(window, "__hf");
238
+ const bridgeSeek = getProperty(hf, "seek");
239
+ const gsap = Reflect.get(window, "gsap");
240
+ const ticker = getProperty(gsap, "ticker");
241
+ const seekTo = (time) => {
242
+ if (call(renderSeek, player, exactTime ? [time, { exact: true }] : [time])) {
243
+ } else if (fallbackToBridgeAndTimelines && call(bridgeSeek, hf, [time])) {
244
+ } else if (call(playerSeek, player, [time])) {
245
+ } else if (fallbackToBridgeAndTimelines) {
246
+ const timelines = Reflect.get(window, "__timelines");
247
+ if (typeof timelines === "object" && timelines !== null) {
248
+ for (const key of Object.keys(timelines)) {
249
+ const timeline = Reflect.get(timelines, key);
250
+ call(getProperty(timeline, "pause"), timeline, []);
251
+ call(getProperty(timeline, "seek"), timeline, [time]);
252
+ }
253
+ }
254
+ }
255
+ call(getProperty(ticker, "tick"), ticker, []);
256
+ };
257
+ const gateSlot = /* @__PURE__ */ Symbol.for("hyperframes.webglDrawGate");
258
+ let gate = Reflect.get(window, gateSlot);
259
+ if (skipDraws && !gate) {
260
+ const installed = { skip: false, skipped: false };
261
+ for (const name of ["WebGLRenderingContext", "WebGL2RenderingContext"]) {
262
+ const proto = getProperty(Reflect.get(window, name), "prototype");
263
+ if (!proto) continue;
264
+ for (const method of [
265
+ "clear",
266
+ "drawArrays",
267
+ "drawElements",
268
+ "drawArraysInstanced",
269
+ "drawElementsInstanced",
270
+ "drawRangeElements",
271
+ "blitFramebuffer"
272
+ ]) {
273
+ const draw = getProperty(proto, method);
274
+ if (typeof draw !== "function") continue;
275
+ Reflect.set(proto, method, function(...args) {
276
+ if (!installed.skip) return Reflect.apply(draw, this, args);
277
+ installed.skipped = true;
278
+ return void 0;
279
+ });
280
+ }
281
+ }
282
+ Reflect.set(window, gateSlot, installed);
283
+ gate = installed;
284
+ }
285
+ const seekWithoutDraws = (time) => {
286
+ if (!gate) return seekTo(time);
287
+ gate.skip = true;
288
+ try {
289
+ seekTo(time);
290
+ } finally {
291
+ gate.skip = false;
292
+ }
293
+ };
294
+ if (skipDraws) {
295
+ seekWithoutDraws(safe);
296
+ return;
297
+ }
298
+ if (gate?.skipped) {
299
+ seekWithoutDraws(safe >= 1e-3 ? safe - 1e-3 : safe + 1e-3);
300
+ gate.skipped = false;
301
+ }
302
+ seekTo(safe);
303
+ }
186
304
  async function seekCompositionTimeline(page, timeSeconds, options = {}) {
187
305
  if (options.waitForPreferredSeekTargetMs !== void 0) {
188
306
  await waitForPreferredSeekTarget(page, options.waitForPreferredSeekTargetMs);
189
307
  }
190
308
  await page.evaluate(
191
- // Serialized into the page; the seek-target cascade must stay one function.
192
- // fallow-ignore-next-line complexity
193
- (t, fallbackToBridgeAndTimelines, exactTime, skipDraws) => {
194
- const getProperty = (target, key) => {
195
- if ((typeof target !== "object" || target === null) && typeof target !== "function") {
196
- return void 0;
197
- }
198
- return Reflect.get(target, key);
199
- };
200
- const call = (fn, receiver, args) => {
201
- if (typeof fn !== "function") return false;
202
- Reflect.apply(fn, receiver, args);
203
- return true;
204
- };
205
- const player = Reflect.get(window, "__player");
206
- if (!player && !fallbackToBridgeAndTimelines) return;
207
- const safe = Math.max(0, Number(t) || 0);
208
- const renderSeek = getProperty(player, "renderSeek");
209
- const playerSeek = getProperty(player, "seek");
210
- const hf = Reflect.get(window, "__hf");
211
- const bridgeSeek = getProperty(hf, "seek");
212
- const gsap = Reflect.get(window, "gsap");
213
- const ticker = getProperty(gsap, "ticker");
214
- const seekTo = (time) => {
215
- if (call(renderSeek, player, exactTime ? [time, { exact: true }] : [time])) {
216
- } else if (fallbackToBridgeAndTimelines && call(bridgeSeek, hf, [time])) {
217
- } else if (call(playerSeek, player, [time])) {
218
- } else if (fallbackToBridgeAndTimelines) {
219
- const timelines = Reflect.get(window, "__timelines");
220
- if (typeof timelines === "object" && timelines !== null) {
221
- for (const key of Object.keys(timelines)) {
222
- const timeline = Reflect.get(timelines, key);
223
- call(getProperty(timeline, "pause"), timeline, []);
224
- call(getProperty(timeline, "seek"), timeline, [time]);
225
- }
226
- }
227
- }
228
- call(getProperty(ticker, "tick"), ticker, []);
229
- };
230
- const gateSlot = /* @__PURE__ */ Symbol.for("hyperframes.webglDrawGate");
231
- let gate = Reflect.get(window, gateSlot);
232
- if (skipDraws && !gate) {
233
- const installed = { skip: false, skipped: false };
234
- for (const name of ["WebGLRenderingContext", "WebGL2RenderingContext"]) {
235
- const proto = getProperty(Reflect.get(window, name), "prototype");
236
- if (!proto) continue;
237
- for (const method of [
238
- "clear",
239
- "drawArrays",
240
- "drawElements",
241
- "drawArraysInstanced",
242
- "drawElementsInstanced",
243
- "drawRangeElements",
244
- "blitFramebuffer"
245
- ]) {
246
- const draw = getProperty(proto, method);
247
- if (typeof draw !== "function") continue;
248
- Reflect.set(proto, method, function(...args) {
249
- if (!installed.skip) return Reflect.apply(draw, this, args);
250
- installed.skipped = true;
251
- return void 0;
252
- });
253
- }
254
- }
255
- Reflect.set(window, gateSlot, installed);
256
- gate = installed;
257
- }
258
- const seekWithoutDraws = (time) => {
259
- if (!gate) return seekTo(time);
260
- gate.skip = true;
261
- try {
262
- seekTo(time);
263
- } finally {
264
- gate.skip = false;
265
- }
266
- };
267
- if (skipDraws) {
268
- seekWithoutDraws(safe);
269
- return;
270
- }
271
- if (gate?.skipped) {
272
- seekWithoutDraws(safe >= 1e-3 ? safe - 1e-3 : safe + 1e-3);
273
- gate.skipped = false;
274
- }
275
- seekTo(safe);
276
- },
309
+ seekInPage,
277
310
  timeSeconds,
278
311
  options.fallbackToBridgeAndTimelines === true,
279
312
  options.exactTime === true,
@@ -289,6 +322,7 @@ async function seekCompositionTimeline(page, timeSeconds, options = {}) {
289
322
  { videoFrames: options.waitForVideoFrames !== false }
290
323
  );
291
324
  const animationFrameSettle = options.animationFrameSettle ?? "race";
325
+ const waitForFontsMs = options.waitForFontsMs ?? DEFAULT_POST_SEEK_FONT_WAIT_MS;
292
326
  if (animationFrameSettle === "race") {
293
327
  await page.evaluate(`new Promise(function(r) {
294
328
  var settled = false;
@@ -296,17 +330,17 @@ async function seekCompositionTimeline(page, timeSeconds, options = {}) {
296
330
  window.setTimeout(finish, 100);
297
331
  requestAnimationFrame(function() { requestAnimationFrame(finish); });
298
332
  })`);
299
- } else if (animationFrameSettle === "double") {
333
+ } else if (animationFrameSettle === "double" && !(waitForFontsMs > 0)) {
300
334
  await page.evaluate(
301
335
  () => new Promise(
302
336
  (resolveFrame) => requestAnimationFrame(() => requestAnimationFrame(() => resolveFrame()))
303
337
  )
304
338
  );
305
339
  }
306
- const waitForFontsMs = options.waitForFontsMs ?? DEFAULT_POST_SEEK_FONT_WAIT_MS;
307
340
  if (waitForFontsMs > 0) {
308
- await waitForCompositionFonts(page, waitForFontsMs);
341
+ await waitForCompositionFonts(page, waitForFontsMs, animationFrameSettle === "double" ? 2 : 1);
309
342
  }
343
+ if (options.waitForImagesMs) await waitForCompositionImages(page, options.waitForImagesMs);
310
344
  if (options.settleMs !== void 0) {
311
345
  const settleMs = Math.max(0, options.settleMs);
312
346
  await new Promise((resolveSettle) => setTimeout(resolveSettle, settleMs));
@@ -328,28 +362,48 @@ async function waitForPreferredSeekTarget(page, timeoutMs = PREFERRED_SEEK_TARGE
328
362
  } catch {
329
363
  }
330
364
  }
331
- async function waitForCompositionFonts(page, timeoutMs) {
332
- await page.evaluate((ms) => {
333
- const fonts = Reflect.get(document, "fonts");
334
- if (typeof fonts !== "object" || fonts === null) return Promise.resolve();
335
- void document.body?.offsetHeight;
336
- return new Promise((resolveWait) => {
365
+ async function waitForCompositionImages(page, timeoutMs) {
366
+ await page.evaluate(
367
+ (ms) => new Promise((resolveWait) => {
337
368
  const deadline = setTimeout(resolveWait, ms);
338
- requestAnimationFrame(() => {
339
- const status = Reflect.get(fonts, "status");
340
- const ready = Reflect.get(fonts, "ready");
341
- if (status !== "loading" || !ready) {
342
- clearTimeout(deadline);
343
- resolveWait();
344
- return;
345
- }
346
- Promise.resolve(ready).then(() => {
347
- clearTimeout(deadline);
348
- resolveWait();
369
+ void Promise.all(
370
+ Array.from(document.images, (image) => image.decode().catch(() => {
371
+ }))
372
+ ).then(() => {
373
+ clearTimeout(deadline);
374
+ resolveWait();
375
+ });
376
+ }),
377
+ timeoutMs
378
+ );
379
+ }
380
+ async function waitForCompositionFonts(page, timeoutMs, frames = 1) {
381
+ await page.evaluate(
382
+ ({ ms, frames: count }) => {
383
+ const fonts = Reflect.get(document, "fonts");
384
+ void document.body?.offsetHeight;
385
+ const afterFrames = (left, then) => {
386
+ requestAnimationFrame(() => left > 1 ? afterFrames(left - 1, then) : then());
387
+ };
388
+ return new Promise((resolveWait) => {
389
+ const deadline = setTimeout(resolveWait, ms);
390
+ afterFrames(count, () => {
391
+ const status = fonts ? Reflect.get(fonts, "status") : void 0;
392
+ const ready = fonts ? Reflect.get(fonts, "ready") : void 0;
393
+ if (status !== "loading" || !ready) {
394
+ clearTimeout(deadline);
395
+ resolveWait();
396
+ return;
397
+ }
398
+ Promise.resolve(ready).then(() => {
399
+ clearTimeout(deadline);
400
+ resolveWait();
401
+ });
349
402
  });
350
403
  });
351
- });
352
- }, timeoutMs).catch(() => {
404
+ },
405
+ { ms: timeoutMs, frames }
406
+ ).catch(() => {
353
407
  });
354
408
  }
355
409
  var ZOOM_REGION_PATTERN = /^-?\d+(?:\.\d+)?(?:,-?\d+(?:\.\d+)?){3}$/;
@@ -446,11 +500,13 @@ async function answerPageInProcess(page, url, answer) {
446
500
 
447
501
  export {
448
502
  AUDIT_SEEK_OPTIONS,
503
+ SCREENSHOT_SEEK_OPTIONS,
449
504
  DENSE_GEOMETRY_SEEK_OPTIONS,
450
505
  resolveCliChromeGpuMode,
451
506
  waitForRuntimeReady,
452
507
  installPageFunctionGuard,
453
508
  openSettledCompositionPage,
509
+ seekInPage,
454
510
  seekCompositionTimeline,
455
511
  waitForPreferredSeekTarget,
456
512
  waitForCompositionFonts,
@@ -7,13 +7,13 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  parseFeedbackRating,
9
9
  trackRenderFeedback
10
- } from "./chunk-BYRHCRU3.js";
10
+ } from "./chunk-PBKOURSI.js";
11
11
  import {
12
12
  shouldTrack
13
- } from "./chunk-ETPPGNJB.js";
13
+ } from "./chunk-W5USVP6Z.js";
14
14
  import {
15
15
  detectAgentRuntime
16
- } from "./chunk-QWQ6GQTI.js";
16
+ } from "./chunk-T6AGUTZJ.js";
17
17
  import {
18
18
  c
19
19
  } from "./chunk-ZTZA4UWZ.js";
@@ -83,8 +83,8 @@ async function maybePromptRenderFeedback(opts) {
83
83
  async function getDoctorSummary() {
84
84
  try {
85
85
  const [{ getSystemMeta }, { findFFmpeg }] = await Promise.all([
86
- import("./system-VRXC6S4A.js"),
87
- import("./ffmpeg-7BYARPLM.js")
86
+ import("./system-7F3UEHQT.js"),
87
+ import("./ffmpeg-QIYSAPHO.js")
88
88
  ]);
89
89
  const sys = getSystemMeta();
90
90
  const parts = [