hyperframes 0.8.107 → 0.8.109
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-DXZ3HNQI.js → add-7NAK3TQ6.js} +15 -15
- package/dist/{animatedGifPrep-2IQB4DGE.js → animatedGifPrep-NMGFOSIL.js} +6 -6
- package/dist/{asset-KZIG3MZN.js → asset-X7GUEAHC.js} +2 -2
- package/dist/{assetCataloger-4GE6PIUA.js → assetCataloger-FXEHOUA3.js} +2 -2
- package/dist/{auth-5IYF3H67.js → auth-EBWBTIGU.js} +2 -2
- package/dist/{autoUpdate-5C3FXM6Y.js → autoUpdate-DJBTMGAR.js} +2 -2
- package/dist/{backgroundChecks-75WGW4NB.js → backgroundChecks-QUMUVLYU.js} +3 -3
- package/dist/backgroundChecksWorker.js +3 -3
- package/dist/{batchRender-FKKS3YBX.js → batchRender-ZTHFMHZY.js} +3 -3
- package/dist/{beats-ISR36NSK.js → beats-XUYNHYGB.js} +18 -12
- package/dist/{benchmark-U6TQ6DS2.js → benchmark-L45UHXEE.js} +12 -12
- package/dist/{browser-VDS6QAVA.js → browser-EM76PRMN.js} +9 -9
- package/dist/{bundleWithLocalizedFonts-PMWWW5YG.js → bundleWithLocalizedFonts-4Q3ETTHW.js} +2 -2
- package/dist/{capture-BKA3UCZS.js → capture-4OPH4PMK.js} +7 -7
- package/dist/{capture-5KE34KCD.js → capture-OG6532RA.js} +2 -2
- package/dist/{catalog-ZXOSU27O.js → catalog-V42BPLQ4.js} +15 -15
- package/dist/{check-MZMZCXPN.js → check-3XQLHR2I.js} +30 -29
- package/dist/{checkBrowser-UIZJXYCQ.js → checkBrowser-56BV4TW3.js} +29 -28
- package/dist/{chunk-TI5Z4SWP.js → chunk-2IN77NP6.js} +3 -3
- package/dist/{chunk-WBVPQC7J.js → chunk-2JXJ5SGK.js} +1 -1
- package/dist/{chunk-QH6UFY2O.js → chunk-32P7FTFC.js} +4 -4
- package/dist/{chunk-7BI5BYMQ.js → chunk-3CPYTXZH.js} +5 -5
- package/dist/{chunk-OGTR33KN.js → chunk-3T4RQK6C.js} +2 -2
- package/dist/{chunk-HGL4WJDI.js → chunk-44UOKZIC.js} +9 -9
- package/dist/{chunk-KTPQ67TX.js → chunk-4PY6UPHN.js} +1 -1
- package/dist/{chunk-SGBOZ2HF.js → chunk-5ER3PYYP.js} +1 -1
- package/dist/{normalize-audio-J2PG6YXH.js → chunk-5ON5GH3X.js} +101 -209
- package/dist/{chunk-NHTRUAMD.js → chunk-AWUZ3AUD.js} +1 -1
- package/dist/{chunk-VMDEGITC.js → chunk-B25H4M4V.js} +1 -1
- package/dist/{chunk-QM2NUN2B.js → chunk-BAVM2XBR.js} +87 -3
- package/dist/{chunk-4W4UDPCH.js → chunk-C4TZBEHY.js} +2 -2
- package/dist/{chunk-FLUBCMNT.js → chunk-CFC3EEDQ.js} +1 -1
- package/dist/{chunk-3CYAZWF2.js → chunk-CPO5INJ5.js} +3 -3
- package/dist/{chunk-C3KEF3UA.js → chunk-CQRF7VU3.js} +1 -1
- package/dist/{chunk-6QWHIARJ.js → chunk-E4AYSXMS.js} +1 -1
- package/dist/{chunk-BRTGJ73L.js → chunk-HQGJLZB6.js} +2 -2
- package/dist/{chunk-HJCTKNXF.js → chunk-I5WWEBDG.js} +1 -1
- package/dist/{chunk-GLTHJJIF.js → chunk-ITBEN3QD.js} +2 -2
- package/dist/{chunk-3LBFLW7E.js → chunk-JTTAS7N6.js} +1 -1
- package/dist/{chunk-T4Z4UNSX.js → chunk-JWPSBANO.js} +3 -3
- package/dist/{chunk-P7XRDAWU.js → chunk-LAQEZHOH.js} +1 -1
- package/dist/{chunk-73VPF3SS.js → chunk-M224DAMG.js} +1 -1
- package/dist/{chunk-PU2IOWX4.js → chunk-MGFVNTIB.js} +2 -2
- package/dist/{chunk-NX6G66F4.js → chunk-MP25ID6H.js} +2 -2
- package/dist/{chunk-4DJXCVQJ.js → chunk-MR2LOG32.js} +577 -66
- package/dist/{chunk-3WG63KFW.js → chunk-N32ITJ7L.js} +25 -11
- package/dist/{chunk-D5EJCP26.js → chunk-OF3RKOPU.js} +79 -64
- package/dist/{chunk-J6CSEDK7.js → chunk-OORTZAJ7.js} +4 -4
- package/dist/{chunk-L7XDI3DT.js → chunk-RB7AHUOR.js} +1 -1
- package/dist/{chunk-YVEZT6WT.js → chunk-TBYUUOJG.js} +1 -1
- package/dist/{chunk-T3BOWXPX.js → chunk-TIZQC44K.js} +1 -1
- package/dist/{chunk-R4IB642V.js → chunk-U4TDAJZE.js} +2 -2
- package/dist/{chunk-TPPIERG3.js → chunk-WMN4NBJQ.js} +3 -3
- package/dist/{chunk-AO4PBESP.js → chunk-X2QJUTZL.js} +7 -7
- package/dist/{chunk-SKPL32FI.js → chunk-XKNYXDJN.js} +1 -1
- package/dist/{chunk-JNY3VJWB.js → chunk-XYVFPDNU.js} +1 -1
- package/dist/{chunk-Z4UAXNWV.js → chunk-YIXEH4TF.js} +2 -2
- package/dist/chunk-YLVI7VL5.js +3541 -0
- package/dist/{chunk-ADP6TMYP.js → chunk-YRTKK45P.js} +8 -8
- package/dist/{chunk-I73Z6OOE.js → chunk-ZKBSOLPY.js} +1 -1
- package/dist/{chunk-YY5J75H5.js → chunk-ZU54D6MI.js} +135 -5
- package/dist/{clean-46MZVA37.js → clean-45QMNXLN.js} +15 -14
- package/dist/cli.js +50 -50
- package/dist/{cloud-GAZQGPCW.js → cloud-YRYTNHMQ.js} +4 -4
- package/dist/{cloudrun-ZWL7SLDD.js → cloudrun-LVZ4OPPC.js} +3 -3
- package/dist/{compare-66AAJESM.js → compare-GODD3JD2.js} +24 -23
- package/dist/{compiler-3N7XQRH6.js → compiler-C32VXLE2.js} +3 -3
- package/dist/{component-3OCOHK2B.js → component-UMNTDLG3.js} +3 -3
- package/dist/{compositions-H2BP4N6F.js → compositions-EIRLTOYW.js} +11 -11
- package/dist/{delete-WNJLVPGO.js → delete-7P55EZOW.js} +2 -2
- package/dist/{dist-AY2RBEXL.js → dist-FMHQMEMX.js} +1 -1
- package/dist/{dist-HSEMXPG3.js → dist-YUIPB7OX.js} +8 -2
- package/dist/{doctor-IFOZS45N.js → doctor-UYSIF4PX.js} +10 -10
- package/dist/{events-6TH3FU3F.js → events-A2MYVK2Z.js} +9 -9
- package/dist/{events-5EKFJCCZ.js → events-LXYVOH3X.js} +8 -8
- package/dist/{feedback-QRQNMORT.js → feedback-46DWSEAZ.js} +10 -10
- package/dist/{figma-WONEPLUQ.js → figma-C5DHRI6P.js} +3 -3
- package/dist/fontLocalizeCli.js +8 -8
- package/dist/{get-C7FCYNI2.js → get-IRSUDICU.js} +2 -2
- package/dist/{gpuPolicy-BXXQF3VC.js → gpuPolicy-CA6KRFQQ.js} +6 -6
- package/dist/{grade-compare-SCCSZ5P3.js → grade-compare-BLHXB3UR.js} +24 -23
- package/dist/{help-FJOUNXVD.js → help-HMYF4Y3E.js} +1 -1
- package/dist/{history-OZY36NEC.js → history-K5BD64QP.js} +15 -14
- package/dist/hyperframe-runtime.js +54 -54
- package/dist/hyperframe.manifest.json +1 -1
- package/dist/hyperframe.runtime.iife.js +54 -54
- package/dist/hyperframes-player.global.js +3 -3
- package/dist/{info-RG4SZQ2C.js → info-QR2FYDJ7.js} +11 -11
- package/dist/{init-YGZCDKSS.js → init-L6BY7IV4.js} +22 -22
- package/dist/{inspect-X547EZ4I.js → inspect-D3MC4VH3.js} +25 -24
- package/dist/{installer-6J24NTIV.js → installer-NBEN3ZIP.js} +4 -4
- package/dist/{keyframes-EIWEION2.js → keyframes-TPMFVG6O.js} +12 -12
- package/dist/{lambda-DSZDMP7P.js → lambda-BFHJMMCG.js} +4 -4
- package/dist/{layout-B7KCBLBH.js → layout-AOYCSBIL.js} +25 -24
- package/dist/{lint-RBDG4ERJ.js → lint-L4MN7QPF.js} +12 -12
- package/dist/{lintProject-CMPAR7BS.js → lintProject-X7L7EZWZ.js} +1 -1
- package/dist/{list-BPHPHLDJ.js → list-LKXCKBRX.js} +2 -2
- package/dist/{login-HV7KBW2J.js → login-4WEDFAIY.js} +4 -4
- package/dist/{media-treatment-RS6BZSQC.js → media-treatment-H6YAFA3H.js} +12 -12
- package/dist/{models-K4U7GRXV.js → models-RILNQV3Z.js} +7 -7
- package/dist/{motionShot-5AI2DALY.js → motionShot-5F4DCMWC.js} +10 -10
- package/dist/normalize-audio-DFK5FTE5.js +276 -0
- package/dist/{pipeline-HIUESSET.js → pipeline-5UY45ELH.js} +6 -6
- package/dist/{play-TTLQXBAH.js → play-HFD4CPWF.js} +20 -19
- package/dist/{preflight-63ODQ625.js → preflight-3V5IHGWQ.js} +7 -7
- package/dist/{present-XKGZ26FQ.js → present-JGDYENOT.js} +16 -15
- package/dist/{preview-O2YEKMYJ.js → preview-GLI7KBCA.js} +17 -17
- package/dist/{producer-ZTQIJO7E.js → producer-7JGAPEAF.js} +1 -1
- package/dist/{projectConfig-VVFH7XW5.js → projectConfig-JHEWPAA5.js} +6 -6
- package/dist/{publication-NALPAHDC.js → publication-7XA2H7UB.js} +2 -2
- package/dist/{publish-G7OL45EL.js → publish-257VZMWI.js} +8 -8
- package/dist/{remove-background-LOLKFKLT.js → remove-background-EV6XVADN.js} +7 -7
- package/dist/{render-I65IU7RM.js → render-4C3YKVZI.js} +3 -3
- package/dist/{render-ULQLUIWD.js → render-K6YASB4G.js} +12 -12
- package/dist/{render-EXSRG666.js → render-Y6LOQDCD.js} +21 -21
- package/dist/{render-batch-RSNCREPB.js → render-batch-AFDBPDMM.js} +3 -3
- package/dist/{renderCancellation-2WB4SGXR.js → renderCancellation-VIZELWDD.js} +6 -6
- package/dist/renderSetupWorker.js +1 -1
- package/dist/{resolver-CVN2IM2R.js → resolver-S72XBTEQ.js} +4 -4
- package/dist/{sherpa-OJUI54HG.js → sherpa-BAADWCHB.js} +7 -7
- package/dist/{skills-CPS5E5YP.js → skills-TEVVW6TR.js} +11 -11
- package/dist/{skillsUpdateCheck-3IT5CJWU.js → skillsUpdateCheck-4Y3NJPB5.js} +3 -3
- package/dist/{snapshot-MSGC7HTA.js → snapshot-63X5B7GR.js} +25 -24
- package/dist/{src-SV7CNZXN.js → src-GD7RGV5U.js} +5 -5
- package/dist/{src-EZBJT4VH.js → src-GRC63B6L.js} +7 -7
- package/dist/{staticProjectServer-5JAGMYT7.js → staticProjectServer-SFINO3DE.js} +14 -13
- package/dist/{status-4W3EJYEH.js → status-LXQL3L3H.js} +6 -6
- package/dist/studio/assets/{hyperframes-player-h4mktSdm.js → hyperframes-player-CJYtikAy.js} +1 -1
- package/dist/studio/assets/{index-lrT-gfHa.css → index-BQZBDqMs.css} +1 -1
- package/dist/studio/assets/{index-zoqPmBF6.js → index-CMSgrT2F.js} +1 -1
- package/dist/studio/assets/{index-CM1xA_jD.js → index-CYP6dMd7.js} +212 -210
- package/dist/studio/assets/{index-D8GKc2D9.js → index-HTFVHUJ4.js} +1 -1
- package/dist/studio/{chunk-NCUBAVGK.js → chunk-5VSXRGIX.js} +4 -4
- package/dist/studio/chunk-5VSXRGIX.js.map +1 -0
- package/dist/studio/chunk-6LUNLTHR.js +611 -0
- package/dist/studio/chunk-6LUNLTHR.js.map +1 -0
- package/dist/studio/{chunk-46XP7J3B.js → chunk-PQFEBX32.js} +5 -3
- package/dist/studio/chunk-PQFEBX32.js.map +1 -0
- package/dist/studio/{chunk-4OZC426H.js → chunk-QUXZVHOJ.js} +10 -504
- package/dist/studio/chunk-QUXZVHOJ.js.map +1 -0
- package/dist/studio/{domEditingLayers-AQBDFNUC.js → domEditingLayers-JQPQGGT7.js} +3 -3
- package/dist/studio/index.d.ts +53 -4
- package/dist/studio/index.html +2 -2
- package/dist/studio/index.js +15746 -13173
- package/dist/studio/index.js.map +1 -1
- package/dist/studio/player.js +3 -3
- package/dist/studio/styles.css +1 -1
- package/dist/studio/ui.js +1 -1
- package/dist/{studio-api-L2TJ2JTK.js → studio-api-WRSCXPWS.js} +8 -7
- package/dist/{studioServer-UV7YRYWN.js → studioServer-HPG3FVTJ.js} +44 -38
- package/dist/{system-OL4MXRPK.js → system-EEWYEHYX.js} +6 -6
- package/dist/{telemetry-WRUU725E.js → telemetry-UIZ5O7NL.js} +9 -9
- package/dist/{timeline-P43A53BW.js → timeline-L56HML42.js} +41 -21
- package/dist/{tokens-NUHTJM2V.js → tokens-DLPYLGLW.js} +2 -2
- package/dist/{transcribe-FSVNIFGF.js → transcribe-FBPTYMVZ.js} +12 -12
- package/dist/{transcribe-TRLZJK73.js → transcribe-GCKJF5A6.js} +7 -7
- package/dist/{updateCheck-33TAG46I.js → updateCheck-GQBMZGU3.js} +2 -2
- package/dist/{upgrade-AJ6QBTH2.js → upgrade-6LR7ZK3Q.js} +2 -2
- package/dist/{urlDownloader-MP6GJIDV.js → urlDownloader-NYXPEBUN.js} +5 -5
- package/dist/{validate-VL3A6VTJ.js → validate-VY6RJRHE.js} +15 -15
- package/dist/{video-KO7VT63P.js → video-KWQ5TSVD.js} +6 -6
- package/package.json +1 -1
- package/dist/chunk-PMLZPNIB.js +0 -3431
- package/dist/studio/chunk-46XP7J3B.js.map +0 -1
- package/dist/studio/chunk-4OZC426H.js.map +0 -1
- package/dist/studio/chunk-DI4LCJHL.js +0 -102
- package/dist/studio/chunk-DI4LCJHL.js.map +0 -1
- package/dist/studio/chunk-NCUBAVGK.js.map +0 -1
- /package/dist/studio/{domEditingLayers-AQBDFNUC.js.map → domEditingLayers-JQPQGGT7.js.map} +0 -0
|
@@ -4,64 +4,21 @@ import { dirname as __hf_dirname } from "node:path";
|
|
|
4
4
|
var require = __hf_createRequire(import.meta.url);
|
|
5
5
|
var __filename = __hf_fileURLToPath(import.meta.url);
|
|
6
6
|
var __dirname = __hf_dirname(__filename);
|
|
7
|
-
import {
|
|
8
|
-
resolveProject
|
|
9
|
-
} from "./chunk-I73Z6OOE.js";
|
|
10
|
-
import "./chunk-IHFUKJOR.js";
|
|
11
|
-
import "./chunk-TPPIERG3.js";
|
|
12
|
-
import "./chunk-3CYAZWF2.js";
|
|
13
|
-
import "./chunk-VWG7OQKU.js";
|
|
14
|
-
import {
|
|
15
|
-
c
|
|
16
|
-
} from "./chunk-ZTZA4UWZ.js";
|
|
17
|
-
import "./chunk-C3KEF3UA.js";
|
|
18
|
-
import "./chunk-AMKC3AXA.js";
|
|
19
|
-
import {
|
|
20
|
-
defineCommand
|
|
21
|
-
} from "./chunk-S3S4TGEH.js";
|
|
22
|
-
import "./chunk-54HJ63Q2.js";
|
|
23
|
-
import {
|
|
24
|
-
failCommand
|
|
25
|
-
} from "./chunk-PBN6GBJE.js";
|
|
26
|
-
import "./chunk-D5EJCP26.js";
|
|
27
|
-
import "./chunk-VMDEGITC.js";
|
|
28
|
-
import "./chunk-UUDQD62L.js";
|
|
29
|
-
import "./chunk-DPVXBVLL.js";
|
|
30
|
-
import "./chunk-R4IB642V.js";
|
|
31
7
|
import {
|
|
32
8
|
MAX_AUDIO_GAIN_DB,
|
|
33
|
-
formatAudioGain
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
import "./chunk-OFQWTKPW.js";
|
|
37
|
-
import "./chunk-TWWSYAKJ.js";
|
|
38
|
-
import "./chunk-QM2NUN2B.js";
|
|
39
|
-
import "./chunk-HBBJFK6I.js";
|
|
9
|
+
formatAudioGain,
|
|
10
|
+
isAudibleVideoElement
|
|
11
|
+
} from "./chunk-YLVI7VL5.js";
|
|
40
12
|
import {
|
|
41
13
|
findFfBinary
|
|
42
14
|
} from "./chunk-PJ3HDUCY.js";
|
|
43
|
-
import "./chunk-TQFG7HTI.js";
|
|
44
|
-
import "./chunk-GK4AIFIH.js";
|
|
45
|
-
import "./chunk-2PSPARWP.js";
|
|
46
|
-
import "./chunk-K4WIOZFP.js";
|
|
47
|
-
import "./chunk-XUXGIA7H.js";
|
|
48
|
-
import "./chunk-WERLJGIC.js";
|
|
49
|
-
import "./chunk-ISN5GRYI.js";
|
|
50
|
-
import "./chunk-OGTR33KN.js";
|
|
51
|
-
import "./chunk-KNU5COPB.js";
|
|
52
|
-
import "./chunk-3GXQPCJC.js";
|
|
53
|
-
import "./chunk-RQVDTPGD.js";
|
|
54
|
-
import "./chunk-PMRBLBUP.js";
|
|
55
|
-
import "./chunk-M2WBOQ2Q.js";
|
|
56
15
|
|
|
57
|
-
//
|
|
16
|
+
// ../studio-server/dist/chunk-TEYDBVSK.js
|
|
58
17
|
import { execFile } from "child_process";
|
|
59
|
-
import { existsSync, readFileSync, renameSync, writeFileSync } from "fs";
|
|
60
18
|
import { isAbsolute, relative, resolve } from "path";
|
|
61
19
|
import { promisify } from "util";
|
|
62
20
|
var execFileAsync = promisify(execFile);
|
|
63
21
|
var FFMPEG_TIMEOUT_MS = 12e4;
|
|
64
|
-
var DEFAULT_TOLERANCE_LU = 0.5;
|
|
65
22
|
function authoredNumber(raw, fallback, attribute, id, strictlyPositive = false) {
|
|
66
23
|
if (raw === void 0) return fallback;
|
|
67
24
|
const value = Number(raw);
|
|
@@ -121,14 +78,28 @@ function commentEnd(html, start) {
|
|
|
121
78
|
if (end < 0) throw new Error("Unterminated HTML comment");
|
|
122
79
|
return end + 3;
|
|
123
80
|
}
|
|
81
|
+
var isSpaceAt = (html, index) => /\s/.test(html.charAt(index));
|
|
82
|
+
var isWordAt = (html, index) => /\w/.test(html.charAt(index));
|
|
83
|
+
function skipSpaces(html, index) {
|
|
84
|
+
let cursor = index;
|
|
85
|
+
while (cursor < html.length && isSpaceAt(html, cursor)) cursor++;
|
|
86
|
+
return cursor;
|
|
87
|
+
}
|
|
124
88
|
function parsedStartTag(html, start) {
|
|
125
|
-
|
|
126
|
-
|
|
89
|
+
let cursor = skipSpaces(html, start + 1);
|
|
90
|
+
const closing = html.charAt(cursor) === "/";
|
|
91
|
+
if (closing) cursor = skipSpaces(html, cursor + 1);
|
|
92
|
+
const nameStart = cursor;
|
|
93
|
+
if (!/[a-z]/i.test(html.charAt(cursor))) return null;
|
|
94
|
+
while (/[a-z\d:-]/i.test(html.charAt(cursor + 1))) cursor++;
|
|
95
|
+
let nameEnd = cursor + 1;
|
|
96
|
+
while (nameEnd > nameStart && isWordAt(html, nameEnd - 1) === isWordAt(html, nameEnd)) nameEnd--;
|
|
97
|
+
if (nameEnd === nameStart) return null;
|
|
127
98
|
return {
|
|
128
99
|
start,
|
|
129
100
|
end: startTagEnd(html, start),
|
|
130
|
-
closing
|
|
131
|
-
name:
|
|
101
|
+
closing,
|
|
102
|
+
name: html.slice(nameStart, nameEnd).toLowerCase()
|
|
132
103
|
};
|
|
133
104
|
}
|
|
134
105
|
function rawTextElementEnd(html, lower, tag) {
|
|
@@ -139,20 +110,26 @@ function rawTextElementEnd(html, lower, tag) {
|
|
|
139
110
|
}
|
|
140
111
|
function scanMarkup(html, lower, start) {
|
|
141
112
|
if (html.startsWith("<!--", start)) {
|
|
142
|
-
return { cursor: commentEnd(html, start),
|
|
113
|
+
return { cursor: commentEnd(html, start), mediaRange: null };
|
|
143
114
|
}
|
|
144
115
|
const tag = parsedStartTag(html, start);
|
|
145
116
|
if (!tag) {
|
|
146
117
|
const marker = html[start + 1];
|
|
147
118
|
const cursor = marker === "!" || marker === "?" ? startTagEnd(html, start) : start + 1;
|
|
148
|
-
return { cursor,
|
|
119
|
+
return { cursor, mediaRange: null };
|
|
149
120
|
}
|
|
150
121
|
const rawTextEnd = rawTextElementEnd(html, lower, tag);
|
|
151
|
-
if (rawTextEnd !== null) return { cursor: rawTextEnd,
|
|
152
|
-
|
|
153
|
-
return { cursor: tag.end, audioRange };
|
|
122
|
+
if (rawTextEnd !== null) return { cursor: rawTextEnd, mediaRange: null };
|
|
123
|
+
return { cursor: tag.end, mediaRange: mediaRangeOf(tag) };
|
|
154
124
|
}
|
|
155
|
-
function
|
|
125
|
+
function mediaRangeOf(tag) {
|
|
126
|
+
if (tag.closing) return null;
|
|
127
|
+
if (tag.name === "audio" || tag.name === "video") {
|
|
128
|
+
return { start: tag.start, end: tag.end, name: tag.name };
|
|
129
|
+
}
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
function mediaTagRanges(html) {
|
|
156
133
|
const lower = html.toLowerCase();
|
|
157
134
|
const ranges = [];
|
|
158
135
|
let cursor = 0;
|
|
@@ -160,7 +137,7 @@ function audioTagRanges(html) {
|
|
|
160
137
|
const start = html.indexOf("<", cursor);
|
|
161
138
|
if (start < 0) break;
|
|
162
139
|
const scanned = scanMarkup(html, lower, start);
|
|
163
|
-
if (scanned.
|
|
140
|
+
if (scanned.mediaRange) ranges.push(scanned.mediaRange);
|
|
164
141
|
cursor = scanned.cursor;
|
|
165
142
|
}
|
|
166
143
|
return ranges;
|
|
@@ -184,11 +161,27 @@ function requiredAudioIdentity(attributes) {
|
|
|
184
161
|
if (!src) throw new Error(`Audio #${id} has no src`);
|
|
185
162
|
return { id, src };
|
|
186
163
|
}
|
|
187
|
-
function
|
|
164
|
+
function hasBareAttribute(html, range, name) {
|
|
165
|
+
const unquoted = html.slice(range.start, range.end).replace(/"[^"]*"|'[^']*'/g, '""');
|
|
166
|
+
return new RegExp(`\\s${name}(?=[\\s/>=])`, "i").test(unquoted);
|
|
167
|
+
}
|
|
168
|
+
function isAudibleVideoTag(html, range, attributes) {
|
|
169
|
+
return isAudibleVideoElement({
|
|
170
|
+
tagName: "video",
|
|
171
|
+
hasAttribute: (name) => attributes.has(name) || hasBareAttribute(html, range, name),
|
|
172
|
+
getAttribute: (name) => attributes.get(name)?.value ?? null
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
function inScopeVideo(html, range, attributes) {
|
|
176
|
+
return isAudibleVideoTag(html, range, attributes) && trimmedAttribute(attributes, "id") !== "" && trimmedAttribute(attributes, "src") !== "";
|
|
177
|
+
}
|
|
178
|
+
function mediaTagFromRange(html, range) {
|
|
188
179
|
const attributes = attributesInTag(html, range.start, range.end);
|
|
180
|
+
if (range.name === "video" && !inScopeVideo(html, range, attributes)) return null;
|
|
189
181
|
const { id, src } = requiredAudioIdentity(attributes);
|
|
190
182
|
const volumeAttribute = attributes.get("data-volume") ?? null;
|
|
191
183
|
return {
|
|
184
|
+
tag: range.name,
|
|
192
185
|
id,
|
|
193
186
|
src,
|
|
194
187
|
volume: authoredNumber(volumeAttribute?.value, 1, "data-volume", id),
|
|
@@ -199,6 +192,13 @@ function audioTagFromRange(html, range) {
|
|
|
199
192
|
id
|
|
200
193
|
),
|
|
201
194
|
duration: authoredDuration(attributes, id),
|
|
195
|
+
playbackRate: authoredNumber(
|
|
196
|
+
attributes.get("data-playback-rate")?.value,
|
|
197
|
+
1,
|
|
198
|
+
"data-playback-rate",
|
|
199
|
+
id,
|
|
200
|
+
true
|
|
201
|
+
),
|
|
202
202
|
start: range.start,
|
|
203
203
|
end: range.end,
|
|
204
204
|
volumeAttribute
|
|
@@ -207,8 +207,9 @@ function audioTagFromRange(html, range) {
|
|
|
207
207
|
function audioTags(html) {
|
|
208
208
|
const seen = /* @__PURE__ */ new Set();
|
|
209
209
|
const tags = [];
|
|
210
|
-
for (const range of
|
|
211
|
-
const tag =
|
|
210
|
+
for (const range of mediaTagRanges(html)) {
|
|
211
|
+
const tag = mediaTagFromRange(html, range);
|
|
212
|
+
if (!tag) continue;
|
|
212
213
|
if (seen.has(tag.id)) throw new Error(`Duplicate audio id "${tag.id}"`);
|
|
213
214
|
seen.add(tag.id);
|
|
214
215
|
tags.push(tag);
|
|
@@ -305,7 +306,8 @@ function updateAudioVolume(html, id, volume) {
|
|
|
305
306
|
function loudnessMeasureArgs(file, tag) {
|
|
306
307
|
const args = ["-hide_banner", "-nostats"];
|
|
307
308
|
if (tag.mediaStart > 0) args.push("-ss", String(tag.mediaStart));
|
|
308
|
-
|
|
309
|
+
const sourceSpan = tag.duration === null ? null : tag.duration * (tag.playbackRate ?? 1);
|
|
310
|
+
if (sourceSpan !== null && sourceSpan > 0) args.push("-t", String(sourceSpan));
|
|
309
311
|
args.push("-i", file, "-map", "0:a:0", "-vn", "-af", "ebur128=peak=true", "-f", "null", "-");
|
|
310
312
|
return args;
|
|
311
313
|
}
|
|
@@ -317,162 +319,52 @@ async function measureAudio(ffmpegPath, file, tag) {
|
|
|
317
319
|
});
|
|
318
320
|
return parseEbur128Summary(result.stderr);
|
|
319
321
|
}
|
|
320
|
-
function fail(message, json, cause) {
|
|
321
|
-
if (json) console.log(JSON.stringify({ ok: false, error: message }, null, 2));
|
|
322
|
-
else console.error(c.error(message));
|
|
323
|
-
failCommand(1, cause);
|
|
324
|
-
}
|
|
325
|
-
function byId(tags, rawId, role) {
|
|
326
|
-
const id = rawId.trim().replace(/^#/, "");
|
|
327
|
-
const tag = tags.find((candidate) => candidate.id === id);
|
|
328
|
-
if (!tag) throw new Error(`${role} audio #${id} was not found`);
|
|
329
|
-
return tag;
|
|
330
|
-
}
|
|
331
|
-
function selectedTags(html, referenceId, targetId) {
|
|
332
|
-
const tags = audioTags(html);
|
|
333
|
-
const referenceTag = byId(tags, referenceId, "Reference");
|
|
334
|
-
const targetTag = byId(tags, targetId, "Target");
|
|
335
|
-
if (referenceTag.id === targetTag.id) {
|
|
336
|
-
throw new Error("Reference and target must be different audio elements");
|
|
337
|
-
}
|
|
338
|
-
return { referenceTag, targetTag };
|
|
339
|
-
}
|
|
340
322
|
function requiredFfmpeg() {
|
|
341
323
|
const ffmpegPath = findFfBinary("ffmpeg", { configuredMustExist: true });
|
|
342
324
|
if (!ffmpegPath) throw new Error("FFmpeg is required to measure integrated loudness");
|
|
343
325
|
return ffmpegPath;
|
|
344
326
|
}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
}
|
|
352
|
-
async function measuredPlan(projectDir, referenceTag, targetTag) {
|
|
353
|
-
const ffmpegPath = requiredFfmpeg();
|
|
354
|
-
const referenceFile = existingAudioFile(projectDir, referenceTag);
|
|
355
|
-
const targetFile = existingAudioFile(projectDir, targetTag);
|
|
356
|
-
const [referenceMeasurement, targetMeasurement] = await Promise.all([
|
|
357
|
-
measureAudio(ffmpegPath, referenceFile, referenceTag),
|
|
358
|
-
measureAudio(ffmpegPath, targetFile, targetTag)
|
|
359
|
-
]);
|
|
360
|
-
return audioNormalizationPlan(
|
|
361
|
-
{ id: referenceTag.id, volume: referenceTag.volume, ...referenceMeasurement },
|
|
362
|
-
{ id: targetTag.id, volume: targetTag.volume, ...targetMeasurement }
|
|
363
|
-
);
|
|
364
|
-
}
|
|
365
|
-
function writeAtomically(path, contents) {
|
|
366
|
-
const temporary = `${path}.hf-normalize-${process.pid}.tmp`;
|
|
367
|
-
writeFileSync(temporary, contents);
|
|
368
|
-
renameSync(temporary, path);
|
|
369
|
-
}
|
|
370
|
-
function parsedTolerance(raw) {
|
|
371
|
-
const tolerance = Number(raw);
|
|
372
|
-
if (!Number.isFinite(tolerance) || tolerance < 0) {
|
|
373
|
-
throw new Error("--tolerance must be a non-negative number");
|
|
374
|
-
}
|
|
375
|
-
return tolerance;
|
|
376
|
-
}
|
|
377
|
-
async function normalizeAudio(options) {
|
|
378
|
-
const project = resolveProject(options.dir);
|
|
379
|
-
const html = readFileSync(project.indexPath, "utf8");
|
|
380
|
-
const { referenceTag, targetTag } = selectedTags(html, options.reference, options.target);
|
|
381
|
-
const tolerance = parsedTolerance(options.tolerance);
|
|
382
|
-
const plan = await measuredPlan(project.dir, referenceTag, targetTag);
|
|
383
|
-
const withinTolerance = Math.abs(plan.referenceLufs - plan.targetLufs) <= tolerance;
|
|
384
|
-
const wrote = options.write && !withinTolerance;
|
|
385
|
-
if (wrote) {
|
|
386
|
-
writeAtomically(
|
|
387
|
-
project.indexPath,
|
|
388
|
-
updateAudioVolume(readFileSync(project.indexPath, "utf8"), targetTag.id, plan.volume)
|
|
389
|
-
);
|
|
327
|
+
var DEFAULT_TARGET_LUFS = -16;
|
|
328
|
+
var NORMALIZE_TRUE_PEAK_CEILING_DBFS = -1.5;
|
|
329
|
+
var SILENCE_LUFS = -70;
|
|
330
|
+
function absoluteLoudnessPlan(track, targetLufs = DEFAULT_TARGET_LUFS) {
|
|
331
|
+
if (track.integratedLufs <= SILENCE_LUFS) {
|
|
332
|
+
throw new Error(`#${track.id} is silent in the played window; there is nothing to normalize`);
|
|
390
333
|
}
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
);
|
|
401
|
-
return;
|
|
402
|
-
}
|
|
403
|
-
console.log(
|
|
404
|
-
`Set #${result.targetId} data-volume ${result.previousVolume.toFixed(3)} \u2192 ${result.volume.toFixed(6)} (${result.changeDb >= 0 ? "+" : ""}${result.changeDb.toFixed(1)} dB).`
|
|
405
|
-
);
|
|
406
|
-
console.log(
|
|
407
|
-
result.wrote ? c.success(`Updated ${relative(process.cwd(), result.indexPath) || "index.html"}.`) : c.dim("Dry run only. Pass --write to persist this gain.")
|
|
334
|
+
const wantedGainDb = targetLufs - track.integratedLufs;
|
|
335
|
+
const peakRoomDb = NORMALIZE_TRUE_PEAK_CEILING_DBFS - track.truePeakDbfs;
|
|
336
|
+
const limits = [
|
|
337
|
+
[null, wantedGainDb],
|
|
338
|
+
["gain-ceiling", MAX_AUDIO_GAIN_DB],
|
|
339
|
+
["true-peak", peakRoomDb]
|
|
340
|
+
];
|
|
341
|
+
const [limitedBy, appliedGainDb] = limits.reduce(
|
|
342
|
+
(lowest, candidate) => candidate[1] < lowest[1] - 1e-9 ? candidate : lowest
|
|
408
343
|
);
|
|
344
|
+
const previousGainDb = track.volume > 0 ? gainDb(track.volume) : 0;
|
|
345
|
+
return {
|
|
346
|
+
targetId: track.id,
|
|
347
|
+
targetLufs,
|
|
348
|
+
sourceLufs: track.integratedLufs,
|
|
349
|
+
previousVolume: track.volume,
|
|
350
|
+
volume: 10 ** (appliedGainDb / 20),
|
|
351
|
+
gainDb: appliedGainDb,
|
|
352
|
+
changeDb: appliedGainDb - previousGainDb,
|
|
353
|
+
projectedLufs: track.integratedLufs + appliedGainDb,
|
|
354
|
+
projectedTruePeakDbfs: track.truePeakDbfs + appliedGainDb,
|
|
355
|
+
limitedBy
|
|
356
|
+
};
|
|
409
357
|
}
|
|
410
|
-
|
|
411
|
-
[
|
|
412
|
-
"Measure two authored clips and preview the matching gain",
|
|
413
|
-
"hyperframes normalize-audio --reference target-audio --target user-audio"
|
|
414
|
-
],
|
|
415
|
-
[
|
|
416
|
-
"Persist the measured gain into index.html",
|
|
417
|
-
"hyperframes normalize-audio --reference target-audio --target user-audio --write"
|
|
418
|
-
]
|
|
419
|
-
];
|
|
420
|
-
var normalize_audio_default = defineCommand({
|
|
421
|
-
meta: {
|
|
422
|
-
name: "normalize-audio",
|
|
423
|
-
description: "Match one local audio clip to another using integrated LUFS"
|
|
424
|
-
},
|
|
425
|
-
args: {
|
|
426
|
-
dir: { type: "positional", description: "Project directory", required: false },
|
|
427
|
-
reference: {
|
|
428
|
-
type: "string",
|
|
429
|
-
description: "Audio element id whose effective loudness should be preserved",
|
|
430
|
-
required: true
|
|
431
|
-
},
|
|
432
|
-
target: {
|
|
433
|
-
type: "string",
|
|
434
|
-
description: "Audio element id whose data-volume should be matched",
|
|
435
|
-
required: true
|
|
436
|
-
},
|
|
437
|
-
write: {
|
|
438
|
-
type: "boolean",
|
|
439
|
-
description: "Persist the measured target gain into index.html",
|
|
440
|
-
default: false
|
|
441
|
-
},
|
|
442
|
-
tolerance: {
|
|
443
|
-
type: "string",
|
|
444
|
-
description: `Skip writes within this many LU (default ${DEFAULT_TOLERANCE_LU})`,
|
|
445
|
-
default: String(DEFAULT_TOLERANCE_LU)
|
|
446
|
-
},
|
|
447
|
-
json: { type: "boolean", description: "Print machine-readable output", default: false }
|
|
448
|
-
},
|
|
449
|
-
async run({ args }) {
|
|
450
|
-
try {
|
|
451
|
-
const result = await normalizeAudio({
|
|
452
|
-
dir: args.dir,
|
|
453
|
-
reference: args.reference,
|
|
454
|
-
target: args.target,
|
|
455
|
-
tolerance: args.tolerance,
|
|
456
|
-
write: args.write
|
|
457
|
-
});
|
|
458
|
-
if (args.json) {
|
|
459
|
-
const { indexPath: _, ...jsonResult } = result;
|
|
460
|
-
console.log(JSON.stringify(jsonResult, null, 2));
|
|
461
|
-
return;
|
|
462
|
-
}
|
|
463
|
-
printHumanResult(result);
|
|
464
|
-
} catch (error) {
|
|
465
|
-
fail(error instanceof Error ? error.message : String(error), Boolean(args.json), error);
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
});
|
|
358
|
+
|
|
469
359
|
export {
|
|
470
|
-
audioNormalizationPlan,
|
|
471
360
|
audioTags,
|
|
472
|
-
normalize_audio_default as default,
|
|
473
|
-
examples,
|
|
474
|
-
loudnessMeasureArgs,
|
|
475
|
-
parseEbur128Summary,
|
|
476
361
|
resolveLocalAudioPath,
|
|
477
|
-
|
|
362
|
+
parseEbur128Summary,
|
|
363
|
+
audioNormalizationPlan,
|
|
364
|
+
updateAudioVolume,
|
|
365
|
+
loudnessMeasureArgs,
|
|
366
|
+
measureAudio,
|
|
367
|
+
requiredFfmpeg,
|
|
368
|
+
DEFAULT_TARGET_LUFS,
|
|
369
|
+
absoluteLoudnessPlan
|
|
478
370
|
};
|
|
@@ -4015,7 +4015,7 @@ function isAudibleVideoTag(tagSource) {
|
|
|
4015
4015
|
if (hasAttrName(tagSource, "muted")) return false;
|
|
4016
4016
|
if (!hasAttrName(tagSource, "data-has-audio")) return true;
|
|
4017
4017
|
const declared = readAttr(tagSource, "data-has-audio");
|
|
4018
|
-
return declared
|
|
4018
|
+
return declared === "true";
|
|
4019
4019
|
}
|
|
4020
4020
|
function mediaTimeWindow(tagSource) {
|
|
4021
4021
|
const start = Number(readAttr(tagSource, "data-start"));
|
|
@@ -5245,6 +5245,89 @@ function cssErrorOffset(source, error) {
|
|
|
5245
5245
|
}
|
|
5246
5246
|
return currentLine === line ? offset + column - 1 : void 0;
|
|
5247
5247
|
}
|
|
5248
|
+
var SYNC_TOLERANCE_S = 1e-3;
|
|
5249
|
+
var LINKED_TIMING_FIELDS = [
|
|
5250
|
+
{ field: "start", attrs: ["data-start"], fallback: 0 },
|
|
5251
|
+
{ field: "duration", attrs: ["data-duration"], fallback: 0 },
|
|
5252
|
+
{ field: "media-start", attrs: ["data-playback-start", "data-media-start"], fallback: 0 },
|
|
5253
|
+
{ field: "playback-rate", attrs: ["data-playback-rate"], fallback: 1 }
|
|
5254
|
+
];
|
|
5255
|
+
function readTimingField(tag, attrs, fallback) {
|
|
5256
|
+
for (const attr of attrs) {
|
|
5257
|
+
const raw = readAttr(tag.raw, attr);
|
|
5258
|
+
if (raw === null || raw.trim() === "") continue;
|
|
5259
|
+
const value = Number(raw);
|
|
5260
|
+
if (Number.isFinite(value)) return value;
|
|
5261
|
+
}
|
|
5262
|
+
return fallback;
|
|
5263
|
+
}
|
|
5264
|
+
function driftingFields(members) {
|
|
5265
|
+
return LINKED_TIMING_FIELDS.filter(({ attrs, fallback }) => {
|
|
5266
|
+
const values = members.map((tag) => readTimingField(tag, attrs, fallback));
|
|
5267
|
+
const first = values[0] ?? fallback;
|
|
5268
|
+
return values.some((value) => Math.abs(value - first) > SYNC_TOLERANCE_S);
|
|
5269
|
+
}).map(({ field }) => field);
|
|
5270
|
+
}
|
|
5271
|
+
function compositionScopeOf(tag, compositions) {
|
|
5272
|
+
let scope = -1;
|
|
5273
|
+
for (const composition of compositions) {
|
|
5274
|
+
const end = composition.endIndex ?? composition.closeIndex ?? Number.POSITIVE_INFINITY;
|
|
5275
|
+
const encloses = composition.index < tag.index && tag.index < end;
|
|
5276
|
+
if (composition !== tag && encloses && composition.index > scope) scope = composition.index;
|
|
5277
|
+
}
|
|
5278
|
+
return scope;
|
|
5279
|
+
}
|
|
5280
|
+
function groupByLink(tags) {
|
|
5281
|
+
const compositions = tags.filter(
|
|
5282
|
+
(tag) => ["data-composition-id", "data-composition-file"].some(
|
|
5283
|
+
(name) => readAttr(tag.raw, name) !== null
|
|
5284
|
+
)
|
|
5285
|
+
);
|
|
5286
|
+
const groups = /* @__PURE__ */ new Map();
|
|
5287
|
+
for (const tag of tags) {
|
|
5288
|
+
const link = readAttr(tag.raw, "data-link");
|
|
5289
|
+
if (!link) continue;
|
|
5290
|
+
const key = `${compositionScopeOf(tag, compositions)}\0${link}`;
|
|
5291
|
+
const group = groups.get(key) ?? { link, members: [] };
|
|
5292
|
+
group.members.push(tag);
|
|
5293
|
+
groups.set(key, group);
|
|
5294
|
+
}
|
|
5295
|
+
return groups;
|
|
5296
|
+
}
|
|
5297
|
+
var memberLabel = (tag) => {
|
|
5298
|
+
const id = readAttr(tag.raw, "id");
|
|
5299
|
+
return id ? `#${id}` : `<${tag.name}>`;
|
|
5300
|
+
};
|
|
5301
|
+
function findLinkedClipFindings(ctx) {
|
|
5302
|
+
const findings = [];
|
|
5303
|
+
for (const { link, members } of groupByLink(ctx.tags).values()) {
|
|
5304
|
+
const first = members[0];
|
|
5305
|
+
if (!first) continue;
|
|
5306
|
+
const elementId = readAttr(first.raw, "id") || void 0;
|
|
5307
|
+
if (members.length === 1) {
|
|
5308
|
+
findings.push({
|
|
5309
|
+
code: "linked_clip_orphan",
|
|
5310
|
+
severity: "warning",
|
|
5311
|
+
message: `${memberLabel(first)} is the only clip with data-link="${link}"; its linked partner is gone.`,
|
|
5312
|
+
elementId,
|
|
5313
|
+
fixHint: `Remove data-link="${link}" from ${memberLabel(first)}, or restore the partner clip.`,
|
|
5314
|
+
snippet: truncateSnippet(first.raw)
|
|
5315
|
+
});
|
|
5316
|
+
continue;
|
|
5317
|
+
}
|
|
5318
|
+
const drift = driftingFields(members);
|
|
5319
|
+
if (drift.length === 0) continue;
|
|
5320
|
+
findings.push({
|
|
5321
|
+
code: "linked_clips_out_of_sync",
|
|
5322
|
+
severity: "warning",
|
|
5323
|
+
message: `Linked clips ${members.map(memberLabel).join(", ")} (data-link="${link}") differ in ${drift.join(", ")}.`,
|
|
5324
|
+
elementId,
|
|
5325
|
+
fixHint: "Linked clips are edited as one: give every member the same data-start, data-duration, data-media-start and data-playback-rate, or remove data-link from all of them to unlink.",
|
|
5326
|
+
snippet: truncateSnippet(first.raw)
|
|
5327
|
+
});
|
|
5328
|
+
}
|
|
5329
|
+
return findings;
|
|
5330
|
+
}
|
|
5248
5331
|
function tweensVolumeInSameCall(script, id) {
|
|
5249
5332
|
const selector = new RegExp(`#${escapeRegExp(id)}(?![\\w-])`, "g");
|
|
5250
5333
|
for (let hit = selector.exec(script); hit; hit = selector.exec(script)) {
|
|
@@ -5943,7 +6026,8 @@ var mediaRules = [
|
|
|
5943
6026
|
// audio_group_timing_attrs
|
|
5944
6027
|
findAudioGroupTimingAttrFindings,
|
|
5945
6028
|
// audio_group_carve_attr
|
|
5946
|
-
findAudioGroupCarveAttrFindings
|
|
6029
|
+
findAudioGroupCarveAttrFindings,
|
|
6030
|
+
findLinkedClipFindings
|
|
5947
6031
|
];
|
|
5948
6032
|
function findVolumeTweenOverridesGainFindings(ctx) {
|
|
5949
6033
|
const boosted = ctx.tags.filter((tag) => isMediaTag(tag.name)).map((tag) => ({ tag, volume: Number(readAttr(tag.raw, "data-volume") ?? "1") })).filter((entry) => Number.isFinite(entry.volume) && entry.volume !== 1).filter((entry) => !readDecodedAttr(entry.tag.raw, "data-automation")).map((entry) => ({ ...entry, id: readAttr(entry.tag.raw, "id") })).filter((entry) => Boolean(entry.id));
|
|
@@ -6032,7 +6116,7 @@ function findCarveUngroupedSourcesFindings(ctx) {
|
|
|
6032
6116
|
var AUDIO_GROUP_TIMING_ATTRS = ["data-start", "data-duration", "data-track-index"];
|
|
6033
6117
|
function findAudioGroupNoMembersFindings(ctx) {
|
|
6034
6118
|
const memberGroupIds = new Set(
|
|
6035
|
-
ctx.tags.filter((tag) => tag.name === "audio").map((tag) => readAttr(tag.raw, "data-audio-group")).filter((id) => Boolean(id))
|
|
6119
|
+
ctx.tags.filter((tag) => tag.name === "audio" || tag.name === "video" && isAudibleVideoTag(tag.raw)).map((tag) => readAttr(tag.raw, "data-audio-group")).filter((id) => Boolean(id))
|
|
6036
6120
|
);
|
|
6037
6121
|
if (memberGroupIds.size === 0) return [];
|
|
6038
6122
|
const mayHaveCrossFileMembers = ctx.tags.some(
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
import {
|
|
17
17
|
DEFAULT_VP9_CPU_USED,
|
|
18
18
|
renderProvenanceArgs
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-OF3RKOPU.js";
|
|
20
20
|
import {
|
|
21
21
|
loadOptionalPackage
|
|
22
22
|
} from "./chunk-XT5P4QMO.js";
|
|
@@ -202,7 +202,7 @@ function inferInputKind(inputPath) {
|
|
|
202
202
|
}
|
|
203
203
|
async function probeMedia(inputPath) {
|
|
204
204
|
const isImage = inferInputKind(inputPath) === "image";
|
|
205
|
-
const engine = await import("./src-
|
|
205
|
+
const engine = await import("./src-GD7RGV5U.js");
|
|
206
206
|
const meta = await engine.extractMediaMetadata(inputPath);
|
|
207
207
|
if (isImage) {
|
|
208
208
|
return { width: meta.width, height: meta.height, fps: 0, frameCount: 1 };
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
} from "./chunk-ZTZA4UWZ.js";
|
|
13
13
|
import {
|
|
14
14
|
getSystemMeta
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-CQRF7VU3.js";
|
|
16
16
|
import {
|
|
17
17
|
getInvocationId
|
|
18
18
|
} from "./chunk-54HJ63Q2.js";
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
evaluateCanary,
|
|
24
24
|
findCanary,
|
|
25
25
|
parseCanaryOverride
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-B25H4M4V.js";
|
|
27
27
|
import {
|
|
28
28
|
hostAnswers
|
|
29
29
|
} from "./chunk-K4WIOZFP.js";
|
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
} from "./chunk-XUXGIA7H.js";
|
|
38
38
|
import {
|
|
39
39
|
VERSION
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-3T4RQK6C.js";
|
|
41
41
|
|
|
42
42
|
// src/telemetry/transport.ts
|
|
43
43
|
import { spawn } from "child_process";
|
|
@@ -8,14 +8,14 @@ import {
|
|
|
8
8
|
DEFAULT_REGISTRY_URL,
|
|
9
9
|
fetchItemFile,
|
|
10
10
|
validRegistryItem
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-AWUZ3AUD.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-
|
|
18
|
+
} from "./chunk-B25H4M4V.js";
|
|
19
19
|
import {
|
|
20
20
|
realProjectRoot
|
|
21
21
|
} from "./chunk-OFQWTKPW.js";
|
|
@@ -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-
|
|
9
|
+
} from "./chunk-MR2LOG32.js";
|
|
10
10
|
import {
|
|
11
11
|
injectTagsAtHeadStart
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-YLVI7VL5.js";
|
|
13
13
|
|
|
14
14
|
// src/utils/compositionServer.ts
|
|
15
15
|
import { createHash } from "crypto";
|