hyperframes 0.8.112 → 0.8.114

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 (163) hide show
  1. package/dist/{add-NIVC2YMT.js → add-KCBOVKEU.js} +15 -15
  2. package/dist/{animatedGifPrep-NWAJKCHG.js → animatedGifPrep-U7FMC7DB.js} +6 -6
  3. package/dist/{asset-O6JJKF3Z.js → asset-AJ4ZZE3K.js} +2 -2
  4. package/dist/{assetCataloger-DJSPW3RL.js → assetCataloger-5LCGR5XU.js} +2 -2
  5. package/dist/{auth-6XRZQQQS.js → auth-PSEHAWSA.js} +2 -2
  6. package/dist/{autoUpdate-GZHLQBLS.js → autoUpdate-E32YLKFZ.js} +2 -2
  7. package/dist/{backgroundChecks-4QQRGJ5S.js → backgroundChecks-FNHBA7YI.js} +3 -3
  8. package/dist/backgroundChecksWorker.js +3 -3
  9. package/dist/{batchRender-PJGNXN7F.js → batchRender-QVJ7NEUH.js} +3 -3
  10. package/dist/{beats-VYR6B4UB.js → beats-F67KZC3V.js} +11 -11
  11. package/dist/{benchmark-CGP2NKIP.js → benchmark-CGD6CPRK.js} +12 -12
  12. package/dist/{browser-ZWD4ETXK.js → browser-FPX3Z2AR.js} +11 -11
  13. package/dist/{bundleWithLocalizedFonts-JWHKLSZM.js → bundleWithLocalizedFonts-4CVITCYK.js} +2 -2
  14. package/dist/{capture-C4MPRLJV.js → capture-F2Y7TIHU.js} +8 -8
  15. package/dist/{capture-IQ7AUK6M.js → capture-GLHK4ST7.js} +2 -2
  16. package/dist/{catalog-RZ7PWQMS.js → catalog-4BZX7MQQ.js} +15 -15
  17. package/dist/{check-7UU4SSO6.js → check-IO3HWLLU.js} +32 -32
  18. package/dist/{checkBrowser-6KYNYIU7.js → checkBrowser-JTQ7ABCL.js} +29 -29
  19. package/dist/{chunk-OWN3ZIIK.js → chunk-3IUSKIZW.js} +1 -1
  20. package/dist/{chunk-UTXMQVB2.js → chunk-3SH322X7.js} +10 -10
  21. package/dist/{chunk-YQ5MFXWG.js → chunk-4KGMIOMY.js} +5 -5
  22. package/dist/{chunk-N34BYX3E.js → chunk-4PFZPP2N.js} +54 -30
  23. package/dist/{chunk-2GXKCB7J.js → chunk-6U3K3U62.js} +1 -1
  24. package/dist/{chunk-7G25WGTA.js → chunk-752X6G7T.js} +2 -2
  25. package/dist/{chunk-KQ3VNA6R.js → chunk-7543YIMQ.js} +1 -1
  26. package/dist/{chunk-GODQ5XA4.js → chunk-7ZR25WGW.js} +8 -16
  27. package/dist/{chunk-OXZO4WQI.js → chunk-BORVRAHJ.js} +9 -9
  28. package/dist/{chunk-H3WFEPV2.js → chunk-BOUDTDBQ.js} +1 -1
  29. package/dist/chunk-C6AIZOQN.js +3541 -0
  30. package/dist/{chunk-QXERSWXX.js → chunk-DQBY7FRR.js} +123 -3
  31. package/dist/{chunk-36XLW2TP.js → chunk-DR7QW6C5.js} +2 -2
  32. package/dist/{chunk-VW6CVKVA.js → chunk-E52XEEAA.js} +2 -2
  33. package/dist/{chunk-5SDXALUQ.js → chunk-ENHAGQEP.js} +1 -1
  34. package/dist/{chunk-C4JINRJK.js → chunk-FCEFKWPM.js} +1 -1
  35. package/dist/{chunk-P74PW7KR.js → chunk-G2T2X6FZ.js} +3 -3
  36. package/dist/{chunk-CS4IE5G7.js → chunk-GDJ74GHW.js} +4 -3
  37. package/dist/{chunk-KS5HFREQ.js → chunk-HGMKPPGD.js} +4 -4
  38. package/dist/{chunk-VHRHI3CU.js → chunk-HTQR7SUZ.js} +1 -1
  39. package/dist/{chunk-M4RYK5OF.js → chunk-IP3XINRB.js} +1 -1
  40. package/dist/{chunk-E664L6K3.js → chunk-IPXPSCWV.js} +3 -3
  41. package/dist/{chunk-LYBFDHXD.js → chunk-JH7ZJRDL.js} +3 -3
  42. package/dist/chunk-K4WKGXRC.js +18 -0
  43. package/dist/{chunk-JRULOVZK.js → chunk-L5QASNBN.js} +1 -1
  44. package/dist/{chunk-NOOBRCMC.js → chunk-LDSWUYZB.js} +3 -3
  45. package/dist/{chunk-TSZU5JMC.js → chunk-LMC46FK5.js} +2 -2
  46. package/dist/{chunk-P3AQVFY2.js → chunk-LSSIYIXI.js} +3 -3
  47. package/dist/{chunk-TXVN43SX.js → chunk-LYNBNESS.js} +80 -13
  48. package/dist/{chunk-BD3MHTSR.js → chunk-MLLBZR2U.js} +2 -2
  49. package/dist/{chunk-Q7U7QRC7.js → chunk-MR6BQLGM.js} +2 -2
  50. package/dist/{chunk-POEGJGEA.js → chunk-MST5JBOR.js} +1 -1
  51. package/dist/{chunk-J2S4MY2M.js → chunk-OCNCK5FQ.js} +2 -2
  52. package/dist/{chunk-BSBIG74E.js → chunk-P3FGUSFK.js} +8 -8
  53. package/dist/{chunk-4BXTKKRD.js → chunk-QPR4N2D4.js} +1 -1
  54. package/dist/{chunk-EA4LCCJI.js → chunk-RKSRXPKV.js} +5 -5
  55. package/dist/{chunk-KIIKVKHB.js → chunk-SIN32SJB.js} +2 -2
  56. package/dist/{chunk-PRETPA7Z.js → chunk-SSM2TJYE.js} +1 -1
  57. package/dist/{chunk-BLI5XATY.js → chunk-SYQOD3W7.js} +1 -1
  58. package/dist/{chunk-KPSRL2NB.js → chunk-T3NMEYGM.js} +1 -1
  59. package/dist/{chunk-3Q7HXIXZ.js → chunk-VFCKXTBB.js} +5 -2
  60. package/dist/{chunk-7VIXEM6Q.js → chunk-VLC7JS4K.js} +1 -1
  61. package/dist/{chunk-A6GVXZZ3.js → chunk-WAS5VEA4.js} +1 -1
  62. package/dist/{chunk-BZGWHPRW.js → chunk-XFJXFNJF.js} +3 -3
  63. package/dist/{chunk-7OJSZTJK.js → chunk-XXKBPGPJ.js} +2 -2
  64. package/dist/{chunk-YAFO7V4A.js → chunk-YJEGT5L6.js} +1 -1
  65. package/dist/{chunk-2BEOCUAG.js → chunk-ZMMSMDCA.js} +1 -1
  66. package/dist/{clean-263PH5CR.js → clean-MCL76KQH.js} +16 -16
  67. package/dist/cli.js +122 -54
  68. package/dist/{cloud-STLYEQNN.js → cloud-444K6HIK.js} +4 -4
  69. package/dist/{cloudrun-7ZVNB6FY.js → cloudrun-BML6ZG7K.js} +3 -3
  70. package/dist/{compare-33JLJ52D.js → compare-CGNTCOR2.js} +24 -24
  71. package/dist/{compiler-H3QAMMC2.js → compiler-ZHVIEP26.js} +3 -3
  72. package/dist/{component-O5JLM26B.js → component-HTXLOIHR.js} +3 -3
  73. package/dist/{compositions-CN4ZVT5G.js → compositions-KK46F5AC.js} +11 -11
  74. package/dist/{delete-Z23A45R3.js → delete-SSRZKKWQ.js} +2 -2
  75. package/dist/{deploy-PJLSZMUH.js → deploy-MX76RZ36.js} +1 -1
  76. package/dist/{destroy-IPUDK6YN.js → destroy-H2TZBYHH.js} +1 -1
  77. package/dist/{dist-ICXYT7XK.js → dist-HRBNHR4M.js} +1 -1
  78. package/dist/{dist-7VEVT4NT.js → dist-OKRUIHYU.js} +2 -2
  79. package/dist/{doctor-6QLXSGPK.js → doctor-IIOX25KM.js} +11 -11
  80. package/dist/{events-UA4DJUO2.js → events-DCUZBRW6.js} +9 -9
  81. package/dist/{events-EAAIWITP.js → events-TYMMAKHX.js} +8 -8
  82. package/dist/{feedback-2CIRCBHY.js → feedback-RIAGW6LG.js} +10 -10
  83. package/dist/{figma-DFCCII66.js → figma-VBOUGJNX.js} +3 -3
  84. package/dist/fontLocalizeCli.js +8 -8
  85. package/dist/{get-UQ2AAXWM.js → get-LT6NUGNR.js} +2 -2
  86. package/dist/{gpuPolicy-CPCLBMS5.js → gpuPolicy-LRMOZXFU.js} +6 -6
  87. package/dist/{grade-compare-THUUFHO3.js → grade-compare-WWYQSQUM.js} +24 -24
  88. package/dist/{help-SR2MRL3U.js → help-55ZV2M5U.js} +1 -1
  89. package/dist/{history-WLI7KFXB.js → history-QCY7CO4P.js} +16 -17
  90. package/dist/hyperframe-runtime.js +52 -52
  91. package/dist/hyperframe.manifest.json +1 -1
  92. package/dist/hyperframe.runtime.iife.js +52 -52
  93. package/dist/hyperframes-player.global.js +1 -1
  94. package/dist/{info-DFJM3YRJ.js → info-ROTXHRAH.js} +11 -11
  95. package/dist/{init-HEAMOTGH.js → init-5XFOWGGN.js} +25 -24
  96. package/dist/{inspect-TO2EXJNK.js → inspect-3UF4VLTM.js} +25 -25
  97. package/dist/{installer-REA7ZASD.js → installer-DGYYDGWJ.js} +4 -4
  98. package/dist/{keyframes-XHEBAJY7.js → keyframes-OFZ6XNMC.js} +12 -12
  99. package/dist/{lambda-MSWYKDNT.js → lambda-OQBFCEFA.js} +6 -6
  100. package/dist/{layout-UQXCTFFV.js → layout-B4XF2734.js} +25 -25
  101. package/dist/{lint-BSMZ526C.js → lint-3YIJITTC.js} +12 -12
  102. package/dist/{lintProject-VNE322A7.js → lintProject-TOLC6HDS.js} +1 -1
  103. package/dist/{list-RNP5EMTX.js → list-276FF3QE.js} +2 -2
  104. package/dist/{login-S6V75HG5.js → login-SA3MCAIS.js} +4 -4
  105. package/dist/{manager-NEVLEZK3.js → manager-CT3D67CG.js} +1 -1
  106. package/dist/{media-treatment-IHEEEDUQ.js → media-treatment-ICA5DWHS.js} +12 -12
  107. package/dist/{models-OQEBKNJI.js → models-JF5OOZ5A.js} +7 -7
  108. package/dist/{motionShot-EAIFVJ2I.js → motionShot-TQBDZZ4M.js} +12 -12
  109. package/dist/{normalize-audio-4ACUR6W6.js → normalize-audio-URNASKUV.js} +11 -11
  110. package/dist/{pipeline-SOQHD5YN.js → pipeline-IWPF5ZMK.js} +6 -6
  111. package/dist/{play-3WJPS3FE.js → play-JYBAII35.js} +20 -20
  112. package/dist/{preflight-ZUADCOLZ.js → preflight-2GH2Z4GZ.js} +8 -8
  113. package/dist/{present-MU23WZZA.js → present-WIEZRZET.js} +16 -16
  114. package/dist/{preview-VOTNRX67.js → preview-YUPU646E.js} +171 -93
  115. package/dist/{producer-HKRMTCPU.js → producer-SL66UNEP.js} +1 -1
  116. package/dist/{projectConfig-H37MQGE6.js → projectConfig-7AKXZNNR.js} +6 -6
  117. package/dist/{publication-QVDKMAKD.js → publication-B2OERUY7.js} +2 -2
  118. package/dist/{publish-54IPKU5O.js → publish-ZGKT7KED.js} +8 -8
  119. package/dist/{remove-background-KQQ2WPKP.js → remove-background-4LRTT6YL.js} +7 -7
  120. package/dist/{render-HJQ44SEI.js → render-AX77WC3C.js} +12 -12
  121. package/dist/{render-P7727PLY.js → render-F3QVCKKA.js} +23 -23
  122. package/dist/{render-S2T3SLI4.js → render-TGCDBKMP.js} +3 -3
  123. package/dist/{render-batch-DUFAHD6F.js → render-batch-WRQFW4UC.js} +3 -3
  124. package/dist/{renderCancellation-BSVXXGZM.js → renderCancellation-BFCQYGVV.js} +6 -6
  125. package/dist/renderSetupWorker.js +2 -2
  126. package/dist/{resolver-PHWKDEH2.js → resolver-37UOGAMT.js} +4 -4
  127. package/dist/{sherpa-GHQOWXFV.js → sherpa-SDVKYXCX.js} +7 -7
  128. package/dist/{skills-SOCMD66Y.js → skills-M6ETUUH5.js} +11 -11
  129. package/dist/{skillsUpdateCheck-PONPICQM.js → skillsUpdateCheck-UTX5LT5C.js} +3 -3
  130. package/dist/{snapshot-ECXEZ4TY.js → snapshot-HMDAENTY.js} +143 -54
  131. package/dist/{src-LVBNYMJW.js → src-PJJ6NISA.js} +5 -5
  132. package/dist/{src-RQE5HXZK.js → src-PLWCT745.js} +7 -7
  133. package/dist/{staticProjectServer-TQYP44CW.js → staticProjectServer-XDH5SQV6.js} +14 -14
  134. package/dist/{status-HVI7QZHE.js → status-LENRPQS5.js} +6 -6
  135. package/dist/studio/assets/{hyperframes-player-CBpg41JM.js → hyperframes-player-aXNJKiIg.js} +1 -1
  136. package/dist/studio/assets/index-BYnsJnJV.css +1 -0
  137. package/dist/studio/assets/{index-BFitquwi.js → index-Bn2RJNTJ.js} +1 -1
  138. package/dist/studio/assets/{index-CZfrSyU9.js → index-C9N-DGjC.js} +1 -1
  139. package/dist/studio/assets/{index-BKy_birQ.js → index-Dz7doz9l.js} +199 -199
  140. package/dist/studio/index.d.ts +3 -3
  141. package/dist/studio/index.html +2 -2
  142. package/dist/studio/index.js +1605 -1536
  143. package/dist/studio/index.js.map +1 -1
  144. package/dist/studio/styles.css +1 -1
  145. package/dist/{studio-api-EKF6TFDB.js → studio-api-E5WFZ7YK.js} +8 -8
  146. package/dist/{studioSelectionClient-A6JCWRRW.js → studioSelectionClient-IUUPKUHZ.js} +1 -2
  147. package/dist/{studioServer-BSNDGK63.js → studioServer-C7GTHTRY.js} +43 -43
  148. package/dist/{system-NLNIE7PO.js → system-4KRSV2B7.js} +6 -6
  149. package/dist/{telemetry-XNDAM6JU.js → telemetry-XH6D37RL.js} +9 -9
  150. package/dist/{timeline-IKWTTCNY.js → timeline-4RR7O6QW.js} +15 -15
  151. package/dist/{tokens-KOTFKBAK.js → tokens-MVTK3RPO.js} +2 -2
  152. package/dist/{transcribe-ELJHKA5B.js → transcribe-3UXXEDXX.js} +7 -7
  153. package/dist/{transcribe-STEYOXIO.js → transcribe-I6WDPH7E.js} +12 -12
  154. package/dist/{tts-DO2W6NLB.js → tts-P3LIPIL5.js} +13 -6
  155. package/dist/{updateCheck-OJMEQUST.js → updateCheck-ELMPFCBF.js} +2 -2
  156. package/dist/{upgrade-NIS32YR6.js → upgrade-6UAOGP4D.js} +2 -2
  157. package/dist/{urlDownloader-KJSQAFN7.js → urlDownloader-4KNER64L.js} +5 -5
  158. package/dist/{validate-7MCKNH5K.js → validate-ZMMGUMBD.js} +15 -15
  159. package/dist/{video-TUXP3VGQ.js → video-GINAMW5I.js} +6 -6
  160. package/package.json +1 -1
  161. package/dist/chunk-S6TH5G6Z.js +0 -3541
  162. package/dist/chunk-VWA4HODG.js +0 -129
  163. package/dist/studio/assets/index-DbfKVTId.css +0 -1
@@ -9,9 +9,9 @@ import {
9
9
  } from "./chunk-KZI44OPA.js";
10
10
  import {
11
11
  serveStaticProjectHtml
12
- } from "./chunk-NOOBRCMC.js";
12
+ } from "./chunk-LDSWUYZB.js";
13
13
  import "./chunk-XUHOIDKG.js";
14
- import "./chunk-7G25WGTA.js";
14
+ import "./chunk-752X6G7T.js";
15
15
  import "./chunk-X7MTZ4T2.js";
16
16
  import {
17
17
  DEFAULT_ZOOM_SCALE,
@@ -21,48 +21,49 @@ import {
21
21
  resolveCropRegion,
22
22
  runFfmpegOnce,
23
23
  seekCompositionTimeline
24
- } from "./chunk-YQ5MFXWG.js";
24
+ } from "./chunk-4KGMIOMY.js";
25
25
  import "./chunk-5Z63TBTX.js";
26
26
  import "./chunk-262C25DQ.js";
27
- import "./chunk-OWN3ZIIK.js";
27
+ import "./chunk-3IUSKIZW.js";
28
28
  import "./chunk-YEIFI443.js";
29
- import "./chunk-TXVN43SX.js";
30
- import "./chunk-BZGWHPRW.js";
29
+ import "./chunk-LYNBNESS.js";
30
+ import "./chunk-XFJXFNJF.js";
31
31
  import "./chunk-WEATBQTR.js";
32
- import "./chunk-CS4IE5G7.js";
33
- import "./chunk-TSZU5JMC.js";
32
+ import "./chunk-GDJ74GHW.js";
33
+ import "./chunk-LMC46FK5.js";
34
34
  import {
35
35
  resolveProject
36
- } from "./chunk-A6GVXZZ3.js";
36
+ } from "./chunk-WAS5VEA4.js";
37
37
  import {
38
38
  formatLintFindings
39
39
  } from "./chunk-6CSYCFQV.js";
40
40
  import "./chunk-IHFUKJOR.js";
41
+ import {
42
+ resolveLocalBrowserGpuMode
43
+ } from "./chunk-T3NMEYGM.js";
41
44
  import "./chunk-PFCFR3KZ.js";
42
- import "./chunk-H3WFEPV2.js";
45
+ import "./chunk-BOUDTDBQ.js";
43
46
  import "./chunk-XT7X6QCP.js";
44
47
  import "./chunk-4YYJOFKS.js";
45
48
  import "./chunk-HVW7ABXD.js";
46
- import {
47
- resolveLocalBrowserGpuMode
48
- } from "./chunk-KPSRL2NB.js";
49
- import "./chunk-5SDXALUQ.js";
50
- import "./chunk-36XLW2TP.js";
51
- import "./chunk-M4RYK5OF.js";
49
+ import "./chunk-ENHAGQEP.js";
50
+ import "./chunk-DR7QW6C5.js";
51
+ import "./chunk-IP3XINRB.js";
52
52
  import "./chunk-AWDFDFI3.js";
53
53
  import "./chunk-GMECXFAN.js";
54
54
  import {
55
55
  findFFmpeg,
56
+ findFFprobe,
56
57
  getFFmpegInstallHint
57
58
  } from "./chunk-TVCRUG2S.js";
58
59
  import "./chunk-RDMAU7AJ.js";
59
- import "./chunk-LYBFDHXD.js";
60
- import "./chunk-E664L6K3.js";
60
+ import "./chunk-JH7ZJRDL.js";
61
+ import "./chunk-IPXPSCWV.js";
61
62
  import "./chunk-VWG7OQKU.js";
62
63
  import {
63
64
  c
64
65
  } from "./chunk-ZTZA4UWZ.js";
65
- import "./chunk-JRULOVZK.js";
66
+ import "./chunk-L5QASNBN.js";
66
67
  import "./chunk-AMKC3AXA.js";
67
68
  import {
68
69
  defineCommand
@@ -73,30 +74,32 @@ import {
73
74
  } from "./chunk-PBN6GBJE.js";
74
75
  import "./chunk-KC5XXX3X.js";
75
76
  import "./chunk-TJSTGSAW.js";
76
- import "./chunk-P74PW7KR.js";
77
+ import "./chunk-G2T2X6FZ.js";
77
78
  import {
78
79
  isClipVisibleAt,
79
80
  isInClipWindow
80
- } from "./chunk-C4JINRJK.js";
81
+ } from "./chunk-FCEFKWPM.js";
81
82
  import "./chunk-UUDQD62L.js";
82
83
  import "./chunk-DPVXBVLL.js";
83
- import "./chunk-J2S4MY2M.js";
84
+ import "./chunk-OCNCK5FQ.js";
84
85
  import {
85
86
  readElementRateSpec,
86
87
  sourceTimeAt,
87
88
  timeAtSourceTime
88
- } from "./chunk-S6TH5G6Z.js";
89
+ } from "./chunk-C6AIZOQN.js";
89
90
  import "./chunk-VC76R6W2.js";
90
91
  import "./chunk-OFQWTKPW.js";
91
92
  import {
92
93
  definitiveEntryMismatchComposition,
93
94
  hasDefinitiveEntryMismatch
94
95
  } from "./chunk-Q5X2B5WT.js";
95
- import "./chunk-LCSMOLGX.js";
96
+ import {
97
+ runCancellableProcess
98
+ } from "./chunk-LCSMOLGX.js";
96
99
  import "./chunk-TWWSYAKJ.js";
97
100
  import {
98
101
  lintProject
99
- } from "./chunk-YAFO7V4A.js";
102
+ } from "./chunk-YJEGT5L6.js";
100
103
  import "./chunk-HBBJFK6I.js";
101
104
  import "./chunk-PJ3HDUCY.js";
102
105
  import "./chunk-TQFG7HTI.js";
@@ -106,7 +109,7 @@ import "./chunk-K4WIOZFP.js";
106
109
  import "./chunk-XUXGIA7H.js";
107
110
  import "./chunk-WERLJGIC.js";
108
111
  import "./chunk-ISN5GRYI.js";
109
- import "./chunk-BD3MHTSR.js";
112
+ import "./chunk-MLLBZR2U.js";
110
113
  import {
111
114
  normalizeErrorMessage
112
115
  } from "./chunk-KNU5COPB.js";
@@ -195,35 +198,121 @@ async function recaptureSnapshotComposite(page) {
195
198
  });
196
199
  }
197
200
  }
198
- async function extractVideoFrameToBuffer(videoPath, timeSeconds, useVp9AlphaDecoder = false, accurateSeek = false, holdLastFrame = false) {
201
+ function containingSourceFrameIndex(timestamps, time) {
202
+ if (!Number.isFinite(time)) return -1;
203
+ const tolerance = 16 * Number.EPSILON * Math.max(1, Math.abs(time));
204
+ let index = -1;
205
+ for (const [i, timestamp] of timestamps.entries()) {
206
+ if (timestamp > time + tolerance) break;
207
+ index = i;
208
+ }
209
+ return index;
210
+ }
211
+ async function probeContainingSourceFrameSeek(videoPath, time, holdLastFrame) {
212
+ const ffprobe = findFFprobe();
213
+ if (!ffprobe) return { seek: time };
214
+ const probe = async (readIntervals, entries) => {
215
+ try {
216
+ const { stdout } = await runCancellableProcess(
217
+ ffprobe,
218
+ [
219
+ ...["-v", "error", "-select_streams", "v:0", "-read_intervals", readIntervals],
220
+ ...["-show_entries", entries, "-of", "json", "--", videoPath]
221
+ ],
222
+ { timeoutMs: FFMPEG_EXTRACT_TIMEOUT_MS, maxBufferBytes: 32 * 1024 * 1024 }
223
+ );
224
+ const parsed = JSON.parse(stdout);
225
+ return typeof parsed === "object" && parsed !== null ? parsed : null;
226
+ } catch {
227
+ return null;
228
+ }
229
+ };
230
+ const data = await probe("%+#1", "stream=time_base,start_pts:format=start_time,duration");
231
+ if (data === null || !Array.isArray(data.streams)) return null;
232
+ const stream = data.streams[0];
233
+ if (typeof stream !== "object" || stream === null || !("time_base" in stream) || typeof stream.time_base !== "string")
234
+ return null;
235
+ const [numerator, denominator] = stream.time_base.split("/");
236
+ const timeBase = Number(numerator) / Number(denominator);
237
+ if (!Number.isFinite(timeBase) || timeBase <= 0) return null;
238
+ const format = "format" in data ? data.format : null;
239
+ const start = typeof format === "object" && format !== null && "start_time" in format ? Number(format.start_time) : 0;
240
+ const duration = typeof format === "object" && format !== null && "duration" in format ? Number(format.duration) : NaN;
241
+ if (!holdLastFrame && Number.isFinite(duration) && time >= duration) return null;
242
+ const formatStart = Number.isFinite(start) ? start : 0;
243
+ const startPts = "start_pts" in stream && typeof stream.start_pts === "number" ? stream.start_pts : NaN;
244
+ const startTicks = Math.abs(startPts * timeBase - formatStart) <= 1e-6 ? startPts : formatStart / timeBase;
245
+ const packetData = await probe(`%${startTicks * timeBase + time + 1}`, "packet=pts,dts,flags");
246
+ if (packetData === null || !Array.isArray(packetData.packets)) return null;
247
+ const packets = [];
248
+ for (const packet of packetData.packets) {
249
+ if (typeof packet !== "object" || packet === null) return null;
250
+ const pts = "pts" in packet ? packet.pts : "dts" in packet ? packet.dts : void 0;
251
+ if (typeof pts !== "number") return null;
252
+ const dts = "dts" in packet && typeof packet.dts === "number" ? packet.dts : pts;
253
+ const key = "flags" in packet && typeof packet.flags === "string" && packet.flags.includes("K");
254
+ packets.push({ pts: (pts - startTicks) * timeBase, dts: (dts - startTicks) * timeBase, key });
255
+ }
256
+ const timestamps = packets.map((packet) => packet.pts).sort((a, b) => a - b);
257
+ const index = Math.max(0, containingSourceFrameIndex(timestamps, time));
258
+ if (timestamps.length === 0 || !Number.isFinite(time)) return null;
259
+ const frame = timestamps[index];
260
+ const previous = timestamps[index - 1] ?? frame - 1e-3;
261
+ const mid = (previous + frame) / 2;
262
+ const ffmpeg = findFFmpeg();
263
+ const landing = async (seek) => {
264
+ const raw = ffmpeg ? await probeSeekLanding(ffmpeg, videoPath, seek) : null;
265
+ return raw === null ? null : raw - startTicks * timeBase;
266
+ };
267
+ const candidates = packets.filter(
268
+ (packet) => packet.key && packet.pts > 0 && packet.pts <= frame
269
+ );
270
+ for (const candidate of candidates.reverse().slice(0, 3)) {
271
+ const landed = await landing(candidate.pts);
272
+ if (landed === null) break;
273
+ if (landed <= 0 || landed > frame) continue;
274
+ const again = Math.abs(landed - candidate.pts) < 1e-6 ? landed : await landing(landed);
275
+ if (again !== null && Math.abs(again - landed) < 1e-6)
276
+ return { seek: landed, select: mid - landed };
277
+ }
278
+ return { select: mid - (timestamps.find((t) => t >= 0) ?? frame) };
279
+ }
280
+ async function probeSeekLanding(ffmpeg, videoPath, seek) {
281
+ try {
282
+ const { stdout } = await runCancellableProcess(
283
+ ffmpeg,
284
+ [
285
+ ...["-v", "error", "-copyts", "-noaccurate_seek", "-ss", String(seek), "-i", videoPath],
286
+ ...["-map", "0:v:0", "-c", "copy", "-frames:v", "1", "-f", "framecrc", "-"]
287
+ ],
288
+ { timeoutMs: FFMPEG_EXTRACT_TIMEOUT_MS, maxBufferBytes: 1024 * 1024 }
289
+ );
290
+ const base = /^#tb 0: (\d+)\/(\d+)/m.exec(stdout);
291
+ const row = /^0,\s*-?\d+,\s*(-?\d+),/m.exec(stdout);
292
+ if (!base || !row) return null;
293
+ return Number(row[1]) * Number(base[1]) / Number(base[2]);
294
+ } catch {
295
+ return null;
296
+ }
297
+ }
298
+ async function extractVideoFrameToBuffer(videoPath, timeSeconds, useVp9AlphaDecoder = false, holdLastFrame = false) {
199
299
  const tmp = mkdtempSync(join(tmpdir(), "hf-snapshot-frame-"));
200
300
  const outPath = join(tmp, "frame.png");
201
301
  try {
202
302
  const ffmpegPath = requireSnapshotFfmpeg(findFFmpeg());
203
- const args = ["-hide_banner", "-loglevel", "error"];
204
- if (useVp9AlphaDecoder) {
205
- args.push("-c:v", "libvpx-vp9");
206
- }
207
- const decoderArgs = [...args];
208
- const seek = ["-ss", String(Math.max(0, timeSeconds))];
209
- args.push(
210
- ...accurateSeek ? ["-i", videoPath, ...seek] : [...seek, "-i", videoPath],
211
- "-frames:v",
212
- "1",
213
- "-q:v",
214
- "2",
215
- "-y",
216
- outPath
303
+ const seek = await probeContainingSourceFrameSeek(
304
+ videoPath,
305
+ Math.max(0, timeSeconds),
306
+ holdLastFrame
217
307
  );
218
- let result = await runFfmpegOnce(ffmpegPath, args, FFMPEG_EXTRACT_TIMEOUT_MS);
219
- if (holdLastFrame && result.code === 0 && !result.timedOut && !existsSync(outPath)) {
220
- const tail = ["-sseof", "-1", "-i", videoPath, "-update", "1", "-q:v", "2", "-y", outPath];
221
- result = await runFfmpegOnce(
222
- ffmpegPath,
223
- [...decoderArgs, ...tail],
224
- FFMPEG_EXTRACT_TIMEOUT_MS
225
- );
226
- }
308
+ if (seek === null) return null;
309
+ const args = ["-hide_banner", "-loglevel", "error"];
310
+ if (useVp9AlphaDecoder) args.push("-c:v", "libvpx-vp9");
311
+ if (seek.seek !== void 0) args.push("-ss", String(seek.seek));
312
+ args.push("-i", videoPath, "-map", "0:v:0");
313
+ if (seek.select !== void 0) args.push("-vf", `select=gte(t-start_t\\,${seek.select})`);
314
+ args.push("-frames:v", "1", "-q:v", "2", "-y", outPath);
315
+ const result = await runFfmpegOnce(ffmpegPath, args, FFMPEG_EXTRACT_TIMEOUT_MS);
227
316
  if (result.code !== 0 || result.timedOut || !existsSync(outPath)) return null;
228
317
  return readFileSync(outPath);
229
318
  } finally {
@@ -273,7 +362,7 @@ function computeSnapshotTimes(duration, opts) {
273
362
  return { times: times.map(round), appendedTail: false };
274
363
  }
275
364
  async function captureSnapshots(projectDir, opts) {
276
- const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-JWHKLSZM.js");
365
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-4CVITCYK.js");
277
366
  const numFrames = opts.frames ?? 5;
278
367
  const html = await bundleWithLocalizedFonts(projectDir);
279
368
  const server = await serveStaticProjectHtml(projectDir, html, void 0, [], opts.autoProxy);
@@ -346,7 +435,7 @@ async function captureSnapshots(projectDir, opts) {
346
435
  let syncVideoFrameVisibility = null;
347
436
  let extractMediaMetadata = null;
348
437
  try {
349
- const engine = await import("./src-LVBNYMJW.js");
438
+ const engine = await import("./src-PJJ6NISA.js");
350
439
  injectVideoFramesBatch = engine.injectVideoFramesBatch;
351
440
  syncVideoFrameVisibility = engine.syncVideoFrameVisibility;
352
441
  extractMediaMetadata = engine.extractMediaMetadata;
@@ -443,7 +532,6 @@ async function captureSnapshots(projectDir, opts) {
443
532
  ffmpegInput,
444
533
  Math.max(0, v.relTime),
445
534
  useVp9AlphaDecoder,
446
- false,
447
535
  v.srcDuration > 0 && v.relTime >= v.srcDuration - 1
448
536
  );
449
537
  if (!png) continue;
@@ -499,7 +587,7 @@ async function captureSnapshots(projectDir, opts) {
499
587
  await page.screenshot({ path: framePath, type: "png", omitBackground: true });
500
588
  }
501
589
  if (opts.against) {
502
- const refPng = await extractVideoFrameToBuffer(opts.against, time, false, true);
590
+ const refPng = await extractVideoFrameToBuffer(opts.against, time);
503
591
  if (!refPng) {
504
592
  console.error(
505
593
  ` ${c.warn("\u26A0")} --against has no frame at ${timeLabel} \u2014 reference pair skipped`
@@ -771,6 +859,7 @@ ${c.error("\u2717")} Snapshot failed: ${msg}`);
771
859
  });
772
860
  export {
773
861
  computeSnapshotTimes,
862
+ containingSourceFrameIndex,
774
863
  snapshot_default as default,
775
864
  examples,
776
865
  extractVideoFrameToBuffer,
@@ -212,15 +212,15 @@ import {
212
212
  verifyGpuParity,
213
213
  writeCapturedFrame,
214
214
  writeUrlDownloadTelemetry
215
- } from "./chunk-P74PW7KR.js";
215
+ } from "./chunk-G2T2X6FZ.js";
216
216
  import {
217
217
  MEDIA_VISUAL_STYLE_PROPERTIES,
218
218
  quantizeTimeToFrame
219
- } from "./chunk-C4JINRJK.js";
219
+ } from "./chunk-FCEFKWPM.js";
220
220
  import "./chunk-UUDQD62L.js";
221
221
  import "./chunk-DPVXBVLL.js";
222
- import "./chunk-J2S4MY2M.js";
223
- import "./chunk-S6TH5G6Z.js";
222
+ import "./chunk-OCNCK5FQ.js";
223
+ import "./chunk-C6AIZOQN.js";
224
224
  import "./chunk-VC76R6W2.js";
225
225
  import "./chunk-OFQWTKPW.js";
226
226
  import {
@@ -228,7 +228,7 @@ import {
228
228
  } from "./chunk-TWWSYAKJ.js";
229
229
  import {
230
230
  resolveProjectRelativeSrc
231
- } from "./chunk-YAFO7V4A.js";
231
+ } from "./chunk-YJEGT5L6.js";
232
232
  import "./chunk-HBBJFK6I.js";
233
233
  import {
234
234
  FFMPEG_PATH_ENV,
@@ -67,7 +67,7 @@ import {
67
67
  serializeRenderRequest,
68
68
  startServer,
69
69
  validatePlanV2MaterializedTarget
70
- } from "./chunk-BSBIG74E.js";
70
+ } from "./chunk-P3FGUSFK.js";
71
71
  import {
72
72
  FONT_FETCH_FAILED,
73
73
  FONT_FETCH_UNAVAILABLE,
@@ -77,7 +77,7 @@ import {
77
77
  defaultLogger,
78
78
  injectDeterministicFontFaces
79
79
  } from "./chunk-XMAL2A7Y.js";
80
- import "./chunk-7OJSZTJK.js";
80
+ import "./chunk-XXKBPGPJ.js";
81
81
  import "./chunk-KC5XXX3X.js";
82
82
  import "./chunk-TJSTGSAW.js";
83
83
  import "./chunk-BZ56MTDX.js";
@@ -96,18 +96,18 @@ import {
96
96
  isTransientBrowserError,
97
97
  prepareCaptureSessionForReuse,
98
98
  resolveConfig
99
- } from "./chunk-P74PW7KR.js";
99
+ } from "./chunk-G2T2X6FZ.js";
100
100
  import {
101
101
  quantizeTimeToFrame
102
- } from "./chunk-C4JINRJK.js";
102
+ } from "./chunk-FCEFKWPM.js";
103
103
  import "./chunk-UUDQD62L.js";
104
104
  import "./chunk-DPVXBVLL.js";
105
- import "./chunk-J2S4MY2M.js";
106
- import "./chunk-S6TH5G6Z.js";
105
+ import "./chunk-OCNCK5FQ.js";
106
+ import "./chunk-C6AIZOQN.js";
107
107
  import "./chunk-VC76R6W2.js";
108
108
  import "./chunk-OFQWTKPW.js";
109
109
  import "./chunk-TWWSYAKJ.js";
110
- import "./chunk-YAFO7V4A.js";
110
+ import "./chunk-YJEGT5L6.js";
111
111
  import "./chunk-HBBJFK6I.js";
112
112
  import "./chunk-PJ3HDUCY.js";
113
113
  import "./chunk-TQFG7HTI.js";
@@ -6,35 +6,35 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  serveStaticProjectHtml
9
- } from "./chunk-NOOBRCMC.js";
9
+ } from "./chunk-LDSWUYZB.js";
10
10
  import "./chunk-XUHOIDKG.js";
11
- import "./chunk-7G25WGTA.js";
11
+ import "./chunk-752X6G7T.js";
12
12
  import "./chunk-X7MTZ4T2.js";
13
- import "./chunk-TXVN43SX.js";
14
- import "./chunk-BZGWHPRW.js";
13
+ import "./chunk-LYNBNESS.js";
14
+ import "./chunk-XFJXFNJF.js";
15
15
  import "./chunk-WEATBQTR.js";
16
- import "./chunk-CS4IE5G7.js";
17
- import "./chunk-TSZU5JMC.js";
18
- import "./chunk-H3WFEPV2.js";
16
+ import "./chunk-GDJ74GHW.js";
17
+ import "./chunk-LMC46FK5.js";
18
+ import "./chunk-BOUDTDBQ.js";
19
19
  import "./chunk-XT7X6QCP.js";
20
20
  import "./chunk-4YYJOFKS.js";
21
21
  import "./chunk-HVW7ABXD.js";
22
- import "./chunk-5SDXALUQ.js";
23
- import "./chunk-36XLW2TP.js";
24
- import "./chunk-M4RYK5OF.js";
22
+ import "./chunk-ENHAGQEP.js";
23
+ import "./chunk-DR7QW6C5.js";
24
+ import "./chunk-IP3XINRB.js";
25
25
  import "./chunk-AWDFDFI3.js";
26
26
  import "./chunk-GMECXFAN.js";
27
27
  import "./chunk-RDMAU7AJ.js";
28
28
  import "./chunk-KC5XXX3X.js";
29
29
  import "./chunk-TJSTGSAW.js";
30
- import "./chunk-C4JINRJK.js";
30
+ import "./chunk-FCEFKWPM.js";
31
31
  import "./chunk-UUDQD62L.js";
32
32
  import "./chunk-DPVXBVLL.js";
33
- import "./chunk-J2S4MY2M.js";
34
- import "./chunk-S6TH5G6Z.js";
33
+ import "./chunk-OCNCK5FQ.js";
34
+ import "./chunk-C6AIZOQN.js";
35
35
  import "./chunk-VC76R6W2.js";
36
36
  import "./chunk-OFQWTKPW.js";
37
- import "./chunk-YAFO7V4A.js";
37
+ import "./chunk-YJEGT5L6.js";
38
38
  import "./chunk-HBBJFK6I.js";
39
39
  import "./chunk-PJ3HDUCY.js";
40
40
  import "./chunk-TQFG7HTI.js";
@@ -24,7 +24,7 @@ import {
24
24
  } from "./chunk-ZTZA4UWZ.js";
25
25
  import {
26
26
  getSystemMeta
27
- } from "./chunk-JRULOVZK.js";
27
+ } from "./chunk-L5QASNBN.js";
28
28
  import "./chunk-AMKC3AXA.js";
29
29
  import {
30
30
  defineCommand
@@ -33,16 +33,16 @@ import {
33
33
  failCommand,
34
34
  setCommandExitCode
35
35
  } from "./chunk-PBN6GBJE.js";
36
- import "./chunk-P74PW7KR.js";
37
- import "./chunk-C4JINRJK.js";
36
+ import "./chunk-G2T2X6FZ.js";
37
+ import "./chunk-FCEFKWPM.js";
38
38
  import "./chunk-UUDQD62L.js";
39
39
  import "./chunk-DPVXBVLL.js";
40
- import "./chunk-J2S4MY2M.js";
41
- import "./chunk-S6TH5G6Z.js";
40
+ import "./chunk-OCNCK5FQ.js";
41
+ import "./chunk-C6AIZOQN.js";
42
42
  import "./chunk-VC76R6W2.js";
43
43
  import "./chunk-OFQWTKPW.js";
44
44
  import "./chunk-TWWSYAKJ.js";
45
- import "./chunk-YAFO7V4A.js";
45
+ import "./chunk-YJEGT5L6.js";
46
46
  import "./chunk-HBBJFK6I.js";
47
47
  import "./chunk-PJ3HDUCY.js";
48
48
  import "./chunk-TQFG7HTI.js";
@@ -1,4 +1,4 @@
1
- var xe=Object.defineProperty;var ke=(r,i,e)=>i in r?xe(r,i,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[i]=e;var h=(r,i,e)=>ke(r,typeof i!="symbol"?i+"":i,e);import{r as fe,i as Ie,a as w,b as _e,p as Oe,c as Ne,d as Fe,s as Ve,e as ge,F as ye}from"./index-BKy_birQ.js";function He(r){return r.hasRuntime||r.runtimeInjected?!1:!!(r.hasNestedCompositions||r.hasTimelines&&r.attempts>=5)}function z(r){return typeof r=="object"&&r!==null}function Ue(r){return z(r)&&typeof r.getDuration=="function"}function We(r){return z(r)&&typeof r.duration=="function"&&typeof r.time=="function"&&typeof r.seek=="function"&&typeof r.play=="function"&&typeof r.pause=="function"}function ze(r){if(!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/.test(r))throw new Error(`Invalid HyperFrames runtime version: ${r}`);return`https://cdn.jsdelivr.net/npm/@hyperframes/core@${r}/dist/hyperframe.runtime.iife.js`}const U=typeof __HYPERFRAMES_RUNTIME_CDN_URL__=="string"?__HYPERFRAMES_RUNTIME_CDN_URL__:ze("0.0.0-dev");function $(r){if(r===null)return null;const i=Number.parseInt(r,10);return Number.isFinite(i)&&i>0?i:null}function $e(r){const i=(r==null?void 0:r.querySelector("[data-composition-id][data-width][data-height]"))??(r==null?void 0:r.querySelector("[data-width][data-height]"));if(!i)return null;const e=$(i.getAttribute("data-width")),t=$(i.getAttribute("data-height"));return e!==null&&t!==null?{width:e,height:t}:null}class je{constructor(i,e){h(this,"_interval",null);h(this,"_runtimeInjected",!1);this._iframe=i,this._callbacks=e}get runtimeInjected(){return this._runtimeInjected}start(){this.stop(),this._runtimeInjected=!1;let i=0;this._interval=setInterval(()=>{var e;i++;try{const t=this._iframe.contentWindow;if(!t)return;const s=!!(t.__hf||t.__player),n=!!(t.__timelines&&Object.keys(t.__timelines).length>0),o=!!((e=this._iframe.contentDocument)!=null&&e.querySelector("[data-composition-src]"));if(He({hasRuntime:s,hasTimelines:n,hasNestedCompositions:o,runtimeInjected:this._runtimeInjected,attempts:i})){this._injectRuntime();return}if(this._runtimeInjected&&!s)return;const a=this._resolvePlaybackDurationAdapter(t);if(a&&a.getDuration()>0){this.stop();const c=$e(this._iframe.contentDocument);this._callbacks.onReady({duration:a.getDuration(),adapter:a,compositionSize:c});return}}catch{}i>=40&&(this.stop(),this._callbacks.onError("Composition timeline not found after 8s"))},200)}stop(){this._interval!==null&&(clearInterval(this._interval),this._interval=null)}resolveDirectTimelineAdapter(){try{const i=this._iframe.contentWindow;return i?this._resolveDirectTimelineAdapterFromWindow(i):null}catch{return null}}resolveDirectTimelineAdapterFromWindow(i){return this._resolveDirectTimelineAdapterFromWindow(i)}hasRuntimeBridge(i){return Reflect.get(i,"__hf")!==void 0||z(Reflect.get(i,"__player"))}_injectRuntime(){var i,e;this._runtimeInjected=!0;try{const t=this._iframe.contentDocument;if(!t)return;const s=t.createElement("script");s.src=U,(t.head||t.documentElement).appendChild(s),(e=(i=this._callbacks).onRuntimeInjected)==null||e.call(i)}catch{}}_resolveDirectTimelineAdapterFromWindow(i){var a,c;if(this.hasRuntimeBridge(i))return null;const e=Reflect.get(i,"__timelines");if(!z(e))return null;const t=Object.keys(e);if(t.length===0)return null;const s=(c=(a=this._iframe.contentDocument)==null?void 0:a.querySelector("[data-composition-id]"))==null?void 0:c.getAttribute("data-composition-id"),n=s&&s in e?s:t[t.length-1],o=e[n];return We(o)?o:null}_resolvePlaybackDurationAdapter(i){const e=Reflect.get(i,"__player");if(Ue(e))return{kind:"runtime",getDuration:()=>e.getDuration()};const t=this._resolveDirectTimelineAdapterFromWindow(i);return t?{kind:"direct-timeline",timeline:t,getDuration:()=>t.duration()}:null}}const Be=`
1
+ var xe=Object.defineProperty;var ke=(r,i,e)=>i in r?xe(r,i,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[i]=e;var h=(r,i,e)=>ke(r,typeof i!="symbol"?i+"":i,e);import{r as fe,i as Ie,a as w,b as _e,p as Oe,c as Ne,d as Fe,s as Ve,e as ge,F as ye}from"./index-Dz7doz9l.js";function He(r){return r.hasRuntime||r.runtimeInjected?!1:!!(r.hasNestedCompositions||r.hasTimelines&&r.attempts>=5)}function z(r){return typeof r=="object"&&r!==null}function Ue(r){return z(r)&&typeof r.getDuration=="function"}function We(r){return z(r)&&typeof r.duration=="function"&&typeof r.time=="function"&&typeof r.seek=="function"&&typeof r.play=="function"&&typeof r.pause=="function"}function ze(r){if(!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/.test(r))throw new Error(`Invalid HyperFrames runtime version: ${r}`);return`https://cdn.jsdelivr.net/npm/@hyperframes/core@${r}/dist/hyperframe.runtime.iife.js`}const U=typeof __HYPERFRAMES_RUNTIME_CDN_URL__=="string"?__HYPERFRAMES_RUNTIME_CDN_URL__:ze("0.0.0-dev");function $(r){if(r===null)return null;const i=Number.parseInt(r,10);return Number.isFinite(i)&&i>0?i:null}function $e(r){const i=(r==null?void 0:r.querySelector("[data-composition-id][data-width][data-height]"))??(r==null?void 0:r.querySelector("[data-width][data-height]"));if(!i)return null;const e=$(i.getAttribute("data-width")),t=$(i.getAttribute("data-height"));return e!==null&&t!==null?{width:e,height:t}:null}class je{constructor(i,e){h(this,"_interval",null);h(this,"_runtimeInjected",!1);this._iframe=i,this._callbacks=e}get runtimeInjected(){return this._runtimeInjected}start(){this.stop(),this._runtimeInjected=!1;let i=0;this._interval=setInterval(()=>{var e;i++;try{const t=this._iframe.contentWindow;if(!t)return;const s=!!(t.__hf||t.__player),n=!!(t.__timelines&&Object.keys(t.__timelines).length>0),o=!!((e=this._iframe.contentDocument)!=null&&e.querySelector("[data-composition-src]"));if(He({hasRuntime:s,hasTimelines:n,hasNestedCompositions:o,runtimeInjected:this._runtimeInjected,attempts:i})){this._injectRuntime();return}if(this._runtimeInjected&&!s)return;const a=this._resolvePlaybackDurationAdapter(t);if(a&&a.getDuration()>0){this.stop();const c=$e(this._iframe.contentDocument);this._callbacks.onReady({duration:a.getDuration(),adapter:a,compositionSize:c});return}}catch{}i>=40&&(this.stop(),this._callbacks.onError("Composition timeline not found after 8s"))},200)}stop(){this._interval!==null&&(clearInterval(this._interval),this._interval=null)}resolveDirectTimelineAdapter(){try{const i=this._iframe.contentWindow;return i?this._resolveDirectTimelineAdapterFromWindow(i):null}catch{return null}}resolveDirectTimelineAdapterFromWindow(i){return this._resolveDirectTimelineAdapterFromWindow(i)}hasRuntimeBridge(i){return Reflect.get(i,"__hf")!==void 0||z(Reflect.get(i,"__player"))}_injectRuntime(){var i,e;this._runtimeInjected=!0;try{const t=this._iframe.contentDocument;if(!t)return;const s=t.createElement("script");s.src=U,(t.head||t.documentElement).appendChild(s),(e=(i=this._callbacks).onRuntimeInjected)==null||e.call(i)}catch{}}_resolveDirectTimelineAdapterFromWindow(i){var a,c;if(this.hasRuntimeBridge(i))return null;const e=Reflect.get(i,"__timelines");if(!z(e))return null;const t=Object.keys(e);if(t.length===0)return null;const s=(c=(a=this._iframe.contentDocument)==null?void 0:a.querySelector("[data-composition-id]"))==null?void 0:c.getAttribute("data-composition-id"),n=s&&s in e?s:t[t.length-1],o=e[n];return We(o)?o:null}_resolvePlaybackDurationAdapter(i){const e=Reflect.get(i,"__player");if(Ue(e))return{kind:"runtime",getDuration:()=>e.getDuration()};const t=this._resolveDirectTimelineAdapterFromWindow(i);return t?{kind:"direct-timeline",timeline:t,getDuration:()=>t.duration()}:null}}const Be=`
2
2
  :host {
3
3
  display: block;
4
4
  position: relative;