hyperframes 0.8.143 → 0.8.145

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 (202) hide show
  1. package/README.md +3 -2
  2. package/dist/{add-Q5EYDUAY.js → add-B6OUH46W.js} +12 -12
  3. package/dist/{animatedGifPrep-H2DUQEZ3.js → animatedGifPrep-MIWRDJIO.js} +7 -7
  4. package/dist/{asset-C7JBYYX4.js → asset-XJ2B2PU3.js} +2 -2
  5. package/dist/{assetCataloger-FRO4G6OU.js → assetCataloger-A5ZLSCMZ.js} +3 -3
  6. package/dist/{auth-FRWLCO36.js → auth-5HOVCZMV.js} +1 -1
  7. package/dist/{autoUpdate-E4OZXQK6.js → autoUpdate-WVNL5K3D.js} +2 -2
  8. package/dist/{backgroundChecks-FSUVHN5L.js → backgroundChecks-IGF54SFH.js} +3 -3
  9. package/dist/backgroundChecksWorker.js +3 -3
  10. package/dist/{batchRender-4U73BYTU.js → batchRender-T6JEGCQV.js} +4 -4
  11. package/dist/{beats-U6KJWF35.js → beats-37T6Y6QP.js} +13 -13
  12. package/dist/{benchmark-5ONT7V7B.js → benchmark-ZVVLOWPP.js} +9 -9
  13. package/dist/{browser-R4DU46IE.js → browser-4SSJOLH4.js} +39 -55
  14. package/dist/{bundleWithLocalizedFonts-VH55VOAL.js → bundleWithLocalizedFonts-XWK423QP.js} +2 -2
  15. package/dist/{capture-OGQAEYKO.js → capture-2SF7YP57.js} +2 -2
  16. package/dist/{capture-26G2DPSI.js → capture-KZXOPBMO.js} +18 -18
  17. package/dist/{catalog-RKORTIUE.js → catalog-NLD4A2C6.js} +12 -12
  18. package/dist/{catch-up-4OBERRQO.js → catch-up-4BSRN6IR.js} +4 -4
  19. package/dist/{check-P2XDN57S.js → check-IA44QQWM.js} +66 -55
  20. package/dist/{checkBrowser-NTGJGAEA.js → checkBrowser-VM35KZMW.js} +81 -30
  21. package/dist/{chunk-LVX6NK36.js → chunk-3IBMBNYY.js} +1 -1
  22. package/dist/{chunk-6XMFEICO.js → chunk-3KU3PFDW.js} +77 -92
  23. package/dist/{chunk-PJU63L6W.js → chunk-4ORLNTET.js} +1 -1
  24. package/dist/{chunk-DF2BHILQ.js → chunk-4QWD6JYN.js} +3 -3
  25. package/dist/{chunk-BT27OYYX.js → chunk-5NRXZGKK.js} +18 -12
  26. package/dist/{chunk-UM2GRYM3.js → chunk-5WVW7P23.js} +3 -3
  27. package/dist/{chunk-I7QGQAZM.js → chunk-6LGNTUZN.js} +7 -7
  28. package/dist/{chunk-LAOCA3MQ.js → chunk-A4Q7W4LV.js} +13 -8
  29. package/dist/{chunk-4PFZPP2N.js → chunk-A6S35NYA.js} +54 -16
  30. package/dist/{chunk-QRKLPWEX.js → chunk-ADF3X6GM.js} +11 -2
  31. package/dist/chunk-AUWHD7RA.js +3753 -0
  32. package/dist/{chunk-W35EKBS6.js → chunk-BFACGEII.js} +2 -2
  33. package/dist/{chunk-HW4AKJ5F.js → chunk-BIAC7IJT.js} +1 -1
  34. package/dist/{chunk-ZLW2V65P.js → chunk-BSQ7XANM.js} +3 -2
  35. package/dist/{chunk-LCSMOLGX.js → chunk-BYSBRF24.js} +69 -8
  36. package/dist/{chunk-2LBBHMKT.js → chunk-CFUXNBWH.js} +1 -1
  37. package/dist/{chunk-BFDJ63J5.js → chunk-DDIVWXN7.js} +1 -1
  38. package/dist/{chunk-KOEWEFHK.js → chunk-DIRJ322I.js} +10 -5
  39. package/dist/{chunk-FVYXDXEV.js → chunk-DWUKJQTO.js} +2 -2
  40. package/dist/{chunk-POLR33RB.js → chunk-EPE2HRJK.js} +15 -17
  41. package/dist/{chunk-UICWP23D.js → chunk-FBCULCAL.js} +3 -3
  42. package/dist/{chunk-F26LCYRY.js → chunk-FDT6KQV4.js} +142 -81
  43. package/dist/{chunk-P7THMINS.js → chunk-FXJJCPPB.js} +1 -1
  44. package/dist/{chunk-BYK73CR7.js → chunk-GBGJ7A3D.js} +5 -5
  45. package/dist/{sherpa-LVIUEAGF.js → chunk-GEMJYBRU.js} +11 -45
  46. package/dist/{chunk-KO5QBV73.js → chunk-GMAJB2P6.js} +1 -1
  47. package/dist/{chunk-KQLGTGE5.js → chunk-GRY3PN3K.js} +2 -2
  48. package/dist/{chunk-7UYBQ6NF.js → chunk-GXJEGZL2.js} +30 -20
  49. package/dist/{chunk-KJJLA674.js → chunk-GZVP4TWN.js} +1 -46
  50. package/dist/{chunk-QVYVUCWD.js → chunk-HB7FJOY4.js} +1 -1
  51. package/dist/{chunk-QFN7NVWM.js → chunk-ICKDMTLA.js} +1 -1
  52. package/dist/{chunk-XONFUK3M.js → chunk-IEIJRMLZ.js} +47 -35
  53. package/dist/{chunk-PAGIICKN.js → chunk-IHTRYDFN.js} +1 -1
  54. package/dist/chunk-IR35BCLK.js +13 -0
  55. package/dist/{chunk-KDPYVTEU.js → chunk-KBB4RG6F.js} +6 -1
  56. package/dist/{chunk-ZQQ3SEIE.js → chunk-KIFHYXPB.js} +99 -31
  57. package/dist/{chunk-TAMQYQGJ.js → chunk-LAFJSYDL.js} +1 -1
  58. package/dist/{chunk-U3X3TPBW.js → chunk-MAYCCGMQ.js} +11 -2
  59. package/dist/{chunk-HC7EVDEL.js → chunk-OB5MJR4W.js} +1 -1
  60. package/dist/{chunk-N3DQEVSI.js → chunk-OTHDVXOJ.js} +8 -5
  61. package/dist/{chunk-Y6QL2LGO.js → chunk-PLR7Z6TC.js} +1 -1
  62. package/dist/{chunk-OBXQRJWQ.js → chunk-QATWIE4K.js} +1 -1
  63. package/dist/{chunk-HLYOEIWM.js → chunk-QLSM7K5S.js} +2 -2
  64. package/dist/{chunk-LW6HO6U3.js → chunk-R42WWQVB.js} +1 -1
  65. package/dist/{chunk-HMT2RPZU.js → chunk-U5QY7KTN.js} +13 -9
  66. package/dist/chunk-UPFUC4DB.js +136 -0
  67. package/dist/{chunk-33RZPZ4K.js → chunk-UXO2L7HJ.js} +366 -156
  68. package/dist/{chunk-GNBGPUJ7.js → chunk-VHFEMFYL.js} +3 -3
  69. package/dist/{chunk-4M4EC7JX.js → chunk-VRW6EBHV.js} +12 -1
  70. package/dist/{chunk-VIVBA6E6.js → chunk-XBX4QJP7.js} +1 -1
  71. package/dist/{chunk-CLOH4LIB.js → chunk-XIHCMVMG.js} +2 -2
  72. package/dist/{chunk-TVCRUG2S.js → chunk-ZEUONDQG.js} +1 -1
  73. package/dist/{chunk-OSSHSIMD.js → chunk-ZF7SXQJ7.js} +1 -1
  74. package/dist/{chunk-5FISWJ37.js → chunk-ZIYZ77MR.js} +4 -4
  75. package/dist/{chunk-3NE7ZYU2.js → chunk-ZSVUAVMT.js} +3 -3
  76. package/dist/{clean-YHGPY33K.js → clean-RDKJB5FK.js} +18 -18
  77. package/dist/cli.js +68 -56
  78. package/dist/{cloud-DOFI5ISR.js → cloud-QVPVVNCW.js} +4 -4
  79. package/dist/{cloudrun-KTZ4XDHL.js → cloudrun-3RE2UCQG.js} +4 -4
  80. package/dist/{compare-SMMIZN2C.js → compare-LEDOY7MO.js} +25 -25
  81. package/dist/{compiler-TEXQWW6N.js → compiler-F54OZZPM.js} +10 -4
  82. package/dist/{component-B3GCNGSS.js → component-N42M67WY.js} +3 -3
  83. package/dist/{compositions-OQNZZTKF.js → compositions-VB2J2LZI.js} +11 -11
  84. package/dist/{delete-EL5LVSEP.js → delete-Q6RWMJ4Z.js} +2 -2
  85. package/dist/{dist-5UVIRMSM.js → dist-KDJTFJHA.js} +2 -2
  86. package/dist/{dist-XN234YFQ.js → dist-Q4BI5A73.js} +4 -4
  87. package/dist/{doctor-UOL3OI2A.js → doctor-JMMUHDRV.js} +13 -13
  88. package/dist/{events-K2DB2PBC.js → events-6ZBSIBE5.js} +2 -2
  89. package/dist/{events-NIZBS6S7.js → events-RGUAHIBW.js} +3 -3
  90. package/dist/{feedback-QMP4E6L7.js → feedback-FIID6MZW.js} +9 -9
  91. package/dist/{ffmpeg-QIUFEFTY.js → ffmpeg-T5SH2EFJ.js} +3 -2
  92. package/dist/{figma-2AUJRNVC.js → figma-BL3JJC36.js} +3 -3
  93. package/dist/fontLocalizeCli.js +9 -9
  94. package/dist/{get-P5NC7SRM.js → get-P46GS7S6.js} +2 -2
  95. package/dist/{gpuPolicy-7N5MCE2G.js → gpuPolicy-AQ2BPLBK.js} +11 -9
  96. package/dist/{grade-compare-HV5AFZ6P.js → grade-compare-GDCWU7ZZ.js} +27 -27
  97. package/dist/{help-3TSTXBLN.js → help-HJR3RWFG.js} +2 -2
  98. package/dist/{history-D65XFJ6D.js → history-GGO5AWJB.js} +5 -5
  99. package/dist/hyperframe-runtime.js +59 -59
  100. package/dist/hyperframe.manifest.json +1 -1
  101. package/dist/hyperframe.runtime.iife.js +59 -59
  102. package/dist/hyperframes-player.global.js +3 -3
  103. package/dist/{info-TXV7MLFO.js → info-3GFWUBJC.js} +8 -8
  104. package/dist/{init-OSDMJZJV.js → init-36OPU2ZG.js} +35 -36
  105. package/dist/{inspect-RQQSAYIJ.js → inspect-F2HEL5ON.js} +26 -26
  106. package/dist/{installer-CDOB32HE.js → installer-NI6P6GC4.js} +5 -5
  107. package/dist/{keyframes-V75Q6GRM.js → keyframes-7OY3LMAZ.js} +6 -6
  108. package/dist/{lambda-RODV4RCX.js → lambda-6GJIWNJ3.js} +5 -5
  109. package/dist/{layout-IZAI5SFC.js → layout-FTMLNL5A.js} +26 -26
  110. package/dist/{lint-PLXOXY5R.js → lint-U6POHUON.js} +8 -8
  111. package/dist/{lintProject-OQ6H6XBR.js → lintProject-UBZ3TDHU.js} +2 -2
  112. package/dist/{list-BQBPNKDZ.js → list-IP5KI5Q2.js} +2 -2
  113. package/dist/{login-NP6F4FHC.js → login-4VWTVPHG.js} +4 -4
  114. package/dist/{manager-CT3D67CG.js → manager-BPSR6D3V.js} +2 -2
  115. package/dist/{manager-GXYF4AVO.js → manager-YKMHR6LN.js} +8 -5
  116. package/dist/{media-treatment-PXGMZ4A4.js → media-treatment-XGV44AGV.js} +16 -13
  117. package/dist/{models-CEZM6XZ7.js → models-UCXB6UR5.js} +59 -19
  118. package/dist/{motionShot-R4GHYWYM.js → motionShot-WPVNBXKA.js} +21 -22
  119. package/dist/{normalize-H6KUHHEI.js → normalize-U3SL5VG3.js} +2 -2
  120. package/dist/{normalize-audio-MQ7NFCOV.js → normalize-audio-TYJ3UEHO.js} +6 -6
  121. package/dist/{open-AKQTGNXF.js → open-HENOLVB2.js} +4 -4
  122. package/dist/parakeetRunner-VFQ6WFTD.js +67 -0
  123. package/dist/{pipeline-SYJYP2RM.js → pipeline-6WPSC3H4.js} +10 -9
  124. package/dist/{play-NBH4B7PL.js → play-OI53WNUM.js} +19 -19
  125. package/dist/{preflight-Y5DN5D37.js → preflight-B4AFK3RG.js} +4 -4
  126. package/dist/{present-XAX55CFS.js → present-NGMEQ4NO.js} +15 -15
  127. package/dist/{preview-OLANKNFA.js → preview-VT2HWRWZ.js} +19 -19
  128. package/dist/{producer-Q6YNZZUJ.js → producer-7TYEAUF7.js} +1 -1
  129. package/dist/{projectConfig-EM26P45P.js → projectConfig-B2AF5DXY.js} +7 -7
  130. package/dist/{publication-OXWJZKSX.js → publication-2PANQVC6.js} +3 -3
  131. package/dist/{publish-4VBWP2UB.js → publish-O5OL42BG.js} +11 -11
  132. package/dist/{remove-background-REB7427G.js → remove-background-T2JM6UVP.js} +11 -10
  133. package/dist/{render-K25YOG3M.js → render-OLPKOJRU.js} +11 -11
  134. package/dist/{render-3CVZ2SZG.js → render-W7OFXDOJ.js} +4 -4
  135. package/dist/{render-TSE75QUL.js → render-Z253WHBK.js} +26 -26
  136. package/dist/{render-batch-GGUOK3DS.js → render-batch-46IIBFKL.js} +4 -4
  137. package/dist/{renderCancellation-PZRWB53I.js → renderCancellation-QTZOCDJ2.js} +10 -9
  138. package/dist/renderSetupWorker.js +32 -44
  139. package/dist/{resolver-S5VK6UCB.js → resolver-J2PL5FVJ.js} +5 -5
  140. package/dist/sherpa-ZF42V3RN.js +75 -0
  141. package/dist/sherpaWorker.js +2 -1
  142. package/dist/skills/hyperframes/scripts/lib/frame-packets-core.mjs +2 -20
  143. package/dist/skills/hyperframes/scripts/lib/main-module.mjs +13 -0
  144. package/dist/skills/hyperframes/scripts/lib/main-module.test.mjs +51 -0
  145. package/dist/skills/hyperframes/scripts/plugin-cli.mjs +4 -3
  146. package/dist/skills/hyperframes/scripts/plugin-cli.test.mjs +5 -1
  147. package/dist/skills/hyperframes-cli/SKILL.md +2 -0
  148. package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +1 -1
  149. package/dist/skills/media-use/audio/scripts/heygen-voice.mjs +2 -2
  150. package/dist/skills/media-use/audio/scripts/lib/main-module.mjs +13 -0
  151. package/dist/skills/media-use/scripts/lib/cube-validate.mjs +2 -3
  152. package/dist/skills/media-use/scripts/lib/main-module.mjs +13 -0
  153. package/dist/{skills-I65FU5HD.js → skills-ACDOO3PX.js} +7 -7
  154. package/dist/{skillsUpdateCheck-J57RNNIV.js → skillsUpdateCheck-L5OXVVPU.js} +3 -3
  155. package/dist/{snapshot-YROOGY22.js → snapshot-UUVNZOW5.js} +28 -28
  156. package/dist/{src-JO5JOV7Y.js → src-BSLKXEGX.js} +10 -6
  157. package/dist/{src-X426BZAG.js → src-KS3AWFGT.js} +8 -8
  158. package/dist/{staticProjectServer-5VMBS262.js → staticProjectServer-2TTVGPQH.js} +15 -15
  159. package/dist/studio/assets/{hyperframes-player-BXSuksFh.js → hyperframes-player-DZ5JrMDg.js} +3 -3
  160. package/dist/studio/assets/{index-FgyO_5Kv.js → index-BOs6C0aZ.js} +1 -1
  161. package/dist/studio/assets/{index-BgOVCqjo.js → index-BqFRhNZa.js} +1 -1
  162. package/dist/studio/assets/{index-J7jpL4pj.js → index-D8W0a0Z9.js} +149 -149
  163. package/dist/studio/{chunk-TFLU2MGI.js → chunk-6JY3MTIX.js} +108 -2
  164. package/dist/studio/{chunk-H2DUOXTF.js → chunk-NZPJUZKT.js} +100 -4
  165. package/dist/studio/{chunk-UYWON5AX.js → chunk-TP6D3U37.js} +7 -100
  166. package/dist/studio/{chunk-LOVBLSMR.js → chunk-Y2OHHNM2.js} +35 -19
  167. package/dist/studio/{domEditingLayers-KBTPQKGA.js → domEditingLayers-PTP2ICGM.js} +3 -3
  168. package/dist/studio/index.d.ts +8 -5
  169. package/dist/studio/index.html +1 -1
  170. package/dist/studio/index.js +545 -495
  171. package/dist/studio/player.js +3 -3
  172. package/dist/studio/ui.d.ts +4 -5
  173. package/dist/studio/ui.js +1 -1
  174. package/dist/{studio-api-VRBZUGAE.js → studio-api-WYWF7XRC.js} +9 -9
  175. package/dist/{studioServer-DBNKZ6I6.js → studioServer-3FG4YTP7.js} +72 -54
  176. package/dist/{telemetry-CXAX3TO3.js → telemetry-PAOOB4T4.js} +3 -3
  177. package/dist/{timeline-VQ34WH7J.js → timeline-JIIJKKPC.js} +69 -47
  178. package/dist/{tokens-62R7VFAZ.js → tokens-3QRAM75Z.js} +2 -2
  179. package/dist/{transcribe-XOHPPL2O.js → transcribe-QSBP5MUG.js} +115 -51
  180. package/dist/{transcribe-7KR7IPJA.js → transcribe-SZB6UMXE.js} +14 -12
  181. package/dist/{tts-MUV42JXT.js → tts-B6AHFQEO.js} +1 -1
  182. package/dist/{updateCheck-POYNH3B5.js → updateCheck-V3DSB26K.js} +2 -2
  183. package/dist/{upgrade-NBNOT7J2.js → upgrade-L5GISOEV.js} +2 -2
  184. package/dist/{urlDownloader-3NS63A7B.js → urlDownloader-52FERT4X.js} +6 -6
  185. package/dist/{validate-Y2QDHAEP.js → validate-HVVLX7KO.js} +20 -20
  186. package/dist/{video-SJDMTSTL.js → video-MEOWRMFG.js} +7 -7
  187. package/package.json +1 -1
  188. package/dist/chunk-6TPZSTCL.js +0 -3681
  189. package/dist/studio/chunk-EEXSYY5F.js.map +0 -1
  190. package/dist/studio/chunk-H2DUOXTF.js.map +0 -1
  191. package/dist/studio/chunk-LOVBLSMR.js.map +0 -1
  192. package/dist/studio/chunk-PZ5AY32C.js.map +0 -1
  193. package/dist/studio/chunk-TFLU2MGI.js.map +0 -1
  194. package/dist/studio/chunk-UYWON5AX.js.map +0 -1
  195. package/dist/studio/domEditingLayers-KBTPQKGA.js.map +0 -1
  196. package/dist/studio/index.css.map +0 -1
  197. package/dist/studio/index.js.map +0 -1
  198. package/dist/studio/player.js.map +0 -1
  199. package/dist/studio/styles/tailwind-preset.js.map +0 -1
  200. package/dist/studio/ui.js.map +0 -1
  201. package/dist/{screenshotCapture-TEUIWXWN.js → screenshotCapture-3JXXUZND.js} +3 -3
  202. package/dist/{synthesize-C3IWDAXF.js → synthesize-UCI4X5O7.js} +4 -4
@@ -16,13 +16,14 @@ import {
16
16
  EncoderInterruptedError,
17
17
  encoderFailureError,
18
18
  prepareAnimatedGifInputs
19
- } from "./chunk-KQLGTGE5.js";
19
+ } from "./chunk-GRY3PN3K.js";
20
20
  import {
21
21
  createStudioPositionSeekReapplyScript
22
22
  } from "./chunk-KC5XXX3X.js";
23
23
  import {
24
24
  BROWSER_GPU_NOT_SOFTWARE,
25
25
  CaptureFailure,
26
+ DEFAULT_CONFIG,
26
27
  DrawElementVerificationError,
27
28
  HDR_AUTO_PROMOTION_PIPELINE,
28
29
  HF_AUDIO_GROUP_TAG,
@@ -68,6 +69,7 @@ import {
68
69
  decodePng,
69
70
  decodePngToRgb48le,
70
71
  deriveBeginFrameProbeTimeTicks,
72
+ describeFfmpegFailure,
71
73
  detectTransfer,
72
74
  distributeFrames,
73
75
  distributeFramesInterleaved,
@@ -142,7 +144,7 @@ import {
142
144
  validateEngineConfigSnapshot,
143
145
  verifyDiskDrawElementSamples,
144
146
  writeCapturedFrame
145
- } from "./chunk-33RZPZ4K.js";
147
+ } from "./chunk-UXO2L7HJ.js";
146
148
  import {
147
149
  assignBundledRuntimeCompositionIds,
148
150
  buildVariablesByCompScript,
@@ -150,9 +152,12 @@ import {
150
152
  emitRootCompositionVariableStyles,
151
153
  ensureExternalLinkTag,
152
154
  ensureExternalScriptTag,
155
+ extractStandaloneEntryFromIndex,
153
156
  inlineSubCompositions,
157
+ isTemplateEntry,
158
+ parsesAsScript,
154
159
  prepareFlattenedInnerRoot
155
- } from "./chunk-F26LCYRY.js";
160
+ } from "./chunk-FDT6KQV4.js";
156
161
  import {
157
162
  LOW_MEMORY_TOTAL_MB_THRESHOLD,
158
163
  getCgroupMemoryLimitMb,
@@ -173,7 +178,7 @@ import {
173
178
  resolveAbsoluteMediaStartSeconds,
174
179
  resolveAuthoredTimingWindow,
175
180
  toFps
176
- } from "./chunk-4M4EC7JX.js";
181
+ } from "./chunk-VRW6EBHV.js";
177
182
  import {
178
183
  COMPOSITION_SOURCE_URL,
179
184
  HF_COLOR_GRADING_ATTR,
@@ -200,7 +205,7 @@ import {
200
205
  shouldClampResolvedMediaDuration,
201
206
  sourceTimeAt,
202
207
  styleElementsFor
203
- } from "./chunk-6TPZSTCL.js";
208
+ } from "./chunk-AUWHD7RA.js";
204
209
  import {
205
210
  MAX_AUDIO_GAIN
206
211
  } from "./chunk-YA62XGXS.js";
@@ -224,7 +229,7 @@ import {
224
229
  } from "./chunk-TWWSYAKJ.js";
225
230
  import {
226
231
  lintHyperframeHtml
227
- } from "./chunk-XONFUK3M.js";
232
+ } from "./chunk-IEIJRMLZ.js";
228
233
  import {
229
234
  isUnresolvedAssetPlaceholder,
230
235
  readProjectFile,
@@ -240,7 +245,7 @@ import {
240
245
  rewriteAssetPaths,
241
246
  rewriteCssAssetUrls,
242
247
  rewriteInlineStyleAssetUrls
243
- } from "./chunk-ZLW2V65P.js";
248
+ } from "./chunk-BSQ7XANM.js";
244
249
  import {
245
250
  parseHTML
246
251
  } from "./chunk-SDYDNHEE.js";
@@ -5942,8 +5947,8 @@ function coalesceHeadStylesAndBodyScripts(html) {
5942
5947
  const { document: document2 } = parseHTML(html);
5943
5948
  const head = document2.querySelector("head");
5944
5949
  const body = document2.querySelector("body");
5945
- if (!head) return html;
5946
- const styleEls = Array.from(head.querySelectorAll("style"));
5950
+ if (!head && !body) return html;
5951
+ const styleEls = head ? Array.from(head.querySelectorAll("style")) : [];
5947
5952
  const importRe = /@import\s+url\([^)]*\)\s*;|@import\s+["'][^"']+["']\s*;/gi;
5948
5953
  for (const run of styleEls.length > 1 ? headStyleRuns(styleEls) : []) {
5949
5954
  const imports = [];
@@ -5973,6 +5978,7 @@ function coalesceHeadStylesAndBodyScripts(html) {
5973
5978
  Array.from(body.querySelectorAll("script"))
5974
5979
  )) {
5975
5980
  const mergedJs = members.map((el) => (el.textContent || "").trim()).filter(Boolean).join("\n;\n").trim();
5981
+ if (mergedJs && !parsesAsScript(mergedJs)) continue;
5976
5982
  for (const el of members) el.remove();
5977
5983
  if (!mergedJs) continue;
5978
5984
  const script = document2.createElement("script");
@@ -6072,9 +6078,12 @@ function inlineSubCompositions2(html, subCompositions, projectDir, variableOverr
6072
6078
  let pending = variablesByCompScript ? [variablesByCompScript] : [];
6073
6079
  const flushInline = () => {
6074
6080
  if (!pending.length) return;
6075
- const scriptEl = document2.createElement("script");
6076
- scriptEl.textContent = pending.join("\n;\n");
6077
- body.appendChild(scriptEl);
6081
+ const joined = pending.join("\n;\n");
6082
+ for (const text of parsesAsScript(joined) ? [joined] : pending) {
6083
+ const scriptEl = document2.createElement("script");
6084
+ scriptEl.textContent = text;
6085
+ body.appendChild(scriptEl);
6086
+ }
6078
6087
  pending = [];
6079
6088
  };
6080
6089
  for (const item of result.scriptItems) {
@@ -7300,7 +7309,8 @@ async function runProbeStage(input) {
7300
7309
  width,
7301
7310
  height,
7302
7311
  needsAlpha,
7303
- deviceScaleFactor
7312
+ deviceScaleFactor,
7313
+ subTimelineWaitMemo
7304
7314
  } = input;
7305
7315
  let { compiled } = input;
7306
7316
  const probeCfg = cfg.forceScreenshot === forceScreenshot ? cfg : { ...cfg, forceScreenshot };
@@ -7356,7 +7366,8 @@ async function runProbeStage(input) {
7356
7366
  variables: job.config.variables,
7357
7367
  deviceScaleFactor,
7358
7368
  motionBlur,
7359
- requiresWebGpu: compositionRequiresWebGpu(compiled.html)
7369
+ requiresWebGpu: compositionRequiresWebGpu(compiled.html),
7370
+ subTimelineWaitMemo
7360
7371
  };
7361
7372
  const PROBE_MAX_ATTEMPTS = 2;
7362
7373
  for (let attempt = 1; attempt <= PROBE_MAX_ATTEMPTS; attempt++) {
@@ -9929,8 +9940,9 @@ function sanitizeProbeFailure(reason, paths) {
9929
9940
  async function padOrTrimAudioToVideoFrameCount(input) {
9930
9941
  const probeVideo = input.probeVideoFrameInfo ?? ((videoPath) => defaultProbeVideoFrameInfo(videoPath, input.signal));
9931
9942
  const probeAudio = input.probeAudioInfo ?? defaultProbeAudioInfo;
9932
- const runner = input.runFfmpeg ?? ((args) => defaultRunFfmpeg(args, input.signal));
9933
- const probeTruePeak = input.probeAudioTruePeakDbfs ?? (input.runFfmpeg ? void 0 : defaultProbeAudioTruePeakDbfs);
9943
+ const timeoutMs = input.timeoutMs ?? DEFAULT_CONFIG.ffmpegProcessTimeout;
9944
+ const runner = input.runFfmpeg ?? ((args) => defaultRunFfmpeg(args, timeoutMs, input.signal));
9945
+ const probeTruePeak = input.probeAudioTruePeakDbfs ?? (input.runFfmpeg ? void 0 : (audioPath, signal) => defaultProbeAudioTruePeakDbfs(audioPath, timeoutMs, signal));
9934
9946
  const [videoResult, audioResult] = await Promise.allSettled([
9935
9947
  probeVideo(input.videoPath),
9936
9948
  probeAudio(input.audioPath, input.signal)
@@ -10166,13 +10178,13 @@ async function defaultProbeAudioInfo(audioPath, signal) {
10166
10178
  audioCodec: metadata.audioCodec
10167
10179
  };
10168
10180
  }
10169
- async function defaultProbeAudioTruePeakDbfs(audioPath, signal) {
10181
+ async function defaultProbeAudioTruePeakDbfs(audioPath, timeoutMs, signal) {
10170
10182
  const result = await runFfmpeg(
10171
10183
  ["-i", audioPath, "-map", "0:a:0", "-vn", "-af", "ebur128=peak=true", "-f", "null", "-"],
10172
- { signal }
10184
+ { signal, timeout: timeoutMs }
10173
10185
  );
10174
10186
  if (!result.success) {
10175
- throw new Error(`[audioPadTrim] ${formatFfmpegError(result.exitCode, result.stderr)}`);
10187
+ throw new Error(`[audioPadTrim] ${describeFfmpegFailure(result, timeoutMs)}`);
10176
10188
  }
10177
10189
  const matches = [...result.stderr.matchAll(/^\s*Peak:\s*([+-]?(?:[\d.]+|inf)) dBFS$/gim)];
10178
10190
  const token = matches.at(-1)?.[1]?.toLowerCase();
@@ -10182,12 +10194,12 @@ async function defaultProbeAudioTruePeakDbfs(audioPath, signal) {
10182
10194
  }
10183
10195
  return value;
10184
10196
  }
10185
- async function defaultRunFfmpeg(args, signal) {
10186
- const result = await runFfmpeg(args, { signal });
10197
+ async function defaultRunFfmpeg(args, timeoutMs, signal) {
10198
+ const result = await runFfmpeg(args, { signal, timeout: timeoutMs });
10187
10199
  if (result.success) return { success: true };
10188
10200
  return {
10189
10201
  success: false,
10190
- error: `[audioPadTrim] ${formatFfmpegError(result.exitCode, result.stderr)}`,
10202
+ error: `[audioPadTrim] ${describeFfmpegFailure(result, timeoutMs)}`,
10191
10203
  failureReason: result.failureReason
10192
10204
  };
10193
10205
  }
@@ -10260,6 +10272,7 @@ async function assembleOutput(input, onSecondsWritten) {
10260
10272
  outputPath,
10261
10273
  hasAudio,
10262
10274
  format,
10275
+ ffmpegProcessTimeout,
10263
10276
  abortSignal,
10264
10277
  assertNotAborted
10265
10278
  } = input;
@@ -10273,7 +10286,8 @@ async function assembleOutput(input, onSecondsWritten) {
10273
10286
  videoPath: videoOnlyPath,
10274
10287
  audioPath: audioOutputPath,
10275
10288
  outputPath: normalizedAudioPath,
10276
- signal: abortSignal
10289
+ signal: abortSignal,
10290
+ timeoutMs: ffmpegProcessTimeout
10277
10291
  });
10278
10292
  assertNotAborted();
10279
10293
  if (!normalizeResult.success) {
@@ -10289,7 +10303,8 @@ async function assembleOutput(input, onSecondsWritten) {
10289
10303
  outputPath,
10290
10304
  abortSignal,
10291
10305
  {
10292
- audioCodec: "aac"
10306
+ audioCodec: "aac",
10307
+ ffmpegProcessTimeout
10293
10308
  },
10294
10309
  job.config.fps,
10295
10310
  onSecondsWritten
@@ -10306,7 +10321,7 @@ async function assembleOutput(input, onSecondsWritten) {
10306
10321
  videoOnlyPath,
10307
10322
  outputPath,
10308
10323
  abortSignal,
10309
- void 0,
10324
+ { ffmpegProcessTimeout },
10310
10325
  job.config.fps,
10311
10326
  onSecondsWritten
10312
10327
  );
@@ -10324,7 +10339,8 @@ async function runHlsPackaging(input, normalizedAudioPath) {
10324
10339
  input.outputPath,
10325
10340
  {
10326
10341
  segmentSeconds: input.hlsSegmentSeconds ?? DEFAULT_HLS_SEGMENT_SECONDS,
10327
- signal: input.abortSignal
10342
+ signal: input.abortSignal,
10343
+ ffmpegProcessTimeout: input.ffmpegProcessTimeout
10328
10344
  }
10329
10345
  );
10330
10346
  input.assertNotAborted();
@@ -10786,36 +10802,6 @@ function createRenderJob(config) {
10786
10802
  warnings: []
10787
10803
  };
10788
10804
  }
10789
- function normalizeCompositionSrcPath(srcPath) {
10790
- return srcPath.replace(/\\/g, "/").replace(/^\.\//, "");
10791
- }
10792
- function readSceneRootDuration(entryHtml) {
10793
- if (!entryHtml) return null;
10794
- const { document: document2 } = parseHTML(entryHtml);
10795
- const template = document2.querySelector("template");
10796
- const scope = template ? parseHTML(template.innerHTML).document : document2;
10797
- const root = scope.querySelector("[data-composition-id]");
10798
- return root?.getAttribute("data-duration") ?? null;
10799
- }
10800
- function createStandaloneEntryRenderClone(root, host, sceneDuration) {
10801
- const hostClone = host.cloneNode(true);
10802
- hostClone.setAttribute("data-start", "0");
10803
- if (root === host) return hostClone;
10804
- const rootClone = root.cloneNode(false);
10805
- if (sceneDuration != null) {
10806
- rootClone.setAttribute("data-duration", sceneDuration);
10807
- } else {
10808
- rootClone.removeAttribute("data-duration");
10809
- }
10810
- rootClone.appendChild(hostClone);
10811
- return rootClone;
10812
- }
10813
- function replaceBodyWithRenderClone(body, renderClone) {
10814
- while (body.firstChild) {
10815
- body.removeChild(body.firstChild);
10816
- }
10817
- body.appendChild(renderClone);
10818
- }
10819
10805
  function explainStreamingEncodeGate(cfg, outputFormat, workerCount, durationSeconds, forceParallelStream = false) {
10820
10806
  if (!cfg.enableStreamingEncode) return { enabled: false, reason: "disabled_by_config" };
10821
10807
  if (outputFormat === "png-sequence" || outputFormat === "gif") {
@@ -11212,25 +11198,6 @@ function resolveCaptureForceScreenshotForPageSideCompositing(args) {
11212
11198
  function shouldDiscardProbeSessionForPageSideCompositing(args) {
11213
11199
  return args.hasProbeSession && args.usePageSideCompositing;
11214
11200
  }
11215
- function extractStandaloneEntryFromIndex(indexHtml, entryFile, entryHtml) {
11216
- const normalizedEntryFile = normalizeCompositionSrcPath(entryFile);
11217
- const { document: document2 } = parseHTML(indexHtml);
11218
- const body = document2.querySelector("body");
11219
- if (!body) return null;
11220
- const hosts = Array.from(document2.querySelectorAll("[data-composition-src]"));
11221
- const host = hosts.find(
11222
- (candidate) => normalizeCompositionSrcPath(candidate.getAttribute("data-composition-src") || "") === normalizedEntryFile
11223
- );
11224
- if (!host) return null;
11225
- const root = Array.from(body.children).find(
11226
- (candidate) => candidate.hasAttribute("data-composition-id")
11227
- ) ?? null;
11228
- if (!root) return null;
11229
- const sceneDuration = readSceneRootDuration(entryHtml) ?? host.getAttribute("data-duration");
11230
- const renderClone = createStandaloneEntryRenderClone(root, host, sceneDuration);
11231
- replaceBodyWithRenderClone(body, renderClone);
11232
- return document2.toString();
11233
- }
11234
11201
  function deVerifyFallbackTelemetry(err) {
11235
11202
  const details = getDrawElementVerificationDetails(err);
11236
11203
  return {
@@ -11415,7 +11382,7 @@ async function executeRenderPipeline(input) {
11415
11382
  }
11416
11383
  assertNotAborted();
11417
11384
  const rawEntry = readFileSync7(htmlPath, "utf-8");
11418
- if (entryFile !== "index.html" && rawEntry.trimStart().startsWith("<template")) {
11385
+ if (entryFile !== "index.html" && isTemplateEntry(rawEntry)) {
11419
11386
  const wrapperPath = join25(workDir, "standalone-entry.html");
11420
11387
  const projectIndexPath = join25(projectDir, "index.html");
11421
11388
  if (!existsSync15(projectIndexPath)) {
@@ -11519,6 +11486,7 @@ async function executeRenderPipeline(input) {
11519
11486
  cfg.protocolTimeout = scaledProtocolTimeout;
11520
11487
  updateCaptureObservability({ protocolTimeoutMs: scaledProtocolTimeout });
11521
11488
  }
11489
+ const subTimelineWaitMemo = {};
11522
11490
  const probeResult = await observeRenderStage(
11523
11491
  observability,
11524
11492
  "browser_probe",
@@ -11537,7 +11505,8 @@ async function executeRenderPipeline(input) {
11537
11505
  width,
11538
11506
  height,
11539
11507
  needsAlpha,
11540
- deviceScaleFactor
11508
+ deviceScaleFactor,
11509
+ subTimelineWaitMemo
11541
11510
  }),
11542
11511
  // Browser probe is pre-capture; report `browser calibrating` so a
11543
11512
  // slow probe (~64s SwiftShader warm-up on Windows was the reported
@@ -11767,6 +11736,7 @@ async function executeRenderPipeline(input) {
11767
11736
  ...captureOptions,
11768
11737
  videoMetadataHints,
11769
11738
  skipReadinessVideoIds: videoReadinessSkipIds,
11739
+ subTimelineWaitMemo,
11770
11740
  // Probe-resolved duration: drawElement self-verification derives its
11771
11741
  // sample frame indices from this so they land inside the drained range.
11772
11742
  compositionDurationSeconds: job.duration,
@@ -12830,6 +12800,7 @@ async function executeRenderPipeline(input) {
12830
12800
  hasAudio,
12831
12801
  format: outputFormat,
12832
12802
  hlsSegmentSeconds,
12803
+ ffmpegProcessTimeout: cfg.ffmpegProcessTimeout,
12833
12804
  abortSignal: executionSignal,
12834
12805
  assertNotAborted,
12835
12806
  onProgress
@@ -13631,7 +13602,10 @@ function prepareHyperframeLintBody(body) {
13631
13602
  return { error: "Missing lint source: provide projectDir, files, or html" };
13632
13603
  }
13633
13604
  async function runHyperframeLint(prepared) {
13634
- return lintHyperframeHtml(prepared.html, { filePath: prepared.entryFile });
13605
+ return lintHyperframeHtml(prepared.html, {
13606
+ filePath: prepared.entryFile,
13607
+ compSrcPath: prepared.entryFile
13608
+ });
13635
13609
  }
13636
13610
 
13637
13611
  // ../producer/src/services/healthWorker.ts
@@ -14326,7 +14300,7 @@ function startServer(options = {}) {
14326
14300
  });
14327
14301
  async function shutdown(signal) {
14328
14302
  log.info(`Received ${signal}, shutting down`);
14329
- const { drainBrowserPool } = await import("./src-JO5JOV7Y.js");
14303
+ const { drainBrowserPool } = await import("./src-BSLKXEGX.js");
14330
14304
  await drainBrowserPool().catch(() => {
14331
14305
  });
14332
14306
  const handle = await Promise.race([
@@ -15496,7 +15470,8 @@ async function buildLocalExecutionPlan(projectDir, config, executionPlanDir, opt
15496
15470
  width,
15497
15471
  height,
15498
15472
  needsAlpha,
15499
- deviceScaleFactor
15473
+ deviceScaleFactor,
15474
+ subTimelineWaitMemo: {}
15500
15475
  });
15501
15476
  compiled = probeResult.compiled;
15502
15477
  job.duration = probeResult.duration;
@@ -15510,7 +15485,7 @@ async function buildLocalExecutionPlan(projectDir, config, executionPlanDir, opt
15510
15485
  if (probeResult.fileServer) closeFileServerSafely(probeResult.fileServer, "plan", log);
15511
15486
  if (probeResult.probeSession) {
15512
15487
  try {
15513
- const { closeCaptureSession: closeCaptureSession2 } = await import("./src-JO5JOV7Y.js");
15488
+ const { closeCaptureSession: closeCaptureSession2 } = await import("./src-BSLKXEGX.js");
15514
15489
  await closeCaptureSession2(probeResult.probeSession);
15515
15490
  } catch (err) {
15516
15491
  log.warn("[plan] probe session close failed", {
@@ -16532,6 +16507,7 @@ async function assemble(planDir, chunkPaths, audioPath, outputPath, options) {
16532
16507
  const log = options?.logger ?? defaultLogger;
16533
16508
  const abortSignal = options?.abortSignal;
16534
16509
  const cfr = options?.cfr === true;
16510
+ const { ffmpegProcessTimeout } = resolveConfig();
16535
16511
  const planJsonPath = join36(planDir, "plan.json");
16536
16512
  const chunksJsonPath = join36(planDir, "meta", "chunks.json");
16537
16513
  if (!existsSync24(planJsonPath)) {
@@ -16571,10 +16547,13 @@ async function assemble(planDir, chunkPaths, audioPath, outputPath, options) {
16571
16547
  const remuxArgs = ["-i", chunkPaths[0], "-c", "copy", "-r", fpsArg];
16572
16548
  appendRenderProvenanceArgs(remuxArgs, concatOutputPath);
16573
16549
  remuxArgs.push("-y", concatOutputPath);
16574
- const remuxResult = await runFfmpeg(remuxArgs, { signal: abortSignal });
16550
+ const remuxResult = await runFfmpeg(remuxArgs, {
16551
+ signal: abortSignal,
16552
+ timeout: ffmpegProcessTimeout
16553
+ });
16575
16554
  if (!remuxResult.success) {
16576
16555
  throw encoderFailureError("[assemble] ffmpeg single-chunk remux failed", {
16577
- error: `exit ${remuxResult.exitCode}: ${remuxResult.stderr.slice(-400)}`,
16556
+ error: describeFfmpegFailure(remuxResult, ffmpegProcessTimeout),
16578
16557
  failureReason: remuxResult.failureReason
16579
16558
  });
16580
16559
  }
@@ -16597,10 +16576,13 @@ async function assemble(planDir, chunkPaths, audioPath, outputPath, options) {
16597
16576
  ];
16598
16577
  appendRenderProvenanceArgs(concatArgs, concatOutputPath);
16599
16578
  concatArgs.push("-y", concatOutputPath);
16600
- const concatResult = await runFfmpeg(concatArgs, { signal: abortSignal });
16579
+ const concatResult = await runFfmpeg(concatArgs, {
16580
+ signal: abortSignal,
16581
+ timeout: ffmpegProcessTimeout
16582
+ });
16601
16583
  if (!concatResult.success) {
16602
16584
  throw encoderFailureError("[assemble] ffmpeg concat-copy failed", {
16603
- error: `exit ${concatResult.exitCode}: ${concatResult.stderr.slice(-400)}`,
16585
+ error: describeFfmpegFailure(concatResult, ffmpegProcessTimeout),
16604
16586
  failureReason: concatResult.failureReason
16605
16587
  });
16606
16588
  }
@@ -16641,10 +16623,13 @@ async function assemble(planDir, chunkPaths, audioPath, outputPath, options) {
16641
16623
  ];
16642
16624
  appendRenderProvenanceArgs(cfrArgs, cfrOutputPath);
16643
16625
  cfrArgs.push("-y", cfrOutputPath);
16644
- const cfrResult = await runFfmpeg(cfrArgs, { signal: abortSignal });
16626
+ const cfrResult = await runFfmpeg(cfrArgs, {
16627
+ signal: abortSignal,
16628
+ timeout: ffmpegProcessTimeout
16629
+ });
16645
16630
  if (!cfrResult.success) {
16646
16631
  throw encoderFailureError("[assemble] ffmpeg cfr re-encode failed", {
16647
- error: `exit ${cfrResult.exitCode}: ${cfrResult.stderr.slice(-400)}`,
16632
+ error: describeFfmpegFailure(cfrResult, ffmpegProcessTimeout),
16648
16633
  failureReason: cfrResult.failureReason
16649
16634
  });
16650
16635
  }
@@ -16662,7 +16647,8 @@ async function assemble(planDir, chunkPaths, audioPath, outputPath, options) {
16662
16647
  videoPath: postConcatPath,
16663
16648
  audioPath,
16664
16649
  outputPath: paddedAudioPath,
16665
- signal: abortSignal
16650
+ signal: abortSignal,
16651
+ timeoutMs: ffmpegProcessTimeout
16666
16652
  });
16667
16653
  if (!padTrimResult.success) {
16668
16654
  throw encoderFailureError("[assemble] audio pad/trim failed", padTrimResult);
@@ -16681,9 +16667,7 @@ async function assemble(planDir, chunkPaths, audioPath, outputPath, options) {
16681
16667
  normalizedAudioPath,
16682
16668
  muxOutputPath,
16683
16669
  abortSignal,
16684
- {
16685
- audioCodec: "aac"
16686
- },
16670
+ { audioCodec: "aac", ffmpegProcessTimeout },
16687
16671
  { num: plan2.dimensions.fpsNum, den: plan2.dimensions.fpsDen }
16688
16672
  );
16689
16673
  if (!muxResult.success) {
@@ -16694,7 +16678,7 @@ async function assemble(planDir, chunkPaths, audioPath, outputPath, options) {
16694
16678
  muxOutputPath,
16695
16679
  outputPath,
16696
16680
  abortSignal,
16697
- void 0,
16681
+ { ffmpegProcessTimeout },
16698
16682
  {
16699
16683
  num: plan2.dimensions.fpsNum,
16700
16684
  den: plan2.dimensions.fpsDen
@@ -17150,6 +17134,7 @@ async function renderChunk(planDir, chunkIndex, outputChunkPath) {
17150
17134
  // declare `data-composition-variables` leave this undefined and the
17151
17135
  // engine skips the `evaluateOnNewDocument` injection.
17152
17136
  variables: encoder.variables,
17137
+ subTimelineWaitMemo: {},
17153
17138
  ...videoCaptureBeyondViewport !== void 0 ? { captureBeyondViewport: videoCaptureBeyondViewport } : {},
17154
17139
  // lock the BeginFrame warmup loop to a fixed iteration count so
17155
17140
  // `beginFrameTimeTicks` is host-independent. Only chunks ever set this.
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveCaptureBrowserGpuMode
9
- } from "./chunk-QRKLPWEX.js";
9
+ } from "./chunk-ADF3X6GM.js";
10
10
  import {
11
11
  requestCliExit
12
12
  } from "./chunk-PBN6GBJE.js";
@@ -7,14 +7,14 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  trackLintReport,
9
9
  trackLintRuleStreak
10
- } from "./chunk-QFN7NVWM.js";
10
+ } from "./chunk-ICKDMTLA.js";
11
11
  import {
12
12
  shouldTrack
13
- } from "./chunk-OSSHSIMD.js";
13
+ } from "./chunk-ZF7SXQJ7.js";
14
14
  import {
15
15
  LINT_RULE_COUNT,
16
16
  LINT_RULE_GROUP_COUNTS
17
- } from "./chunk-XONFUK3M.js";
17
+ } from "./chunk-IEIJRMLZ.js";
18
18
 
19
19
  // src/telemetry/lintStreaks.ts
20
20
  import { createHash } from "crypto";
@@ -6,24 +6,24 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  serveStaticProjectHtml
9
- } from "./chunk-5FISWJ37.js";
9
+ } from "./chunk-ZIYZ77MR.js";
10
10
  import {
11
11
  resolveProject
12
- } from "./chunk-VIVBA6E6.js";
12
+ } from "./chunk-XBX4QJP7.js";
13
13
  import {
14
14
  AUDIT_SEEK_OPTIONS,
15
15
  installPageFunctionGuard,
16
16
  seekCompositionTimeline,
17
17
  waitForCompositionFonts,
18
18
  waitForRuntimeReady
19
- } from "./chunk-HMT2RPZU.js";
19
+ } from "./chunk-U5QY7KTN.js";
20
20
  import {
21
21
  launchManagedBrowser,
22
22
  resolveManagedGpuMode
23
- } from "./chunk-PJU63L6W.js";
23
+ } from "./chunk-4ORLNTET.js";
24
24
  import {
25
25
  resolveDiagnosticNavigationTimeoutMs
26
- } from "./chunk-P7THMINS.js";
26
+ } from "./chunk-FXJJCPPB.js";
27
27
  import {
28
28
  defineCommand
29
29
  } from "./chunk-S3S4TGEH.js";
@@ -34,7 +34,7 @@ import {
34
34
  import {
35
35
  printDeprecationNotice,
36
36
  withMeta
37
- } from "./chunk-Y6QL2LGO.js";
37
+ } from "./chunk-PLR7Z6TC.js";
38
38
  import {
39
39
  normalizeErrorMessage
40
40
  } from "./chunk-KNU5COPB.js";
@@ -707,7 +707,7 @@ async function collectTweenBoundaries(page) {
707
707
  });
708
708
  }
709
709
  async function bundleProjectHtml(projectDir) {
710
- const { bundleToSingleHtml } = await import("./compiler-TEXQWW6N.js");
710
+ const { bundleToSingleHtml } = await import("./compiler-F54OZZPM.js");
711
711
  return bundleToSingleHtml(projectDir);
712
712
  }
713
713
  async function alignViewportToComposition(page, url) {
@@ -727,10 +727,15 @@ async function alignViewportToComposition(page, url) {
727
727
  });
728
728
  }
729
729
  async function runLayoutAudit(projectDir, opts) {
730
- const { ensureBrowser } = await import("./manager-CT3D67CG.js");
730
+ const { ensureBrowser } = await import("./manager-BPSR6D3V.js");
731
731
  const puppeteer = await import("puppeteer-core");
732
- const { buildChromeArgs } = await import("./src-JO5JOV7Y.js");
733
- const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu, resolveLocalBrowserGpuMode } = await import("./gpuPolicy-7N5MCE2G.js");
732
+ const { buildChromeArgs } = await import("./src-BSLKXEGX.js");
733
+ const {
734
+ assertWebGpuAdapterAvailable,
735
+ compositionRequiresWebGpu,
736
+ resolveLocalBrowserGpuMode,
737
+ resolveLocalWebGpu
738
+ } = await import("./gpuPolicy-AQ2BPLBK.js");
734
739
  const html = await bundleProjectHtml(projectDir);
735
740
  const server = await serveStaticProjectHtml(
736
741
  projectDir,
@@ -743,12 +748,13 @@ async function runLayoutAudit(projectDir, opts) {
743
748
  const requestedGpuMode = resolveLocalBrowserGpuMode();
744
749
  const resolvedGpuMode = await resolveManagedGpuMode(requestedGpuMode, browser.executablePath);
745
750
  const requiresWebGpu = compositionRequiresWebGpu(html);
751
+ const { gpuConfig, softwareWebGpu } = resolveLocalWebGpu(resolvedGpuMode, requiresWebGpu);
746
752
  chromeBrowser = await launchManagedBrowser(puppeteer.default, {
747
753
  headless: true,
748
754
  executablePath: browser.executablePath,
749
755
  args: buildChromeArgs(
750
756
  { width: 1920, height: 1080, captureMode: "screenshot", requiresWebGpu },
751
- { browserGpuMode: resolvedGpuMode }
757
+ gpuConfig
752
758
  )
753
759
  });
754
760
  const page = await chromeBrowser.newPage();
@@ -758,7 +764,7 @@ async function runLayoutAudit(projectDir, opts) {
758
764
  waitUntil: "domcontentloaded",
759
765
  timeout: resolveDiagnosticNavigationTimeoutMs()
760
766
  });
761
- await assertWebGpuAdapterAvailable(page, requiresWebGpu);
767
+ await assertWebGpuAdapterAvailable(page, requiresWebGpu, softwareWebGpu);
762
768
  await alignViewportToComposition(page, server.url);
763
769
  await waitForRuntimeReady(page, opts.timeout);
764
770
  await waitForCompositionFonts(page, 750);
@@ -14,14 +14,14 @@ import {
14
14
  isAllowedHtmlAttribute,
15
15
  isSafeAttributeValue,
16
16
  sanitizeRichTextChildren
17
- } from "./chunk-4M4EC7JX.js";
17
+ } from "./chunk-VRW6EBHV.js";
18
18
  import {
19
19
  decodedUrlPath,
20
20
  removeElementWithGsapCascade
21
21
  } from "./chunk-MQZVBHEY.js";
22
22
  import {
23
23
  require_dist
24
- } from "./chunk-XONFUK3M.js";
24
+ } from "./chunk-IEIJRMLZ.js";
25
25
  import {
26
26
  readClipTiming,
27
27
  writeClipTiming
@@ -29,7 +29,7 @@ import {
29
29
  import {
30
30
  readMediaOffsetSeconds,
31
31
  readPlaybackRate
32
- } from "./chunk-ZLW2V65P.js";
32
+ } from "./chunk-BSQ7XANM.js";
33
33
  import {
34
34
  parseHTML
35
35
  } from "./chunk-SDYDNHEE.js";
@@ -7,29 +7,29 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  RegistryCompatibilityError,
9
9
  gateRegistryItemsCompatibility
10
- } from "./chunk-KO5QBV73.js";
10
+ } from "./chunk-GMAJB2P6.js";
11
11
  import {
12
12
  DEFAULT_PROJECT_CONFIG,
13
13
  createProjectConfig,
14
14
  loadProjectConfig,
15
15
  projectConfigPath,
16
16
  recordProjectRegistryItems
17
- } from "./chunk-2LBBHMKT.js";
17
+ } from "./chunk-CFUXNBWH.js";
18
18
  import {
19
19
  resolveItemWithDependencies,
20
20
  resolveItemsByTag
21
- } from "./chunk-HW4AKJ5F.js";
21
+ } from "./chunk-BIAC7IJT.js";
22
22
  import {
23
23
  InvalidVariableValuesError,
24
24
  prepareItem,
25
25
  publishItem
26
- } from "./chunk-CLOH4LIB.js";
26
+ } from "./chunk-XIHCMVMG.js";
27
27
  import {
28
28
  DEFAULT_REGISTRY_URL
29
- } from "./chunk-TAMQYQGJ.js";
29
+ } from "./chunk-LAFJSYDL.js";
30
30
  import {
31
31
  trackRegistryItemAdded
32
- } from "./chunk-QFN7NVWM.js";
32
+ } from "./chunk-ICKDMTLA.js";
33
33
  import {
34
34
  defineCommand
35
35
  } from "./chunk-S3S4TGEH.js";
@@ -38,7 +38,7 @@ import {
38
38
  } from "./chunk-PBN6GBJE.js";
39
39
  import {
40
40
  ITEM_TYPE_DIRS
41
- } from "./chunk-4M4EC7JX.js";
41
+ } from "./chunk-VRW6EBHV.js";
42
42
  import {
43
43
  isProjectRootMissing,
44
44
  realpath