hyperframes 0.8.192 → 0.8.194

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 (189) hide show
  1. package/dist/{add-TZU2UW7A.js → add-47UAIWY4.js} +12 -12
  2. package/dist/{animatedGifPrep-NLAXC3VV.js → animatedGifPrep-TFSQZWK6.js} +8 -7
  3. package/dist/api.js +18 -17
  4. package/dist/{asset-JAJXA6LB.js → asset-AU7PZHXA.js} +2 -2
  5. package/dist/{assetCataloger-4WTX3J4I.js → assetCataloger-HC5N6WPT.js} +8 -7
  6. package/dist/{audio-XLWC7JKS.js → audio-7AWMZWBM.js} +14 -13
  7. package/dist/{auth-5K6X3NPJ.js → auth-GXH3QNDJ.js} +1 -1
  8. package/dist/{autoUpdate-RNV7SKGB.js → autoUpdate-GVGP5O2I.js} +3 -3
  9. package/dist/{backgroundChecks-QXLVZVGX.js → backgroundChecks-IUJM2Q35.js} +3 -3
  10. package/dist/backgroundChecksWorker.js +3 -3
  11. package/dist/{batchRender-THKSPDZR.js → batchRender-3XS2Y2Y4.js} +4 -4
  12. package/dist/{beats-K7CGCFVL.js → beats-U64B4S7Z.js} +9 -9
  13. package/dist/{benchmark-PHRDIXNL.js → benchmark-2YUPAI76.js} +9 -9
  14. package/dist/{browser-GN6R5ZSK.js → browser-DBFH7KXM.js} +5 -5
  15. package/dist/{bundleWithLocalizedFonts-C325UNR4.js → bundleWithLocalizedFonts-XWL7KSQJ.js} +2 -2
  16. package/dist/{capture-BZ7APOGQ.js → capture-E4VW75NM.js} +2 -2
  17. package/dist/{capture-6UBQFHZQ.js → capture-YWH7BPBI.js} +13 -12
  18. package/dist/{captureCompositionFrame-VORSCTWC.js → captureCompositionFrame-IG6S2OHG.js} +13 -12
  19. package/dist/{catalog-PHU2RUZ3.js → catalog-LZIZLZ34.js} +12 -12
  20. package/dist/{catch-up-HCNRM46J.js → catch-up-ZVNPIACY.js} +4 -4
  21. package/dist/{check-TJ5ZLB4I.js → check-EKEOD4UM.js} +38 -37
  22. package/dist/{checkBrowser-DWP7ZXJ7.js → checkBrowser-MYH6HPHH.js} +33 -32
  23. package/dist/{chunk-XF77MK3J.js → chunk-2AJU7PZ6.js} +1 -1
  24. package/dist/chunk-2D5WP2NI.js +3901 -0
  25. package/dist/{chunk-FBVUAH7N.js → chunk-2OYYNKJ4.js} +1 -1
  26. package/dist/{chunk-R2U2G4OS.js → chunk-37IHQVNQ.js} +1 -1
  27. package/dist/{chunk-IMSI7IFW.js → chunk-3OSBSUN3.js} +18 -18
  28. package/dist/{chunk-RHYOWDI6.js → chunk-3S3CXF4W.js} +2 -2
  29. package/dist/{chunk-YMQQXPD5.js → chunk-452UK7E7.js} +5 -12
  30. package/dist/{chunk-L2YGSAOL.js → chunk-4FVNEXSV.js} +3 -3
  31. package/dist/{chunk-7UZC4N62.js → chunk-4GMDL4N5.js} +1 -1
  32. package/dist/{chunk-YWRQHRDY.js → chunk-4PIPQPCW.js} +7 -7
  33. package/dist/{chunk-J2ASTCU6.js → chunk-4VSV56F2.js} +2 -2
  34. package/dist/{chunk-NXMYHJAL.js → chunk-4VYPICIA.js} +29 -1
  35. package/dist/{chunk-QX4TB4NH.js → chunk-52YJKWV3.js} +379 -127
  36. package/dist/{chunk-GANST5K3.js → chunk-54PZ2EQZ.js} +1 -1
  37. package/dist/{chunk-5IPKQHOL.js → chunk-B3GG3HJB.js} +1 -1
  38. package/dist/{chunk-2MCXIY4B.js → chunk-B7RJV74O.js} +28 -11
  39. package/dist/{chunk-VOM2HLUI.js → chunk-BK5YCT54.js} +3 -3
  40. package/dist/{chunk-RWGASWT7.js → chunk-BL4U6U52.js} +1 -0
  41. package/dist/{chunk-T6O5OLN2.js → chunk-BYADARIC.js} +2 -2
  42. package/dist/{chunk-VNPADTDD.js → chunk-CEUBYYVJ.js} +2 -2
  43. package/dist/{chunk-JCDYDF54.js → chunk-CEZH4AQT.js} +12 -2
  44. package/dist/{chunk-BY6OQ6XP.js → chunk-CZNSLFYD.js} +3 -1
  45. package/dist/{chunk-SBBQFPCJ.js → chunk-DT3JESJ6.js} +1 -1
  46. package/dist/{chunk-3CXIX6XS.js → chunk-DVQDBWQG.js} +4 -4
  47. package/dist/{chunk-K2AKVYNR.js → chunk-EB3XXHNO.js} +2 -2
  48. package/dist/{chunk-3FV5BVWS.js → chunk-EY7GKVPS.js} +2 -2
  49. package/dist/{chunk-W24SZ5FL.js → chunk-F2ASNL2K.js} +6 -9
  50. package/dist/{chunk-ODBYZIOH.js → chunk-F3B7CE3Q.js} +14 -14
  51. package/dist/{chunk-E3P3LJG6.js → chunk-FLREUEHW.js} +28 -11
  52. package/dist/{chunk-6XVKMBUA.js → chunk-FUA22HO4.js} +1 -1
  53. package/dist/{chunk-AEXVVABM.js → chunk-GAFEU6AB.js} +13 -10
  54. package/dist/{chunk-DIKAPMMF.js → chunk-GQVTTWZF.js} +144 -39
  55. package/dist/{chunk-7LLRMYP6.js → chunk-HCLBM2LQ.js} +2 -2
  56. package/dist/{chunk-AMZJFCOX.js → chunk-HG5ECUOR.js} +5 -5
  57. package/dist/{chunk-KZOZN4PI.js → chunk-HPGQPRHY.js} +3 -3
  58. package/dist/{chunk-BPKLUHFT.js → chunk-HQD7ODQB.js} +5 -5
  59. package/dist/{chunk-SK7TR7BL.js → chunk-JU4T4VAA.js} +4 -4
  60. package/dist/{chunk-MGBUWPXX.js → chunk-JVTWX5G3.js} +33 -8
  61. package/dist/{chunk-2J3NA3OB.js → chunk-JXTPNUSO.js} +83 -51
  62. package/dist/{chunk-2VXY3PEF.js → chunk-K2VXPQKC.js} +107 -94
  63. package/dist/chunk-K4MJX7SR.js +17 -0
  64. package/dist/{chunk-XX2PA4L3.js → chunk-KDEV5RIE.js} +7 -3
  65. package/dist/{chunk-MVIJTXN5.js → chunk-LMIDZIW2.js} +12 -12
  66. package/dist/{chunk-6WNLQI63.js → chunk-LOGKDQ3G.js} +3 -3
  67. package/dist/{chunk-IW5G323T.js → chunk-LTGTN2TH.js} +8 -9
  68. package/dist/{chunk-MEE4NTPZ.js → chunk-LZ4WPR3B.js} +2 -2
  69. package/dist/{chunk-32NB4VMH.js → chunk-M2VXARYK.js} +3 -2
  70. package/dist/{chunk-7RSY7SZN.js → chunk-MCFPMUMT.js} +2 -2
  71. package/dist/{chunk-BEOK6F26.js → chunk-MGSNFWGR.js} +2 -2
  72. package/dist/{chunk-ZEMDV6W2.js → chunk-MO6RTNYD.js} +1 -1
  73. package/dist/{chunk-7JJMT6LN.js → chunk-N33FO44R.js} +1 -1
  74. package/dist/{chunk-A4OI5ZNX.js → chunk-N3M3IU6S.js} +1 -1
  75. package/dist/{chunk-CXRZBWSH.js → chunk-NVVIFW3C.js} +10 -10
  76. package/dist/{chunk-E5V6WEMK.js → chunk-O2ILONGK.js} +10 -10
  77. package/dist/{chunk-4HCJOFMB.js → chunk-OJNNKHAZ.js} +94 -22
  78. package/dist/{chunk-QWLES6YV.js → chunk-PEHST4UY.js} +3 -3
  79. package/dist/{chunk-BV6YE455.js → chunk-POFJH2IS.js} +1 -1
  80. package/dist/{chunk-AR46ND2Q.js → chunk-PXK3ICU6.js} +1 -1
  81. package/dist/{chunk-LOKCBZYF.js → chunk-Q4HKC3O7.js} +3 -3
  82. package/dist/{chunk-J2BSUF6X.js → chunk-QJQTWTM7.js} +8 -3
  83. package/dist/{chunk-QFPBRZJD.js → chunk-ROEW726S.js} +1 -1
  84. package/dist/{chunk-OQL4AJ4X.js → chunk-RUPGFW5B.js} +6 -6
  85. package/dist/{chunk-5TRFLZ5Z.js → chunk-RZWJJCI7.js} +2 -2
  86. package/dist/{chunk-2HP5GIQ3.js → chunk-SNECH6QA.js} +1 -1
  87. package/dist/{chunk-REUL2KH2.js → chunk-ST35C4K6.js} +1 -1
  88. package/dist/{chunk-4E75LHAL.js → chunk-ST4SHO3S.js} +1 -1
  89. package/dist/{chunk-ULTKB5FC.js → chunk-TDYKVJTU.js} +548 -429
  90. package/dist/{chunk-WOKVXK4J.js → chunk-VHIBBDEI.js} +1 -1
  91. package/dist/{chunk-EKGGSAWR.js → chunk-VPON6DF2.js} +5 -5
  92. package/dist/{chunk-VRAXIQ6I.js → chunk-XYGULBFV.js} +2 -2
  93. package/dist/{chunk-PFRG5P32.js → chunk-Y3BT27Y7.js} +1 -1
  94. package/dist/{clean-2RNCTDBT.js → clean-NS2SDRK7.js} +21 -20
  95. package/dist/cli.js +54 -54
  96. package/dist/{cloud-NFIKESNZ.js → cloud-K4XQPWTY.js} +4 -4
  97. package/dist/{cloudrun-7224BCX3.js → cloudrun-BKOKXTXV.js} +6 -6
  98. package/dist/{compare-HL44MXVX.js → compare-ZAV773OL.js} +31 -30
  99. package/dist/{compiler-WF5QTXV7.js → compiler-CWHFCE3H.js} +5 -5
  100. package/dist/{component-ZBZXSJBR.js → component-OXA2ZWX3.js} +3 -3
  101. package/dist/{compositions-76P7LDDX.js → compositions-NKRVWCPE.js} +12 -11
  102. package/dist/{contactSheet-43ISAESM.js → contactSheet-5APX35L3.js} +1 -1
  103. package/dist/{delete-4YZBYOHJ.js → delete-HZ2LBCLC.js} +2 -2
  104. package/dist/{deploy-UGUUGYLF.js → deploy-FNDTZFF7.js} +1 -1
  105. package/dist/{deterministicFonts-RO2TCMLZ.js → deterministicFonts-RADD3BSX.js} +2 -2
  106. package/dist/{dist-5KKCRFPT.js → dist-2YTN2UGY.js} +3 -3
  107. package/dist/{dist-QQ26RUDV.js → dist-7OCZHNLY.js} +1 -1
  108. package/dist/{doctor-GGVUK4NB.js → doctor-6QWJGO5P.js} +14 -13
  109. package/dist/{events-V2VU4J3B.js → events-HTHOBIUN.js} +3 -3
  110. package/dist/{events-OXPTHVDB.js → events-MBKHVGXX.js} +2 -2
  111. package/dist/{feedback-HFZ5SCUK.js → feedback-X5QWTLEX.js} +8 -8
  112. package/dist/{ffmpeg-3VHY7GO3.js → ffmpeg-7GESJCCT.js} +9 -8
  113. package/dist/{figma-7SEZTLBJ.js → figma-SXOHFVJI.js} +3 -3
  114. package/dist/fontLocalizeCli.js +11 -10
  115. package/dist/{get-Y2S2PXCM.js → get-T2HI5FCK.js} +2 -2
  116. package/dist/{gpuPolicy-UHPOWRV5.js → gpuPolicy-5FABKW5G.js} +8 -7
  117. package/dist/{grade-compare-4VTXSQM5.js → grade-compare-JATGHA6Q.js} +37 -35
  118. package/dist/{gsapParser-UP3PNPC2.js → gsapParser-IEUSLYDJ.js} +11 -11
  119. package/dist/{gsapParserAcorn-OOTY2MVN.js → gsapParserAcorn-LZJKCFQI.js} +1 -1
  120. package/dist/{help-HXNOACHI.js → help-G6CIKCGS.js} +1 -1
  121. package/dist/{history-XDJUI4LC.js → history-CSJUHYTD.js} +9 -8
  122. package/dist/hyperframe.manifest.json +1 -1
  123. package/dist/hyperframe.runtime.iife.js +71 -65
  124. package/dist/hyperframes-player.global.js +3 -3
  125. package/dist/hyperframes-slideshow.global.js +1 -1
  126. package/dist/{info-KYRI3EZV.js → info-MTTUMW2C.js} +8 -8
  127. package/dist/{init-IL7EWMT5.js → init-LJYNI5EK.js} +30 -29
  128. package/dist/{inspect-TBNH23UC.js → inspect-HGDM2VJE.js} +31 -30
  129. package/dist/{installer-O2YMFSI4.js → installer-3XHURUDG.js} +5 -5
  130. package/dist/{keyframes-4GF62KAJ.js → keyframes-MSU7N53X.js} +59 -33
  131. package/dist/{lambda-JFL6M4XZ.js → lambda-2I2TIUSD.js} +8 -8
  132. package/dist/{layout-7MAEFR65.js → layout-KWOXZMN7.js} +31 -30
  133. package/dist/{lint-4AYHKYAM.js → lint-N53TLHFG.js} +7 -7
  134. package/dist/{lintProject-52SLJPRC.js → lintProject-EOUZA4EG.js} +1 -1
  135. package/dist/{list-3DP3D3MW.js → list-SHYPQC7U.js} +2 -2
  136. package/dist/{login-T54WQYRQ.js → login-TEB6PA3Y.js} +4 -4
  137. package/dist/{manager-MZIJY73J.js → manager-COSJVRAE.js} +2 -2
  138. package/dist/{manager-QROK2IH3.js → manager-PLRSZH5G.js} +10 -9
  139. package/dist/{media-treatment-4CXF7MSG.js → media-treatment-XTUKMIGE.js} +15 -14
  140. package/dist/{models-IS3I6JKU.js → models-4WKAPP2L.js} +14 -13
  141. package/dist/{motionShot-DVYJZOTQ.js → motionShot-PTKB4ILH.js} +17 -16
  142. package/dist/{normalize-audio-4527JIK4.js → normalize-audio-3NG326I2.js} +6 -6
  143. package/dist/{open-5JE46SAX.js → open-6S2LMF7R.js} +12 -12
  144. package/dist/{parakeetRunner-7JIJGJJ7.js → parakeetRunner-OEI35DVO.js} +15 -14
  145. package/dist/{pipeline-YEN3WFD2.js → pipeline-543FUKH4.js} +10 -9
  146. package/dist/{play-WFX67I7M.js → play-ETEGHP3B.js} +21 -21
  147. package/dist/{preflight-D377HVUZ.js → preflight-Y5IYUF2T.js} +11 -10
  148. package/dist/{present-XTSEKAC7.js → present-ZRSLMJ6J.js} +17 -17
  149. package/dist/{preview-5XH7EK6O.js → preview-CEJ3SVTY.js} +100 -65
  150. package/dist/{producer-TFFYF4ZM.js → producer-JFVFIV26.js} +1 -1
  151. package/dist/{projectConfig-6YUJHMCL.js → projectConfig-7EK3BS72.js} +7 -7
  152. package/dist/{publication-JK33Y55E.js → publication-Y54GYFMV.js} +3 -3
  153. package/dist/{publish-JHDGXWXU.js → publish-S3UJTPCV.js} +10 -10
  154. package/dist/{remove-background-P44MYAPJ.js → remove-background-YTATNQSI.js} +11 -10
  155. package/dist/{render-RBINWWP5.js → render-IIPXMSBO.js} +35 -34
  156. package/dist/{render-RJ3I4E3A.js → render-RN3W6YL4.js} +17 -16
  157. package/dist/{render-HJ34EGMN.js → render-WNIG4B3J.js} +6 -6
  158. package/dist/{render-batch-3D6XQYUC.js → render-batch-OYS3UQDB.js} +6 -6
  159. package/dist/renderSetupWorker.js +42 -4
  160. package/dist/{resolver-HCLTFZUW.js → resolver-OVCXVEDX.js} +5 -5
  161. package/dist/{sherpa-IPOUJM6Q.js → sherpa-NCSFD7S3.js} +14 -13
  162. package/dist/skills/hyperframes/references/format.md +1 -0
  163. package/dist/skills/media-use/scripts/lib/duck.mjs +18 -2
  164. package/dist/skills/media-use/scripts/lib/duck.test.mjs +79 -0
  165. package/dist/{skills-P67QEERC.js → skills-IUV3K3X7.js} +5 -5
  166. package/dist/{skillsUpdateCheck-IFMLRVIF.js → skillsUpdateCheck-NACBXMWW.js} +3 -3
  167. package/dist/{snapshot-4YM4NNWJ.js → snapshot-7S5USJ2I.js} +52 -46
  168. package/dist/{src-DCD3YMXX.js → src-CAR6PHI4.js} +10 -9
  169. package/dist/{src-SSV66L3F.js → src-HITT6NWG.js} +19 -6
  170. package/dist/{staticProjectServer-C7PPGLEQ.js → staticProjectServer-QR6VZBPT.js} +18 -18
  171. package/dist/studio/assets/{hyperframes-player-ChN3cOr0.js → hyperframes-player-DLOUZUct.js} +1 -1
  172. package/dist/studio/assets/{index-CHu83hHM.js → index-CAQ7OcNJ.js} +163 -163
  173. package/dist/studio/assets/{index-BYbFcRR0.js → index-D9kA6JUX.js} +1 -1
  174. package/dist/studio/index.html +1 -1
  175. package/dist/{studio-api-6YZ7PIQR.js → studio-api-HVNOJILH.js} +13 -11
  176. package/dist/{studioServer-EWHSE4GC.js → studioServer-3BG5FRJL.js} +53 -52
  177. package/dist/{telemetry-GGLBHZRZ.js → telemetry-PET2GFQG.js} +3 -3
  178. package/dist/{timeline-NKHQJXJ2.js → timeline-PVIC2Z5K.js} +20 -19
  179. package/dist/{tokens-FWNNDJ6R.js → tokens-4N46PWSF.js} +2 -2
  180. package/dist/{transcribe-TRPKXZ7L.js → transcribe-2DVBS7MH.js} +19 -18
  181. package/dist/{transcribe-VD2TMMC2.js → transcribe-IDC7JTM4.js} +13 -12
  182. package/dist/{updateCheck-CUPS6LU3.js → updateCheck-QRDVXU7I.js} +2 -2
  183. package/dist/{upgrade-23XO6MEX.js → upgrade-5CNE3TBH.js} +2 -2
  184. package/dist/{urlDownloader-YOAOONCK.js → urlDownloader-P2I25DFC.js} +7 -6
  185. package/dist/{validate-BWIW24G5.js → validate-CLR5PEOV.js} +25 -24
  186. package/dist/{video-XRXJS4GC.js → video-3CKZZBOB.js} +8 -7
  187. package/dist/warmCheck.js +38 -37
  188. package/package.json +1 -1
  189. package/dist/chunk-B2XLXD7V.js +0 -3897
@@ -37,7 +37,7 @@ import {
37
37
  } from "./chunk-6NLPPKBO.js";
38
38
  import {
39
39
  VERSION
40
- } from "./chunk-3FV5BVWS.js";
40
+ } from "./chunk-EY7GKVPS.js";
41
41
 
42
42
  // src/telemetry/transport.ts
43
43
  import { spawn } from "child_process";
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-HVW7ABXD.js";
13
13
  import {
14
14
  DEFAULT_REGISTRY_URL
15
- } from "./chunk-32NB4VMH.js";
15
+ } from "./chunk-M2VXARYK.js";
16
16
 
17
17
  // src/utils/projectConfig.ts
18
18
  import { readFileSync, writeFileSync } from "fs";
@@ -1246,6 +1246,33 @@ function classifyTweenPropertyGroup(properties) {
1246
1246
  if (groups.size === 1) return groups.values().next().value;
1247
1247
  return void 0;
1248
1248
  }
1249
+ function mergePercentageKeyframes(keyframes) {
1250
+ const byPercentage = /* @__PURE__ */ new Map();
1251
+ for (const keyframe of keyframes) {
1252
+ const existing = byPercentage.get(keyframe.percentage);
1253
+ if (!existing) {
1254
+ byPercentage.set(keyframe.percentage, {
1255
+ ...keyframe,
1256
+ properties: { ...keyframe.properties }
1257
+ });
1258
+ continue;
1259
+ }
1260
+ existing.properties = { ...existing.properties, ...keyframe.properties };
1261
+ if (keyframe.ease !== void 0) existing.ease = keyframe.ease;
1262
+ if (keyframe.auto !== void 0) existing.auto = keyframe.auto;
1263
+ }
1264
+ return [...byPercentage.values()].sort((a, b) => a.percentage - b.percentage);
1265
+ }
1266
+ function distributeArrayKeyframes(channels) {
1267
+ return mergePercentageKeyframes(
1268
+ [...channels].flatMap(
1269
+ ([key, values]) => values.map((value, index) => ({
1270
+ percentage: values.length > 1 ? Math.round(index / (values.length - 1) * 100) : 0,
1271
+ properties: { [key]: value }
1272
+ }))
1273
+ )
1274
+ );
1275
+ }
1249
1276
  function buildArcPath(coords, curviness, autoRotate, isCubic) {
1250
1277
  const first = coords[0];
1251
1278
  if (coords.length < 2 || !first) return void 0;
@@ -2713,19 +2740,9 @@ function parseSimpleArrayKeyframes(node, scope) {
2713
2740
  easeEach = tryResolveStringProp(prop.value, scope) ?? easeEach;
2714
2741
  }
2715
2742
  }
2716
- const maxLen = Math.max(...[...arrayProps.values()].map((a) => a.length), 0);
2717
- const keyframes = [];
2718
- for (let i = 0; i < maxLen; i++) {
2719
- const percentage = maxLen > 1 ? Math.round(i / (maxLen - 1) * 100) : 0;
2720
- const properties = {};
2721
- for (const [key, values] of arrayProps) {
2722
- if (i < values.length) properties[key] = values[i];
2723
- }
2724
- keyframes.push({ percentage, properties });
2725
- }
2726
2743
  return {
2727
2744
  format: "simple-array",
2728
- keyframes,
2745
+ keyframes: distributeArrayKeyframes(arrayProps),
2729
2746
  ...ease ? { ease } : {},
2730
2747
  ...easeEach ? { easeEach } : {}
2731
2748
  };
@@ -21,13 +21,13 @@ import {
21
21
  emitWords,
22
22
  getPreparedWavDurationSeconds,
23
23
  prepareWav
24
- } from "./chunk-LOKCBZYF.js";
24
+ } from "./chunk-Q4HKC3O7.js";
25
25
  import {
26
26
  stoppedByCancelSignal
27
- } from "./chunk-J2ASTCU6.js";
27
+ } from "./chunk-4VSV56F2.js";
28
28
  import {
29
29
  verifies
30
- } from "./chunk-PFRG5P32.js";
30
+ } from "./chunk-Y3BT27Y7.js";
31
31
  import {
32
32
  PARAKEET_MODEL_LABEL,
33
33
  SHERPA_ERROR_PREFIX,
@@ -138,6 +138,7 @@ function runCancellableProcess(command, args, options = {}) {
138
138
  const onAbort = () => terminate(signal?.reason ?? new Error("Operation aborted"));
139
139
  child.stdout?.on("data", (chunk) => {
140
140
  stdout += chunk.toString();
141
+ options.onStdout?.(chunk.toString());
141
142
  if (Buffer.byteLength(stdout) + Buffer.byteLength(stderr) > maxBufferBytes) {
142
143
  terminate(new Error(`Process output exceeded ${maxBufferBytes} bytes`), "ENOBUFS");
143
144
  }
@@ -8,14 +8,14 @@ import {
8
8
  DEFAULT_REGISTRY_URL,
9
9
  fetchItemFile,
10
10
  validRegistryItem
11
- } from "./chunk-32NB4VMH.js";
11
+ } from "./chunk-M2VXARYK.js";
12
12
  import {
13
13
  publishRegistryFile,
14
14
  registryTargetPath
15
15
  } from "./chunk-GMECXFAN.js";
16
16
  import {
17
17
  validateVariables
18
- } from "./chunk-MGBUWPXX.js";
18
+ } from "./chunk-JVTWX5G3.js";
19
19
  import {
20
20
  realProjectRoot
21
21
  } from "./chunk-OFQWTKPW.js";
@@ -12,10 +12,10 @@ import {
12
12
  } from "./chunk-2ST4WAFY.js";
13
13
  import {
14
14
  createProjectConfig
15
- } from "./chunk-5IPKQHOL.js";
15
+ } from "./chunk-B3GG3HJB.js";
16
16
  import {
17
17
  isHyperframesProject
18
- } from "./chunk-MGBUWPXX.js";
18
+ } from "./chunk-JVTWX5G3.js";
19
19
 
20
20
  // src/utils/desktopApp.ts
21
21
  import { spawn, spawnSync } from "child_process";
@@ -14,10 +14,13 @@ import {
14
14
  } from "./chunk-DKPNNYBZ.js";
15
15
  import {
16
16
  resolveCaptureBrowserGpuMode
17
- } from "./chunk-BEOK6F26.js";
17
+ } from "./chunk-MGSNFWGR.js";
18
18
  import {
19
19
  requestCliExit
20
20
  } from "./chunk-JVBRJMOP.js";
21
+ import {
22
+ withHyperframesBrowserMarker
23
+ } from "./chunk-K4MJX7SR.js";
21
24
  import {
22
25
  normalizeErrorMessage
23
26
  } from "./chunk-T2EUWCJE.js";
@@ -150,7 +153,14 @@ async function launchOwnedBrowser(puppeteer, options) {
150
153
  const signal = options.signal ? AbortSignal.any([options.signal, abort.signal]) : abort.signal;
151
154
  const launchedAt = Date.now();
152
155
  const launch = untilLaunchOrAbort(
153
- puppeteer.launch({ ...options, pipe: true, signal, handleSIGINT: false, handleSIGTERM: false }),
156
+ puppeteer.launch({
157
+ ...options,
158
+ args: withHyperframesBrowserMarker(options.args),
159
+ pipe: true,
160
+ signal,
161
+ handleSIGINT: false,
162
+ handleSIGTERM: false
163
+ }),
154
164
  signal
155
165
  );
156
166
  const limit = options.timeout ?? LAUNCH_TIMEOUT_MS;
@@ -460,7 +460,9 @@ function localizeHtmlEntry(ctx, entryPath, content) {
460
460
  const referrerAbsDir = resolve2(ctx.absProjectDir, dirname(entryPath));
461
461
  const { document } = parseHTML(content.toString("utf-8"));
462
462
  const resolveTarget = (val, dir) => tryResolveExternal(ctx, val, dir);
463
- const attrsChanged = rewriteHtmlAttributes(document, referrerAbsDir, entryPath, resolveTarget);
463
+ const attrsChanged = rewriteHtmlAttributes(document, referrerAbsDir, entryPath, resolveTarget, {
464
+ attrs: ["src", "href", "poster"]
465
+ });
464
466
  const stylesChanged = rewriteStyleBlocks(document, referrerAbsDir, entryPath, resolveTarget);
465
467
  if (attrsChanged || stylesChanged) {
466
468
  ctx.fileContents.set(entryPath, Buffer.from(document.toString(), "utf-8"));
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  shouldTrack
9
- } from "./chunk-GANST5K3.js";
9
+ } from "./chunk-54PZ2EQZ.js";
10
10
 
11
11
  // src/telemetry/renderObservability.ts
12
12
  function renderObservabilityTelemetryPayload(observability) {
@@ -15,16 +15,16 @@ import {
15
15
  findFFmpeg,
16
16
  findFFprobe,
17
17
  getFFmpegInstallHint
18
- } from "./chunk-VRAXIQ6I.js";
18
+ } from "./chunk-XYGULBFV.js";
19
19
  import {
20
20
  DEFAULT_VP9_CPU_USED,
21
21
  SDR_RGB_TO_BT709_FILTER,
22
22
  SDR_RGB_TO_TAGGED_BT709_FILTER,
23
23
  renderProvenanceArgs
24
- } from "./chunk-QX4TB4NH.js";
24
+ } from "./chunk-52YJKWV3.js";
25
25
  import {
26
26
  runCancellableProcess
27
- } from "./chunk-RWGASWT7.js";
27
+ } from "./chunk-BL4U6U52.js";
28
28
 
29
29
  // src/background-removal/pipeline.ts
30
30
  import { spawn } from "child_process";
@@ -317,7 +317,7 @@ async function decoderTransposesDimensions(inputPath) {
317
317
  }
318
318
  async function probeMedia(inputPath) {
319
319
  const isImage = inferInputKind(inputPath) === "image";
320
- const engine = await import("./src-SSV66L3F.js");
320
+ const engine = await import("./src-HITT6NWG.js");
321
321
  const meta = await engine.extractMediaMetadata(inputPath);
322
322
  if (isImage) {
323
323
  return { width: meta.width, height: meta.height, fps: 0, frameCount: 1 };
@@ -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-2J3NA3OB.js";
9
+ } from "./chunk-JXTPNUSO.js";
10
10
  import {
11
11
  injectTagsAtHeadStart
12
- } from "./chunk-B2XLXD7V.js";
12
+ } from "./chunk-2D5WP2NI.js";
13
13
 
14
14
  // src/utils/compositionServer.ts
15
15
  import { createHash } from "crypto";
@@ -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.192" : "0.0.0-dev";
10
- var PRODUCER_VERSION = true ? "0.8.192" : "0.0.0-dev";
9
+ var VERSION = true ? "0.8.194" : "0.0.0-dev";
10
+ var PRODUCER_VERSION = true ? "0.8.194" : "0.0.0-dev";
11
11
 
12
12
  export {
13
13
  VERSION,
@@ -113,14 +113,11 @@ async function createScrollContactSheet(screenshotsDir, outputPath, budget = {})
113
113
  labels
114
114
  );
115
115
  }
116
- async function createSnapshotContactSheet(snapshotsDir, outputPath, budget = {}) {
117
- if (!existsSync(snapshotsDir)) return [];
118
- const snapshotFiles = readdirSync(snapshotsDir).filter((f) => f.startsWith("frame-") && f.endsWith(".png")).sort();
119
- if (snapshotFiles.length === 0) return [];
120
- const paths = snapshotFiles.map((f) => join(snapshotsDir, f));
121
- const labels = snapshotFiles.map((f) => {
122
- const m = f.match(/at-([\d.]+)s/);
123
- return m ? `${m[1]}s` : f;
116
+ async function createSnapshotContactSheet(paths, outputPath, budget = {}) {
117
+ if (paths.length === 0) return [];
118
+ const labels = paths.map((path) => {
119
+ const m = basename(path).match(/at-([\d.]+)s/);
120
+ return m ? `${m[1]}s` : basename(path);
124
121
  });
125
122
  return createContactSheetPages(
126
123
  paths,
@@ -132,7 +129,7 @@ async function createSnapshotContactSheet(snapshotsDir, outputPath, budget = {})
132
129
  }
133
130
  async function createAssetContactSheet(assetsDir, outputPath, budget = {}) {
134
131
  if (!existsSync(assetsDir)) return [];
135
- const imageExts = /* @__PURE__ */ new Set([".png", ".jpg", ".jpeg", ".webp"]);
132
+ const imageExts = /* @__PURE__ */ new Set([".png", ".jpg", ".jpeg", ".webp", ".avif", ".gif", ".heic", ".tiff"]);
136
133
  const assetFiles = readdirSync(assetsDir).filter((f) => imageExts.has(extname(f).toLowerCase()) && !f.includes("contact-sheet")).sort();
137
134
  if (assetFiles.length === 0) return [];
138
135
  const paths = assetFiles.map((f) => join(assetsDir, f));
@@ -6,23 +6,23 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveProject
9
- } from "./chunk-4E75LHAL.js";
9
+ } from "./chunk-ST4SHO3S.js";
10
10
  import {
11
11
  installPageFunctionGuard,
12
12
  resolveCliChromeGpuMode,
13
13
  seekCompositionTimeline,
14
14
  waitForRuntimeReady
15
- } from "./chunk-E5V6WEMK.js";
15
+ } from "./chunk-O2ILONGK.js";
16
16
  import {
17
17
  launchManagedBrowser,
18
18
  resolveManagedGpuMode
19
- } from "./chunk-JCDYDF54.js";
19
+ } from "./chunk-CEZH4AQT.js";
20
20
  import {
21
21
  pageNavigationTimeoutMs
22
- } from "./chunk-QWLES6YV.js";
22
+ } from "./chunk-PEHST4UY.js";
23
23
  import {
24
24
  resolveCompositionViewportFromHtml
25
- } from "./chunk-WOKVXK4J.js";
25
+ } from "./chunk-VHIBBDEI.js";
26
26
  import {
27
27
  defineCommand
28
28
  } from "./chunk-S3S4TGEH.js";
@@ -35,14 +35,14 @@ import {
35
35
  } from "./chunk-ZTZA4UWZ.js";
36
36
  import {
37
37
  resolveNaturalMediaTimelineDuration
38
- } from "./chunk-B2XLXD7V.js";
38
+ } from "./chunk-2D5WP2NI.js";
39
39
  import {
40
40
  decodeWellFormedEscapes
41
41
  } from "./chunk-BSQ7XANM.js";
42
42
  import {
43
43
  printDeprecationNotice,
44
44
  withMeta
45
- } from "./chunk-2HP5GIQ3.js";
45
+ } from "./chunk-SNECH6QA.js";
46
46
  import {
47
47
  normalizeErrorMessage
48
48
  } from "./chunk-T2EUWCJE.js";
@@ -239,7 +239,7 @@ function extractCompositionErrorsFromLint(lintResult) {
239
239
  async function localizeRemoteAssets(html) {
240
240
  let dir;
241
241
  try {
242
- const { loadProducer } = await import("./producer-TFFYF4ZM.js");
242
+ const { loadProducer } = await import("./producer-JFVFIV26.js");
243
243
  const { localizeRemoteMediaSources, localizeRemoteImageSources, localizeRemoteFontFaces } = await loadProducer();
244
244
  dir = mkdtempSync(join(tmpdir(), "hf-validate-assets-"));
245
245
  const assetDir = dir;
@@ -260,10 +260,10 @@ async function localizeRemoteAssets(html) {
260
260
  }
261
261
  async function validateInBrowser(project, opts) {
262
262
  const projectDir = project.dir;
263
- const { bundleToSingleHtml } = await import("./compiler-WF5QTXV7.js");
264
- const { ensureBrowser } = await import("./manager-MZIJY73J.js");
265
- const { serveStaticProjectHtml } = await import("./staticProjectServer-C7PPGLEQ.js");
266
- const { lintProject } = await import("./lintProject-52SLJPRC.js");
263
+ const { bundleToSingleHtml } = await import("./compiler-CWHFCE3H.js");
264
+ const { ensureBrowser } = await import("./manager-COSJVRAE.js");
265
+ const { serveStaticProjectHtml } = await import("./staticProjectServer-QR6VZBPT.js");
266
+ const { lintProject } = await import("./lintProject-EOUZA4EG.js");
267
267
  const lintResult = await lintProject(projectDir);
268
268
  const compositionErrors = extractCompositionErrorsFromLint(lintResult);
269
269
  const html = await bundleToSingleHtml(projectDir);
@@ -284,9 +284,9 @@ async function validateInBrowser(project, opts) {
284
284
  try {
285
285
  const browser = await ensureBrowser();
286
286
  const puppeteer = await import("puppeteer-core");
287
- const { buildChromeArgs, analyzeClipMediaFit } = await import("./src-SSV66L3F.js");
287
+ const { buildChromeArgs, analyzeClipMediaFit } = await import("./src-HITT6NWG.js");
288
288
  const requestedGpuMode = resolveCliChromeGpuMode();
289
- const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu, resolveLocalWebGpu } = await import("./gpuPolicy-UHPOWRV5.js");
289
+ const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu, resolveLocalWebGpu } = await import("./gpuPolicy-5FABKW5G.js");
290
290
  const resolvedGpuMode = await resolveManagedGpuMode(requestedGpuMode, browser.executablePath);
291
291
  const requiresWebGpu = compositionRequiresWebGpu(html);
292
292
  const { gpuConfig, softwareWebGpu } = resolveLocalWebGpu(resolvedGpuMode, requiresWebGpu);
@@ -59,6 +59,33 @@ function editabilityForProvenance(provenance) {
59
59
  if (provenance.kind === "runtime-dynamic") return "source";
60
60
  return "unroll";
61
61
  }
62
+ function mergePercentageKeyframes(keyframes) {
63
+ const byPercentage = /* @__PURE__ */ new Map();
64
+ for (const keyframe of keyframes) {
65
+ const existing = byPercentage.get(keyframe.percentage);
66
+ if (!existing) {
67
+ byPercentage.set(keyframe.percentage, {
68
+ ...keyframe,
69
+ properties: { ...keyframe.properties }
70
+ });
71
+ continue;
72
+ }
73
+ existing.properties = { ...existing.properties, ...keyframe.properties };
74
+ if (keyframe.ease !== void 0) existing.ease = keyframe.ease;
75
+ if (keyframe.auto !== void 0) existing.auto = keyframe.auto;
76
+ }
77
+ return [...byPercentage.values()].sort((a, b) => a.percentage - b.percentage);
78
+ }
79
+ function distributeArrayKeyframes(channels) {
80
+ return mergePercentageKeyframes(
81
+ [...channels].flatMap(
82
+ ([key, values]) => values.map((value, index) => ({
83
+ percentage: values.length > 1 ? Math.round(index / (values.length - 1) * 100) : 0,
84
+ properties: { [key]: value }
85
+ }))
86
+ )
87
+ );
88
+ }
62
89
  function buildArcPath(coords, curviness, autoRotate, isCubic) {
63
90
  const first = coords[0];
64
91
  if (coords.length < 2 || !first) return void 0;
@@ -1355,19 +1382,9 @@ function parseSimpleArrayKeyframes(node, scope) {
1355
1382
  easeEach = tryResolveStringProp(prop.value, scope) ?? easeEach;
1356
1383
  }
1357
1384
  }
1358
- const maxLen = Math.max(...[...arrayProps.values()].map((a) => a.length), 0);
1359
- const keyframes = [];
1360
- for (let i = 0; i < maxLen; i++) {
1361
- const percentage = maxLen > 1 ? Math.round(i / (maxLen - 1) * 100) : 0;
1362
- const properties = {};
1363
- for (const [key, values] of arrayProps) {
1364
- if (i < values.length) properties[key] = values[i];
1365
- }
1366
- keyframes.push({ percentage, properties });
1367
- }
1368
1385
  return {
1369
1386
  format: "simple-array",
1370
- keyframes,
1387
+ keyframes: distributeArrayKeyframes(arrayProps),
1371
1388
  ...ease ? { ease } : {},
1372
1389
  ...easeEach ? { easeEach } : {}
1373
1390
  };
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  DISTRIBUTED_FPS,
12
12
  isDistributedFps
13
- } from "./chunk-MGBUWPXX.js";
13
+ } from "./chunk-JVTWX5G3.js";
14
14
  import {
15
15
  parseHTML
16
16
  } from "./chunk-SDYDNHEE.js";
@@ -30,6 +30,7 @@ import {
30
30
  inlineScriptRuns,
31
31
  insertRuntimeTag,
32
32
  isJavaScriptType,
33
+ isTemplateEntry,
33
34
  parseHTMLContent,
34
35
  parseHostVariableValues,
35
36
  planCompositionAssembly,
@@ -38,7 +39,7 @@ import {
38
39
  stripEmbeddedRuntimeScripts,
39
40
  styleElementsFor,
40
41
  warnUnknownEnumValues
41
- } from "./chunk-B2XLXD7V.js";
42
+ } from "./chunk-2D5WP2NI.js";
42
43
  import {
43
44
  cssVariableName
44
45
  } from "./chunk-VC76R6W2.js";
@@ -48,7 +49,7 @@ import {
48
49
  } from "./chunk-OFQWTKPW.js";
49
50
  import {
50
51
  lintHyperframeHtml
51
- } from "./chunk-2VXY3PEF.js";
52
+ } from "./chunk-K2VXPQKC.js";
52
53
  import {
53
54
  checkSubCompositionUsability,
54
55
  resolveSubCompositionContent
@@ -291,9 +292,6 @@ import { parse as parseJs } from "acorn";
291
292
  import { resolve as resolve2, relative, dirname, isAbsolute, sep } from "path";
292
293
 
293
294
  // ../core/dist/compiler/standaloneEntry.js
294
- function isTemplateEntry(html) {
295
- return html.trimStart().startsWith("<template");
296
- }
297
295
  function normalizeCompositionSrcPath(srcPath) {
298
296
  return srcPath.replace(/\\/g, "/").replace(/^\.\//, "");
299
297
  }
@@ -1023,16 +1021,22 @@ function wrapScopedCompositionScript(source, compositionId, errorLabel = "[Hyper
1023
1021
  })
1024
1022
  : window;
1025
1023
  var __hfResolveGsapTarget = function(target) {
1026
- if (typeof target === "string") return __hfQueryAll(target);
1027
- if (!Array.isArray(target)) return target;
1028
- return target.reduce(function(resolved, item) {
1024
+ if (typeof target !== "string" && !Array.isArray(target)) return target;
1025
+ var resolved = typeof target === "string" ? __hfQueryAll(target) : target.reduce(function(resolved, item) {
1029
1026
  if (typeof item === "string") {
1030
1027
  return resolved.concat(Array.prototype.slice.call(__hfQueryAll(item)));
1031
1028
  }
1032
1029
  resolved.push(item);
1033
1030
  return resolved;
1034
1031
  }, []);
1035
-
1032
+ if (!resolved.length) {
1033
+ // GSAP warns "GSAP target " + targets + " not found"; a bare empty match list prints an
1034
+ // empty name. Keep the authored selector as the text while still targeting nothing here.
1035
+ var originalTarget = String(target);
1036
+ resolved = [];
1037
+ resolved.toString = function() { return originalTarget; };
1038
+ }
1039
+ return resolved;
1036
1040
  };
1037
1041
  var __hfScopeTimeline = function(timeline) {
1038
1042
  if (!timeline || timeline.__hfScopedCompositionRoot === __hfFindRoot()) return timeline;
@@ -3545,7 +3549,6 @@ export {
3545
3549
  ensureExternalScriptTag,
3546
3550
  emitMountedModuleScripts,
3547
3551
  FLATTENED_INNER_ROOT_STRIP_ATTRS,
3548
- isTemplateEntry,
3549
3552
  extractStandaloneEntryFromIndex,
3550
3553
  scopeCssToComposition,
3551
3554
  wrapScopedCompositionScript,