hyperframes 0.8.136 → 0.8.138

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 (182) hide show
  1. package/dist/{add-MD4CNRQV.js → add-IZQPSHT5.js} +15 -15
  2. package/dist/{animatedGifPrep-3AKQSXPU.js → animatedGifPrep-MQF3GRFW.js} +6 -6
  3. package/dist/appHistory-TH3TL6N6.js +31 -0
  4. package/dist/{asset-UPNW7262.js → asset-RNZX4ISG.js} +2 -2
  5. package/dist/{assetCataloger-KBN5LNK4.js → assetCataloger-5YRUY3PJ.js} +2 -2
  6. package/dist/{auth-63PKUA76.js → auth-LUELYGJ4.js} +2 -2
  7. package/dist/{autoUpdate-CLB47L2W.js → autoUpdate-ECMQWUU5.js} +2 -2
  8. package/dist/{backgroundChecks-JW7XF7JA.js → backgroundChecks-PBEJMSA3.js} +3 -3
  9. package/dist/backgroundChecksWorker.js +3 -3
  10. package/dist/{batchRender-VFXGGGJG.js → batchRender-2GXKBPFQ.js} +3 -3
  11. package/dist/{beats-3CO6EGBG.js → beats-AAAZVDOY.js} +14 -14
  12. package/dist/{benchmark-CYTMATA7.js → benchmark-EI767IB4.js} +12 -12
  13. package/dist/{browser-QMLZJM2K.js → browser-KAA2VXYH.js} +9 -9
  14. package/dist/{bundleWithLocalizedFonts-5ATL25BF.js → bundleWithLocalizedFonts-MWDYAPGB.js} +2 -2
  15. package/dist/{capture-UEJG6BUX.js → capture-IRRHK6BT.js} +2 -2
  16. package/dist/{capture-DYBK5LGE.js → capture-VYT5NQQI.js} +13 -13
  17. package/dist/{catalog-G773J4K4.js → catalog-FYTZ2ET6.js} +22 -22
  18. package/dist/catch-up-XH3OAKQR.js +123 -0
  19. package/dist/{check-NCXITJWK.js → check-MUMIOK5K.js} +38 -38
  20. package/dist/{checkBrowser-IJQ2WCOB.js → checkBrowser-LKSZFOU6.js} +36 -36
  21. package/dist/{chunk-2EAXUCCE.js → chunk-2NCHQUPX.js} +1 -1
  22. package/dist/{chunk-XT5P4QMO.js → chunk-3DKN5WKL.js} +31 -11
  23. package/dist/{chunk-XLO327OK.js → chunk-3F6YLT72.js} +11 -11
  24. package/dist/{chunk-V2J2ZWPR.js → chunk-5K33TNUJ.js} +2 -2
  25. package/dist/{chunk-JBI43NRR.js → chunk-7OLMGFDN.js} +3 -3
  26. package/dist/{chunk-N3KRRPL7.js → chunk-7Y5SMPRV.js} +3 -3
  27. package/dist/{chunk-SXE656MT.js → chunk-APMG37MX.js} +1 -1
  28. package/dist/{chunk-37EDNWLQ.js → chunk-ASPTQ6DT.js} +1 -1
  29. package/dist/chunk-DCAI5DBR.js +218 -0
  30. package/dist/{chunk-KZJPREW7.js → chunk-DJMXTKKK.js} +1 -1
  31. package/dist/{chunk-YDBQRLRI.js → chunk-DXHYACUC.js} +3 -3
  32. package/dist/{chunk-GULOKZLI.js → chunk-EDUBJPGL.js} +14 -9
  33. package/dist/{chunk-527WRFUQ.js → chunk-FSSMOTMS.js} +1 -1
  34. package/dist/{chunk-FTR6KLIG.js → chunk-GJGVYREG.js} +59 -226
  35. package/dist/{chunk-V26IB6L2.js → chunk-GNHJ4ONK.js} +2 -2
  36. package/dist/{chunk-BQIFI4GV.js → chunk-HUZYBV2Z.js} +1 -1
  37. package/dist/{chunk-ECAXTQGU.js → chunk-HXXX6N2G.js} +2 -2
  38. package/dist/{chunk-2BJCQN7K.js → chunk-I3BRUEKD.js} +1 -1
  39. package/dist/{chunk-BSU7EOWJ.js → chunk-IC5L6L7K.js} +1 -1
  40. package/dist/{chunk-P3UNVJXX.js → chunk-IRYC5BRO.js} +4 -4
  41. package/dist/{chunk-V32SGDX7.js → chunk-JCRJBB4E.js} +10 -10
  42. package/dist/{chunk-H4UIYRZZ.js → chunk-JOUVZO7M.js} +1 -1
  43. package/dist/{chunk-XZABUQTX.js → chunk-JYYOAKHS.js} +1 -1
  44. package/dist/{chunk-Z3EFUXL5.js → chunk-KBUUCAIZ.js} +6 -6
  45. package/dist/{chunk-RTURM45Q.js → chunk-KRLYIT22.js} +1 -1
  46. package/dist/{chunk-5K573LFX.js → chunk-L5E5ZN6G.js} +1 -1
  47. package/dist/{chunk-4AXZWUQ6.js → chunk-MIOBYUXT.js} +1 -1
  48. package/dist/{chunk-ZBNFAZQB.js → chunk-MKVKVMUH.js} +7 -7
  49. package/dist/{chunk-XE6S5CE6.js → chunk-OBC75KXL.js} +1 -1
  50. package/dist/{chunk-PGFP4FLW.js → chunk-P5WDMFBB.js} +405 -205
  51. package/dist/{chunk-WFZEW4AC.js → chunk-P75OFLZN.js} +2 -2
  52. package/dist/{chunk-OSSVNAI5.js → chunk-PHRWQQOJ.js} +1 -1
  53. package/dist/{chunk-5ALWCRBU.js → chunk-PHXBLIKK.js} +10 -10
  54. package/dist/{chunk-OAF4XJOW.js → chunk-PXSM4HPB.js} +7 -2
  55. package/dist/{chunk-3E3WVNVP.js → chunk-QPOK6I32.js} +2 -2
  56. package/dist/{chunk-GK5W3SIJ.js → chunk-R6C6URKB.js} +3 -3
  57. package/dist/{chunk-EXNGSOQG.js → chunk-RH5VML6E.js} +12 -12
  58. package/dist/{chunk-BHOKLX4F.js → chunk-RLNB3JCY.js} +1 -1
  59. package/dist/{chunk-IQ3OUQ5Z.js → chunk-S3S2LSZX.js} +22 -2
  60. package/dist/{chunk-LO7L5PJ3.js → chunk-SDRKEYZV.js} +5 -5
  61. package/dist/{chunk-T5LPCY6I.js → chunk-SIMYRD5P.js} +27 -41
  62. package/dist/{chunk-VDQCNWQI.js → chunk-STA43FMY.js} +1 -1
  63. package/dist/{chunk-VNC6YQOC.js → chunk-SZITAGRK.js} +1 -1
  64. package/dist/chunk-UINDCCO7.js +3742 -0
  65. package/dist/{chunk-BWJ27MQP.js → chunk-UUMK6VME.js} +1 -1
  66. package/dist/{chunk-CG6OUDMX.js → chunk-VR5UQWGV.js} +3 -3
  67. package/dist/{chunk-RVG35AL2.js → chunk-W3KQCJVP.js} +217 -6
  68. package/dist/{chunk-X5HWXQPU.js → chunk-WCJGTLPF.js} +22 -10
  69. package/dist/{chunk-M5WGAAML.js → chunk-WH6PRFNX.js} +3 -3
  70. package/dist/{chunk-WTMA6JQD.js → chunk-XQODEVF3.js} +1 -1
  71. package/dist/{chunk-32QEFPDS.js → chunk-YGXLBX3N.js} +1 -1
  72. package/dist/{chunk-CYG3HXBE.js → chunk-YNBXJWSD.js} +1 -1
  73. package/dist/{clean-UCLCH4YA.js → clean-LZPDOAV4.js} +21 -21
  74. package/dist/cli.js +62 -52
  75. package/dist/{cloud-LVP33D4N.js → cloud-RVAH5NNL.js} +4 -4
  76. package/dist/{cloudrun-FA4XHPZS.js → cloudrun-NFGM6TRT.js} +3 -3
  77. package/dist/{compare-TOTN2CVX.js → compare-S3M5OAL2.js} +29 -29
  78. package/dist/{compiler-XZ654ZH2.js → compiler-SZ4GTYFB.js} +3 -3
  79. package/dist/{component-B5QZZJJA.js → component-PR2WZTQ4.js} +3 -3
  80. package/dist/{compositions-REMCVXXP.js → compositions-6RYXH2UA.js} +11 -11
  81. package/dist/{delete-H2P6PYT5.js → delete-EO7C3LQ6.js} +3 -3
  82. package/dist/{deterministicFonts-U2EXY2KQ.js → deterministicFonts-GTITFRSJ.js} +2 -2
  83. package/dist/{dist-QS5WEGBE.js → dist-OJTEVNJR.js} +1 -1
  84. package/dist/{dist-HVJAGLHF.js → dist-RVC3JTID.js} +2 -2
  85. package/dist/{doctor-HCGHEJDN.js → doctor-UTCCMN32.js} +12 -12
  86. package/dist/{events-2LS5WRYL.js → events-RCGWL4LI.js} +9 -9
  87. package/dist/{events-V5QLQAN4.js → events-RE3OR6KY.js} +8 -8
  88. package/dist/{feedback-WBOC7SAW.js → feedback-V7C64JIR.js} +12 -12
  89. package/dist/{figma-HRUWQ5FO.js → figma-26LOX5PV.js} +3 -3
  90. package/dist/fontLocalizeCli.js +10 -10
  91. package/dist/{get-FS5GMKBK.js → get-E2K2JRTV.js} +3 -3
  92. package/dist/{gpuPolicy-ON3RMSWD.js → gpuPolicy-Z3PQN6ZK.js} +6 -6
  93. package/dist/{grade-compare-G7Z5DWKW.js → grade-compare-OTZDU463.js} +26 -26
  94. package/dist/{help-27P7K7JZ.js → help-IRSQLNI5.js} +3 -2
  95. package/dist/{history-5E46VSDM.js → history-G44U6762.js} +18 -18
  96. package/dist/hyperframe-runtime.js +64 -182
  97. package/dist/hyperframe.manifest.json +1 -1
  98. package/dist/hyperframe.runtime.iife.js +64 -182
  99. package/dist/hyperframes-player.global.js +1 -1
  100. package/dist/{info-2ZYYJL3I.js → info-KXQ2TAHX.js} +11 -11
  101. package/dist/{init-ZI75FWLJ.js → init-7SXMLHJE.js} +27 -27
  102. package/dist/{inspect-YLQN7QL6.js → inspect-7JTINR25.js} +27 -27
  103. package/dist/{installer-DDJVY4TO.js → installer-RH4E6WXT.js} +4 -4
  104. package/dist/{keyframes-JONXVQWD.js → keyframes-PIV573S6.js} +12 -12
  105. package/dist/{lambda-LPLYOEYY.js → lambda-GO5HAA4S.js} +4 -4
  106. package/dist/{layout-ZP4WDRSA.js → layout-N2736OO3.js} +27 -27
  107. package/dist/{lint-XGMUBMLE.js → lint-WUXZ5WWZ.js} +14 -14
  108. package/dist/{lintProject-EPVG2EFE.js → lintProject-ANMPLBIT.js} +1 -1
  109. package/dist/{list-NBXJMDON.js → list-QF7AMX5F.js} +3 -3
  110. package/dist/{login-XIH4H4RH.js → login-6RGSXHQJ.js} +4 -4
  111. package/dist/{manager-GFN75DM4.js → manager-524RPYO7.js} +2 -2
  112. package/dist/{manager-67P2XFXQ.js → manager-DXB7JDHU.js} +2 -2
  113. package/dist/{media-treatment-QYKJDWHD.js → media-treatment-T4KDEDYW.js} +14 -14
  114. package/dist/{models-54NL5PRB.js → models-6JMNK3XI.js} +19 -12
  115. package/dist/{motionShot-Y4D7LHU4.js → motionShot-74WM7KF6.js} +12 -12
  116. package/dist/{normalize-audio-6RR6UGAJ.js → normalize-audio-ZZU36ZMD.js} +14 -14
  117. package/dist/{open-TYFT2DQC.js → open-G523K45B.js} +20 -13
  118. package/dist/{pipeline-P7QRGI5H.js → pipeline-AKDGCWRE.js} +10 -10
  119. package/dist/{play-IZXA4GO3.js → play-SHIGXVON.js} +30 -30
  120. package/dist/{preflight-X3XFRJPQ.js → preflight-6ERLORWK.js} +7 -7
  121. package/dist/{present-JS2KNZLT.js → present-QOYYNZCE.js} +19 -19
  122. package/dist/{preview-M6PED6DU.js → preview-KUXTDJL3.js} +26 -24
  123. package/dist/{producer-KQNJKM7F.js → producer-CH33JXHK.js} +1 -1
  124. package/dist/{projectConfig-EAAQYRMP.js → projectConfig-NKIPRWAE.js} +6 -6
  125. package/dist/{publication-H3G346EX.js → publication-4RBVVR5Z.js} +2 -2
  126. package/dist/{publish-NEGKIS35.js → publish-OLHR4Z4U.js} +12 -11
  127. package/dist/{remove-background-HU4S4HH5.js → remove-background-NPKZSIPY.js} +12 -12
  128. package/dist/{render-24OQFSYB.js → render-GYYGWYQC.js} +17 -17
  129. package/dist/{render-IZHBGVPP.js → render-P4NWFUS7.js} +29 -27
  130. package/dist/{render-F3CNO2IE.js → render-UOKPAJNH.js} +3 -3
  131. package/dist/{render-batch-63CBIJYR.js → render-batch-ZDG3EXSD.js} +3 -3
  132. package/dist/{renderCancellation-FT3JJ7GB.js → renderCancellation-QYQLWHZY.js} +6 -6
  133. package/dist/renderSetupWorker.js +1 -1
  134. package/dist/{resolver-YJJKOGQF.js → resolver-CWH3VVB7.js} +4 -4
  135. package/dist/{sherpa-3BQDMJPJ.js → sherpa-WEQE23S5.js} +130 -47
  136. package/dist/sherpaWorker.js +4 -8
  137. package/dist/skills/hyperframes/SKILL.md +2 -0
  138. package/dist/skills/hyperframes-cli/SKILL.md +1 -1
  139. package/dist/{skills-T2O7PD6Q.js → skills-BVONI6TC.js} +14 -14
  140. package/dist/{skillsUpdateCheck-VYEGOAEI.js → skillsUpdateCheck-KKDPTFM7.js} +3 -3
  141. package/dist/{snapshot-NLTL7ZOM.js → snapshot-PWZFJEDR.js} +36 -36
  142. package/dist/{src-ZPAJ44CP.js → src-HH4C5GZV.js} +9 -9
  143. package/dist/{src-CUR36DBE.js → src-YO7MAWGD.js} +5 -5
  144. package/dist/{staticProjectServer-WN4BSLI3.js → staticProjectServer-PR5INXSA.js} +14 -14
  145. package/dist/{status-6CGT2PJT.js → status-AK67DTED.js} +6 -6
  146. package/dist/studio/assets/{hyperframes-player-ukvUFqdg.js → hyperframes-player-B30apksz.js} +1 -1
  147. package/dist/studio/assets/{index-C-pD9_xY.js → index-BdjA0CLD.js} +147 -147
  148. package/dist/studio/assets/{index-syMK0_9C.css → index-CVd4O6eH.css} +1 -1
  149. package/dist/studio/assets/{index-CRRgIxsS.js → index-DIJuIBwI.js} +1 -1
  150. package/dist/studio/assets/{index-BY_myArg.js → index-DXVvWfQG.js} +1 -1
  151. package/dist/studio/{chunk-QRLKWENQ.js → chunk-4S3AYCOG.js} +2 -2
  152. package/dist/studio/{chunk-NM7BXNZ7.js → chunk-LOVBLSMR.js} +10 -4
  153. package/dist/studio/chunk-LOVBLSMR.js.map +1 -0
  154. package/dist/studio/index.html +2 -2
  155. package/dist/studio/index.js +2852 -2852
  156. package/dist/studio/index.js.map +1 -1
  157. package/dist/studio/player.js +2 -2
  158. package/dist/studio/styles.css +1 -1
  159. package/dist/studio/ui.d.ts +2 -1
  160. package/dist/studio/ui.js +1 -1
  161. package/dist/{studio-api-KTRRONOC.js → studio-api-NFJMFAB7.js} +13 -11
  162. package/dist/{studioServer-O6P3TBDJ.js → studioServer-TQZVCIEL.js} +51 -50
  163. package/dist/{synthesize-K62TIZWI.js → synthesize-77PTU6C5.js} +6 -6
  164. package/dist/{system-3BTZGJNK.js → system-ZWIBWWE6.js} +6 -6
  165. package/dist/{telemetry-G4QOG4OF.js → telemetry-63L2ORO3.js} +9 -9
  166. package/dist/templates/_shared/AGENTS.md +2 -0
  167. package/dist/templates/_shared/CLAUDE.md +2 -0
  168. package/dist/{timeline-JS5QNPLA.js → timeline-QKZQL5DJ.js} +18 -18
  169. package/dist/{tokens-JKLDRW7A.js → tokens-ELK62U4A.js} +2 -2
  170. package/dist/{transcribe-HC35FL6W.js → transcribe-OSK7HEOJ.js} +9 -9
  171. package/dist/{transcribe-CP6ZCDVR.js → transcribe-VKSXTM7K.js} +80 -24
  172. package/dist/{tts-P3LIPIL5.js → tts-FU35O6YB.js} +3 -3
  173. package/dist/{updateCheck-L2UJCCL4.js → updateCheck-PM4FEI7P.js} +2 -2
  174. package/dist/{upgrade-NW7YFVUM.js → upgrade-G635QCNO.js} +2 -2
  175. package/dist/{urlDownloader-A5TT3AFE.js → urlDownloader-MVYQTP73.js} +5 -5
  176. package/dist/{validate-D3ZH3JQ7.js → validate-AZTMI3HR.js} +16 -16
  177. package/dist/{video-USXMJDEZ.js → video-H56FK33V.js} +6 -6
  178. package/package.json +1 -1
  179. package/dist/chunk-SRXQEQWZ.js +0 -3742
  180. package/dist/studio/chunk-NM7BXNZ7.js.map +0 -1
  181. package/dist/{chunk-WJFCDDP7.js → chunk-R4QIE6UY.js} +3 -3
  182. /package/dist/studio/{chunk-QRLKWENQ.js.map → chunk-4S3AYCOG.js.map} +0 -0
@@ -6,8 +6,8 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
 
8
8
  // src/version.ts
9
- var VERSION = true ? "0.8.136" : "0.0.0-dev";
10
- var PRODUCER_VERSION = true ? "0.8.136" : "0.0.0-dev";
9
+ var VERSION = true ? "0.8.138" : "0.0.0-dev";
10
+ var PRODUCER_VERSION = true ? "0.8.138" : "0.0.0-dev";
11
11
 
12
12
  export {
13
13
  VERSION,
@@ -13,7 +13,7 @@ function resolveLocalBrowserGpuMode(browserGpuArg, envMode = process.env.PRODUCE
13
13
  return "auto";
14
14
  }
15
15
  async function resolveCaptureBrowserGpuMode(requestedMode, chromePath) {
16
- const { resolveBrowserGpuMode } = await import("./src-CUR36DBE.js");
16
+ const { resolveBrowserGpuMode } = await import("./src-YO7MAWGD.js");
17
17
  return resolveBrowserGpuMode(requestedMode, { chromePath });
18
18
  }
19
19
 
@@ -11,12 +11,12 @@ import {
11
11
  iterateFontFamilyDeclarations,
12
12
  normalizeSystemFontPrimaryFamilies,
13
13
  resolveFontFamilyDeclarationFamilies
14
- } from "./chunk-WJFCDDP7.js";
14
+ } from "./chunk-R4QIE6UY.js";
15
15
  import {
16
16
  EncoderInterruptedError,
17
17
  encoderFailureError,
18
18
  prepareAnimatedGifInputs
19
- } from "./chunk-V26IB6L2.js";
19
+ } from "./chunk-GNHJ4ONK.js";
20
20
  import {
21
21
  createStudioPositionSeekReapplyScript
22
22
  } from "./chunk-KC5XXX3X.js";
@@ -144,7 +144,7 @@ import {
144
144
  validateEngineConfigSnapshot,
145
145
  verifyDiskDrawElementSamples,
146
146
  writeCapturedFrame
147
- } from "./chunk-N3KRRPL7.js";
147
+ } from "./chunk-7Y5SMPRV.js";
148
148
  import {
149
149
  HF_VFX_ATTR,
150
150
  MEDIA_START_BASIS_ATTR,
@@ -162,7 +162,7 @@ import {
162
162
  resolveAbsoluteMediaStartSeconds,
163
163
  resolveAuthoredTimingWindow,
164
164
  toFps
165
- } from "./chunk-BHOKLX4F.js";
165
+ } from "./chunk-RLNB3JCY.js";
166
166
  import {
167
167
  CANVAS_DIMENSIONS,
168
168
  HTML_BODY_CSS_HEIGHT_FIRST_RE,
@@ -183,7 +183,7 @@ import {
183
183
  ensureExternalScriptTag,
184
184
  inlineSubCompositions,
185
185
  prepareFlattenedInnerRoot
186
- } from "./chunk-PGFP4FLW.js";
186
+ } from "./chunk-P5WDMFBB.js";
187
187
  import {
188
188
  COMPOSITION_SOURCE_URL,
189
189
  HF_COLOR_GRADING_ATTR,
@@ -211,7 +211,7 @@ import {
211
211
  shouldClampResolvedMediaDuration,
212
212
  sourceTimeAt,
213
213
  styleElementsFor
214
- } from "./chunk-SRXQEQWZ.js";
214
+ } from "./chunk-UINDCCO7.js";
215
215
  import {
216
216
  chromeMajorCeiling
217
217
  } from "./chunk-TWWSYAKJ.js";
@@ -220,7 +220,7 @@ import {
220
220
  lintHyperframeHtml,
221
221
  readProjectFile,
222
222
  resolveProjectRelativeSrc
223
- } from "./chunk-VDQCNWQI.js";
223
+ } from "./chunk-STA43FMY.js";
224
224
  import {
225
225
  CSS_URL_RE,
226
226
  checkSubCompositionUsability,
@@ -6435,7 +6435,7 @@ async function readLocalFont(absPath) {
6435
6435
  return { kind: "inline", buffer: Buffer.concat(chunks, totalBytes) };
6436
6436
  }
6437
6437
  async function embedLocalFontFaces(html, projectDir) {
6438
- const { fontToDataUri: toDataUri } = await import("./deterministicFonts-U2EXY2KQ.js");
6438
+ const { fontToDataUri: toDataUri } = await import("./deterministicFonts-GTITFRSJ.js");
6439
6439
  const styleBlockRe = /<style\b[^>]*>([\s\S]*?)<\/style>/gi;
6440
6440
  const fontFaceRe = /@font-face\s*\{([^}]*)\}/gi;
6441
6441
  let result = html;
@@ -14213,7 +14213,7 @@ function startServer(options = {}) {
14213
14213
  });
14214
14214
  async function shutdown(signal) {
14215
14215
  log.info(`Received ${signal}, shutting down`);
14216
- const { drainBrowserPool } = await import("./src-CUR36DBE.js");
14216
+ const { drainBrowserPool } = await import("./src-YO7MAWGD.js");
14217
14217
  await drainBrowserPool().catch(() => {
14218
14218
  });
14219
14219
  const handle = await Promise.race([
@@ -15336,7 +15336,7 @@ async function buildLocalExecutionPlan(projectDir, config, executionPlanDir, opt
15336
15336
  if (probeResult.fileServer) closeFileServerSafely(probeResult.fileServer, "plan", log);
15337
15337
  if (probeResult.probeSession) {
15338
15338
  try {
15339
- const { closeCaptureSession: closeCaptureSession2 } = await import("./src-CUR36DBE.js");
15339
+ const { closeCaptureSession: closeCaptureSession2 } = await import("./src-YO7MAWGD.js");
15340
15340
  await closeCaptureSession2(probeResult.probeSession);
15341
15341
  } catch (err) {
15342
15342
  log.warn("[plan] probe session close failed", {
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  downloadFile
9
- } from "./chunk-X5HWXQPU.js";
9
+ } from "./chunk-WCJGTLPF.js";
10
10
  import {
11
11
  findFFmpeg
12
12
  } from "./chunk-TVCRUG2S.js";
@@ -144,6 +144,11 @@ function hasCmake() {
144
144
  async function ensureWhisper(options) {
145
145
  const existing = findWhisper();
146
146
  if (existing) return existing;
147
+ if (options?.installRuntime === false) {
148
+ throw new WhisperUnavailableError(
149
+ "whisper-cpp not found; runtime installation is disabled by --no-runtime-install."
150
+ );
151
+ }
147
152
  if (platform() === "darwin" && hasBrew()) {
148
153
  options?.onProgress?.("Installing whisper-cpp via Homebrew...");
149
154
  try {
@@ -169,7 +174,7 @@ async function ensureModel(model = DEFAULT_MODEL, options) {
169
174
  if (existsSync(modelPath)) return modelPath;
170
175
  mkdirSync(MODELS_DIR, { recursive: true });
171
176
  options?.onProgress?.(`Downloading model ${model}...`);
172
- await downloadFile(getModelUrl(model), modelPath);
177
+ await downloadFile(getModelUrl(model), modelPath, { onProgress: options?.onDownloadProgress });
173
178
  if (!existsSync(modelPath)) {
174
179
  throw new Error(`Model download failed: ${model}`);
175
180
  }
@@ -6,10 +6,10 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  getMimeType
9
- } from "./chunk-FTR6KLIG.js";
9
+ } from "./chunk-GJGVYREG.js";
10
10
  import {
11
11
  injectTagsAtHeadStart
12
- } from "./chunk-SRXQEQWZ.js";
12
+ } from "./chunk-UINDCCO7.js";
13
13
 
14
14
  // src/utils/compositionServer.ts
15
15
  import { createHash } from "crypto";
@@ -8,7 +8,7 @@ import {
8
8
  isAllowedHtmlAttribute,
9
9
  isSafeAttributeValue,
10
10
  sanitizeRichTextChildren
11
- } from "./chunk-BHOKLX4F.js";
11
+ } from "./chunk-RLNB3JCY.js";
12
12
  import {
13
13
  removeElementWithGsapCascade
14
14
  } from "./chunk-OZUQF4NB.js";
@@ -17,10 +17,10 @@ import {
17
17
  ensureHfIds,
18
18
  mintHfId,
19
19
  walkCompositionDescendants
20
- } from "./chunk-PGFP4FLW.js";
20
+ } from "./chunk-P5WDMFBB.js";
21
21
  import {
22
22
  require_dist
23
- } from "./chunk-VDQCNWQI.js";
23
+ } from "./chunk-STA43FMY.js";
24
24
  import {
25
25
  readClipTiming,
26
26
  readMediaOffsetSeconds,
@@ -4,22 +4,22 @@ 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
+ resolveProject
9
+ } from "./chunk-L5E5ZN6G.js";
7
10
  import {
8
11
  installPageFunctionGuard,
9
12
  resolveCliChromeGpuMode,
10
13
  seekCompositionTimeline,
11
14
  waitForRuntimeReady
12
- } from "./chunk-LO7L5PJ3.js";
15
+ } from "./chunk-SDRKEYZV.js";
13
16
  import {
14
17
  resolveCompositionViewportFromHtml
15
18
  } from "./chunk-5Z63TBTX.js";
16
19
  import {
17
20
  launchManagedBrowser,
18
21
  resolveManagedGpuMode
19
- } from "./chunk-XE6S5CE6.js";
20
- import {
21
- resolveProject
22
- } from "./chunk-5K573LFX.js";
22
+ } from "./chunk-OBC75KXL.js";
23
23
  import {
24
24
  c
25
25
  } from "./chunk-ZTZA4UWZ.js";
@@ -33,7 +33,7 @@ import {
33
33
  import {
34
34
  printDeprecationNotice,
35
35
  withMeta
36
- } from "./chunk-CYG3HXBE.js";
36
+ } from "./chunk-YNBXJWSD.js";
37
37
  import {
38
38
  normalizeErrorMessage
39
39
  } from "./chunk-KNU5COPB.js";
@@ -222,7 +222,7 @@ function extractCompositionErrorsFromLint(lintResult) {
222
222
  async function localizeRemoteAssets(html) {
223
223
  let dir;
224
224
  try {
225
- const { loadProducer } = await import("./producer-KQNJKM7F.js");
225
+ const { loadProducer } = await import("./producer-CH33JXHK.js");
226
226
  const { localizeRemoteMediaSources, localizeRemoteImageSources, localizeRemoteFontFaces } = await loadProducer();
227
227
  dir = mkdtempSync(join(tmpdir(), "hf-validate-assets-"));
228
228
  const assetDir = dir;
@@ -243,10 +243,10 @@ async function localizeRemoteAssets(html) {
243
243
  }
244
244
  async function validateInBrowser(project, opts) {
245
245
  const projectDir = project.dir;
246
- const { bundleToSingleHtml } = await import("./compiler-XZ654ZH2.js");
246
+ const { bundleToSingleHtml } = await import("./compiler-SZ4GTYFB.js");
247
247
  const { ensureBrowser } = await import("./manager-CT3D67CG.js");
248
- const { serveStaticProjectHtml } = await import("./staticProjectServer-WN4BSLI3.js");
249
- const { lintProject } = await import("./lintProject-EPVG2EFE.js");
248
+ const { serveStaticProjectHtml } = await import("./staticProjectServer-PR5INXSA.js");
249
+ const { lintProject } = await import("./lintProject-ANMPLBIT.js");
250
250
  const lintResult = await lintProject(projectDir);
251
251
  const compositionErrors = extractCompositionErrorsFromLint(lintResult);
252
252
  const html = await bundleToSingleHtml(projectDir);
@@ -267,9 +267,9 @@ async function validateInBrowser(project, opts) {
267
267
  try {
268
268
  const browser = await ensureBrowser();
269
269
  const puppeteer = await import("puppeteer-core");
270
- const { buildChromeArgs, analyzeClipMediaFit } = await import("./src-CUR36DBE.js");
270
+ const { buildChromeArgs, analyzeClipMediaFit } = await import("./src-YO7MAWGD.js");
271
271
  const requestedGpuMode = resolveCliChromeGpuMode();
272
- const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu } = await import("./gpuPolicy-ON3RMSWD.js");
272
+ const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu } = await import("./gpuPolicy-Z3PQN6ZK.js");
273
273
  const resolvedGpuMode = await resolveManagedGpuMode(requestedGpuMode, browser.executablePath);
274
274
  const requiresWebGpu = compositionRequiresWebGpu(html);
275
275
  const chromeBrowser = await launchManagedBrowser(puppeteer.default, {
@@ -17,7 +17,7 @@ import {
17
17
  parseStrictFiniteTimingNumber,
18
18
  resolveNaturalMediaTimelineDuration,
19
19
  resolveTimedImageDurationSeconds
20
- } from "./chunk-SRXQEQWZ.js";
20
+ } from "./chunk-UINDCCO7.js";
21
21
  import {
22
22
  COMPOSITION_ATTRIBUTES,
23
23
  parseStartExpression
@@ -178,13 +178,26 @@ function transcribeWithParakeet(inputPath, dir, options) {
178
178
  try {
179
179
  const argv = [inputPath, "--model", model, "--output-format", "json", "--output-dir", workDir];
180
180
  if (options?.language) argv.push("--language", options.language);
181
+ options?.onEvent?.({
182
+ type: "progress",
183
+ phase: "transcription",
184
+ model: PARAKEET_MODEL_LABEL,
185
+ status: "started"
186
+ });
181
187
  execFileSync(runner, argv, { stdio: ["ignore", "pipe", "pipe"], timeout: 18e5 });
182
188
  const produced = join(workDir, `${basename(inputPath, extname(inputPath))}.json`);
183
189
  if (!existsSync(produced)) throw new Error("Parakeet did not produce output.");
184
- return writeParakeetTranscript(
190
+ const result = writeParakeetTranscript(
185
191
  dir,
186
192
  mergeTokensToWords(JSON.parse(readFileSync(produced, "utf-8")))
187
193
  );
194
+ options?.onEvent?.({
195
+ type: "progress",
196
+ phase: "transcription",
197
+ model: result.model,
198
+ status: "completed"
199
+ });
200
+ return result;
188
201
  } finally {
189
202
  rmSync(workDir, { recursive: true, force: true });
190
203
  }
@@ -194,7 +207,14 @@ function writeParakeetTranscript(dir, words) {
194
207
  const transcriptPath = join(dir, "transcript.json");
195
208
  writeFileSync(transcriptPath, JSON.stringify(words, null, 2));
196
209
  const durationSeconds = words.length > 0 ? words[words.length - 1].end : 0;
197
- return { transcriptPath, wordCount: words.length, durationSeconds, speechOnsetSeconds: null };
210
+ return {
211
+ model: PARAKEET_MODEL_LABEL,
212
+ detectedLanguage: null,
213
+ transcriptPath,
214
+ wordCount: words.length,
215
+ durationSeconds,
216
+ speechOnsetSeconds: null
217
+ };
198
218
  }
199
219
 
200
220
  export {
@@ -10,21 +10,21 @@ import {
10
10
  import {
11
11
  launchManagedBrowser,
12
12
  resolveManagedGpuMode
13
- } from "./chunk-XE6S5CE6.js";
13
+ } from "./chunk-OBC75KXL.js";
14
14
  import {
15
15
  resolveDiagnosticNavigationTimeoutMs,
16
16
  windowsChromeCrashRemediation
17
- } from "./chunk-BSU7EOWJ.js";
17
+ } from "./chunk-IC5L6L7K.js";
18
18
  import {
19
19
  resolveLocalBrowserGpuMode
20
- } from "./chunk-OSSVNAI5.js";
20
+ } from "./chunk-PHRWQQOJ.js";
21
21
  import {
22
22
  c
23
23
  } from "./chunk-ZTZA4UWZ.js";
24
24
  import {
25
25
  assertWebGpuAdapterAvailable,
26
26
  compositionRequiresWebGpu
27
- } from "./chunk-N3KRRPL7.js";
27
+ } from "./chunk-7Y5SMPRV.js";
28
28
  import {
29
29
  normalizeErrorMessage
30
30
  } from "./chunk-KNU5COPB.js";
@@ -103,7 +103,7 @@ async function openSettledCompositionPage(html, url, options) {
103
103
  const { ensureBrowser, findSystemBrowser } = await import("./manager-CT3D67CG.js");
104
104
  const browser = await ensureBrowser();
105
105
  const puppeteer = await import("puppeteer-core");
106
- const { buildChromeArgs } = await import("./src-CUR36DBE.js");
106
+ const { buildChromeArgs } = await import("./src-YO7MAWGD.js");
107
107
  const requestedGpuMode = options.browserGpuMode ?? resolveCliChromeGpuMode();
108
108
  const requiresWebGpu = compositionRequiresWebGpu(html);
109
109
  const launch = async (executablePath) => {
@@ -6,13 +6,13 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  stoppedByCancelSignal
9
- } from "./chunk-KZJPREW7.js";
9
+ } from "./chunk-DJMXTKKK.js";
10
10
  import {
11
11
  DEFAULT_MODEL,
12
12
  ensureModel,
13
13
  ensureWhisper,
14
14
  hasFFmpeg
15
- } from "./chunk-OAF4XJOW.js";
15
+ } from "./chunk-PXSM4HPB.js";
16
16
  import {
17
17
  findFFmpeg,
18
18
  findFFprobe,
@@ -25,19 +25,6 @@ import { existsSync, readFileSync, mkdirSync, rmSync, statSync, unlinkSync } fro
25
25
  import { join, extname } from "path";
26
26
  import { tmpdir } from "os";
27
27
  import { randomUUID } from "crypto";
28
- function detectLanguage(whisperPath, modelPath, wavPath) {
29
- try {
30
- const output = execFileSync(whisperPath, ["--model", modelPath, "--detect-language", wavPath], {
31
- encoding: "utf-8",
32
- timeout: 3e4,
33
- stdio: ["ignore", "pipe", "pipe"]
34
- });
35
- const match = output.match(/auto-detected language:\s*(\w+)/);
36
- return match?.[1] ?? null;
37
- } catch {
38
- return null;
39
- }
40
- }
41
28
  function findWavDataChunk(buf) {
42
29
  if (buf.length < 12) return null;
43
30
  let pos = 12;
@@ -287,48 +274,42 @@ function prepareWav(inputPath, onProgress) {
287
274
  async function transcribe(inputPath, outputDir, options) {
288
275
  const model = initialModelForLanguage(options?.model ?? DEFAULT_MODEL, options?.language);
289
276
  options?.onProgress?.("Checking whisper...");
290
- const whisper = await ensureWhisper({ onProgress: options?.onProgress });
277
+ const whisper = await ensureWhisper({
278
+ onProgress: options?.onProgress,
279
+ installRuntime: options?.installRuntime
280
+ });
291
281
  options?.onProgress?.("Checking model...");
292
282
  const modelPath = await ensureModel(model, {
293
- onProgress: options?.onProgress
283
+ onProgress: options?.onProgress,
284
+ onDownloadProgress: options?.onEvent ? (receivedBytes, totalBytes) => options.onEvent?.({
285
+ type: "progress",
286
+ phase: "download",
287
+ model,
288
+ receivedBytes,
289
+ totalBytes
290
+ }) : void 0
294
291
  });
295
292
  const wavPath = prepareWav(inputPath, options?.onProgress);
296
- let effectiveModel = model;
297
- let effectiveModelPath = modelPath;
298
- let detectedLanguage = options?.language ?? null;
299
- if (!detectedLanguage && !effectiveModel.endsWith(".en")) {
300
- options?.onProgress?.("Detecting language...");
301
- detectedLanguage = detectLanguage(whisper.executablePath, effectiveModelPath, wavPath);
302
- }
303
- if (detectedLanguage && detectedLanguage !== "en" && effectiveModel.endsWith(".en")) {
304
- const multilingualModel = effectiveModel.replace(/\.en$/, "");
305
- options?.onProgress?.(
306
- `Detected ${detectedLanguage} \u2014 switching to ${multilingualModel} model...`
307
- );
308
- effectiveModelPath = await ensureModel(multilingualModel, {
309
- onProgress: options?.onProgress
310
- });
311
- effectiveModel = multilingualModel;
312
- }
293
+ const automaticLanguage = options?.language === void 0 && !model.endsWith(".en");
294
+ const language = options?.language ?? (automaticLanguage ? "auto" : "en");
313
295
  options?.onProgress?.("Transcribing...");
296
+ options?.onEvent?.({ type: "progress", phase: "transcription", model, status: "started" });
314
297
  const outputBase = join(outputDir, "transcript");
315
298
  mkdirSync(outputDir, { recursive: true });
316
299
  const whisperArgs = [
317
300
  "--model",
318
- effectiveModelPath,
301
+ modelPath,
319
302
  "--output-json-full",
320
303
  "--output-file",
321
304
  outputBase,
322
305
  "--dtw",
323
- dtwPresetForModel(effectiveModel),
306
+ dtwPresetForModel(model),
324
307
  "--suppress-nst"
325
308
  ];
326
- if (detectedLanguage) {
327
- whisperArgs.push("--language", detectedLanguage);
328
- }
309
+ whisperArgs.push("--language", language);
329
310
  whisperArgs.push(wavPath);
330
311
  const whisperTimeoutMs = resolveWhisperTimeoutMs(getPreparedWavDurationSeconds(wavPath), {
331
- model: effectiveModel,
312
+ model,
332
313
  overrideMs: options?.timeoutMs
333
314
  });
334
315
  try {
@@ -339,7 +320,7 @@ async function transcribe(inputPath, outputDir, options) {
339
320
  } catch (err) {
340
321
  throw wrapWhisperTimeoutError(err, {
341
322
  effectiveTimeoutMs: whisperTimeoutMs,
342
- model: effectiveModel,
323
+ model,
343
324
  wasOverride: options?.timeoutMs != null
344
325
  });
345
326
  }
@@ -348,6 +329,8 @@ async function transcribe(inputPath, outputDir, options) {
348
329
  throw new Error("Whisper did not produce output. Check the input file.");
349
330
  }
350
331
  const transcript = JSON.parse(readFileSync(transcriptPath, "utf-8"));
332
+ const reportedLanguage = transcript.result?.language;
333
+ const detectedLanguage = automaticLanguage && typeof reportedLanguage === "string" && reportedLanguage.length > 0 ? reportedLanguage : null;
351
334
  const segments = transcript.transcription ?? [];
352
335
  let wordCount = 0;
353
336
  let maxEnd = 0;
@@ -366,7 +349,10 @@ async function transcribe(inputPath, outputDir, options) {
366
349
  } catch {
367
350
  }
368
351
  }
352
+ options?.onEvent?.({ type: "progress", phase: "transcription", model, status: "completed" });
369
353
  return {
354
+ model,
355
+ detectedLanguage,
370
356
  transcriptPath,
371
357
  wordCount,
372
358
  durationSeconds: maxEnd / 1e3,
@@ -5017,7 +5017,7 @@ var coreRules = [
5017
5017
  // root. `hyperframes check`'s layout audits can't see it: they measure
5018
5018
  // against the root's own (already-correct) rect, not the body's.
5019
5019
  //
5020
- // Sub-compositions are exempt: loadExternalCompositions (packages/core/src/
5020
+ // Sub-compositions are exempt: loadCompositions (packages/core/src/
5021
5021
  // runtime/compositionLoader.ts) mounts only the matched <template>/<body>
5022
5022
  // subtree, so a sub-comp's own <html>/<head>/<meta viewport> never reach
5023
5023
  // the rendering document, even when it's a full standalone document.
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-HVW7ABXD.js";
13
13
  import {
14
14
  DEFAULT_REGISTRY_URL
15
- } from "./chunk-RTURM45Q.js";
15
+ } from "./chunk-KRLYIT22.js";
16
16
 
17
17
  // src/utils/projectConfig.ts
18
18
  import { readFileSync, writeFileSync } from "fs";