hyperframes 0.8.166 → 0.8.168

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 (166) hide show
  1. package/dist/{add-MCSKPN2J.js → add-VCX3UE2B.js} +13 -13
  2. package/dist/{animatedGifPrep-3HO4C3YA.js → animatedGifPrep-TWD5BNVK.js} +8 -8
  3. package/dist/api.js +14 -14
  4. package/dist/{asset-XVO3H37J.js → asset-BBJ3GAL7.js} +2 -2
  5. package/dist/{assetCataloger-RHSKUXJV.js → assetCataloger-S47GINRQ.js} +8 -8
  6. package/dist/{audio-G4CPBGIP.js → audio-MEDCANA3.js} +15 -15
  7. package/dist/{auth-GRFFMOB5.js → auth-LZYMCNTB.js} +1 -1
  8. package/dist/{autoUpdate-CHDEIEGO.js → autoUpdate-AXTW2NKX.js} +2 -2
  9. package/dist/{backgroundChecks-VAZLRTGT.js → backgroundChecks-3YDYYI3D.js} +3 -3
  10. package/dist/backgroundChecksWorker.js +3 -3
  11. package/dist/{batchRender-ILOPDVDM.js → batchRender-UDE7TOKY.js} +4 -4
  12. package/dist/{beats-B3BZKIWQ.js → beats-HHXMPMGT.js} +5 -5
  13. package/dist/{benchmark-OAPEWN3B.js → benchmark-2BY7PBAP.js} +9 -9
  14. package/dist/{browser-IG6NUNE2.js → browser-CXB4KTJP.js} +3 -3
  15. package/dist/{bundleWithLocalizedFonts-ZUM7SYTY.js → bundleWithLocalizedFonts-M7CRHOS7.js} +2 -2
  16. package/dist/{capture-4A3RN6PP.js → capture-PRTE4Z7E.js} +3 -3
  17. package/dist/{capture-XXKHHDGW.js → capture-WHG37ZLF.js} +19 -53
  18. package/dist/{captureTimeout-PA4FYWT5.js → captureTimeout-K2JNVVCI.js} +1 -1
  19. package/dist/{catalog-OT6XSKQS.js → catalog-WRM2373Z.js} +13 -13
  20. package/dist/{catch-up-JEU6V6DR.js → catch-up-WHLD6E5F.js} +4 -4
  21. package/dist/{check-6FSM25VP.js → check-R5E7WLKF.js} +112 -56
  22. package/dist/{checkBrowser-MECIATAM.js → checkBrowser-Y4CZVGIV.js} +42 -33
  23. package/dist/chunk-2F7S7OK2.js +20 -0
  24. package/dist/{chunk-APTXSODN.js → chunk-2GSGFDEP.js} +5 -5
  25. package/dist/{chunk-OBZWOV4Q.js → chunk-4CIMRQQY.js} +11 -5
  26. package/dist/{chunk-EUCDNWPK.js → chunk-4LXK7TOM.js} +7 -7
  27. package/dist/{chunk-FALELQTO.js → chunk-4PHDDZVL.js} +37 -15
  28. package/dist/{chunk-F67VJSSH.js → chunk-4WPRJ7ID.js} +1 -1
  29. package/dist/{chunk-CQFNLIGE.js → chunk-54MI3SGP.js} +3 -3
  30. package/dist/{chunk-WC6QG6WU.js → chunk-5VGEWXJL.js} +2 -2
  31. package/dist/{chunk-SZDHUSQ5.js → chunk-AQZZZTFL.js} +2 -2
  32. package/dist/{chunk-7PYUADWL.js → chunk-ATCB4PMO.js} +1 -1
  33. package/dist/{chunk-KX4VIWIV.js → chunk-ATOXD5VV.js} +1 -1
  34. package/dist/{chunk-HTDDV7CM.js → chunk-BC2XZL6O.js} +2 -2
  35. package/dist/{chunk-TPLNKI23.js → chunk-BOT7PGM5.js} +2 -2
  36. package/dist/{chunk-GDJGBAV6.js → chunk-BTCUP5ZY.js} +2 -2
  37. package/dist/{chunk-HLCB2VAN.js → chunk-BV2NH7ZA.js} +1 -1
  38. package/dist/{chunk-BTXLF6DV.js → chunk-BWFUUGIZ.js} +1 -1
  39. package/dist/{chunk-ZUQ2K4YF.js → chunk-C3WPYYGK.js} +1 -1
  40. package/dist/{chunk-BSXI5VWK.js → chunk-CAHSX6IW.js} +26 -21
  41. package/dist/{chunk-UKTXHF3Q.js → chunk-CDDIEZ4D.js} +13 -11
  42. package/dist/{chunk-AL7XYJTK.js → chunk-DO3UPPO4.js} +2 -2
  43. package/dist/{chunk-6U47Q57N.js → chunk-E7CIMKJS.js} +1 -1
  44. package/dist/{chunk-CBNI34SD.js → chunk-EEP5Y5IE.js} +1 -1
  45. package/dist/{chunk-CABYCNUK.js → chunk-EKEK3GOB.js} +3 -3
  46. package/dist/{chunk-L7PJO2A4.js → chunk-EW2QBTYO.js} +23 -17
  47. package/dist/{chunk-WP4QEC2Q.js → chunk-EXMTTXKQ.js} +2 -2
  48. package/dist/{chunk-DOONKIF5.js → chunk-FA3TWKZO.js} +2 -2
  49. package/dist/{chunk-I3B4A3LF.js → chunk-HL6GWREP.js} +1 -1
  50. package/dist/{chunk-BTTGDEGI.js → chunk-ID7B7NGN.js} +1 -1
  51. package/dist/{chunk-KPPC3C4I.js → chunk-KDC5D5VM.js} +25 -21
  52. package/dist/{chunk-ATF6UESJ.js → chunk-LGCHE2F4.js} +1 -1
  53. package/dist/{chunk-DDEFEMA3.js → chunk-LUSWL6OJ.js} +2 -2
  54. package/dist/{chunk-PORNXOQP.js → chunk-LZGRJDNJ.js} +1 -1
  55. package/dist/{chunk-3QATT3QF.js → chunk-M4N6IHCQ.js} +4 -4
  56. package/dist/{chunk-ULJB5UY4.js → chunk-MD4S2RXW.js} +13 -17
  57. package/dist/{chunk-2WYDNKVV.js → chunk-MOJKJ4K4.js} +4 -4
  58. package/dist/{chunk-4UNBVCLJ.js → chunk-N7QCMEQG.js} +2844 -2674
  59. package/dist/{chunk-BIOWX4AM.js → chunk-NT3WPYAU.js} +3 -3
  60. package/dist/{chunk-QNZQTITL.js → chunk-NYIKKCMC.js} +1 -1
  61. package/dist/{chunk-ZIL7S3L6.js → chunk-O7BABHM4.js} +1 -1
  62. package/dist/{chunk-THA3FI4Z.js → chunk-OQGORCT3.js} +2 -2
  63. package/dist/{chunk-3VGU2SH7.js → chunk-OYLO6TYK.js} +8 -1
  64. package/dist/{chunk-2742O5DO.js → chunk-PLWORQFC.js} +38 -34
  65. package/dist/{chunk-ZH3TWH4D.js → chunk-PYSGYMM4.js} +3 -3
  66. package/dist/chunk-QE7XLLGT.js +3803 -0
  67. package/dist/{chunk-AKBFKGJM.js → chunk-QKJ4KGNR.js} +1 -1
  68. package/dist/{chunk-W3SLIE72.js → chunk-RG66EU4L.js} +10 -10
  69. package/dist/{chunk-AWNBM3MZ.js → chunk-RGHQID2E.js} +3 -3
  70. package/dist/{chunk-MMSCLNCJ.js → chunk-SYKPCN32.js} +8 -2
  71. package/dist/{chunk-TIZRYBKL.js → chunk-TW7H5CJO.js} +2 -2
  72. package/dist/{chunk-FLTPIUGU.js → chunk-UWQL2MP4.js} +100 -2
  73. package/dist/{chunk-TAANFVLO.js → chunk-VTBME36F.js} +1 -1
  74. package/dist/{chunk-25CSBTM2.js → chunk-XOODFU75.js} +1 -1
  75. package/dist/{chunk-WPNE5NEP.js → chunk-XR3XDG7V.js} +19 -5
  76. package/dist/{chunk-ALLKNYC3.js → chunk-YMS5FOMC.js} +31 -18
  77. package/dist/{chunk-V652CBKA.js → chunk-YTZA25TZ.js} +1 -1
  78. package/dist/{chunk-B4VG7PGX.js → chunk-YULVV525.js} +1 -1
  79. package/dist/{clean-QWXJ5QJQ.js → clean-UPXYD6VX.js} +15 -15
  80. package/dist/cli.js +53 -53
  81. package/dist/{cloud-UCQ33ODM.js → cloud-74GU7KDD.js} +4 -4
  82. package/dist/{cloudrun-2NQXQI4T.js → cloudrun-KHMVQL7C.js} +16 -11
  83. package/dist/commands/layout-audit.browser.js +16 -1
  84. package/dist/{compare-ZGW25GT6.js → compare-BG77ZXYF.js} +29 -27
  85. package/dist/{compiler-VQ7QYOSB.js → compiler-OSQ4L7FP.js} +5 -5
  86. package/dist/{component-W2QGYUEG.js → component-34PVECJG.js} +3 -3
  87. package/dist/{compositions-DOIAPDMU.js → compositions-KCVIKKSR.js} +12 -12
  88. package/dist/{delete-PCSBLAVX.js → delete-NU2ENZYQ.js} +2 -2
  89. package/dist/{deploy-5G4Z6LPA.js → deploy-4MK3Y67M.js} +1 -0
  90. package/dist/{deterministicFonts-LNNVHVS2.js → deterministicFonts-KXVO7QEL.js} +3 -3
  91. package/dist/{dist-6TKXILZL.js → dist-3VKMLNXT.js} +7 -3
  92. package/dist/{dist-ROVMAL74.js → dist-OTCFZEKF.js} +2 -2
  93. package/dist/{doctor-2FMEUV4B.js → doctor-GVELHIHI.js} +10 -10
  94. package/dist/{events-V2KF4OKH.js → events-E6CVR42M.js} +2 -2
  95. package/dist/{events-QPODC7BK.js → events-UP3IQXPM.js} +3 -3
  96. package/dist/{feedback-NC2YHCYF.js → feedback-IRYQ4YKX.js} +7 -7
  97. package/dist/{figma-RP23MXHX.js → figma-BLQBHAPG.js} +3 -3
  98. package/dist/fontLocalizeCli.js +14 -14
  99. package/dist/{get-FIWRIPCT.js → get-HESG62RX.js} +2 -2
  100. package/dist/{gpuPolicy-4YD2BS3P.js → gpuPolicy-CHXUX2ZT.js} +8 -8
  101. package/dist/{grade-compare-HVLIDLEO.js → grade-compare-ZDJMJUYY.js} +29 -27
  102. package/dist/{help-EDA6FXKG.js → help-2BQBFF4Z.js} +1 -1
  103. package/dist/{history-7Z763GGS.js → history-4IZQ6NRV.js} +9 -9
  104. package/dist/hyperframe-runtime.js +72 -70
  105. package/dist/hyperframe.manifest.json +1 -1
  106. package/dist/hyperframe.runtime.iife.js +72 -70
  107. package/dist/hyperframes-player.global.js +3 -3
  108. package/dist/{info-OHDJXJKQ.js → info-JNGAI3JU.js} +8 -8
  109. package/dist/{init-BKYY2CXY.js → init-ZQO6G5C7.js} +23 -23
  110. package/dist/{inspect-CX3AFG2K.js → inspect-DWMKJEVE.js} +30 -28
  111. package/dist/{installer-5YWMYX5C.js → installer-UKZT4SKK.js} +6 -6
  112. package/dist/{keyframes-LBK4Y2T2.js → keyframes-FC273E5N.js} +6 -6
  113. package/dist/{lambda-HIC2Z3GQ.js → lambda-GSZCV77P.js} +31 -18
  114. package/dist/{layout-NSIMPYKJ.js → layout-ASSCBJCO.js} +30 -28
  115. package/dist/{lint-YH6HNXVM.js → lint-PSCEVVNL.js} +8 -8
  116. package/dist/{lintProject-BGDYHF3F.js → lintProject-PXB5Y6TX.js} +2 -2
  117. package/dist/{list-KZXJYWKZ.js → list-KO4N2VJL.js} +2 -2
  118. package/dist/{login-CBNG6TFS.js → login-ZJEBRFV5.js} +4 -4
  119. package/dist/{media-treatment-TZTGSXQW.js → media-treatment-HGHLLZR3.js} +11 -11
  120. package/dist/{models-6PJD6KNN.js → models-NTAVDCAV.js} +11 -11
  121. package/dist/{motionShot-ATCNOMLE.js → motionShot-SJENYTRO.js} +19 -17
  122. package/dist/{normalize-audio-JYRAP3I5.js → normalize-audio-PQIC7IPK.js} +4 -4
  123. package/dist/{open-2IWIMS7X.js → open-EI7UEAZZ.js} +4 -4
  124. package/dist/{parakeetRunner-4RECECZC.js → parakeetRunner-7SDEI3IZ.js} +11 -11
  125. package/dist/{pipeline-W5ON6TOA.js → pipeline-EXHHCUE7.js} +8 -8
  126. package/dist/{play-UWEP74BP.js → play-Y4EMM2OJ.js} +19 -19
  127. package/dist/{present-LBW3UKGD.js → present-LFMGQGX6.js} +15 -15
  128. package/dist/{preview-ZJVWEZDQ.js → preview-EYQG7L6X.js} +18 -18
  129. package/dist/{producer-STNCPEUU.js → producer-FKOEAHJW.js} +1 -1
  130. package/dist/{projectConfig-QIZWOCOO.js → projectConfig-SXW3QMZE.js} +8 -8
  131. package/dist/{publication-YNDABZNC.js → publication-ZC4LDEXQ.js} +3 -3
  132. package/dist/{publish-4UNNKLPE.js → publish-4ZCLHA5W.js} +10 -10
  133. package/dist/{remove-background-77IFDTYA.js → remove-background-IGDRS2QV.js} +9 -9
  134. package/dist/{render-5LL5JCRH.js → render-QJCBJQOM.js} +38 -30
  135. package/dist/{render-VFPSVKGX.js → render-TA3DG3LZ.js} +9 -9
  136. package/dist/{render-NUZPUBQO.js → render-ZN777RDD.js} +11 -6
  137. package/dist/{render-batch-QU7ZWEJZ.js → render-batch-2JQNFAL4.js} +10 -6
  138. package/dist/renderSetupWorker.js +2 -2
  139. package/dist/{resolver-SPF7J6MA.js → resolver-JZF5G6YC.js} +5 -5
  140. package/dist/{screenshotCapture-3JXXUZND.js → screenshotCapture-XAYELJK7.js} +1 -1
  141. package/dist/{sherpa-XPHQUCHY.js → sherpa-MDVSUF6Y.js} +10 -10
  142. package/dist/skills/hyperframes/references/skill-lifecycle.md +2 -0
  143. package/dist/{skills-FVEEVJS7.js → skills-JVNMX37H.js} +30 -5
  144. package/dist/{skillsUpdateCheck-C64VYL4I.js → skillsUpdateCheck-KNTQFGOI.js} +3 -3
  145. package/dist/{snapshot-IMGLO7XP.js → snapshot-RDQTFIPX.js} +35 -33
  146. package/dist/{src-DG7XW5WW.js → src-5XO7KBBL.js} +7 -7
  147. package/dist/{src-ZUYRJWHE.js → src-ZPEZRIUC.js} +13 -13
  148. package/dist/{staticProjectServer-H6GKJPVR.js → staticProjectServer-RLERPIY6.js} +15 -15
  149. package/dist/studio/assets/{hyperframes-player-BhRLDR30.js → hyperframes-player-mYPt9XVX.js} +1 -1
  150. package/dist/studio/assets/{index-DQ_I6X0d.js → index-B-v5xQjD.js} +97 -97
  151. package/dist/studio/assets/{index-CCRXiiFo.js → index-DtHmIKM0.js} +1 -1
  152. package/dist/studio/index.html +1 -1
  153. package/dist/{studio-api-72FF3CQG.js → studio-api-4INCUOCU.js} +9 -9
  154. package/dist/{studioServer-2YBG4HV2.js → studioServer-DMDE7IZU.js} +54 -52
  155. package/dist/{telemetry-DCFWJC6H.js → telemetry-4Y5DYI6H.js} +3 -3
  156. package/dist/{timeline-IN6TQ6AQ.js → timeline-XJRKELVE.js} +37 -24
  157. package/dist/{tokens-2ELEYMMJ.js → tokens-G4VKTABI.js} +2 -2
  158. package/dist/{transcribe-GGNTXYJS.js → transcribe-JRSQRPVH.js} +9 -9
  159. package/dist/{transcribe-KELKHOAQ.js → transcribe-Y46B2ZVD.js} +15 -15
  160. package/dist/{updateCheck-IK3VKZ2E.js → updateCheck-NGYDWGQL.js} +2 -2
  161. package/dist/{upgrade-JND5YLA5.js → upgrade-M2LQP5S7.js} +2 -2
  162. package/dist/{urlDownloader-XCHPVCAE.js → urlDownloader-UFDUP3VF.js} +7 -7
  163. package/dist/{validate-4PJYWIXX.js → validate-B3AUFCC5.js} +24 -22
  164. package/dist/{video-53CDAVK2.js → video-WLCNVSVU.js} +8 -8
  165. package/package.json +1 -1
  166. package/dist/chunk-LGAKMIEX.js +0 -3795
@@ -8,7 +8,7 @@ import {
8
8
  DEFAULT_REGISTRY_URL,
9
9
  fetchItemManifest,
10
10
  fetchRegistryManifest
11
- } from "./chunk-BTTGDEGI.js";
11
+ } from "./chunk-ID7B7NGN.js";
12
12
 
13
13
  // src/registry/resolver.ts
14
14
  function defaultWarn(message) {
@@ -9,17 +9,17 @@ import {
9
9
  resolveCliChromeGpuMode,
10
10
  seekCompositionTimeline,
11
11
  waitForRuntimeReady
12
- } from "./chunk-L7PJO2A4.js";
12
+ } from "./chunk-EW2QBTYO.js";
13
13
  import {
14
14
  launchManagedBrowser,
15
15
  resolveManagedGpuMode
16
- } from "./chunk-FLTPIUGU.js";
16
+ } from "./chunk-UWQL2MP4.js";
17
17
  import {
18
18
  resolveCompositionViewportFromHtml
19
19
  } from "./chunk-FH7WODJH.js";
20
20
  import {
21
21
  resolveProject
22
- } from "./chunk-ATF6UESJ.js";
22
+ } from "./chunk-LGCHE2F4.js";
23
23
  import {
24
24
  defineCommand
25
25
  } from "./chunk-S3S4TGEH.js";
@@ -33,7 +33,7 @@ import {
33
33
  import {
34
34
  printDeprecationNotice,
35
35
  withMeta
36
- } from "./chunk-ZIL7S3L6.js";
36
+ } from "./chunk-O7BABHM4.js";
37
37
  import {
38
38
  decodeWellFormedEscapes
39
39
  } from "./chunk-BSQ7XANM.js";
@@ -228,7 +228,7 @@ function extractCompositionErrorsFromLint(lintResult) {
228
228
  async function localizeRemoteAssets(html) {
229
229
  let dir;
230
230
  try {
231
- const { loadProducer } = await import("./producer-STNCPEUU.js");
231
+ const { loadProducer } = await import("./producer-FKOEAHJW.js");
232
232
  const { localizeRemoteMediaSources, localizeRemoteImageSources, localizeRemoteFontFaces } = await loadProducer();
233
233
  dir = mkdtempSync(join(tmpdir(), "hf-validate-assets-"));
234
234
  const assetDir = dir;
@@ -249,10 +249,10 @@ async function localizeRemoteAssets(html) {
249
249
  }
250
250
  async function validateInBrowser(project, opts) {
251
251
  const projectDir = project.dir;
252
- const { bundleToSingleHtml } = await import("./compiler-VQ7QYOSB.js");
252
+ const { bundleToSingleHtml } = await import("./compiler-OSQ4L7FP.js");
253
253
  const { ensureBrowser } = await import("./manager-HEUPD2YB.js");
254
- const { serveStaticProjectHtml } = await import("./staticProjectServer-H6GKJPVR.js");
255
- const { lintProject } = await import("./lintProject-BGDYHF3F.js");
254
+ const { serveStaticProjectHtml } = await import("./staticProjectServer-RLERPIY6.js");
255
+ const { lintProject } = await import("./lintProject-PXB5Y6TX.js");
256
256
  const lintResult = await lintProject(projectDir);
257
257
  const compositionErrors = extractCompositionErrorsFromLint(lintResult);
258
258
  const html = await bundleToSingleHtml(projectDir);
@@ -273,9 +273,9 @@ async function validateInBrowser(project, opts) {
273
273
  try {
274
274
  const browser = await ensureBrowser();
275
275
  const puppeteer = await import("puppeteer-core");
276
- const { buildChromeArgs, analyzeClipMediaFit } = await import("./src-DG7XW5WW.js");
276
+ const { buildChromeArgs, analyzeClipMediaFit } = await import("./src-5XO7KBBL.js");
277
277
  const requestedGpuMode = resolveCliChromeGpuMode();
278
- const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu, resolveLocalWebGpu } = await import("./gpuPolicy-4YD2BS3P.js");
278
+ const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu, resolveLocalWebGpu } = await import("./gpuPolicy-CHXUX2ZT.js");
279
279
  const resolvedGpuMode = await resolveManagedGpuMode(requestedGpuMode, browser.executablePath);
280
280
  const requiresWebGpu = compositionRequiresWebGpu(html);
281
281
  const { gpuConfig, softwareWebGpu } = resolveLocalWebGpu(resolvedGpuMode, requiresWebGpu);
@@ -49,9 +49,9 @@ function isProtocolEvaluateTimeoutError(err) {
49
49
  function isDegradableEvaluateTimeoutError(err) {
50
50
  return isStageBudgetTimeoutError(err) || isProtocolEvaluateTimeoutError(err);
51
51
  }
52
- async function withRemainingBudget(work, remainingMs, label) {
52
+ async function withRemainingBudget(work, remainingMs, label, timeoutError = () => new StageBudgetTimeoutError(label, Math.max(0, remainingMs))) {
53
53
  if (!(remainingMs > 0)) {
54
- throw new StageBudgetTimeoutError(label, Math.max(0, remainingMs));
54
+ throw timeoutError();
55
55
  }
56
56
  let timer;
57
57
  try {
@@ -59,7 +59,7 @@ async function withRemainingBudget(work, remainingMs, label) {
59
59
  work,
60
60
  new Promise((_resolve, reject) => {
61
61
  timer = setTimeout(() => {
62
- reject(new StageBudgetTimeoutError(label, remainingMs));
62
+ reject(timeoutError());
63
63
  }, remainingMs);
64
64
  })
65
65
  ]);
@@ -9,7 +9,7 @@ import {
9
9
  parseStrictFiniteTimingNumber,
10
10
  resolveNaturalMediaTimelineDuration,
11
11
  resolveTimedImageDurationSeconds
12
- } from "./chunk-LGAKMIEX.js";
12
+ } from "./chunk-QE7XLLGT.js";
13
13
  import {
14
14
  CANVAS_DIMENSIONS,
15
15
  isCompositionElement,
@@ -17,7 +17,7 @@ import {
17
17
  isTextElement,
18
18
  keyframesToGsapAnimations,
19
19
  serializeGsapAnimations
20
- } from "./chunk-ALLKNYC3.js";
20
+ } from "./chunk-YMS5FOMC.js";
21
21
  import {
22
22
  COMPOSITION_ATTRIBUTES,
23
23
  parseStartExpression
@@ -120,6 +120,10 @@ function parseFpsWithDefault(input) {
120
120
  return { ok: true, value: { num: 30, den: 1 } };
121
121
  return parseFps(input);
122
122
  }
123
+ var DISTRIBUTED_FPS = [24, 25, 30, 60];
124
+ function isDistributedFps(value) {
125
+ return DISTRIBUTED_FPS.includes(value);
126
+ }
123
127
 
124
128
  // ../core/dist/templates/base.js
125
129
  function generateBaseHtml(resolution = "portrait") {
@@ -5551,6 +5555,8 @@ export {
5551
5555
  fpsToFfmpegArg,
5552
5556
  parseFps,
5553
5557
  parseFpsWithDefault,
5558
+ DISTRIBUTED_FPS,
5559
+ isDistributedFps,
5554
5560
  generateBaseHtml,
5555
5561
  getStageStyles,
5556
5562
  gsapCdnDist,
@@ -8,10 +8,10 @@ import {
8
8
  DEFAULT_VP9_CPU_USED,
9
9
  isHttpUrl,
10
10
  runFfmpeg
11
- } from "./chunk-BSXI5VWK.js";
11
+ } from "./chunk-CAHSX6IW.js";
12
12
  import {
13
13
  parseAnimatedGifMetadata
14
- } from "./chunk-MMSCLNCJ.js";
14
+ } from "./chunk-SYKPCN32.js";
15
15
  import {
16
16
  parseHTML
17
17
  } from "./chunk-SDYDNHEE.js";
@@ -4,9 +4,16 @@ 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
+ sandboxDeniedRemediation
9
+ } from "./chunk-2F7S7OK2.js";
7
10
  import {
8
11
  resolveCaptureBrowserGpuMode
9
- } from "./chunk-AL7XYJTK.js";
12
+ } from "./chunk-DO3UPPO4.js";
13
+ import {
14
+ isNavigationTimeoutError,
15
+ withRemainingBudget
16
+ } from "./chunk-RGHQID2E.js";
10
17
  import {
11
18
  requestCliExit
12
19
  } from "./chunk-PBN6GBJE.js";
@@ -84,6 +91,9 @@ async function launchManagedBrowser(puppeteer, options) {
84
91
  browsers.add(browser);
85
92
  child.once("exit", () => browsers.delete(browser));
86
93
  return browser;
94
+ } catch (error) {
95
+ const remediation = sandboxDeniedRemediation(normalizeErrorMessage(error));
96
+ throw remediation ? new Error(remediation, { cause: error }) : error;
87
97
  } finally {
88
98
  pending.delete(launch);
89
99
  }
@@ -157,11 +167,99 @@ async function closeBrowser(browser) {
157
167
  }
158
168
  }
159
169
 
170
+ // src/capture/navigateForCapture.ts
171
+ import { TimeoutError } from "puppeteer-core";
172
+ var NETWORK_IDLE_ATTEMPT_MS = 3e4;
173
+ function networkIdleAttemptTimeoutMs(totalTimeoutMs) {
174
+ return Math.min(NETWORK_IDLE_ATTEMPT_MS, Math.max(0, totalTimeoutMs));
175
+ }
176
+ async function navigateForCapture(page, url, totalTimeoutMs) {
177
+ const networkIdleTimeoutMs = networkIdleAttemptTimeoutMs(totalTimeoutMs);
178
+ try {
179
+ const response2 = await page.goto(url, {
180
+ waitUntil: "networkidle2",
181
+ timeout: networkIdleTimeoutMs
182
+ });
183
+ return {
184
+ response: response2,
185
+ waitUntil: "networkidle2",
186
+ networkIdleTimeoutMs,
187
+ fellBackFromNetworkIdle: false
188
+ };
189
+ } catch (err) {
190
+ if (!isNavigationTimeoutError(err) || networkIdleTimeoutMs >= totalTimeoutMs) {
191
+ throw err;
192
+ }
193
+ }
194
+ const fallbackTimeoutMs = totalTimeoutMs - networkIdleTimeoutMs;
195
+ const response = await page.goto(url, {
196
+ waitUntil: "domcontentloaded",
197
+ timeout: fallbackTimeoutMs
198
+ });
199
+ return {
200
+ response,
201
+ waitUntil: "domcontentloaded",
202
+ networkIdleTimeoutMs,
203
+ fellBackFromNetworkIdle: true
204
+ };
205
+ }
206
+ var PUPPETEER_LAUNCH_DEFAULT_TIMEOUT_MS = 3e4;
207
+ var SENT_OR_ANSWERED_WITHOUT_NETWORK = [
208
+ "Network.requestWillBeSentExtraInfo",
209
+ "Network.responseReceived"
210
+ ];
211
+ async function gotoWhenSent(page, url, timeoutMs, coldChromeFirstRequestTimeoutMs = PUPPETEER_LAUNCH_DEFAULT_TIMEOUT_MS) {
212
+ const cdp = await page.createCDPSession();
213
+ try {
214
+ await cdp.send("Network.enable");
215
+ const sent = documentRequestSent(cdp);
216
+ const navigation = page.goto(url, { waitUntil: "domcontentloaded", timeout: 0 });
217
+ const navigationAwaitedBelow = navigation.catch(() => void 0);
218
+ await withRemainingBudget(
219
+ Promise.race([sent, navigationAwaitedBelow]),
220
+ coldChromeFirstRequestTimeoutMs,
221
+ "sending the page request",
222
+ () => new TimeoutError(
223
+ `Navigation timeout: Chrome did not send the page request within ${coldChromeFirstRequestTimeoutMs} ms`
224
+ )
225
+ );
226
+ return await withRemainingBudget(
227
+ navigation,
228
+ timeoutMs,
229
+ "loading the page",
230
+ () => new TimeoutError(`Navigation timeout of ${timeoutMs} ms exceeded`)
231
+ );
232
+ } finally {
233
+ await cdp.detach().catch(() => void 0);
234
+ }
235
+ }
236
+ function documentRequestSent(cdp) {
237
+ const documents = /* @__PURE__ */ new Set();
238
+ const sent = /* @__PURE__ */ new Set();
239
+ return new Promise((resolve) => {
240
+ const settle = (requestId) => {
241
+ if (documents.has(requestId) && sent.has(requestId)) resolve();
242
+ };
243
+ cdp.on("Network.requestWillBeSent", ({ requestId, type }) => {
244
+ if (type === "Document") documents.add(requestId);
245
+ settle(requestId);
246
+ });
247
+ for (const event of SENT_OR_ANSWERED_WITHOUT_NETWORK) {
248
+ cdp.on(event, ({ requestId }) => {
249
+ sent.add(requestId);
250
+ settle(requestId);
251
+ });
252
+ }
253
+ });
254
+ }
255
+
160
256
  export {
161
257
  BrowserCleanupError,
162
258
  resolveManagedGpuMode,
163
259
  launchManagedBrowser,
164
260
  registerBrowserSessionCleanup,
165
261
  closeManagedBrowser,
166
- rethrowAfterBrowserCleanup
262
+ rethrowAfterBrowserCleanup,
263
+ navigateForCapture,
264
+ gotoWhenSent
167
265
  };
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  shouldTrack
9
- } from "./chunk-B4VG7PGX.js";
9
+ } from "./chunk-YULVV525.js";
10
10
 
11
11
  // src/telemetry/renderObservability.ts
12
12
  function renderObservabilityTelemetryPayload(observability) {
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  VERSION
9
- } from "./chunk-HTDDV7CM.js";
9
+ } from "./chunk-BC2XZL6O.js";
10
10
 
11
11
  // src/registry/compatibility.ts
12
12
  import { compareVersions } from "compare-versions";
@@ -4,6 +4,13 @@ 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
+ c
9
+ } from "./chunk-ZTZA4UWZ.js";
10
+ import {
11
+ DISTRIBUTED_FPS,
12
+ isDistributedFps
13
+ } from "./chunk-SYKPCN32.js";
7
14
  import {
8
15
  parseHTML
9
16
  } from "./chunk-SDYDNHEE.js";
@@ -25,20 +32,27 @@ function readCompositionFps(html) {
25
32
  const raw = root?.getAttribute("data-fps")?.trim();
26
33
  return raw ? raw : null;
27
34
  }
28
- function readAllowedCompositionFpsFromDir(projectDir, allowed) {
35
+ var DEFAULT_CLOUD_FPS = 30;
36
+ function defaultCloudFps(projectDir) {
29
37
  let html;
30
38
  try {
31
39
  html = readFileSync(join(projectDir, "index.html"), "utf8");
32
40
  } catch {
33
- return null;
41
+ return DEFAULT_CLOUD_FPS;
34
42
  }
35
43
  const raw = readCompositionFps(html);
36
- if (raw == null) return null;
44
+ if (raw == null) return DEFAULT_CLOUD_FPS;
37
45
  const n = Number(raw);
38
- return Number.isInteger(n) && allowed.includes(n) ? n : null;
46
+ if (isDistributedFps(n)) return n;
47
+ console.warn(
48
+ c.warn(
49
+ `The composition declares data-fps="${raw}", which cloud renders do not support (${DISTRIBUTED_FPS.join(", ")}). Rendering at ${DEFAULT_CLOUD_FPS} fps; pass --fps to choose.`
50
+ )
51
+ );
52
+ return DEFAULT_CLOUD_FPS;
39
53
  }
40
54
 
41
55
  export {
42
56
  readCompositionFps,
43
- readAllowedCompositionFpsFromDir
57
+ defaultCloudFps
44
58
  };
@@ -1106,7 +1106,14 @@ var CANVAS_DIMENSIONS = {
1106
1106
  "landscape-4k": { width: 3840, height: 2160 },
1107
1107
  "portrait-4k": { width: 2160, height: 3840 },
1108
1108
  square: { width: 1080, height: 1080 },
1109
- "square-4k": { width: 2160, height: 2160 }
1109
+ "square-4k": { width: 2160, height: 2160 },
1110
+ "landscape-720p": { width: 1280, height: 720 },
1111
+ "portrait-720p": { width: 720, height: 1280 },
1112
+ "square-720p": { width: 720, height: 720 },
1113
+ // 480 tall at 16:9 is 853.33 wide: 854 keeps both sides even for 4:2:0 encoders.
1114
+ "landscape-480p": { width: 854, height: 480 },
1115
+ "portrait-480p": { width: 480, height: 854 },
1116
+ "square-480p": { width: 480, height: 480 }
1110
1117
  };
1111
1118
  var VALID_CANVAS_RESOLUTIONS = Object.keys(
1112
1119
  CANVAS_DIMENSIONS
@@ -1121,13 +1128,21 @@ var RESOLUTION_ALIASES = {
1121
1128
  "4k-portrait": "portrait-4k",
1122
1129
  "1080p-square": "square",
1123
1130
  "square-1080p": "square",
1124
- "4k-square": "square-4k"
1131
+ "4k-square": "square-4k",
1132
+ "720p": "landscape-720p",
1133
+ "720p-portrait": "portrait-720p",
1134
+ "720p-square": "square-720p",
1135
+ "480p": "landscape-480p",
1136
+ "480p-portrait": "portrait-480p",
1137
+ "480p-square": "square-480p"
1125
1138
  };
1126
1139
  var ASPECT_AGNOSTIC_RESOLUTION_ALIASES = /* @__PURE__ */ new Set([
1127
1140
  "1080p",
1128
1141
  "hd",
1129
1142
  "4k",
1130
- "uhd"
1143
+ "uhd",
1144
+ "720p",
1145
+ "480p"
1131
1146
  ]);
1132
1147
  function normalizeResolutionFlag(input) {
1133
1148
  if (!input) return void 0;
@@ -4388,14 +4403,17 @@ function extractGsapScripts(doc) {
4388
4403
  }
4389
4404
  var OK = { ok: true };
4390
4405
  function suggestMatchingPreset(compositionWidth, compositionHeight, chosen) {
4391
- const aspectMatches = VALID_CANVAS_RESOLUTIONS.filter((preset) => {
4392
- const { width, height } = CANVAS_DIMENSIONS[preset];
4393
- return width * compositionHeight === height * compositionWidth;
4394
- });
4406
+ const aspectMatches = VALID_CANVAS_RESOLUTIONS.filter(
4407
+ (preset) => fitsAspect(CANVAS_DIMENSIONS[preset], compositionWidth, compositionHeight)
4408
+ );
4395
4409
  if (aspectMatches.length === 0) return void 0;
4396
- const chosenIs4k = chosen.endsWith("-4k");
4397
- const sameTier = aspectMatches.find((preset) => preset.endsWith("-4k") === chosenIs4k);
4398
- return sameTier ?? aspectMatches[0];
4410
+ return aspectMatches.find((preset) => tierOf(preset) === tierOf(chosen));
4411
+ }
4412
+ var tierOf = (preset) => preset.includes("-") ? preset.slice(preset.indexOf("-")) : "";
4413
+ function fitsAspect(target, compositionWidth, compositionHeight) {
4414
+ const drift = Math.abs(target.width * compositionHeight - target.height * compositionWidth);
4415
+ if (drift === 0) return true;
4416
+ return target.width < compositionWidth && drift < Math.min(compositionWidth, compositionHeight);
4399
4417
  }
4400
4418
  function describeOrientation(width, height) {
4401
4419
  if (width > height) return "landscape";
@@ -4427,17 +4445,11 @@ function checkOutputResolutionCompatibility(input) {
4427
4445
  };
4428
4446
  }
4429
4447
  const target = CANVAS_DIMENSIONS[outputResolution];
4430
- if (target.width * compositionHeight !== target.height * compositionWidth) {
4448
+ if (!fitsAspect(target, compositionWidth, compositionHeight)) {
4431
4449
  return buildAspectMismatch(compositionWidth, compositionHeight, outputResolution, target);
4432
4450
  }
4433
4451
  const widthRatio = target.width / compositionWidth;
4434
- if (widthRatio < 1) {
4435
- return {
4436
- ok: false,
4437
- kind: "downsampling",
4438
- message: `outputResolution ${outputResolution} (${target.width}\xD7${target.height}) is smaller than the composition (${compositionWidth}\xD7${compositionHeight}). Downsampling via --resolution is not supported.`
4439
- };
4440
- }
4452
+ if (widthRatio < 1) return OK;
4441
4453
  if (!Number.isInteger(widthRatio)) {
4442
4454
  return {
4443
4455
  ok: false,
@@ -5000,6 +5012,7 @@ export {
5000
5012
  HTML_BODY_CSS_WIDTH_FIRST_RE,
5001
5013
  HTML_BODY_CSS_HEIGHT_FIRST_RE,
5002
5014
  VIEWPORT_META_SIZE_RE,
5015
+ isSubCompositionHost,
5003
5016
  topLevelElements,
5004
5017
  trackKindOf,
5005
5018
  decodeUrlPathVariants,
@@ -8,7 +8,7 @@ import {
8
8
  flush,
9
9
  shouldTrack,
10
10
  trackEvent
11
- } from "./chunk-B4VG7PGX.js";
11
+ } from "./chunk-YULVV525.js";
12
12
  import {
13
13
  getPowerState
14
14
  } from "./chunk-QWQ6GQTI.js";
@@ -29,7 +29,7 @@ import {
29
29
  } from "./chunk-XUXGIA7H.js";
30
30
  import {
31
31
  VERSION
32
- } from "./chunk-HTDDV7CM.js";
32
+ } from "./chunk-BC2XZL6O.js";
33
33
  import {
34
34
  CANARIES,
35
35
  canaryEnvVar,
@@ -6,30 +6,30 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  redactHome
9
- } from "./chunk-BIOWX4AM.js";
9
+ } from "./chunk-NT3WPYAU.js";
10
10
  import "./chunk-Z27A7NUB.js";
11
11
  import "./chunk-5ETJX6WM.js";
12
12
  import {
13
13
  loadProducer
14
- } from "./chunk-F67VJSSH.js";
14
+ } from "./chunk-4WPRJ7ID.js";
15
15
  import {
16
16
  formatBytes
17
17
  } from "./chunk-K2FLNJVB.js";
18
- import "./chunk-A2DMF2Q6.js";
19
- import "./chunk-UKTXHF3Q.js";
20
- import "./chunk-OBZWOV4Q.js";
18
+ import "./chunk-CDDIEZ4D.js";
19
+ import "./chunk-4CIMRQQY.js";
21
20
  import "./chunk-6JR2XUEE.js";
22
21
  import "./chunk-C6TPGUWD.js";
23
22
  import {
24
23
  CACHE_DIR_NAME,
25
24
  cleanupProxyCache
26
- } from "./chunk-SZDHUSQ5.js";
25
+ } from "./chunk-AQZZZTFL.js";
27
26
  import {
28
27
  DEFAULT_HISTORY_ROOT,
29
28
  listProjectHistories,
30
29
  pruneGoneProjectHistories
31
30
  } from "./chunk-JGYHWVXQ.js";
32
31
  import "./chunk-FFDC5OWV.js";
32
+ import "./chunk-A2DMF2Q6.js";
33
33
  import "./chunk-5CS4T6C6.js";
34
34
  import "./chunk-QWQ6GQTI.js";
35
35
  import {
@@ -47,12 +47,12 @@ import "./chunk-TJSTGSAW.js";
47
47
  import "./chunk-XRKMITSS.js";
48
48
  import {
49
49
  withMeta
50
- } from "./chunk-ZIL7S3L6.js";
50
+ } from "./chunk-O7BABHM4.js";
51
51
  import "./chunk-K4WIOZFP.js";
52
52
  import "./chunk-XUXGIA7H.js";
53
53
  import "./chunk-WERLJGIC.js";
54
54
  import "./chunk-ISN5GRYI.js";
55
- import "./chunk-HTDDV7CM.js";
55
+ import "./chunk-BC2XZL6O.js";
56
56
  import "./chunk-3DKN5WKL.js";
57
57
  import "./chunk-EOVYQ3IG.js";
58
58
  import "./chunk-6BEFEWFB.js";
@@ -63,16 +63,16 @@ import {
63
63
  directorySizeBytes,
64
64
  gcExtractionCache,
65
65
  resolveExtractCacheDir
66
- } from "./chunk-BSXI5VWK.js";
67
- import "./chunk-KPPC3C4I.js";
66
+ } from "./chunk-CAHSX6IW.js";
67
+ import "./chunk-KDC5D5VM.js";
68
68
  import "./chunk-KCF6GHJP.js";
69
69
  import "./chunk-JYVGYKXG.js";
70
70
  import "./chunk-7KDQAD2W.js";
71
- import "./chunk-MMSCLNCJ.js";
72
- import "./chunk-LGAKMIEX.js";
71
+ import "./chunk-SYKPCN32.js";
72
+ import "./chunk-QE7XLLGT.js";
73
73
  import "./chunk-VC76R6W2.js";
74
74
  import "./chunk-UJKQWGFF.js";
75
- import "./chunk-ALLKNYC3.js";
75
+ import "./chunk-YMS5FOMC.js";
76
76
  import "./chunk-OFQWTKPW.js";
77
77
  import "./chunk-DPVXBVLL.js";
78
78
  import "./chunk-T76PLPD6.js";
@@ -80,9 +80,9 @@ import "./chunk-FXMKHHPO.js";
80
80
  import "./chunk-RQVDTPGD.js";
81
81
  import "./chunk-D3ZWBHZP.js";
82
82
  import "./chunk-TWWSYAKJ.js";
83
- import "./chunk-2742O5DO.js";
83
+ import "./chunk-PLWORQFC.js";
84
84
  import "./chunk-IWFLMU2N.js";
85
- import "./chunk-3VGU2SH7.js";
85
+ import "./chunk-OYLO6TYK.js";
86
86
  import "./chunk-VAS6HQX3.js";
87
87
  import "./chunk-3RM2ETQT.js";
88
88
  import "./chunk-BSQ7XANM.js";