hyperframes 0.8.158 → 0.8.160

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 (171) hide show
  1. package/README.md +24 -0
  2. package/dist/{add-VBBOJ3RB.js → add-OGBTJCU4.js} +11 -11
  3. package/dist/{animatedGifPrep-MTJRHJ5G.js → animatedGifPrep-YAJTDXB7.js} +6 -6
  4. package/dist/api.js +16 -16
  5. package/dist/{asset-3MLXYJCT.js → asset-DKQFFGPP.js} +2 -2
  6. package/dist/{assetCataloger-DI7FC5KZ.js → assetCataloger-BIDQA34M.js} +2 -2
  7. package/dist/audio-GK4OVVTH.js +2086 -0
  8. package/dist/{auth-RJCTHSMH.js → auth-AQMRAFXN.js} +1 -1
  9. package/dist/{autoUpdate-VD6R34HF.js → autoUpdate-NFQB7V2X.js} +2 -2
  10. package/dist/{backgroundChecks-CWWIZDTW.js → backgroundChecks-7JKE2FIU.js} +3 -3
  11. package/dist/backgroundChecksWorker.js +3 -3
  12. package/dist/{batchRender-FTZ67377.js → batchRender-C2JCG5EK.js} +3 -3
  13. package/dist/{beats-6CN4BEXJ.js → beats-C3ZSK2R2.js} +12 -12
  14. package/dist/{benchmark-4QSNJZXI.js → benchmark-RRU67WEY.js} +8 -8
  15. package/dist/{browser-H7PRFBJV.js → browser-K4TP4ZM2.js} +5 -5
  16. package/dist/{bundleWithLocalizedFonts-IVO43QBQ.js → bundleWithLocalizedFonts-SLBVWQ7O.js} +2 -2
  17. package/dist/{capture-GZSY7LZJ.js → capture-T2TBROMS.js} +2 -2
  18. package/dist/{capture-IEEQTPAS.js → capture-ZPRK3TOZ.js} +10 -10
  19. package/dist/{catalog-PD25CVG3.js → catalog-IMIHQ4KX.js} +11 -11
  20. package/dist/{catch-up-2TGBK342.js → catch-up-UY5MJWOG.js} +4 -4
  21. package/dist/{check-HFNJEV3O.js → check-6NAJSJHQ.js} +135 -124
  22. package/dist/{checkBrowser-767LAZKF.js → checkBrowser-JWNQFYTY.js} +38 -36
  23. package/dist/{chunk-YIJMVFEJ.js → chunk-22QHO26F.js} +1 -1
  24. package/dist/{chunk-7F3B5YYT.js → chunk-2742O5DO.js} +178 -23
  25. package/dist/{chunk-EEEUI3ON.js → chunk-2ZLYSXZC.js} +16 -9
  26. package/dist/{chunk-L6AJC7UQ.js → chunk-37LNY2EC.js} +1 -1
  27. package/dist/{chunk-EY6ISRP3.js → chunk-3XPVZLAR.js} +1 -1
  28. package/dist/{chunk-DISITOR6.js → chunk-4ID635FL.js} +1 -1
  29. package/dist/{chunk-EDEFAJI5.js → chunk-4VYNMVMC.js} +12 -12
  30. package/dist/chunk-6JR2XUEE.js +127 -0
  31. package/dist/{chunk-7FGHFHWD.js → chunk-6MCASYIS.js} +31 -11
  32. package/dist/{chunk-3MQBIZHG.js → chunk-7OFNPEKR.js} +7 -7
  33. package/dist/{chunk-BB2SFTMY.js → chunk-A2DMF2Q6.js} +6 -5
  34. package/dist/{chunk-LAAGHMRC.js → chunk-B5FZ2CQM.js} +6 -2
  35. package/dist/{chunk-SLUFA6UM.js → chunk-B7RUGHBT.js} +1 -1
  36. package/dist/{chunk-3UMNI4XZ.js → chunk-D2WGLWIK.js} +3 -3
  37. package/dist/{chunk-3FRK53UC.js → chunk-D33YJZOH.js} +1 -1
  38. package/dist/{chunk-54DMWFQZ.js → chunk-D3ZWBHZP.js} +2 -15
  39. package/dist/{chunk-PKHDQELW.js → chunk-D46G5IQH.js} +11 -11
  40. package/dist/{chunk-ZZ3ZWTOI.js → chunk-DJZEIVAP.js} +3 -3
  41. package/dist/{chunk-J7WFHOCW.js → chunk-ERTJPFCH.js} +1 -1
  42. package/dist/{chunk-QRPYTJBW.js → chunk-EVRUR7DW.js} +1 -1
  43. package/dist/{chunk-QH2PL6J4.js → chunk-FRGYHRP6.js} +1 -1
  44. package/dist/{chunk-T243WV6D.js → chunk-G642IIVK.js} +2 -2
  45. package/dist/{chunk-GPUVPZRK.js → chunk-GG37I7B3.js} +1 -1
  46. package/dist/chunk-GJQHHAAX.js +336 -0
  47. package/dist/{chunk-Y6E2PW7Z.js → chunk-GOASXWDD.js} +2 -2
  48. package/dist/{chunk-4R6OZQGX.js → chunk-GOTCGKX6.js} +79 -4
  49. package/dist/{chunk-H6BWNY56.js → chunk-ICZVCVD3.js} +1 -1
  50. package/dist/{chunk-YVD5M26L.js → chunk-IGTGLGML.js} +2 -2
  51. package/dist/{chunk-KEGTYA7V.js → chunk-IK3SOMZ4.js} +5 -3
  52. package/dist/{chunk-6PIGOKTE.js → chunk-JGYHWVXQ.js} +339 -67
  53. package/dist/{chunk-2XUQPJ3W.js → chunk-KRE55WLI.js} +1 -1
  54. package/dist/{chunk-NNQP5TNO.js → chunk-KWRBEDJI.js} +3 -3
  55. package/dist/{chunk-FJT35XBA.js → chunk-LYIG2GZ5.js} +2 -2
  56. package/dist/{chunk-T76NSAXO.js → chunk-MMV6IY6U.js} +6 -4
  57. package/dist/{chunk-4YDQQQY6.js → chunk-MP676E4B.js} +2 -2
  58. package/dist/{chunk-LAPUMJOC.js → chunk-MYGXKD7A.js} +5 -5
  59. package/dist/{chunk-LQXHRO6F.js → chunk-N2NDDTYW.js} +2 -2
  60. package/dist/{chunk-J6SJCYAQ.js → chunk-OMJA7JP6.js} +5 -5
  61. package/dist/chunk-P47XYVEQ.js +3795 -0
  62. package/dist/{chunk-NFX4K6OW.js → chunk-P4QE7SSN.js} +1 -1
  63. package/dist/{chunk-EGKIQS5J.js → chunk-PBNV5V5G.js} +1 -1
  64. package/dist/{chunk-56QTFOWH.js → chunk-PINFPWRV.js} +5 -119
  65. package/dist/{chunk-IRRRH66M.js → chunk-PLEMSN3E.js} +115 -13
  66. package/dist/{chunk-23VDPRQ3.js → chunk-PPF65XAF.js} +1 -1
  67. package/dist/{chunk-SGIZMTWO.js → chunk-Q3TFX4OZ.js} +1 -1
  68. package/dist/{chunk-XSEGMQYA.js → chunk-QABAVWEX.js} +26 -3
  69. package/dist/{chunk-7ZWOLEGS.js → chunk-RTS7BGEC.js} +1 -1
  70. package/dist/{chunk-YB26LWR2.js → chunk-SB5DX6AD.js} +2 -2
  71. package/dist/{chunk-J4SSEVRU.js → chunk-SHVDJON6.js} +2 -2
  72. package/dist/{chunk-W2SNLHKF.js → chunk-TTFDAWCS.js} +1 -1
  73. package/dist/{chunk-RU6AIVON.js → chunk-TU2CQJO3.js} +2 -2
  74. package/dist/{chunk-Z347DFOL.js → chunk-V2FQQILJ.js} +8 -8
  75. package/dist/{chunk-DCQCGE2W.js → chunk-VD7WQYTO.js} +22 -20
  76. package/dist/{chunk-SHEVPNUR.js → chunk-VZ6LCTOZ.js} +1 -1
  77. package/dist/{chunk-SQHWDFTV.js → chunk-X3SCQP2A.js} +1 -1
  78. package/dist/{chunk-LBT4AMSF.js → chunk-XRKMITSS.js} +1 -1
  79. package/dist/{chunk-OTG5H2VM.js → chunk-XTLV6UVP.js} +3 -3
  80. package/dist/{clean-FQUVFH6H.js → clean-RRE6PMKZ.js} +24 -23
  81. package/dist/cli.js +54 -53
  82. package/dist/{cloud-BHAYVT6F.js → cloud-OIR6K7TS.js} +4 -4
  83. package/dist/{cloudrun-STLNWUBW.js → cloudrun-BIQXBUDO.js} +3 -3
  84. package/dist/{compare-2FRBIK5Z.js → compare-E57W737I.js} +31 -30
  85. package/dist/{compiler-VFJVUZWR.js → compiler-57M6W5WY.js} +3 -3
  86. package/dist/{component-DRKXJVXB.js → component-I2O4AX56.js} +3 -3
  87. package/dist/{compositions-D3SN64J3.js → compositions-B6NKZHIN.js} +10 -10
  88. package/dist/{delete-NA5WC2IR.js → delete-DTUNBC6K.js} +2 -2
  89. package/dist/{dist-SVTSOG4Q.js → dist-4JFB3WAR.js} +2 -2
  90. package/dist/{dist-2VXSQLXO.js → dist-ROVMAL74.js} +1 -1
  91. package/dist/{doctor-VXCMPOY3.js → doctor-SCNB73Z3.js} +12 -12
  92. package/dist/{events-ZJEPMUWT.js → events-6LQNRKHZ.js} +3 -3
  93. package/dist/{events-QAHWXFFG.js → events-Q37UJL36.js} +2 -2
  94. package/dist/{feedback-UGOQ57TU.js → feedback-FOEBE2OW.js} +9 -9
  95. package/dist/{ffmpeg-2ROTISBL.js → ffmpeg-7BYARPLM.js} +4 -2
  96. package/dist/{figma-YO2MJZDP.js → figma-54MRTBKH.js} +3 -3
  97. package/dist/fontLocalizeCli.js +9 -9
  98. package/dist/{get-WMJAYRNF.js → get-EPGHM2SA.js} +2 -2
  99. package/dist/{gpuPolicy-VXNJ4UBN.js → gpuPolicy-VGE3I5J4.js} +6 -6
  100. package/dist/{grade-compare-QZ7BG2AP.js → grade-compare-LOJWX6SK.js} +33 -32
  101. package/dist/{help-AR4MX2AH.js → help-6FPZI3WP.js} +2 -1
  102. package/dist/{history-NF764OFQ.js → history-GRXSUA5R.js} +12 -11
  103. package/dist/hyperframe-runtime.js +56 -56
  104. package/dist/hyperframe.manifest.json +1 -1
  105. package/dist/hyperframe.runtime.iife.js +56 -56
  106. package/dist/hyperframes-player.global.js +3 -3
  107. package/dist/{info-476ERK4G.js → info-LV7DFCLD.js} +7 -7
  108. package/dist/{init-M6YUOBBZ.js → init-3J7BSAC3.js} +29 -29
  109. package/dist/{inspect-QYPUG3UZ.js → inspect-5RON554C.js} +30 -29
  110. package/dist/{installer-HF5BXXXM.js → installer-T3STEB4U.js} +4 -4
  111. package/dist/{keyframes-MTZRE34W.js → keyframes-KHXTHI5C.js} +6 -6
  112. package/dist/{lambda-ZCX7KGTY.js → lambda-4KCSMIM6.js} +4 -4
  113. package/dist/{layout-DLX4HQFL.js → layout-DVWWT2TR.js} +30 -29
  114. package/dist/{lint-OQ5QWCHZ.js → lint-Q5WFB5ST.js} +9 -9
  115. package/dist/{lintProject-JGHKRO5L.js → lintProject-BGDYHF3F.js} +1 -1
  116. package/dist/{list-AZ6OIOIK.js → list-RFEUTW6N.js} +2 -2
  117. package/dist/{login-DJPYT4YZ.js → login-WBHWA4M2.js} +4 -4
  118. package/dist/{manager-JNJE54OQ.js → manager-B6MVBM2E.js} +3 -3
  119. package/dist/{manager-ZLJD3EAY.js → manager-HEUPD2YB.js} +2 -2
  120. package/dist/{media-treatment-4YKC4LGB.js → media-treatment-WRHVNWLS.js} +15 -14
  121. package/dist/{models-WHDUQZQZ.js → models-OA4MXEYG.js} +12 -12
  122. package/dist/{motionShot-KEHC5AMK.js → motionShot-BZLRN3SS.js} +13 -13
  123. package/dist/{normalize-audio-ATAQGUPX.js → normalize-audio-4YXE3RIF.js} +7 -7
  124. package/dist/{open-4DXBEX2U.js → open-MCGYEFML.js} +7 -7
  125. package/dist/{parakeetRunner-5PNBGCGH.js → parakeetRunner-DBLHMD5T.js} +13 -13
  126. package/dist/{pipeline-QA2422UI.js → pipeline-FSY65OQ4.js} +8 -8
  127. package/dist/{play-SKTSHZM5.js → play-WXOV3BD7.js} +28 -27
  128. package/dist/{preflight-BH2XUQBS.js → preflight-G5KP7ZKA.js} +4 -4
  129. package/dist/{present-KSQ5GASH.js → present-RVG4J6CJ.js} +23 -22
  130. package/dist/{preview-TDD3QDR3.js → preview-PDUQR2JQ.js} +24 -24
  131. package/dist/{producer-PQMZ7OYH.js → producer-C5V2A3YL.js} +1 -1
  132. package/dist/{projectConfig-EYYDESVO.js → projectConfig-X2IEHCSK.js} +6 -6
  133. package/dist/{publication-MJY3XYYV.js → publication-JEANCWBW.js} +2 -2
  134. package/dist/{publish-5TZIKVLW.js → publish-VX5OH4ST.js} +12 -12
  135. package/dist/{remove-background-HT73ZUIG.js → remove-background-IXCISD26.js} +9 -9
  136. package/dist/{render-ADBL3C7S.js → render-5BGU3FXU.js} +57 -35
  137. package/dist/{render-YTJ3SMCD.js → render-ISUT7Q3X.js} +3 -3
  138. package/dist/{render-KJCDJEGI.js → render-JNJVFBFF.js} +13 -13
  139. package/dist/{render-batch-AFB2XK3I.js → render-batch-2C6RUP3F.js} +3 -3
  140. package/dist/renderSetupWorker.js +4 -4
  141. package/dist/{resolver-F2D2YCSQ.js → resolver-KTNKZVIB.js} +4 -4
  142. package/dist/{sherpa-IBKSF6GX.js → sherpa-GFRG3TMM.js} +12 -12
  143. package/dist/skills/hyperframes-cli/SKILL.md +5 -4
  144. package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +8 -0
  145. package/dist/skills/hyperframes-cli/references/upgrade-info-misc.md +1 -1
  146. package/dist/{skills-E75DFHGG.js → skills-LKJA27ZN.js} +5 -5
  147. package/dist/{skillsUpdateCheck-EPTKOBR6.js → skillsUpdateCheck-RFZJKZC4.js} +3 -3
  148. package/dist/{snapshot-Z6T4I5TE.js → snapshot-EOYA4MLG.js} +86 -50
  149. package/dist/{src-NDI4KNT3.js → src-GPUDUKY6.js} +7 -5
  150. package/dist/{src-4GCHM2LX.js → src-IMCQRH4P.js} +8 -8
  151. package/dist/{staticProjectServer-ITNEQNQ7.js → staticProjectServer-S3NK3V4S.js} +18 -15
  152. package/dist/studio/assets/{hyperframes-player-DX8LgKgb.js → hyperframes-player-CXL23NEv.js} +1 -1
  153. package/dist/studio/assets/{index-BdnuQ7ta.js → index-Bl_xrA5T.js} +1 -1
  154. package/dist/studio/assets/{index-DB0YwjiT.js → index-CejKvBNw.js} +1 -1
  155. package/dist/studio/assets/{index-7Ljcoa9s.js → index-D7BvLHtZ.js} +7 -7
  156. package/dist/studio/index.html +1 -1
  157. package/dist/{studio-api-JMWUSAG7.js → studio-api-YM5HLXUS.js} +16 -11
  158. package/dist/{studioServer-MWZNMAVJ.js → studioServer-CEXJK5TC.js} +60 -59
  159. package/dist/{telemetry-D6A2TRK6.js → telemetry-7AWYECPL.js} +3 -3
  160. package/dist/{timeline-VIF4G3IT.js → timeline-G7H373XX.js} +48 -353
  161. package/dist/{tokens-ORS6MFMG.js → tokens-GYH7NXXA.js} +2 -2
  162. package/dist/{transcribe-DNRG7OGE.js → transcribe-CIC7WAT5.js} +17 -17
  163. package/dist/{transcribe-DZ6O6EG5.js → transcribe-FL6NGWHF.js} +11 -11
  164. package/dist/{updateCheck-YY4BPYNT.js → updateCheck-MQ44KGUR.js} +2 -2
  165. package/dist/{upgrade-CUDVTTF5.js → upgrade-OL47SID3.js} +2 -2
  166. package/dist/{urlDownloader-INLS5A6I.js → urlDownloader-KDJGLR2Y.js} +5 -5
  167. package/dist/{usage-EC3KFUIJ.js → usage-HG4WMM7A.js} +33 -5
  168. package/dist/{validate-CQCQVHUX.js → validate-TDCH6X3C.js} +22 -21
  169. package/dist/{video-3GLT6U6Z.js → video-AHO4CDCK.js} +6 -6
  170. package/package.json +1 -1
  171. package/dist/chunk-LPOTN5GW.js +0 -3795
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
 
8
8
  // src/utils/producer.ts
9
9
  async function loadProducer() {
10
- return await import("./src-4GCHM2LX.js");
10
+ return await import("./src-IMCQRH4P.js");
11
11
  }
12
12
 
13
13
  export {
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-AWDFDFI3.js";
15
15
  import {
16
16
  isBlockedNetworkHost
17
- } from "./chunk-IRRRH66M.js";
17
+ } from "./chunk-PLEMSN3E.js";
18
18
  import {
19
19
  DOMParser,
20
20
  parseHTML
@@ -4,6 +4,9 @@ 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
+ relinkSplitHalves
9
+ } from "./chunk-6JR2XUEE.js";
7
10
  import {
8
11
  EXCLUDED_TAGS,
9
12
  ensureHfIds,
@@ -14,14 +17,14 @@ import {
14
17
  isAllowedHtmlAttribute,
15
18
  isSafeAttributeValue,
16
19
  sanitizeRichTextChildren
17
- } from "./chunk-SGIZMTWO.js";
20
+ } from "./chunk-Q3TFX4OZ.js";
18
21
  import {
19
22
  decodedUrlPath,
20
23
  removeElementWithGsapCascade
21
24
  } from "./chunk-ALLKNYC3.js";
22
25
  import {
23
26
  require_dist
24
- } from "./chunk-7F3B5YYT.js";
27
+ } from "./chunk-2742O5DO.js";
25
28
  import {
26
29
  readClipTiming,
27
30
  writeClipTiming
@@ -138,118 +141,6 @@ function replacementTimelineAssetId(document, element, newSrc) {
138
141
  // ../studio-server/dist/chunk-JBFOY5SI.js
139
142
  var import_postcss_selector_parser = __toESM(require_dist(), 1);
140
143
  import postcss from "postcss";
141
-
142
- // ../core/dist/mediaLink.js
143
- var MEDIA_LINK_ATTR = "data-link";
144
- function readNumber(el, names, fallback) {
145
- for (const name of names) {
146
- const raw = el.getAttribute(name);
147
- if (raw === null || raw.trim() === "")
148
- continue;
149
- const value = Number(raw);
150
- if (Number.isFinite(value))
151
- return value;
152
- }
153
- return fallback;
154
- }
155
- function readLinkTiming(el) {
156
- return {
157
- start: readNumber(el, ["data-start"], 0),
158
- duration: readNumber(el, ["data-duration"], 0),
159
- mediaStart: readMediaOffsetSeconds((name) => el.getAttribute(name)),
160
- playbackRate: readNumber(el, ["data-playback-rate"], 1)
161
- };
162
- }
163
- var LINK_SCOPE_SELECTOR = "[data-composition-id], [data-composition-file]";
164
- function mintLinkId(taken) {
165
- const used = new Set(taken);
166
- let n = 1;
167
- while (used.has(`lk-${n}`))
168
- n += 1;
169
- return `lk-${n}`;
170
- }
171
- function takenLinkIds(doc) {
172
- return Array.from(doc.querySelectorAll(`[id], [${MEDIA_LINK_ATTR}], [${SYNC_ORIGIN_ATTR}]`)).flatMap((el) => [
173
- el.id,
174
- el.getAttribute(MEDIA_LINK_ATTR) ?? "",
175
- el.getAttribute(SYNC_ORIGIN_ATTR) ?? ""
176
- ]);
177
- }
178
- function renameShared(doc, ids, attr, taken) {
179
- const renamed = /* @__PURE__ */ new Map();
180
- for (const id of ids) {
181
- const el = doc.getElementById(id);
182
- const old = el?.getAttribute(attr);
183
- if (!el || !old)
184
- continue;
185
- let fresh = renamed.get(old);
186
- if (!fresh) {
187
- fresh = mintLinkId(taken);
188
- taken.add(fresh);
189
- renamed.set(old, fresh);
190
- }
191
- el.setAttribute(attr, fresh);
192
- }
193
- }
194
- function relinkSplitHalves(doc, rightHalfIds) {
195
- const taken = new Set(takenLinkIds(doc));
196
- renameShared(doc, rightHalfIds, MEDIA_LINK_ATTR, taken);
197
- renameShared(doc, idsWithBothSidesCut(doc, rightHalfIds), SYNC_ORIGIN_ATTR, taken);
198
- }
199
- function idsWithBothSidesCut(doc, rightHalfIds) {
200
- const tagsByOrigin = /* @__PURE__ */ new Map();
201
- const originOf = (id) => doc.getElementById(id)?.getAttribute(SYNC_ORIGIN_ATTR) ?? null;
202
- for (const id of rightHalfIds) {
203
- const origin = originOf(id);
204
- const tag = doc.getElementById(id)?.tagName.toLowerCase();
205
- if (!origin || !tag)
206
- continue;
207
- tagsByOrigin.set(origin, (tagsByOrigin.get(origin) ?? /* @__PURE__ */ new Set()).add(tag));
208
- }
209
- return rightHalfIds.filter((id) => {
210
- const tags = tagsByOrigin.get(originOf(id) ?? "");
211
- return tags?.has("video") === true && tags.has("audio");
212
- });
213
- }
214
- var SYNC_ORIGIN_ATTR = "data-sync-origin";
215
- var rateOf = (timing) => timing.playbackRate > 0 ? timing.playbackRate : 1;
216
- function sourceZeroTime(timing) {
217
- return timing.start - timing.mediaStart / rateOf(timing);
218
- }
219
- function syncOffsetFrames(clip, partner, fps) {
220
- if (Math.abs(rateOf(clip) - rateOf(partner)) > 1e-6)
221
- return null;
222
- const frames = Math.round((sourceZeroTime(clip) - sourceZeroTime(partner)) * fps);
223
- return Object.is(frames, -0) ? 0 : frames;
224
- }
225
- function sharedSeconds(a, b) {
226
- return Math.min(a.start + a.duration, b.start + b.duration) - Math.max(a.start, b.start);
227
- }
228
- function sameOriginInScope(el, tag, origin) {
229
- const scopeOf = (node) => node.closest(LINK_SCOPE_SELECTOR) ?? el.ownerDocument;
230
- const scope = scopeOf(el);
231
- return Array.from(scope.querySelectorAll(tag)).filter((candidate) => candidate.getAttribute(SYNC_ORIGIN_ATTR) === origin && scopeOf(candidate) === scope);
232
- }
233
- function findSyncPartner(el) {
234
- const origin = el.getAttribute(SYNC_ORIGIN_ATTR);
235
- const tag = el.tagName.toLowerCase();
236
- if (!origin || tag !== "video" && tag !== "audio")
237
- return null;
238
- const partnerTag = tag === "video" ? "audio" : "video";
239
- const own = readLinkTiming(el);
240
- let best = null;
241
- for (const candidate of sameOriginInScope(el, partnerTag, origin)) {
242
- const timing = readLinkTiming(candidate);
243
- const shared = sharedSeconds(own, timing);
244
- const distance = Math.abs(timing.start - own.start);
245
- if (!best || shared > best.shared || shared === best.shared && distance < best.distance) {
246
- best = { el: candidate, shared, distance };
247
- }
248
- }
249
- return best?.el ?? null;
250
- }
251
-
252
- // ../studio-server/dist/chunk-JBFOY5SI.js
253
144
  function parseStyleDecls(style) {
254
145
  const props = /* @__PURE__ */ new Map();
255
146
  const order = [];
@@ -753,11 +644,6 @@ function relinkSplitHalvesInHtml(source, rightHalfIds) {
753
644
  }
754
645
 
755
646
  export {
756
- MEDIA_LINK_ATTR,
757
- readLinkTiming,
758
- relinkSplitHalves,
759
- syncOffsetFrames,
760
- findSyncPartner,
761
647
  parseSourceDocument,
762
648
  findTargetElement,
763
649
  removeElementsFromHtml,
@@ -30,7 +30,7 @@ import {
30
30
  renderFrameIdForRenderId,
31
31
  resolveAuthoredTimingWindow,
32
32
  toFps
33
- } from "./chunk-SGIZMTWO.js";
33
+ } from "./chunk-Q3TFX4OZ.js";
34
34
  import {
35
35
  AUDIO_GROUP_RENDER_ID_ATTR,
36
36
  COLOR_GRADING_SOURCE_HIDDEN_ATTR,
@@ -59,7 +59,7 @@ import {
59
59
  shiftRateLane,
60
60
  sourceTimeAt,
61
61
  timeAtSourceTime
62
- } from "./chunk-LPOTN5GW.js";
62
+ } from "./chunk-P47XYVEQ.js";
63
63
  import {
64
64
  clampAudioGain,
65
65
  isAudibleVideoElement
@@ -4532,6 +4532,10 @@ function cloneCaptureWarning(warning) {
4532
4532
  ...warning,
4533
4533
  details: warning.details ? {
4534
4534
  ...warning.details,
4535
+ audioFailures: warning.details.audioFailures?.map((failure) => ({
4536
+ ...failure,
4537
+ ...failure.subprocess ? { subprocess: { ...failure.subprocess } } : {}
4538
+ })),
4535
4539
  sources: warning.details.sources ? [...warning.details.sources] : void 0,
4536
4540
  failureReasons: warning.details.failureReasons ? [...warning.details.failureReasons] : void 0,
4537
4541
  failureStages: warning.details.failureStages ? [...warning.details.failureStages] : void 0
@@ -13761,6 +13765,104 @@ function clampFadesToDuration(fades, duration) {
13761
13765
  return { fadeIn: fadeIn * scale, fadeOut: fadeOut * scale };
13762
13766
  }
13763
13767
 
13768
+ // ../engine/src/services/audioFailureDiagnostic.ts
13769
+ var STAGES = /* @__PURE__ */ new Set([
13770
+ "source",
13771
+ "download",
13772
+ "probe",
13773
+ "extract",
13774
+ "prepare",
13775
+ "mix",
13776
+ "silence",
13777
+ "cancelled",
13778
+ "internal"
13779
+ ]);
13780
+ var REASONS = /* @__PURE__ */ new Set([
13781
+ "source_not_found",
13782
+ "download_failed",
13783
+ "probe_failed",
13784
+ "invalid_media",
13785
+ "ffmpeg_unsupported",
13786
+ "ffmpeg_timeout",
13787
+ "ffmpeg_unavailable",
13788
+ "external_interruption",
13789
+ "ffmpeg_failed",
13790
+ "cancelled",
13791
+ "internal"
13792
+ ]);
13793
+ var TERMINATIONS = /* @__PURE__ */ new Set(["exit", "abort", "deadline", "inactivity", "spawn_error"]);
13794
+ var SIGNALS = /* @__PURE__ */ new Set([
13795
+ "SIGABRT",
13796
+ "SIGBUS",
13797
+ "SIGFPE",
13798
+ "SIGHUP",
13799
+ "SIGILL",
13800
+ "SIGINT",
13801
+ "SIGKILL",
13802
+ "SIGPIPE",
13803
+ "SIGQUIT",
13804
+ "SIGSEGV",
13805
+ "SIGTERM",
13806
+ "SIGTRAP",
13807
+ "SIGXCPU",
13808
+ "SIGXFSZ"
13809
+ ]);
13810
+ var CODES = /* @__PURE__ */ new Set([
13811
+ "EACCES",
13812
+ "EAGAIN",
13813
+ "EBUSY",
13814
+ "EIO",
13815
+ "EISDIR",
13816
+ "EMFILE",
13817
+ "ENAMETOOLONG",
13818
+ "ENFILE",
13819
+ "ENOENT",
13820
+ "ENOEXEC",
13821
+ "ENOMEM",
13822
+ "ENOSPC",
13823
+ "ENOTDIR",
13824
+ "EPERM",
13825
+ "ETIMEDOUT"
13826
+ ]);
13827
+ function isStage(value) {
13828
+ return typeof value === "string" && STAGES.has(value);
13829
+ }
13830
+ function isReason(value) {
13831
+ return typeof value === "string" && REASONS.has(value);
13832
+ }
13833
+ function isTermination(value) {
13834
+ return typeof value === "string" && TERMINATIONS.has(value);
13835
+ }
13836
+ function record(value) {
13837
+ return value !== null && typeof value === "object";
13838
+ }
13839
+ function audioSubprocessEvidence(value) {
13840
+ if (!record(value)) return {};
13841
+ const evidence = {};
13842
+ if (typeof value.exitCode === "number" && Number.isInteger(value.exitCode) && value.exitCode >= -2147483648 && value.exitCode <= 4294967295)
13843
+ evidence.exitCode = value.exitCode;
13844
+ if (typeof value.signal === "string" && SIGNALS.has(value.signal)) evidence.signal = value.signal;
13845
+ if (isTermination(value.terminationReason)) evidence.terminationReason = value.terminationReason;
13846
+ const error = record(value.error) ? value.error : value;
13847
+ if (typeof error.code === "string" && CODES.has(error.code)) evidence.code = error.code;
13848
+ return evidence;
13849
+ }
13850
+ function audioFailureDiagnostics(values) {
13851
+ const result = [];
13852
+ for (const value of values.slice(0, 16)) {
13853
+ if (!record(value) || !isStage(value.stage) || !isReason(value.reason) || value.owner !== "user" && value.owner !== "system" || typeof value.retryable !== "boolean")
13854
+ continue;
13855
+ result.push({
13856
+ stage: value.stage,
13857
+ reason: value.reason,
13858
+ owner: value.owner,
13859
+ retryable: value.retryable,
13860
+ ...record(value.subprocess) ? { subprocess: audioSubprocessEvidence(value.subprocess) } : {}
13861
+ });
13862
+ }
13863
+ return result;
13864
+ }
13865
+
13764
13866
  // ../engine/src/services/audioVolumeEnvelope.ts
13765
13867
  import { mkdtempSync as mkdtempSync4, readFileSync as readFileSync5, renameSync as renameSync2, rmSync as rmSync5, writeFileSync as writeFileSync4 } from "fs";
13766
13868
  import { dirname as dirname5, join as join11 } from "path";
@@ -14840,6 +14942,7 @@ function ffmpegFailure(stage, result, elementId) {
14840
14942
  owner,
14841
14943
  retryable,
14842
14944
  elementId,
14945
+ subprocess: audioSubprocessEvidence(result),
14843
14946
  detail: boundedDetail(
14844
14947
  result.error?.message ? `${formatFfmpegError(result.exitCode, stderr)}: ${result.error.message}` : formatFfmpegError(result.exitCode, stderr)
14845
14948
  )
@@ -15220,9 +15323,10 @@ async function mixGroupMembers(memberTracks, outputPath, totalDuration, signal,
15220
15323
  degradedAutomation = true;
15221
15324
  }
15222
15325
  }
15223
- if (signal?.aborted) return { success: false, error: "Group sub-mix cancelled" };
15224
- if (!result.success)
15225
- return { success: false, error: formatFfmpegError(result.exitCode, result.stderr) };
15326
+ if (signal?.aborted || !result.success) {
15327
+ const failure = ffmpegFailure("mix", result);
15328
+ return { success: false, error: failure.detail, failure };
15329
+ }
15226
15330
  return { success: true, degradedAutomation };
15227
15331
  }
15228
15332
  async function mixThroughMasterBus(tracks, masterChain, outputPath, workDir, totalDuration, signal, config) {
@@ -15548,10 +15652,7 @@ async function processCompositionAudio(elements, baseDir, workDir, outputPath, t
15548
15652
  );
15549
15653
  if (!subMix.success) {
15550
15654
  failures.push({
15551
- stage: "mix",
15552
- reason: "ffmpeg_failed",
15553
- owner: "system",
15554
- retryable: false,
15655
+ ...subMix.failure,
15555
15656
  elementId: groupId,
15556
15657
  detail: boundedDetail(
15557
15658
  `Group sub-mix failed for group ${groupId}: ${subMix.error ?? "unknown"}`
@@ -16070,10 +16171,10 @@ function assertDiskSampleAboveFloor(db, verifyMinDb, idx, workerId) {
16070
16171
  }
16071
16172
  function isFfmpegInfrastructureFailure(err) {
16072
16173
  if (!err || typeof err !== "object") return false;
16073
- const record = err;
16074
- if (record.code === "ENOENT") return true;
16075
- const message = typeof record.message === "string" ? record.message : "";
16076
- const stderr = typeof record.stderr === "string" ? record.stderr : "";
16174
+ const record2 = err;
16175
+ if (record2.code === "ENOENT") return true;
16176
+ const message = typeof record2.message === "string" ? record2.message : "";
16177
+ const stderr = typeof record2.stderr === "string" ? record2.stderr : "";
16077
16178
  const text = `${message}
16078
16179
  ${stderr}`;
16079
16180
  return /\bENOENT\b|No such filter|Unknown filter/i.test(text);
@@ -16964,6 +17065,7 @@ export {
16964
17065
  fingerprintElementId,
16965
17066
  isNotMediaPayload,
16966
17067
  assertMediaPayload,
17068
+ audioFailureDiagnostics,
16967
17069
  MIXED_AUDIO_FILENAME,
16968
17070
  parseMasterFxChain,
16969
17071
  parseAudioElements,
@@ -10,7 +10,7 @@ import {
10
10
  isDevice,
11
11
  isQuality,
12
12
  render
13
- } from "./chunk-OTG5H2VM.js";
13
+ } from "./chunk-XTLV6UVP.js";
14
14
 
15
15
  // src/api/removeBackground.ts
16
16
  import { resolve } from "path";
@@ -9,7 +9,7 @@ import {
9
9
  parseStrictFiniteTimingNumber,
10
10
  resolveNaturalMediaTimelineDuration,
11
11
  resolveTimedImageDurationSeconds
12
- } from "./chunk-LPOTN5GW.js";
12
+ } from "./chunk-P47XYVEQ.js";
13
13
  import {
14
14
  CANVAS_DIMENSIONS,
15
15
  isCompositionElement,
@@ -4,20 +4,41 @@ 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
+ artifactDirectory,
9
+ finishSnapshotRun
10
+ } from "./chunk-JGYHWVXQ.js";
7
11
 
8
12
  // src/utils/checkSnapshotDirectory.ts
9
- import { randomUUID } from "crypto";
10
- import { join, resolve } from "path";
13
+ import { resolve } from "path";
11
14
  var runDirectories = /* @__PURE__ */ new Map();
15
+ var activeChecks = /* @__PURE__ */ new Map();
16
+ function beginCheckSnapshots(projectDir) {
17
+ const project = resolve(projectDir);
18
+ activeChecks.set(project, (activeChecks.get(project) ?? 0) + 1);
19
+ }
12
20
  function checkSnapshotDirectory(projectDir) {
13
21
  const project = resolve(projectDir);
14
22
  let directory = runDirectories.get(project);
15
23
  if (!directory) {
16
- directory = join(project, ".hyperframes", "artifacts", "snapshots", randomUUID());
24
+ directory = artifactDirectory(project, "snapshots");
17
25
  runDirectories.set(project, directory);
18
26
  }
19
27
  return directory;
20
28
  }
29
+ async function finishCheckSnapshots(projectDir) {
30
+ const project = resolve(projectDir);
31
+ const remaining = Math.max(0, (activeChecks.get(project) ?? 1) - 1);
32
+ if (remaining > 0) {
33
+ activeChecks.set(project, remaining);
34
+ return;
35
+ }
36
+ activeChecks.delete(project);
37
+ const path = runDirectories.get(project);
38
+ if (!path) return;
39
+ runDirectories.delete(project);
40
+ await finishSnapshotRun(project, path);
41
+ }
21
42
 
22
43
  // src/utils/checkTypes.ts
23
44
  function rectToBbox(rect) {
@@ -25,6 +46,8 @@ function rectToBbox(rect) {
25
46
  }
26
47
 
27
48
  export {
49
+ beginCheckSnapshots,
28
50
  checkSnapshotDirectory,
51
+ finishCheckSnapshots,
29
52
  rectToBbox
30
53
  };
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  sherpaParakeetInstalled,
9
9
  sherpaUnsupportedReason
10
- } from "./chunk-4YDQQQY6.js";
10
+ } from "./chunk-MP676E4B.js";
11
11
  import {
12
12
  findParakeet
13
13
  } from "./chunk-JZIEZCQM.js";
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveConfig,
9
9
  usesSoftwareWebGpu
10
- } from "./chunk-IRRRH66M.js";
10
+ } from "./chunk-PLEMSN3E.js";
11
11
 
12
12
  // src/browser/gpuPolicy.ts
13
13
  function resolveLocalBrowserGpuMode(browserGpuArg, envMode = process.env.PRODUCER_BROWSER_GPU_MODE) {
@@ -17,7 +17,7 @@ function resolveLocalBrowserGpuMode(browserGpuArg, envMode = process.env.PRODUCE
17
17
  return "auto";
18
18
  }
19
19
  async function resolveCaptureBrowserGpuMode(requestedMode, chromePath, probeLifecycle) {
20
- const { resolveBrowserGpuMode } = await import("./src-NDI4KNT3.js");
20
+ const { resolveBrowserGpuMode } = await import("./src-GPUDUKY6.js");
21
21
  return resolveBrowserGpuMode(requestedMode, { chromePath, probeLifecycle });
22
22
  }
23
23
  function resolveLocalWebGpu(browserGpuMode, requiresWebGpu) {
@@ -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-DCQCGE2W.js";
9
+ } from "./chunk-VD7WQYTO.js";
10
10
  import {
11
11
  injectTagsAtHeadStart
12
- } from "./chunk-LPOTN5GW.js";
12
+ } from "./chunk-P47XYVEQ.js";
13
13
 
14
14
  // src/utils/compositionServer.ts
15
15
  import { createHash } from "crypto";
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  updateNoticesSuppressed
9
- } from "./chunk-QH2PL6J4.js";
9
+ } from "./chunk-FRGYHRP6.js";
10
10
  import {
11
11
  hostAnswers
12
12
  } from "./chunk-K4WIOZFP.js";
@@ -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.158" : "0.0.0-dev";
10
- var PRODUCER_VERSION = true ? "0.8.158" : "0.0.0-dev";
9
+ var VERSION = true ? "0.8.160" : "0.0.0-dev";
10
+ var PRODUCER_VERSION = true ? "0.8.160" : "0.0.0-dev";
11
11
 
12
12
  export {
13
13
  VERSION,
@@ -4,20 +4,20 @@ 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
- DEFAULT_HISTORY_ROOT,
9
- HistoryBusyError,
10
- MAX_WINDOW_IDLE_MS,
11
- openProjectHistory,
12
- readProjectHistory
13
- } from "./chunk-6PIGOKTE.js";
14
7
  import {
15
8
  resolveProject
16
- } from "./chunk-L6AJC7UQ.js";
9
+ } from "./chunk-37LNY2EC.js";
17
10
  import {
18
11
  findPreviewServerForProject,
19
12
  studioApiUrl
20
13
  } from "./chunk-DQBY7FRR.js";
14
+ import {
15
+ DEFAULT_HISTORY_ROOT,
16
+ HistoryBusyError,
17
+ MAX_WINDOW_IDLE_MS,
18
+ openProjectHistory,
19
+ readProjectHistory
20
+ } from "./chunk-JGYHWVXQ.js";
21
21
 
22
22
  // src/utils/historyOwner.ts
23
23
  import { randomUUID } from "crypto";
@@ -5,7 +5,6 @@ var require = __hf_createRequire(import.meta.url);
5
5
  var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
- MEDIA_LINK_ATTR,
9
8
  dedupeClonedCompositionId,
10
9
  findTargetElement,
11
10
  isHTMLElement,
@@ -14,14 +13,13 @@ import {
14
13
  patchElementInHtml,
15
14
  probeElementInSource,
16
15
  probeElementsInSource,
17
- relinkSplitHalves,
18
16
  relinkSplitHalvesInHtml,
19
17
  removeElementFromHtml,
20
18
  removeElementsFromHtml,
21
19
  splitElementInHtml,
22
20
  unwrapElementsFromHtml,
23
21
  wrapElementsInHtml
24
- } from "./chunk-56QTFOWH.js";
22
+ } from "./chunk-PINFPWRV.js";
25
23
  import {
26
24
  DEFAULT_TARGET_LUFS,
27
25
  absoluteLoudnessPlan,
@@ -32,18 +30,9 @@ import {
32
30
  resolveLocalAudioPath
33
31
  } from "./chunk-C6TPGUWD.js";
34
32
  import {
35
- MAX_WINDOW_IDLE_MS,
36
- STUDIO_SIGNATURE_MANIFEST_PATHS,
37
- UNDO_MODES,
38
- clearFileWriteReceipt,
39
- createProjectSignature,
40
- createWriteToken,
41
- fileContentVersion,
42
- recordFileWriteReceipt,
43
- resolveProjectAndSignature,
44
- resolveProjectSignature,
45
- settledFileTag
46
- } from "./chunk-6PIGOKTE.js";
33
+ MEDIA_LINK_ATTR,
34
+ relinkSplitHalves
35
+ } from "./chunk-6JR2XUEE.js";
47
36
  import {
48
37
  PROXY_PARAMS_VERSION,
49
38
  PROXY_PENDING_RETRY_AFTER_SECONDS,
@@ -65,7 +54,20 @@ import {
65
54
  scanProjectMediaCodecMap,
66
55
  shouldPrewarmProxy,
67
56
  waitForProxy
68
- } from "./chunk-DISITOR6.js";
57
+ } from "./chunk-4ID635FL.js";
58
+ import {
59
+ MAX_WINDOW_IDLE_MS,
60
+ STUDIO_SIGNATURE_MANIFEST_PATHS,
61
+ UNDO_MODES,
62
+ clearFileWriteReceipt,
63
+ createProjectSignature,
64
+ createWriteToken,
65
+ fileContentVersion,
66
+ recordFileWriteReceipt,
67
+ resolveProjectAndSignature,
68
+ resolveProjectSignature,
69
+ settledFileTag
70
+ } from "./chunk-JGYHWVXQ.js";
69
71
  import {
70
72
  STUDIO_MOTION_PATH,
71
73
  createStudioMotionRenderBodyScript,
@@ -101,7 +103,7 @@ import {
101
103
  } from "./chunk-EOVYQ3IG.js";
102
104
  import {
103
105
  addScenePartsManifest
104
- } from "./chunk-FJT35XBA.js";
106
+ } from "./chunk-LYIG2GZ5.js";
105
107
  import {
106
108
  ensureHfIds,
107
109
  stampHfIdsInPlace
@@ -115,7 +117,7 @@ import {
115
117
  parseFps,
116
118
  parsePreviewProxyBox,
117
119
  sameInstant
118
- } from "./chunk-SGIZMTWO.js";
120
+ } from "./chunk-Q3TFX4OZ.js";
119
121
  import {
120
122
  AFTER_FONTS_SCRIPT_TYPE,
121
123
  RUNTIME_BOOTSTRAP_ATTR,
@@ -129,7 +131,7 @@ import {
129
131
  resolveRateSpec,
130
132
  sourceTimeAt,
131
133
  stripEmbeddedRuntimeScripts
132
- } from "./chunk-LPOTN5GW.js";
134
+ } from "./chunk-P47XYVEQ.js";
133
135
  import {
134
136
  HTML_ATTRIBUTE_ENTITIES,
135
137
  MagicString,
@@ -5493,7 +5495,7 @@ async function prepareGsapMutationScript(c, res, firstMutation) {
5493
5495
  let block = extractGsapScriptBlock(html);
5494
5496
  if (!block && (firstMutation.type === "add" || firstMutation.type === "add-with-keyframes")) {
5495
5497
  const compId = html.match(/data-composition-id="([^"]+)"/)?.[1] ?? "main";
5496
- const { GSAP_CDN } = await import("./dist-SVTSOG4Q.js");
5498
+ const { GSAP_CDN } = await import("./dist-4JFB3WAR.js");
5497
5499
  const bootstrap = [
5498
5500
  `<script src="${GSAP_CDN}"></script>`,
5499
5501
  "<script>",
@@ -1278,7 +1278,7 @@ async function withFigmaErrors(command, fn) {
1278
1278
  } catch (err) {
1279
1279
  if (err instanceof Error) {
1280
1280
  try {
1281
- const { trackCommandFailure } = await import("./events-ZJEPMUWT.js");
1281
+ const { trackCommandFailure } = await import("./events-6LQNRKHZ.js");
1282
1282
  trackCommandFailure(
1283
1283
  command,
1284
1284
  err,
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-PO2SDVQA.js";
10
10
  import {
11
11
  findFFmpeg
12
- } from "./chunk-KEGTYA7V.js";
12
+ } from "./chunk-IK3SOMZ4.js";
13
13
  import {
14
14
  stoppableExecFile
15
15
  } from "./chunk-HU2SPFNG.js";
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  runRenderSetupWorker
9
- } from "./chunk-54DMWFQZ.js";
9
+ } from "./chunk-D3ZWBHZP.js";
10
10
  import {
11
11
  chromeMajorCeiling,
12
12
  exceedsChromeCeiling