hyperframes 0.8.155 → 0.8.156
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.
- package/dist/{add-QHRTHQDD.js → add-U35DO2JR.js} +13 -13
- package/dist/{animatedGifPrep-KYVKRWHT.js → animatedGifPrep-MRGFHBVF.js} +6 -6
- package/dist/api.js +14 -14
- package/dist/{asset-LBQA2IUJ.js → asset-HS4Q6LS2.js} +2 -2
- package/dist/{assetCataloger-Y3OELLLW.js → assetCataloger-SRTQYA6J.js} +2 -2
- package/dist/{auth-3MMX5MLV.js → auth-HS6GAILF.js} +2 -2
- package/dist/{autoUpdate-6EMWLUKO.js → autoUpdate-MRQ4ULBI.js} +2 -2
- package/dist/{backgroundChecks-3VL65XVE.js → backgroundChecks-K2ZMA43S.js} +3 -3
- package/dist/backgroundChecksWorker.js +3 -3
- package/dist/{batchRender-6TD4XSIP.js → batchRender-CMVCRSWP.js} +3 -3
- package/dist/{beats-NOHE5FA5.js → beats-JYECNCTZ.js} +12 -12
- package/dist/{benchmark-7EFNYNYH.js → benchmark-JGMKJSPN.js} +10 -10
- package/dist/{browser-IZ2DJGGN.js → browser-63WITJVS.js} +5 -5
- package/dist/{bundleWithLocalizedFonts-YVGLQ72Z.js → bundleWithLocalizedFonts-5SLYBFXL.js} +2 -2
- package/dist/{capture-YJEM42PR.js → capture-7MFOIE4K.js} +9 -9
- package/dist/{capture-HHK4GA4X.js → capture-T6QSEGKM.js} +2 -2
- package/dist/{catalog-GXGFKOX7.js → catalog-KVE5KJJT.js} +13 -13
- package/dist/{catch-up-L6E26OPV.js → catch-up-E3WYWSDY.js} +6 -6
- package/dist/{check-HSTEN7PX.js → check-QRP5WCP2.js} +32 -32
- package/dist/{checkBrowser-547BWZG6.js → checkBrowser-5XFA6PXF.js} +29 -29
- package/dist/{chunk-V6UUZGP6.js → chunk-2K5YII2L.js} +1 -1
- package/dist/{chunk-ZDEEHQ2Y.js → chunk-3THJEW7G.js} +1 -1
- package/dist/{chunk-TA5AUF2J.js → chunk-444O62RL.js} +1 -1
- package/dist/{chunk-B4WWDPNF.js → chunk-56AEM2EL.js} +16 -8
- package/dist/{chunk-QWQ6GQTI.js → chunk-7FFGZC2X.js} +1 -1
- package/dist/{chunk-RTI536FR.js → chunk-7K3CHJS3.js} +9 -9
- package/dist/{chunk-PVGDU7SE.js → chunk-7U27WUMQ.js} +1 -1
- package/dist/{chunk-O5S54BVW.js → chunk-C7WALYAY.js} +1 -1
- package/dist/{chunk-5GZLD7OW.js → chunk-COBIO7VC.js} +1 -1
- package/dist/{chunk-BADLIO5R.js → chunk-DDK6E66K.js} +1 -1
- package/dist/{chunk-PCBCTD7M.js → chunk-DDSQBREC.js} +2 -2
- package/dist/{chunk-GQ73YXKD.js → chunk-DRNTIYT3.js} +3 -3
- package/dist/{chunk-WQMTHPTK.js → chunk-DSX7R5M7.js} +1 -1
- package/dist/{chunk-HGAOO43L.js → chunk-FIL6QPZT.js} +2 -2
- package/dist/{chunk-4OMHV7P2.js → chunk-GVJ4LG62.js} +2 -2
- package/dist/{chunk-AVGGHUVK.js → chunk-HBKKW3NL.js} +6 -6
- package/dist/{chunk-AF6Y56VA.js → chunk-HG6H2ICP.js} +2 -2
- package/dist/{chunk-GD5MYXEK.js → chunk-HVQQN4NG.js} +1 -1
- package/dist/{chunk-ECFNYTEM.js → chunk-IOBKVP27.js} +1 -1
- package/dist/{chunk-2Q2KQRG7.js → chunk-JJERZGVE.js} +1 -1
- package/dist/{chunk-PXOFFSO3.js → chunk-JKCKXGIC.js} +1 -1
- package/dist/{chunk-HXU4DWOZ.js → chunk-KMSS5TOQ.js} +1 -1
- package/dist/{chunk-PCXEFXRK.js → chunk-LJHF4SKT.js} +2 -2
- package/dist/{chunk-XQYLUY2F.js → chunk-LZ2PZIVS.js} +1 -1
- package/dist/{chunk-6UMBAJRU.js → chunk-M4CRDGC4.js} +1 -1
- package/dist/{chunk-BEM57QP3.js → chunk-MBE4SEL7.js} +5 -5
- package/dist/{chunk-DM2D67MP.js → chunk-NV2JPSI4.js} +1 -1
- package/dist/{chunk-7KDQAD2W.js → chunk-OBXWIVYN.js} +11 -5
- package/dist/{chunk-GV7I3ZSQ.js → chunk-OE4WEQMH.js} +1 -1
- package/dist/{chunk-4U66LIUS.js → chunk-OOCONATR.js} +3 -3
- package/dist/{chunk-YYMJEQ4D.js → chunk-Q7FDYQR4.js} +1 -1
- package/dist/{chunk-SQHWDFTV.js → chunk-QJEHLWM4.js} +1 -1
- package/dist/{chunk-D5VMPDTH.js → chunk-QOP5D3UM.js} +2 -2
- package/dist/{chunk-HAKVKAUQ.js → chunk-RXTEP3NB.js} +2 -2
- package/dist/{chunk-M2IEAI7L.js → chunk-SCMNFRL5.js} +9 -9
- package/dist/{chunk-KEGTYA7V.js → chunk-SCOXM5LP.js} +1 -1
- package/dist/{chunk-RB6RHOSF.js → chunk-SCXATNSP.js} +3 -3
- package/dist/{chunk-TXWPPBIW.js → chunk-SNMMFFKZ.js} +1 -1
- package/dist/{chunk-Q3BS3MN5.js → chunk-SO44ETGW.js} +2 -2
- package/dist/{chunk-BSMBAP7O.js → chunk-TLUGPEW4.js} +5 -5
- package/dist/{chunk-UNO7QJAV.js → chunk-VCCOO2TO.js} +5 -5
- package/dist/{chunk-PSDTKP6K.js → chunk-VK5JRYJL.js} +6 -6
- package/dist/{chunk-P5CMYIC6.js → chunk-VPOEKLZL.js} +1 -1
- package/dist/{chunk-45FUWHHV.js → chunk-VY23BB2D.js} +2 -2
- package/dist/{chunk-KS4JPMVV.js → chunk-WLYSVHZE.js} +2 -2
- package/dist/{chunk-PFERJHKB.js → chunk-XXTOOXZ7.js} +2 -2
- package/dist/{chunk-GC36GZHM.js → chunk-YGLM2DHX.js} +1 -1
- package/dist/{chunk-2XEBNYG5.js → chunk-YLSSI4XB.js} +1 -1
- package/dist/{chunk-RSNBNSKZ.js → chunk-YNFJWJHW.js} +7 -7
- package/dist/{chunk-TLC4GYT5.js → chunk-YUTUYCGK.js} +117 -196
- package/dist/{chunk-6ENZIL42.js → chunk-YZEHYWOH.js} +1 -1
- package/dist/{clean-J3IRHNY5.js → clean-4HTCYML6.js} +15 -15
- package/dist/cli.js +52 -52
- package/dist/{cloud-TMV666ML.js → cloud-HFBG33UU.js} +4 -4
- package/dist/{cloudrun-OUGI5NN4.js → cloudrun-QK56WQY3.js} +3 -3
- package/dist/{compare-UXT7YJAD.js → compare-4RYN3LLC.js} +24 -24
- package/dist/{compiler-WHUQZITN.js → compiler-JPA25IUF.js} +2 -2
- package/dist/{component-OEWAQBRI.js → component-7ARXR4KZ.js} +3 -3
- package/dist/{compositions-J5UAUORI.js → compositions-DNBHEIGP.js} +11 -11
- package/dist/{delete-RIWTBVNH.js → delete-4XYV72EU.js} +2 -2
- package/dist/{dist-NUSNSGME.js → dist-SKUIM4QJ.js} +2 -2
- package/dist/{doctor-L4LKY2ZO.js → doctor-5PHSH7IK.js} +11 -11
- package/dist/{events-7O35RPKC.js → events-FOGRN2KV.js} +4 -4
- package/dist/{events-CRYKZ3VN.js → events-GQCOQY5E.js} +5 -5
- package/dist/{feedback-WL5ILVT2.js → feedback-6T6ZJOTM.js} +8 -8
- package/dist/{ffmpeg-2ROTISBL.js → ffmpeg-VJXXLKI6.js} +2 -2
- package/dist/{figma-Y36QOXGR.js → figma-PZLGUS6C.js} +3 -3
- package/dist/fontLocalizeCli.js +8 -8
- package/dist/{get-BKAU2UKN.js → get-XUNYSY2Z.js} +2 -2
- package/dist/{gpuPolicy-5AGAE6DM.js → gpuPolicy-SWCZJRZR.js} +6 -6
- package/dist/{grade-compare-6F5QLGGK.js → grade-compare-S27N2NRU.js} +25 -25
- package/dist/{help-VMH6Q3TP.js → help-4HZ75YVH.js} +1 -1
- package/dist/{history-WJI7NN5U.js → history-NENOG3BT.js} +8 -8
- package/dist/hyperframe-runtime.js +35 -35
- package/dist/hyperframe.manifest.json +1 -1
- package/dist/hyperframe.runtime.iife.js +35 -35
- package/dist/hyperframes-player.global.js +1 -1
- package/dist/{info-ZPGZJKYK.js → info-IDEUAYJZ.js} +9 -9
- package/dist/{init-FH3HAGUA.js → init-KWGZEC7F.js} +27 -27
- package/dist/{inspect-MIO35XDA.js → inspect-3WLT3EHZ.js} +25 -25
- package/dist/{installer-QCHUXV6E.js → installer-I3SLBB7G.js} +4 -4
- package/dist/{keyframes-HL66NSCA.js → keyframes-7HPN5DKO.js} +8 -8
- package/dist/{lambda-Q5FTNY4J.js → lambda-MJH6U52V.js} +4 -4
- package/dist/{layout-HLA3MBNJ.js → layout-ZEW4RZRP.js} +25 -25
- package/dist/{lint-BL4JKGPG.js → lint-3TNKI4PK.js} +8 -8
- package/dist/{list-34AMRBCS.js → list-BJR2IXU4.js} +2 -2
- package/dist/{login-EL5DFM34.js → login-EA27W5T2.js} +4 -4
- package/dist/{manager-JNJE54OQ.js → manager-3EUU5UX6.js} +3 -3
- package/dist/{media-treatment-UWR4OOHW.js → media-treatment-3JZFCG6I.js} +11 -11
- package/dist/{models-2E6AGL43.js → models-IRFIJOIW.js} +10 -10
- package/dist/{motionShot-JBH6JWB4.js → motionShot-S4M7QSW3.js} +12 -12
- package/dist/{normalize-audio-ZZ3O7VDF.js → normalize-audio-IOY3NRHJ.js} +6 -6
- package/dist/{open-QN7XTS6J.js → open-SCBC3NF5.js} +6 -6
- package/dist/{parakeetRunner-NUZTNYYF.js → parakeetRunner-FGTIYDG7.js} +11 -11
- package/dist/{pipeline-RUEI6IIO.js → pipeline-JEFEWIZ3.js} +7 -7
- package/dist/{play-2Y6KCFV3.js → play-4TCSBDHO.js} +18 -18
- package/dist/{preflight-JS4P5HFR.js → preflight-OIHM57E7.js} +4 -4
- package/dist/{present-J2UUEQWF.js → present-S6UBG5VI.js} +14 -14
- package/dist/{preview-BSUSKQBL.js → preview-HBDXDJCV.js} +17 -17
- package/dist/{producer-6QJ5624B.js → producer-KSAUIT6F.js} +1 -1
- package/dist/{projectConfig-EX35BZLA.js → projectConfig-CNAK65RI.js} +6 -6
- package/dist/{publication-OUGS3P7W.js → publication-AUWZFGJI.js} +2 -2
- package/dist/{publish-UUFZR6QT.js → publish-EMNP3VCC.js} +7 -7
- package/dist/{remove-background-SQUYEUJN.js → remove-background-GICM6TE5.js} +8 -8
- package/dist/{render-U7RMOU2K.js → render-DMHQZMV4.js} +24 -24
- package/dist/{render-GNHKF76H.js → render-PHEQSRHV.js} +10 -10
- package/dist/{render-AWFQGD4T.js → render-WMRNH7HO.js} +3 -3
- package/dist/{render-batch-6UN3HT5A.js → render-batch-OUTHTWN5.js} +3 -3
- package/dist/{resolver-O6ZENVYP.js → resolver-NTB6HOZC.js} +4 -4
- package/dist/{sherpa-CHOSLER6.js → sherpa-3YJNJ6TF.js} +10 -10
- package/dist/{skills-2WUDLVDT.js → skills-MKEJGL35.js} +7 -7
- package/dist/{skillsUpdateCheck-7N4CXFNJ.js → skillsUpdateCheck-RTLARPPP.js} +3 -3
- package/dist/{snapshot-E5IT54QQ.js → snapshot-KMLGFZWY.js} +28 -28
- package/dist/{src-CP75EYSP.js → src-4HB343JW.js} +7 -7
- package/dist/{src-APLD7CAF.js → src-HJ2NF55P.js} +5 -5
- package/dist/{staticProjectServer-VO5U75UA.js → staticProjectServer-4XX72J23.js} +12 -12
- package/dist/{status-RGHSK3DJ.js → status-BMXWFO4L.js} +2 -2
- package/dist/studio/assets/{hyperframes-player-BvAidsoQ.js → hyperframes-player-u2w3bDWo.js} +1 -1
- package/dist/studio/assets/{index-Jt_3ZX4p.js → index-BG28fXIT.js} +1 -1
- package/dist/studio/assets/{index-z1M2RwXX.js → index-D8B6eEBj.js} +4 -4
- package/dist/studio/assets/{index-CbWWPYt-.js → index-WD9j53l5.js} +1 -1
- package/dist/studio/index.html +1 -1
- package/dist/{studio-api-7JCPNJA7.js → studio-api-LPHMA57T.js} +6 -6
- package/dist/{studioServer-A67X3ZLJ.js → studioServer-P7GSE74X.js} +40 -40
- package/dist/{system-VRXC6S4A.js → system-QRHPVRPP.js} +2 -2
- package/dist/{telemetry-22DNA5QE.js → telemetry-576VTLGI.js} +5 -5
- package/dist/{timeline-K3BXXFQG.js → timeline-BO7LJJ24.js} +14 -14
- package/dist/{tokens-MWRAQMQU.js → tokens-TCYANQDA.js} +2 -2
- package/dist/{transcribe-C7J56BLL.js → transcribe-6HLMGCL2.js} +16 -16
- package/dist/{transcribe-O5B3HUFK.js → transcribe-6PTFIBO6.js} +9 -9
- package/dist/{updateCheck-EPJ7WDFT.js → updateCheck-ZLYIZPPQ.js} +2 -2
- package/dist/{upgrade-M5XD6ZPM.js → upgrade-DZHQE2PV.js} +2 -2
- package/dist/{urlDownloader-IEP2DY4N.js → urlDownloader-PJTOCTJA.js} +5 -5
- package/dist/{validate-JAF2KIJI.js → validate-3I45WC7I.js} +19 -19
- package/dist/{video-TX6DGLND.js → video-AQFXGGKN.js} +6 -6
- package/package.json +1 -1
|
@@ -10,8 +10,9 @@ import {
|
|
|
10
10
|
isLowMemorySystem
|
|
11
11
|
} from "./chunk-JYVGYKXG.js";
|
|
12
12
|
import {
|
|
13
|
-
describeWslGpuAccess
|
|
14
|
-
|
|
13
|
+
describeWslGpuAccess,
|
|
14
|
+
detectWsl
|
|
15
|
+
} from "./chunk-OBXWIVYN.js";
|
|
15
16
|
import {
|
|
16
17
|
MEDIA_VISUAL_STYLE_PROPERTIES,
|
|
17
18
|
RENDER_FRAME_ID_PREFIX,
|
|
@@ -29,7 +30,7 @@ import {
|
|
|
29
30
|
renderFrameIdForRenderId,
|
|
30
31
|
resolveAuthoredTimingWindow,
|
|
31
32
|
toFps
|
|
32
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-3THJEW7G.js";
|
|
33
34
|
import {
|
|
34
35
|
AUDIO_GROUP_RENDER_ID_ATTR,
|
|
35
36
|
COLOR_GRADING_SOURCE_HIDDEN_ATTR,
|
|
@@ -58,7 +59,7 @@ import {
|
|
|
58
59
|
shiftRateLane,
|
|
59
60
|
sourceTimeAt,
|
|
60
61
|
timeAtSourceTime
|
|
61
|
-
} from "./chunk-
|
|
62
|
+
} from "./chunk-OE4WEQMH.js";
|
|
62
63
|
import {
|
|
63
64
|
clampAudioGain,
|
|
64
65
|
isAudibleVideoElement
|
|
@@ -1025,6 +1026,43 @@ function resolveHeadlessShellPath(config) {
|
|
|
1025
1026
|
join2(home, ".cache", "hyperframes", "chrome", "chrome-headless-shell")
|
|
1026
1027
|
) ?? findCachedHeadlessShell(join2(home, ".cache", "puppeteer", "chrome-headless-shell"));
|
|
1027
1028
|
}
|
|
1029
|
+
function resolveFullChromePath() {
|
|
1030
|
+
const baseDir = join2(homedir(), ".cache", "puppeteer", "chrome");
|
|
1031
|
+
let versions;
|
|
1032
|
+
try {
|
|
1033
|
+
versions = readdirSync(baseDir).sort(compareBrowserVersionsDescending);
|
|
1034
|
+
} catch {
|
|
1035
|
+
return void 0;
|
|
1036
|
+
}
|
|
1037
|
+
for (const version of versions) {
|
|
1038
|
+
const candidates = [
|
|
1039
|
+
join2(
|
|
1040
|
+
baseDir,
|
|
1041
|
+
version,
|
|
1042
|
+
"chrome-mac-arm64",
|
|
1043
|
+
"Google Chrome for Testing.app",
|
|
1044
|
+
"Contents",
|
|
1045
|
+
"MacOS",
|
|
1046
|
+
"Google Chrome for Testing"
|
|
1047
|
+
),
|
|
1048
|
+
join2(
|
|
1049
|
+
baseDir,
|
|
1050
|
+
version,
|
|
1051
|
+
"chrome-mac-x64",
|
|
1052
|
+
"Google Chrome for Testing.app",
|
|
1053
|
+
"Contents",
|
|
1054
|
+
"MacOS",
|
|
1055
|
+
"Google Chrome for Testing"
|
|
1056
|
+
),
|
|
1057
|
+
join2(baseDir, version, "chrome-linux64", "chrome"),
|
|
1058
|
+
join2(baseDir, version, "chrome-win64", "chrome.exe")
|
|
1059
|
+
];
|
|
1060
|
+
for (const binary of candidates) {
|
|
1061
|
+
if (existsSync(binary)) return binary;
|
|
1062
|
+
}
|
|
1063
|
+
}
|
|
1064
|
+
return void 0;
|
|
1065
|
+
}
|
|
1028
1066
|
var ENABLE_BROWSER_POOL = DEFAULT_CONFIG.enableBrowserPool;
|
|
1029
1067
|
var BEGINFRAME_ONLY_FLAGS = /* @__PURE__ */ new Set([
|
|
1030
1068
|
"--deterministic-mode",
|
|
@@ -1203,33 +1241,45 @@ function formatProbeFailure(err) {
|
|
|
1203
1241
|
return `probe failed (${err instanceof Error ? err.message : String(err)})`;
|
|
1204
1242
|
}
|
|
1205
1243
|
async function probeAutoBrowserGpuMode(options) {
|
|
1206
|
-
const platform = options.platform ?? process.platform;
|
|
1207
|
-
const browserTimeout = options.browserTimeout ?? DEFAULT_CONFIG.browserTimeout;
|
|
1208
1244
|
const executablePath = options.chromePath ?? resolveHeadlessShellPath({});
|
|
1209
1245
|
const ppt = await getPuppeteerOrNull();
|
|
1210
1246
|
if (ppt === null) {
|
|
1211
1247
|
logResolvedBrowserGpuMode("software", "puppeteer unavailable");
|
|
1212
1248
|
return { mode: "software", cause: "probe-error" };
|
|
1213
1249
|
}
|
|
1250
|
+
const probed = await probeWebGlMode(ppt, executablePath, options);
|
|
1251
|
+
if (probed.mode === "hardware" || !detectWsl(options.wslHost)) return probed;
|
|
1252
|
+
return probeWslFullChrome(ppt, executablePath, options, probed);
|
|
1253
|
+
}
|
|
1254
|
+
async function probeWslFullChrome(ppt, shellPath, options, shellOutcome) {
|
|
1255
|
+
const fullChrome = (options.findFullChrome ?? resolveFullChromePath)();
|
|
1256
|
+
let route = { state: "missing" };
|
|
1257
|
+
if (fullChrome) {
|
|
1258
|
+
const viaFullChrome = fullChrome === shellPath ? shellOutcome : await probeWebGlMode(ppt, fullChrome, options, "full Chrome: ");
|
|
1259
|
+
if (viaFullChrome.mode === "hardware") return { mode: "hardware", browserPath: fullChrome };
|
|
1260
|
+
route = { state: viaFullChrome.cause ?? "no-gpu", path: fullChrome };
|
|
1261
|
+
}
|
|
1262
|
+
return { ...shellOutcome, wslAccess: describeWslGpuAccess(options.wslHost, route) ?? void 0 };
|
|
1263
|
+
}
|
|
1264
|
+
async function probeWebGlMode(ppt, executablePath, options, label = "") {
|
|
1214
1265
|
try {
|
|
1215
1266
|
const info = await probeHardwareWebGlInfo(ppt, {
|
|
1216
|
-
args: getHardwareGpuProbeArgs(platform),
|
|
1217
|
-
browserTimeout,
|
|
1267
|
+
args: getHardwareGpuProbeArgs(options.platform ?? process.platform),
|
|
1268
|
+
browserTimeout: options.browserTimeout ?? DEFAULT_CONFIG.browserTimeout,
|
|
1218
1269
|
executablePath,
|
|
1219
1270
|
probeLifecycle: options.probeLifecycle
|
|
1220
1271
|
});
|
|
1221
1272
|
const resolved = resolveWebGlProbeMode(info);
|
|
1222
|
-
logResolvedBrowserGpuMode(resolved, describeWebGlProbe(info));
|
|
1223
|
-
|
|
1224
|
-
return { mode: "software", cause: "no-gpu", ...wslAccess(options) };
|
|
1273
|
+
logResolvedBrowserGpuMode(resolved, label + describeWebGlProbe(info));
|
|
1274
|
+
return resolved === "hardware" ? { mode: "hardware" } : { mode: "software", cause: "no-gpu" };
|
|
1225
1275
|
} catch (err) {
|
|
1226
|
-
logResolvedBrowserGpuMode("software", formatProbeFailure(err));
|
|
1227
|
-
return { mode: "software", cause: "probe-error"
|
|
1276
|
+
logResolvedBrowserGpuMode("software", label + formatProbeFailure(err));
|
|
1277
|
+
return { mode: "software", cause: "probe-error" };
|
|
1228
1278
|
}
|
|
1229
1279
|
}
|
|
1230
|
-
function
|
|
1231
|
-
const
|
|
1232
|
-
return
|
|
1280
|
+
async function resolveCaptureBrowserPath(resolvedMode, config) {
|
|
1281
|
+
const probed = resolvedMode === "hardware" ? await _autoBrowserGpuModeCache : void 0;
|
|
1282
|
+
return probed?.browserPath ?? resolveHeadlessShellPath(config);
|
|
1233
1283
|
}
|
|
1234
1284
|
function resolveBrowserGpuMode(mode, options = {}) {
|
|
1235
1285
|
if (mode === "software") return Promise.resolve(mode);
|
|
@@ -1253,19 +1303,19 @@ function resolveBrowserGpuMode(mode, options = {}) {
|
|
|
1253
1303
|
}
|
|
1254
1304
|
var _unverifiedHardwareGpuWarned = false;
|
|
1255
1305
|
var _wslSoftwareNoteLogged = false;
|
|
1256
|
-
function buildWslSoftwareNote({ cause, wslAccess
|
|
1306
|
+
function buildWslSoftwareNote({ cause, wslAccess = [] }) {
|
|
1257
1307
|
const check = cause === "probe-error" ? "the GPU check could not finish (see the probe line above)" : "the GPU check found no hardware GPU";
|
|
1258
1308
|
return [
|
|
1259
1309
|
`[hyperframes] WSL: ${check}, so this render uses software WebGL (SwiftShader) and runs at CPU speed.`,
|
|
1260
|
-
...
|
|
1310
|
+
...wslAccess,
|
|
1261
1311
|
" Pass --no-browser-gpu to skip the GPU check and render in software."
|
|
1262
1312
|
].join("\n");
|
|
1263
1313
|
}
|
|
1264
|
-
function buildUnverifiedHardwareGpuWarning(platform, { cause, wslAccess
|
|
1314
|
+
function buildUnverifiedHardwareGpuWarning(platform, { cause, wslAccess }) {
|
|
1265
1315
|
if (cause === "probe-error") {
|
|
1266
|
-
return "[hyperframes] browserGpuMode=hardware was requested, but the GPU probe could not run, so hardware acceleration is UNVERIFIED. If Chrome falls back to software WebGL the capture will run at CPU speed. Honouring the explicit request anyway.\n This is a probe failure, not evidence of a missing GPU: see the `browserGpuMode probe \u2192 software (probe failed ...)` line above for the underlying error, which usually means Chrome could not launch (bad HYPERFRAMES_BROWSER_PATH, missing shared libraries, or a denied sandbox) rather than a GPU problem.\n Run `hyperframes doctor` to check the Chrome install." + (
|
|
1316
|
+
return "[hyperframes] browserGpuMode=hardware was requested, but the GPU probe could not run, so hardware acceleration is UNVERIFIED. If Chrome falls back to software WebGL the capture will run at CPU speed. Honouring the explicit request anyway.\n This is a probe failure, not evidence of a missing GPU: see the `browserGpuMode probe \u2192 software (probe failed ...)` line above for the underlying error, which usually means Chrome could not launch (bad HYPERFRAMES_BROWSER_PATH, missing shared libraries, or a denied sandbox) rather than a GPU problem.\n Run `hyperframes doctor` to check the Chrome install." + (wslAccess ? ["", " Under WSL, a GPU path that is slow to start or unreachable can also cause it:"].concat(wslAccess).join("\n") : "");
|
|
1267
1317
|
}
|
|
1268
|
-
const remediation =
|
|
1318
|
+
const remediation = wslAccess?.join("\n") ?? (platform === "linux" ? " Inside Docker, the container needs GPU passthrough: `--gpus all` with the NVIDIA Container Toolkit installed, or `--device /dev/dri` for Mesa/AMD/Intel. The image also needs the matching userspace driver + libEGL. Verify with `hyperframes render --browser-gpu` and watch for this warning disappearing." : " Check that the host exposes a GPU to this process and that the graphics drivers are installed.");
|
|
1269
1319
|
return `[hyperframes] browserGpuMode=hardware was requested, but the WebGL probe found no hardware GPU, so Chrome will silently fall back to software WebGL and the capture will run at CPU speed. Honouring the explicit request anyway.
|
|
1270
1320
|
${remediation}
|
|
1271
1321
|
Pass --no-browser-gpu to select deterministic SwiftShader instead of waiting on a hardware path that is not there.`;
|
|
@@ -5265,14 +5315,16 @@ async function createCaptureSession(serverUrl, outputDir, options, onBeforeCaptu
|
|
|
5265
5315
|
resolvedGpuMode,
|
|
5266
5316
|
config
|
|
5267
5317
|
);
|
|
5268
|
-
const
|
|
5318
|
+
const browserPath = await resolveCaptureBrowserPath(resolvedGpuMode, config);
|
|
5319
|
+
const wslFullChromeHasNoBeginFrame = browserPath !== headlessShell;
|
|
5320
|
+
const preMode = headlessShell && !wslFullChromeHasNoBeginFrame && isLinux && !effectiveForceScreenshot && !supersampling && !drawElementTransparent ? "beginframe" : "screenshot";
|
|
5269
5321
|
const requiresWebGpu = options.requiresWebGpu ?? await fetch(`${serverUrl}/index.html`, { signal: AbortSignal.timeout(5e3) }).then((res) => res.text()).then(compositionRequiresWebGpu).catch(() => false);
|
|
5270
5322
|
const gpuConfig = { ...config, browserGpuMode: resolvedGpuMode };
|
|
5271
5323
|
const chromeArgs = buildChromeArgs(
|
|
5272
5324
|
{ width: options.width, height: options.height, captureMode: preMode, requiresWebGpu },
|
|
5273
5325
|
gpuConfig
|
|
5274
5326
|
);
|
|
5275
|
-
const browserLease = await acquireBrowser(chromeArgs, config);
|
|
5327
|
+
const browserLease = await acquireBrowser(chromeArgs, { ...config, chromePath: browserPath });
|
|
5276
5328
|
return constructCaptureSessionWithRollback({
|
|
5277
5329
|
browserLease,
|
|
5278
5330
|
serverUrl,
|
|
@@ -8031,35 +8083,6 @@ async function runFfmpeg(args, opts) {
|
|
|
8031
8083
|
});
|
|
8032
8084
|
return toResult(await managed.wait());
|
|
8033
8085
|
}
|
|
8034
|
-
async function runFfmpegPipeline(producerArgs, consumerArgs, opts) {
|
|
8035
|
-
if (opts?.signal?.aborted) return { ...ABORTED_BEFORE_START };
|
|
8036
|
-
const deadlineAtMs = Date.now() + (opts?.timeout ?? DEFAULT_TIMEOUT);
|
|
8037
|
-
const producer = spawnFfmpeg(producerArgs);
|
|
8038
|
-
const consumer = spawnFfmpeg(consumerArgs);
|
|
8039
|
-
consumer.stdin?.on("error", () => {
|
|
8040
|
-
});
|
|
8041
|
-
for (const event of ["close", "error"]) {
|
|
8042
|
-
consumer.once(event, () => producer.stdout?.destroy());
|
|
8043
|
-
producer.once(event, () => consumer.stdin?.end());
|
|
8044
|
-
}
|
|
8045
|
-
if (consumer.stdin) producer.stdout?.pipe(consumer.stdin);
|
|
8046
|
-
const settleOrder = [];
|
|
8047
|
-
const outcomes = await Promise.all(
|
|
8048
|
-
[producer, consumer].map(
|
|
8049
|
-
(child) => new ManagedChildProcess(child, {
|
|
8050
|
-
signal: opts?.signal,
|
|
8051
|
-
deadlineAtMs,
|
|
8052
|
-
onStderr: opts?.onStderr
|
|
8053
|
-
}).wait().then((outcome) => {
|
|
8054
|
-
settleOrder.push(outcome);
|
|
8055
|
-
return outcome;
|
|
8056
|
-
})
|
|
8057
|
-
)
|
|
8058
|
-
);
|
|
8059
|
-
const reported = settleOrder.find((outcome) => !succeeded(outcome)) ?? outcomes[1];
|
|
8060
|
-
const stderr = [...outcomes.filter((outcome) => outcome !== reported), reported].map((outcome) => outcome.stderr).join("");
|
|
8061
|
-
return toResult(reported, stderr);
|
|
8062
|
-
}
|
|
8063
8086
|
|
|
8064
8087
|
// ../engine/src/utils/ffprobe.ts
|
|
8065
8088
|
import { spawn as spawn3 } from "child_process";
|
|
@@ -11194,7 +11217,7 @@ function framePathsFromDirectory(outputDir, format, allowGaps = false) {
|
|
|
11194
11217
|
// ../engine/src/services/extractionCache.ts
|
|
11195
11218
|
var COMPLETE_SENTINEL = ".hf-complete";
|
|
11196
11219
|
var GC_MARKER = ".hf-last-gc";
|
|
11197
|
-
var SCHEMA_PREFIX = "hfcache-
|
|
11220
|
+
var SCHEMA_PREFIX = "hfcache-v7-";
|
|
11198
11221
|
var KEY_HEX_CHARS = 16;
|
|
11199
11222
|
async function readContentSha256(path, signal) {
|
|
11200
11223
|
try {
|
|
@@ -11809,55 +11832,6 @@ function chromeGuessForUntaggedMatrix(metadata) {
|
|
|
11809
11832
|
const hd = metadata.height >= 720 && !CHROME_BT601_UNTAGGED_CODECS.has(metadata.videoCodec);
|
|
11810
11833
|
return [`setparams=colorspace=${hd ? "bt709" : "smpte170m"}`];
|
|
11811
11834
|
}
|
|
11812
|
-
var NUT_RAW_PIXEL_FORMATS = /* @__PURE__ */ new Set([
|
|
11813
|
-
"yuv420p",
|
|
11814
|
-
"yuvj420p",
|
|
11815
|
-
"yuv422p",
|
|
11816
|
-
"yuvj422p",
|
|
11817
|
-
"yuv444p",
|
|
11818
|
-
"yuvj444p",
|
|
11819
|
-
"yuva420p",
|
|
11820
|
-
"yuva444p",
|
|
11821
|
-
"yuv440p",
|
|
11822
|
-
"yuv411p",
|
|
11823
|
-
"yuv410p",
|
|
11824
|
-
"yuva422p",
|
|
11825
|
-
"yuv420p10le",
|
|
11826
|
-
"yuv422p10le",
|
|
11827
|
-
"yuv444p10le",
|
|
11828
|
-
"yuva420p10le",
|
|
11829
|
-
"yuva444p10le",
|
|
11830
|
-
"yuv420p12le",
|
|
11831
|
-
"nv12",
|
|
11832
|
-
"nv21",
|
|
11833
|
-
"yuyv422",
|
|
11834
|
-
"uyvy422",
|
|
11835
|
-
"gray",
|
|
11836
|
-
"gray10le",
|
|
11837
|
-
"ya8",
|
|
11838
|
-
"gbrp",
|
|
11839
|
-
"gbrap",
|
|
11840
|
-
"gbrp10le",
|
|
11841
|
-
"gbrp12le",
|
|
11842
|
-
"gbrap10le",
|
|
11843
|
-
"rgb24",
|
|
11844
|
-
"bgr24",
|
|
11845
|
-
"rgba",
|
|
11846
|
-
"bgra",
|
|
11847
|
-
"argb",
|
|
11848
|
-
"abgr",
|
|
11849
|
-
"rgb48le",
|
|
11850
|
-
"rgba64le"
|
|
11851
|
-
]);
|
|
11852
|
-
function restoreSourceColourFilter(metadata) {
|
|
11853
|
-
const tags = [
|
|
11854
|
-
["range", metadata.colorRange],
|
|
11855
|
-
["colorspace", metadata.colorSpace?.colorSpace],
|
|
11856
|
-
["color_primaries", metadata.colorSpace?.colorPrimaries],
|
|
11857
|
-
["color_trc", metadata.colorSpace?.colorTransfer]
|
|
11858
|
-
].filter(([, value]) => value && value !== "unknown" && value !== "reserved");
|
|
11859
|
-
return tags.length > 0 ? [`setparams=${tags.map(([key, value]) => `${key}=${value}`).join(":")}`] : [];
|
|
11860
|
-
}
|
|
11861
11835
|
var EXTRACTION_SEGMENT_SECONDS = 120;
|
|
11862
11836
|
var EXTRACTION_SLOTS = Math.max(1, Math.floor(cpus().length / 2));
|
|
11863
11837
|
var inExtractionSlot = createConcurrencyLimit(EXTRACTION_SLOTS);
|
|
@@ -11964,8 +11938,8 @@ async function extractVideoFramesRange(videoPath, videoId, startTime, duration,
|
|
|
11964
11938
|
const isMacOS = process.platform === "darwin";
|
|
11965
11939
|
const toneMappedToSdr = options.toneMapHdrToSdr === true && isHdr && await toneMapsWithZscale();
|
|
11966
11940
|
const decodeWithVideoToolbox = isHdr && isMacOS && !toneMappedToSdr;
|
|
11967
|
-
const
|
|
11968
|
-
if (options.frameRanges && !
|
|
11941
|
+
const sampleAtOutputFps = !options.finalFrameOnly;
|
|
11942
|
+
if (options.frameRanges && (!sampleAtOutputFps || metadata.isVFR)) {
|
|
11969
11943
|
throw new Error("frameRanges extraction needs a constant-frame-rate source");
|
|
11970
11944
|
}
|
|
11971
11945
|
const args = [];
|
|
@@ -11979,14 +11953,14 @@ async function extractVideoFramesRange(videoPath, videoId, startTime, duration,
|
|
|
11979
11953
|
if (options.finalFrameOnly) {
|
|
11980
11954
|
args.push("-i", videoPath, "-ss", String(startTime), "-frames:v", "1");
|
|
11981
11955
|
} else {
|
|
11982
|
-
if (
|
|
11956
|
+
if (sampleAtOutputFps) args.push("-noaccurate_seek");
|
|
11983
11957
|
args.push("-ss", String(startTime), "-i", videoPath, "-t", String(duration));
|
|
11984
11958
|
}
|
|
11985
11959
|
const vfFilters = [];
|
|
11986
11960
|
if (decodeWithVideoToolbox) {
|
|
11987
11961
|
vfFilters.push("format=nv12");
|
|
11988
11962
|
}
|
|
11989
|
-
if (
|
|
11963
|
+
if (sampleAtOutputFps) {
|
|
11990
11964
|
vfFilters.push(
|
|
11991
11965
|
"settb=intb/2",
|
|
11992
11966
|
"setpts=PTS-lte(TB\\,0.001)",
|
|
@@ -12011,48 +11985,25 @@ async function extractVideoFramesRange(videoPath, videoId, startTime, duration,
|
|
|
12011
11985
|
if (format === "png") encodeArgs.push("-compression_level", "1");
|
|
12012
11986
|
encodeArgs.push("-y", outputPattern);
|
|
12013
11987
|
const runOptions = { signal, timeout: ffmpegProcessTimeout };
|
|
12014
|
-
const
|
|
12015
|
-
|
|
12016
|
-
|
|
12017
|
-
|
|
12018
|
-
|
|
12019
|
-
|
|
12020
|
-
|
|
12021
|
-
|
|
12022
|
-
|
|
12023
|
-
|
|
12024
|
-
|
|
12025
|
-
|
|
12026
|
-
|
|
12027
|
-
|
|
12028
|
-
|
|
12029
|
-
|
|
12030
|
-
|
|
12031
|
-
|
|
12032
|
-
|
|
12033
|
-
),
|
|
12034
|
-
signal
|
|
12035
|
-
);
|
|
12036
|
-
} else {
|
|
12037
|
-
const filterArgs = vfFilters.length > 0 ? ["-vf", vfFilters.join(",")] : [];
|
|
12038
|
-
const segmentFrames = Math.round(EXTRACTION_SEGMENT_SECONDS * fps);
|
|
12039
|
-
const totalFrames = extractionFrameCountForDuration(duration, normalizedFps, false);
|
|
12040
|
-
processResult = sampleCfrAtOutputFps && (options.frameRanges || totalFrames > segmentFrames) ? await runSegmentedExtraction({
|
|
12041
|
-
decodeArgs,
|
|
12042
|
-
filterAndEncodeArgs: [...filterArgs, ...encodeArgs],
|
|
12043
|
-
videoPath,
|
|
12044
|
-
startTime,
|
|
12045
|
-
fps,
|
|
12046
|
-
segments: splitFrameRanges(
|
|
12047
|
-
options.frameRanges ?? [{ firstFrame: 0, frames: totalFrames }],
|
|
12048
|
-
segmentFrames
|
|
12049
|
-
),
|
|
12050
|
-
runOptions
|
|
12051
|
-
}) : await inExtractionSlot(
|
|
12052
|
-
() => runFfmpeg([...args, ...filterArgs, ...encodeArgs], runOptions),
|
|
12053
|
-
signal
|
|
12054
|
-
);
|
|
12055
|
-
}
|
|
11988
|
+
const filterArgs = vfFilters.length > 0 ? ["-vf", vfFilters.join(",")] : [];
|
|
11989
|
+
const segmentFrames = Math.round(EXTRACTION_SEGMENT_SECONDS * fps);
|
|
11990
|
+
const totalFrames = extractionFrameCountForDuration(duration, normalizedFps, metadata.isVFR);
|
|
11991
|
+
const boundVfrFrameCount = metadata.isVFR && totalFrames > 0;
|
|
11992
|
+
const processResult = sampleAtOutputFps && (options.frameRanges || boundVfrFrameCount || totalFrames > segmentFrames) ? await runSegmentedExtraction({
|
|
11993
|
+
decodeArgs,
|
|
11994
|
+
filterAndEncodeArgs: [...filterArgs, ...encodeArgs],
|
|
11995
|
+
videoPath,
|
|
11996
|
+
startTime,
|
|
11997
|
+
fps,
|
|
11998
|
+
segments: splitFrameRanges(
|
|
11999
|
+
options.frameRanges ?? [{ firstFrame: 0, frames: totalFrames }],
|
|
12000
|
+
segmentFrames
|
|
12001
|
+
),
|
|
12002
|
+
runOptions
|
|
12003
|
+
}) : await inExtractionSlot(
|
|
12004
|
+
() => runFfmpeg([...args, ...filterArgs, ...encodeArgs], runOptions),
|
|
12005
|
+
signal
|
|
12006
|
+
);
|
|
12056
12007
|
if (processResult.failureReason === "external_interruption") {
|
|
12057
12008
|
throw new VideoSourceExtractionError(
|
|
12058
12009
|
"external_interruption",
|
|
@@ -14799,10 +14750,11 @@ function buildFadeFilters(track) {
|
|
|
14799
14750
|
}
|
|
14800
14751
|
return stages.length ? `,${stages.join(",")}` : "";
|
|
14801
14752
|
}
|
|
14802
|
-
function buildTrackInputFilter(track, index, volumeFilter, totalDuration) {
|
|
14753
|
+
function buildTrackInputFilter(track, index, volumeFilter, totalDuration, padToDuration = true) {
|
|
14803
14754
|
const delayMs = Math.round(track.start * 1e3);
|
|
14804
14755
|
const trimDuration = track.end - track.start + (track.tailSeconds ?? 0);
|
|
14805
|
-
|
|
14756
|
+
const filters = `[${index}:a]atrim=0:${formatFilterNumber(trimDuration)},${volumeFilter}${buildFadeFilters(track)},adelay=${delayMs}|${delayMs}`;
|
|
14757
|
+
return `${filters}${padToDuration ? `,apad,asetpts=N/SR/TB,atrim=0:${formatFilterNumber(totalDuration)}` : ""}[a${index}]`;
|
|
14806
14758
|
}
|
|
14807
14759
|
function missingSourceMessage(elementId, src, baseDir, resolvedPath) {
|
|
14808
14760
|
const relativePath = relative(baseDir, resolvedPath).replace(/\\/g, "/");
|
|
@@ -15079,26 +15031,26 @@ async function mixAudioTracks(tracks, outputPath, totalDuration, signal, config,
|
|
|
15079
15031
|
}
|
|
15080
15032
|
const outputDir = dirname6(outputPath);
|
|
15081
15033
|
if (!existsSync10(outputDir)) mkdirSync7(outputDir, { recursive: true });
|
|
15082
|
-
const buildFilterComplex = (ignoreAutomation) => {
|
|
15034
|
+
const buildFilterComplex = (ignoreAutomation, useNormalize2) => {
|
|
15083
15035
|
const filterParts = [];
|
|
15084
15036
|
tracks.forEach((track, i) => {
|
|
15085
15037
|
const volumeFilter = buildVolumeExpression(track, ignoreAutomation);
|
|
15086
|
-
filterParts.push(buildTrackInputFilter(track, i, volumeFilter, totalDuration));
|
|
15038
|
+
filterParts.push(buildTrackInputFilter(track, i, volumeFilter, totalDuration, !useNormalize2));
|
|
15087
15039
|
});
|
|
15088
15040
|
const mixInputs = tracks.map((_, i) => `[a${i}]`).join("");
|
|
15089
|
-
const mixFilter = `${mixInputs}amix=inputs=${tracks.length}:duration=longest:dropout_transition=0[mixed]`;
|
|
15090
|
-
const
|
|
15091
|
-
const postMixGainFilter = `[mixed]volume=${formatFilterNumber(
|
|
15041
|
+
const mixFilter = `${mixInputs}amix=inputs=${tracks.length}:duration=longest:dropout_transition=0${useNormalize2 ? ":normalize=0" : ""}[mixed]`;
|
|
15042
|
+
const gain = masterOutputGain * (useNormalize2 ? 1 : tracks.length);
|
|
15043
|
+
const postMixGainFilter = useNormalize2 ? `[mixed]volume=${formatFilterNumber(gain)},apad,asetpts=N/SR/TB,atrim=0:${formatFilterNumber(totalDuration)}[out]` : `[mixed]volume=${formatFilterNumber(gain)}[out]`;
|
|
15092
15044
|
return [...filterParts, mixFilter, postMixGainFilter].join(";");
|
|
15093
15045
|
};
|
|
15094
|
-
const runMix = async (ignoreAutomation) => {
|
|
15046
|
+
const runMix = async (ignoreAutomation, useNormalize2) => {
|
|
15095
15047
|
const inputs = [];
|
|
15096
15048
|
tracks.forEach((track) => inputs.push("-i", track.srcPath));
|
|
15097
15049
|
const scriptDir = mkdtempSync6(join13(outputDir, ".filter-complex-"));
|
|
15098
15050
|
const scriptPath = join13(scriptDir, "graph.txt");
|
|
15099
15051
|
const fd = openSync4(scriptPath, "wx", 384);
|
|
15100
15052
|
try {
|
|
15101
|
-
writeFileSync6(fd, buildFilterComplex(ignoreAutomation));
|
|
15053
|
+
writeFileSync6(fd, buildFilterComplex(ignoreAutomation, useNormalize2));
|
|
15102
15054
|
} finally {
|
|
15103
15055
|
closeSync4(fd);
|
|
15104
15056
|
}
|
|
@@ -15126,11 +15078,16 @@ async function mixAudioTracks(tracks, outputPath, totalDuration, signal, config,
|
|
|
15126
15078
|
rmSync7(scriptDir, { recursive: true, force: true });
|
|
15127
15079
|
}
|
|
15128
15080
|
};
|
|
15129
|
-
let
|
|
15081
|
+
let useNormalize = true;
|
|
15082
|
+
let result = await runMix(false, useNormalize);
|
|
15083
|
+
if (!result.success && result.failureReason !== "external_interruption" && !signal?.aborted && groupNormalizeOptionUnsupported(result.stderr)) {
|
|
15084
|
+
useNormalize = false;
|
|
15085
|
+
result = await runMix(false, useNormalize);
|
|
15086
|
+
}
|
|
15130
15087
|
let degradedAutomation = false;
|
|
15131
15088
|
const hasAutomation = tracks.some((track) => (track.volumeKeyframes?.length ?? 0) > 0);
|
|
15132
15089
|
if (!result.success && result.failureReason !== "external_interruption" && !signal?.aborted && hasAutomation) {
|
|
15133
|
-
const retry = await runMix(true);
|
|
15090
|
+
const retry = await runMix(true, useNormalize);
|
|
15134
15091
|
if (retry.success) {
|
|
15135
15092
|
result = retry;
|
|
15136
15093
|
degradedAutomation = true;
|
|
@@ -16645,9 +16602,6 @@ function verifyGpuParity(a, b, options = {}) {
|
|
|
16645
16602
|
}
|
|
16646
16603
|
|
|
16647
16604
|
// ../engine/src/services/hdrCapture.ts
|
|
16648
|
-
import { existsSync as existsSync12, readdirSync as readdirSync7 } from "fs";
|
|
16649
|
-
import { join as join17 } from "path";
|
|
16650
|
-
import { homedir as homedir2 } from "os";
|
|
16651
16605
|
var PQ_M1 = 0.1593017578125;
|
|
16652
16606
|
var PQ_M2 = 78.84375;
|
|
16653
16607
|
var PQ_C1 = 0.8359375;
|
|
@@ -16768,39 +16722,6 @@ function float16ToPqRgb(rawBuffer, bytesPerRow, width, height) {
|
|
|
16768
16722
|
}
|
|
16769
16723
|
return output;
|
|
16770
16724
|
}
|
|
16771
|
-
function resolveHeadedChromePath() {
|
|
16772
|
-
const baseDir = join17(homedir2(), ".cache", "puppeteer", "chrome");
|
|
16773
|
-
if (!existsSync12(baseDir)) return void 0;
|
|
16774
|
-
const versions = readdirSync7(baseDir).sort().reverse();
|
|
16775
|
-
for (const version of versions) {
|
|
16776
|
-
const candidates = [
|
|
16777
|
-
join17(
|
|
16778
|
-
baseDir,
|
|
16779
|
-
version,
|
|
16780
|
-
"chrome-mac-arm64",
|
|
16781
|
-
"Google Chrome for Testing.app",
|
|
16782
|
-
"Contents",
|
|
16783
|
-
"MacOS",
|
|
16784
|
-
"Google Chrome for Testing"
|
|
16785
|
-
),
|
|
16786
|
-
join17(
|
|
16787
|
-
baseDir,
|
|
16788
|
-
version,
|
|
16789
|
-
"chrome-mac-x64",
|
|
16790
|
-
"Google Chrome for Testing.app",
|
|
16791
|
-
"Contents",
|
|
16792
|
-
"MacOS",
|
|
16793
|
-
"Google Chrome for Testing"
|
|
16794
|
-
),
|
|
16795
|
-
join17(baseDir, version, "chrome-linux64", "chrome"),
|
|
16796
|
-
join17(baseDir, version, "chrome-win64", "chrome.exe")
|
|
16797
|
-
];
|
|
16798
|
-
for (const binary of candidates) {
|
|
16799
|
-
if (existsSync12(binary)) return binary;
|
|
16800
|
-
}
|
|
16801
|
-
}
|
|
16802
|
-
return void 0;
|
|
16803
|
-
}
|
|
16804
16725
|
async function launchHdrBrowser(width, height) {
|
|
16805
16726
|
let ppt;
|
|
16806
16727
|
try {
|
|
@@ -16815,7 +16736,7 @@ async function launchHdrBrowser(width, height) {
|
|
|
16815
16736
|
ppt = mod.default;
|
|
16816
16737
|
}
|
|
16817
16738
|
if (!ppt) throw new Error("Neither puppeteer nor puppeteer-core found");
|
|
16818
|
-
const chromePath =
|
|
16739
|
+
const chromePath = resolveFullChromePath();
|
|
16819
16740
|
if (!chromePath) {
|
|
16820
16741
|
throw new Error(
|
|
16821
16742
|
"[HDR] No Chrome binary found. Install: npx @puppeteer/browsers install chrome@stable"
|
|
@@ -6,14 +6,14 @@ var __filename = __hf_fileURLToPath(import.meta.url);
|
|
|
6
6
|
var __dirname = __hf_dirname(__filename);
|
|
7
7
|
import {
|
|
8
8
|
redactHome
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-HBKKW3NL.js";
|
|
10
10
|
import "./chunk-Z27A7NUB.js";
|
|
11
11
|
import "./chunk-5ETJX6WM.js";
|
|
12
12
|
import {
|
|
13
13
|
loadProducer
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-IOBKVP27.js";
|
|
15
|
+
import "./chunk-VK5JRYJL.js";
|
|
16
|
+
import "./chunk-DSX7R5M7.js";
|
|
17
17
|
import "./chunk-C6TPGUWD.js";
|
|
18
18
|
import {
|
|
19
19
|
DEFAULT_HISTORY_ROOT,
|
|
@@ -23,14 +23,14 @@ import {
|
|
|
23
23
|
import {
|
|
24
24
|
CACHE_DIR_NAME,
|
|
25
25
|
cleanupProxyCache
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-7U27WUMQ.js";
|
|
27
27
|
import "./chunk-FFDC5OWV.js";
|
|
28
28
|
import {
|
|
29
29
|
formatBytes
|
|
30
30
|
} from "./chunk-K2FLNJVB.js";
|
|
31
|
-
import "./chunk-
|
|
31
|
+
import "./chunk-VY23BB2D.js";
|
|
32
32
|
import "./chunk-5CS4T6C6.js";
|
|
33
|
-
import "./chunk-
|
|
33
|
+
import "./chunk-7FFGZC2X.js";
|
|
34
34
|
import {
|
|
35
35
|
defineCommand
|
|
36
36
|
} from "./chunk-S3S4TGEH.js";
|
|
@@ -46,29 +46,29 @@ import "./chunk-TJSTGSAW.js";
|
|
|
46
46
|
import "./chunk-LBT4AMSF.js";
|
|
47
47
|
import {
|
|
48
48
|
withMeta
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-COBIO7VC.js";
|
|
50
50
|
import "./chunk-K4WIOZFP.js";
|
|
51
51
|
import "./chunk-XUXGIA7H.js";
|
|
52
52
|
import "./chunk-WERLJGIC.js";
|
|
53
53
|
import "./chunk-ISN5GRYI.js";
|
|
54
|
-
import "./chunk-
|
|
54
|
+
import "./chunk-SO44ETGW.js";
|
|
55
55
|
import "./chunk-3DKN5WKL.js";
|
|
56
56
|
import "./chunk-EOVYQ3IG.js";
|
|
57
57
|
import "./chunk-6BEFEWFB.js";
|
|
58
|
-
import "./chunk-
|
|
58
|
+
import "./chunk-SCOXM5LP.js";
|
|
59
59
|
import "./chunk-XT6MXC7A.js";
|
|
60
60
|
import {
|
|
61
61
|
EXTRACT_CACHE_MIN_AGE_MS,
|
|
62
62
|
directorySizeBytes,
|
|
63
63
|
gcExtractionCache,
|
|
64
64
|
resolveExtractCacheDir
|
|
65
|
-
} from "./chunk-
|
|
66
|
-
import "./chunk-
|
|
65
|
+
} from "./chunk-YUTUYCGK.js";
|
|
66
|
+
import "./chunk-2K5YII2L.js";
|
|
67
67
|
import "./chunk-NE55C6S5.js";
|
|
68
68
|
import "./chunk-JYVGYKXG.js";
|
|
69
|
-
import "./chunk-
|
|
70
|
-
import "./chunk-
|
|
71
|
-
import "./chunk-
|
|
69
|
+
import "./chunk-OBXWIVYN.js";
|
|
70
|
+
import "./chunk-3THJEW7G.js";
|
|
71
|
+
import "./chunk-OE4WEQMH.js";
|
|
72
72
|
import "./chunk-VC76R6W2.js";
|
|
73
73
|
import "./chunk-UJKQWGFF.js";
|
|
74
74
|
import "./chunk-VYKPBRCB.js";
|