@hyperframes/engine 0.7.87 → 0.7.89

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.
@@ -38,6 +38,45 @@ interface StillImageMetadata {
38
38
  colorSpace: VideoColorSpace | null;
39
39
  }
40
40
  export declare function extractPngMetadataFromBuffer(buf: Buffer): StillImageMetadata | null;
41
+ /**
42
+ * Does this pix_fmt carry an alpha channel?
43
+ *
44
+ * Exported so the test asserts the shipped predicate rather than a copy of
45
+ * the pattern. Anchored at the start, matching studio-server's
46
+ * mediaMetadata.ts: the previous inline pattern bound its `(^|[^a-z])` anchor
47
+ * to the first alternative only — `|` is looser than concatenation — so the
48
+ * guard was decorative for every other name. It also missed abgr, ya8/ya16
49
+ * and ayuv64, and its `gray[a-z0-9]*a` branch matched only gray8a/gray16a,
50
+ * names FFmpeg renamed to ya8/ya16 in 2013. A `ya8` grayscale-plus-alpha PNG
51
+ * reported hasAlpha:false, resolveFrameFormat picked jpg, and the overlay
52
+ * flattened to an opaque rectangle.
53
+ */
54
+ export declare function pixelFormatHasAlpha(pixelFormat: string): boolean;
55
+ /**
56
+ * Parse an ffprobe rational frame rate ("30000/1001") or plain number.
57
+ *
58
+ * Returns 0 for anything not a usable positive rate. Exported so tests
59
+ * exercise the shipped function directly instead of re-importing the module
60
+ * behind a spawn mock.
61
+ *
62
+ * Every guard here is load-bearing, because a bad value is NOT caught
63
+ * downstream: callers use `meta.fps || 30`, which only rescues 0 and NaN.
64
+ * Infinity and negatives are truthy and flow into buildEncoderArgs as
65
+ * `-r Infinity` / `-r -30`, which ffmpeg rejects mid-render, and into
66
+ * frameCount arithmetic that then goes negative or non-finite.
67
+ *
68
+ * - the QUOTIENT is checked, not just the operands: "1e308/1e-10" and
69
+ * "2/1e-320" have finite parts and an infinite result;
70
+ * - the sign is checked: "-30/1", "30/-1" and "-60" all parsed clean;
71
+ * - more than two parts is rejected: "30/1/2" used to fall through to the
72
+ * bare parseFloat below and return 30, as did "60fps", because parseFloat
73
+ * stops at trailing garbage;
74
+ * - sub-0.005 rates round to 0 at 2dp and would be replaced by the caller's
75
+ * 30fps default, re-encoding a 300-second 1/300-fps timelapse as a
76
+ * ~1/30-second clip. Kept as 0 is wrong too, so they are floored to the
77
+ * smallest representable 2dp rate instead.
78
+ */
79
+ export declare function parseFrameRate(frameRateStr: string | undefined): number;
41
80
  /**
42
81
  * Probe a media file (video, image, or container) and return normalized metadata.
43
82
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ffprobe.d.ts","sourceRoot":"","sources":["../../src/utils/ffprobe.ts"],"names":[],"mappings":"AAiGA,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,aAAa,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,0BAA0B,EAAE,MAAM,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,6GAA6G;IAC7G,KAAK,EAAE,OAAO,CAAC;IACf,qDAAqD;IACrD,QAAQ,EAAE,OAAO,CAAC;IAClB,gFAAgF;IAChF,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB;;4DAEwD;IACxD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA+BD,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;CACpC;AAcD,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAoEnF;AA0CD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAkFnF;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,6BAAuB,CAAC;AAEzD,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACjC,OAAO,CAAC,aAAa,CAAC,CAwDxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;CACxB;AAID;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAY1F"}
1
+ {"version":3,"file":"ffprobe.d.ts","sourceRoot":"","sources":["../../src/utils/ffprobe.ts"],"names":[],"mappings":"AA6IA,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,aAAa,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,0BAA0B,EAAE,MAAM,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,6GAA6G;IAC7G,KAAK,EAAE,OAAO,CAAC;IACf,qDAAqD;IACrD,QAAQ,EAAE,OAAO,CAAC;IAClB,gFAAgF;IAChF,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB;;4DAEwD;IACxD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAkCD,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;CACpC;AAkCD,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAkFnF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEhE;AA2BD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAmCvE;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA8GnF;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,6BAAuB,CAAC;AAEzD,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACjC,OAAO,CAAC,aAAa,CAAC,CA+FxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;CACxB;AAID;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAY1F"}
@@ -1,12 +1,17 @@
1
1
  // fallow-ignore-file code-duplication complexity
2
2
  import { spawn } from "child_process";
3
3
  import { readFileSync } from "fs";
4
+ import * as zlib from "node:zlib";
5
+ import { StringDecoder } from "node:string_decoder";
4
6
  import { basename, extname } from "path";
5
7
  import { redactTelemetryString } from "@hyperframes/core";
6
8
  import { FFPROBE_PATH_ENV, getFfprobeBinary } from "./ffmpegBinaries.js";
7
9
  import { ManagedChildProcess } from "./managedChildProcess.js";
8
10
  import { trackChildProcess } from "./processTracker.js";
9
11
  const FFPROBE_STDERR_MAX_BYTES = 8 * 1024;
12
+ /** Bound on collected stdout. Generous — real -show_streams JSON is well
13
+ * under this — but finite, unlike the previous unbounded accumulation. */
14
+ const FFPROBE_STDOUT_MAX_CHARS = 8_000_000;
10
15
  const FFPROBE_ERROR_MAX_CHARS = 4 * 1024;
11
16
  function redactFfprobeInput(stderr, filePath) {
12
17
  if (!filePath)
@@ -41,12 +46,44 @@ function sanitizeFfprobeDiagnostic(stderr, filePath) {
41
46
  }
42
47
  /** Spawn ffprobe with given args, return stdout. Throws on non-zero exit or missing binary. */
43
48
  async function runFfprobe(filePath, argsWithoutInput, signal) {
49
+ // `--` stops option parsing so a path like "-intro.mp4" is a filename, but
50
+ // it does NOT cover a path of exactly "-": ffprobe rewrites that to `fd:`
51
+ // AFTER option parsing and then reads stdin. Since stdin here is a pipe the
52
+ // parent never writes to and never ends, the probe hangs for the full 30s
53
+ // deadline and fails with an empty diagnostic (ffprobe never errored, so
54
+ // stderr is blank). Reject it up front with something a caller can read.
55
+ if (filePath === "-") {
56
+ throw new Error('[FFmpeg] Refusing to probe "-": stdin is not a supported input path.');
57
+ }
44
58
  const command = getFfprobeBinary();
45
- const proc = spawn(command, ["-v", "error", ...argsWithoutInput, "--", filePath]);
59
+ const proc = spawn(command, ["-v", "error", ...argsWithoutInput, "--", filePath], {
60
+ // Nothing is ever written to the child's stdin; leaving it as a pipe is
61
+ // what lets a stdin-reading invocation block indefinitely.
62
+ stdio: ["ignore", "pipe", "pipe"],
63
+ });
46
64
  trackChildProcess(proc);
65
+ // Decoded through StringDecoder rather than per-chunk toString(): a
66
+ // multi-byte character split across a 64 KiB pipe boundary decodes to U+FFFD
67
+ // on both sides. -show_format output above ~64 KiB with non-ASCII tag text
68
+ // (an MKV with many chapters, or title/artist tags) came back silently
69
+ // mangled — JSON.parse still succeeds, so nothing surfaced it, and tag
70
+ // lookups like alpha_mode could miss.
71
+ const decoder = new StringDecoder("utf8");
47
72
  let stdout = "";
73
+ let stdoutTruncated = false;
48
74
  proc.stdout.on("data", (data) => {
49
- stdout += data.toString();
75
+ // stderr is capped by ManagedChildProcess; stdout had no bound at all, and
76
+ // analyzeKeyframeIntervals emits one line per frame — an all-intra ProRes
77
+ // proxy can produce an unbounded string.
78
+ if (stdoutTruncated)
79
+ return;
80
+ stdout += decoder.write(data);
81
+ // Checked AFTER appending: a single chunk can already exceed the bound,
82
+ // so a pre-append check only ever stops the second one.
83
+ if (stdout.length > FFPROBE_STDOUT_MAX_CHARS) {
84
+ stdoutTruncated = true;
85
+ stdout = "";
86
+ }
50
87
  });
51
88
  const managed = new ManagedChildProcess(proc, {
52
89
  signal,
@@ -54,6 +91,10 @@ async function runFfprobe(filePath, argsWithoutInput, signal) {
54
91
  stderrMaxBytes: FFPROBE_STDERR_MAX_BYTES,
55
92
  });
56
93
  const outcome = await managed.wait();
94
+ stdout += decoder.end();
95
+ if (stdoutTruncated) {
96
+ throw new Error(`[FFmpeg] ffprobe output exceeded ${FFPROBE_STDOUT_MAX_CHARS} characters; refusing to parse a truncated result.`);
97
+ }
57
98
  if (outcome.reason === "spawn_error") {
58
99
  if (outcome.error?.code === "ENOENT") {
59
100
  const configured = process.env[FFPROBE_PATH_ENV]?.trim();
@@ -81,10 +122,23 @@ const videoMetadataCache = new Map();
81
122
  const audioMetadataCache = new Map();
82
123
  // FFmpeg's built-in AAC encoder emits AAC-LC, which has 1024 samples per packet.
83
124
  const AAC_LC_SAMPLES_PER_PACKET = 1024;
84
- function crc32(buf) {
85
- let crc = 0xffffffff;
86
- for (let i = 0; i < buf.length; i++) {
87
- crc ^= buf[i] ?? 0;
125
+ // node:zlib's crc32 is native and takes a running seed, so the chunk type and
126
+ // the chunk data can be CRC'd in sequence without concatenating them into a
127
+ // throwaway buffer: ~210 ms -> ~1.3 ms on a 12 MiB PNG.
128
+ //
129
+ // It landed in Node 22.2.0, and this repo declares `"node": ">=22"` with a
130
+ // major-only runtime gate, so 22.0 and 22.1 are still supported. A NAMED
131
+ // import of a missing export throws at module evaluation — i.e. `ffprobe.ts`
132
+ // would fail to load at all on those, long before any PNG is parsed — so the
133
+ // namespace import plus this capability check is deliberate. Raising the
134
+ // floor to 22.2.0 instead would be a user-facing support change, which does
135
+ // not belong in a PNG bug fix.
136
+ const nativeCrc32 = typeof zlib.crc32 === "function" ? zlib.crc32 : undefined;
137
+ /** Bit-at-a-time fallback for Node 22.0/22.1. Correct, just slower. */
138
+ function crc32Fallback(data, seed) {
139
+ let crc = seed ^ 0xffffffff;
140
+ for (let i = 0; i < data.length; i++) {
141
+ crc ^= data[i] ?? 0;
88
142
  for (let bit = 0; bit < 8; bit++) {
89
143
  const mask = -(crc & 1);
90
144
  crc = (crc >>> 1) ^ (0xedb88320 & mask);
@@ -92,6 +146,12 @@ function crc32(buf) {
92
146
  }
93
147
  return (crc ^ 0xffffffff) >>> 0;
94
148
  }
149
+ function chunkCrc32(chunkType, chunkData) {
150
+ const typeBytes = Buffer.from(chunkType, "ascii");
151
+ if (nativeCrc32)
152
+ return nativeCrc32(chunkData, nativeCrc32(typeBytes));
153
+ return crc32Fallback(chunkData, crc32Fallback(typeBytes, 0));
154
+ }
95
155
  export function extractPngMetadataFromBuffer(buf) {
96
156
  if (buf.length < 8 ||
97
157
  buf[0] !== 137 ||
@@ -116,10 +176,14 @@ export function extractPngMetadataFromBuffer(buf) {
116
176
  return null;
117
177
  const chunkData = buf.subarray(pos + 8, pos + 8 + chunkLen);
118
178
  const chunkCrc = buf.readUInt32BE(pos + 8 + chunkLen);
119
- const chunkBytes = Buffer.concat([Buffer.from(chunkType, "ascii"), chunkData]);
120
- if (crc32(chunkBytes) !== chunkCrc)
179
+ if (chunkCrc32(chunkType, chunkData) !== chunkCrc)
121
180
  return null;
122
- if (chunkType === "IHDR" && chunkLen >= 8) {
181
+ // First IHDR only. PNG permits exactly one and it must come first, but a
182
+ // malformed file can carry more — without this anchor a trailing
183
+ // [IHDR 1x1] silently replaced the real 4K dimensions, and the producer
184
+ // laid out a one-pixel image. `>= 13` is the spec length; the old `>= 8`
185
+ // accepted a truncated header and read height out of the CRC bytes.
186
+ if (chunkType === "IHDR" && chunkLen >= 13 && width === 0 && height === 0) {
123
187
  width = buf.readUInt32BE(pos + 8);
124
188
  height = buf.readUInt32BE(pos + 12);
125
189
  }
@@ -146,12 +210,38 @@ export function extractPngMetadataFromBuffer(buf) {
146
210
  colorSpace: matrixCode === 9 ? "bt2020nc" : matrixCode === 0 ? "gbr" : `unknown-${matrixCode}`,
147
211
  };
148
212
  }
213
+ // Everything this parser extracts has been found, so stop walking.
214
+ //
215
+ // Not just an optimisation: cICP must precede IDAT (enforced above), so
216
+ // continuing only ever visits chunks we ignore — while making whole-file
217
+ // integrity a precondition for returning anything. A truncated or
218
+ // bad-CRC trailing chunk in an otherwise-good HDR PNG used to null the
219
+ // entire result, and the caller then re-throws the swallowed ffprobe
220
+ // error instead of using the fallback it just computed.
221
+ if (width > 0 && height > 0 && colorSpaceFromCicp !== null)
222
+ break;
149
223
  if (chunkType === "IEND")
150
224
  break;
151
225
  pos += 12 + chunkLen;
152
226
  }
153
227
  return width > 0 && height > 0 ? { width, height, colorSpace: colorSpaceFromCicp } : null;
154
228
  }
229
+ /**
230
+ * Does this pix_fmt carry an alpha channel?
231
+ *
232
+ * Exported so the test asserts the shipped predicate rather than a copy of
233
+ * the pattern. Anchored at the start, matching studio-server's
234
+ * mediaMetadata.ts: the previous inline pattern bound its `(^|[^a-z])` anchor
235
+ * to the first alternative only — `|` is looser than concatenation — so the
236
+ * guard was decorative for every other name. It also missed abgr, ya8/ya16
237
+ * and ayuv64, and its `gray[a-z0-9]*a` branch matched only gray8a/gray16a,
238
+ * names FFmpeg renamed to ya8/ya16 in 2013. A `ya8` grayscale-plus-alpha PNG
239
+ * reported hasAlpha:false, resolveFrameFormat picked jpg, and the overlay
240
+ * flattened to an opaque rectangle.
241
+ */
242
+ export function pixelFormatHasAlpha(pixelFormat) {
243
+ return /^(?:yuva|rgba|argb|bgra|abgr|gbrap|ya|ayuv)/i.test(pixelFormat);
244
+ }
155
245
  function extractStillImageMetadata(filePath) {
156
246
  if (extname(filePath).toLowerCase() !== ".png")
157
247
  return null;
@@ -178,20 +268,62 @@ function readTagCI(tags, name) {
178
268
  }
179
269
  return "";
180
270
  }
181
- function parseFrameRate(frameRateStr) {
271
+ /**
272
+ * Parse an ffprobe rational frame rate ("30000/1001") or plain number.
273
+ *
274
+ * Returns 0 for anything not a usable positive rate. Exported so tests
275
+ * exercise the shipped function directly instead of re-importing the module
276
+ * behind a spawn mock.
277
+ *
278
+ * Every guard here is load-bearing, because a bad value is NOT caught
279
+ * downstream: callers use `meta.fps || 30`, which only rescues 0 and NaN.
280
+ * Infinity and negatives are truthy and flow into buildEncoderArgs as
281
+ * `-r Infinity` / `-r -30`, which ffmpeg rejects mid-render, and into
282
+ * frameCount arithmetic that then goes negative or non-finite.
283
+ *
284
+ * - the QUOTIENT is checked, not just the operands: "1e308/1e-10" and
285
+ * "2/1e-320" have finite parts and an infinite result;
286
+ * - the sign is checked: "-30/1", "30/-1" and "-60" all parsed clean;
287
+ * - more than two parts is rejected: "30/1/2" used to fall through to the
288
+ * bare parseFloat below and return 30, as did "60fps", because parseFloat
289
+ * stops at trailing garbage;
290
+ * - sub-0.005 rates round to 0 at 2dp and would be replaced by the caller's
291
+ * 30fps default, re-encoding a 300-second 1/300-fps timelapse as a
292
+ * ~1/30-second clip. Kept as 0 is wrong too, so they are floored to the
293
+ * smallest representable 2dp rate instead.
294
+ */
295
+ export function parseFrameRate(frameRateStr) {
182
296
  if (!frameRateStr)
183
297
  return 0;
184
298
  const parts = frameRateStr.split("/");
185
- if (parts.length === 2) {
186
- const num = parseFloat(parts[0] ?? "");
187
- const den = parseFloat(parts[1] ?? "");
188
- if (Number.isFinite(num) && Number.isFinite(den) && den !== 0) {
189
- return Math.round((num / den) * 100) / 100;
190
- }
299
+ if (parts.length > 2)
191
300
  return 0;
192
- }
193
- const parsed = parseFloat(frameRateStr);
194
- return Number.isFinite(parsed) ? parsed : 0;
301
+ // Number(), never parseFloat — on BOTH the rational operands and the plain
302
+ // form. parseFloat stops at trailing garbage, so "60fps" parsed as 60 and,
303
+ // once the plain path was fixed but the operands were not, "60fps/1" and
304
+ // "30garbage/1garbage" still slipped through the rational branch.
305
+ const strict = (part) => part === undefined || part.trim() === "" ? NaN : Number(part.trim());
306
+ const raw = parts.length === 2
307
+ ? (() => {
308
+ const num = strict(parts[0]);
309
+ const den = strict(parts[1]);
310
+ if (!Number.isFinite(num) || !Number.isFinite(den) || den === 0)
311
+ return NaN;
312
+ return num / den;
313
+ })()
314
+ : strict(frameRateStr);
315
+ if (!Number.isFinite(raw) || raw <= 0)
316
+ return 0;
317
+ // Checked AFTER rounding as well as before. `raw * 100` overflows for a
318
+ // finite-but-huge rate ("1e307", "1e307/1"), so `rounded` became Infinity
319
+ // and sailed past the positivity check — reaching exactly the `-r Infinity`
320
+ // failure the finite guard above exists to prevent.
321
+ const rounded = Math.round(raw * 100) / 100;
322
+ if (!Number.isFinite(rounded))
323
+ return 0;
324
+ // A real but very slow rate must not collapse to 0 and inherit the
325
+ // caller's 30fps default.
326
+ return rounded > 0 ? rounded : 0.01;
195
327
  }
196
328
  /**
197
329
  * Probe a media file (video, image, or container) and return normalized metadata.
@@ -205,7 +337,18 @@ export async function extractMediaMetadata(filePath) {
205
337
  if (cached)
206
338
  return cached;
207
339
  const probePromise = (async () => {
208
- const stillImageMeta = extractStillImageMetadata(filePath);
340
+ // Lazily memoized. This is a pure fallback, but it used to run eagerly
341
+ // and synchronously BEFORE the first await: readFileSync plus a CRC walk
342
+ // per file, so a caller fanning out over composition.images with
343
+ // Promise.all executed every parse back-to-back before a single ffprobe
344
+ // was spawned (12 4K PNGs: 2649 ms vs 170 ms probe-only) — event-loop
345
+ // stall that also blocks Puppeteer IPC and progress reporting. On the
346
+ // happy path the result was then discarded.
347
+ let stillImageMetaMemo;
348
+ const stillImage = () => {
349
+ stillImageMetaMemo ??= extractStillImageMetadata(filePath);
350
+ return stillImageMetaMemo;
351
+ };
209
352
  let output = null;
210
353
  try {
211
354
  const stdout = await runFfprobe(filePath, [
@@ -217,11 +360,12 @@ export async function extractMediaMetadata(filePath) {
217
360
  output = parseProbeJson(stdout);
218
361
  }
219
362
  catch (error) {
220
- if (!stillImageMeta)
363
+ if (!stillImage())
221
364
  throw error;
222
365
  }
223
366
  const videoStream = output?.streams.find((s) => s.codec_type === "video");
224
367
  if (!videoStream) {
368
+ const stillImageMeta = stillImage();
225
369
  if (stillImageMeta) {
226
370
  return {
227
371
  durationSeconds: 0,
@@ -246,20 +390,37 @@ export async function extractMediaMetadata(filePath) {
246
390
  const colorTransfer = videoStream.color_transfer || "";
247
391
  const colorPrimaries = videoStream.color_primaries || "";
248
392
  const colorSpaceVal = videoStream.color_space || "";
249
- const ffprobeColorSpace = colorTransfer || colorPrimaries || colorSpaceVal
250
- ? { colorTransfer, colorPrimaries, colorSpace: colorSpaceVal }
251
- : null;
252
- const colorSpace = ffprobeColorSpace ?? stillImageMeta?.colorSpace ?? null;
393
+ // Merged per field, not whole-object. ffprobe emits color_space "gbr" for
394
+ // every PNG even a plain rgb24 with no colour metadata — so a
395
+ // whole-object `??` meant the cICP fallback was discarded whenever
396
+ // ffprobe ran at all, which is exactly the build it exists to cover: one
397
+ // that reports gbr but does not decode cICP. An HDR PQ PNG then resolved
398
+ // colorTransfer "" and graded SDR.
399
+ const cicp = colorTransfer && colorPrimaries && colorSpaceVal ? null : stillImage()?.colorSpace;
400
+ const merged = {
401
+ colorTransfer: colorTransfer || cicp?.colorTransfer || "",
402
+ colorPrimaries: colorPrimaries || cicp?.colorPrimaries || "",
403
+ colorSpace: colorSpaceVal || cicp?.colorSpace || "",
404
+ };
405
+ const colorSpace = merged.colorTransfer || merged.colorPrimaries || merged.colorSpace ? merged : null;
253
406
  const pixelFormat = videoStream.pix_fmt || "";
254
407
  const alphaMode = readTagCI(videoStream.tags, "alpha_mode");
255
- const hasAlpha = /(^|[^a-z])yuva|rgba|argb|bgra|gbrap|gray[a-z0-9]*a/i.test(pixelFormat) || alphaMode === "1";
408
+ const hasAlpha = pixelFormatHasAlpha(pixelFormat) || alphaMode === "1";
409
+ // Anchored at the start, matching studio-server's mediaMetadata.ts. The
410
+ // previous pattern bound its `(^|[^a-z])` anchor to the FIRST alternative
411
+ // only — `|` is looser than concatenation — so the guard was decorative
412
+ // for every other name. It also missed abgr, ya8/ya16 and ayuv64, and its
413
+ // `gray[a-z0-9]*a` branch matched only gray8a/gray16a, names FFmpeg
414
+ // renamed to ya8/ya16 in 2013. A `ya8` grayscale-plus-alpha PNG reported
415
+ // hasAlpha:false, resolveFrameFormat picked jpg, and the overlay
416
+ // flattened to an opaque rectangle.
256
417
  const containerDuration = output?.format.duration ? parseFloat(output.format.duration) : 0;
257
418
  const streamDuration = videoStream.duration ? parseFloat(videoStream.duration) : 0;
258
419
  return {
259
420
  durationSeconds: containerDuration,
260
421
  videoStreamDurationSeconds: streamDuration > 0 ? streamDuration : containerDuration,
261
- width: videoStream.width || stillImageMeta?.width || 0,
262
- height: videoStream.height || stillImageMeta?.height || 0,
422
+ width: videoStream.width || stillImage()?.width || 0,
423
+ height: videoStream.height || stillImage()?.height || 0,
263
424
  fps,
264
425
  videoCodec: videoStream.codec_name || "unknown",
265
426
  hasAudio: output?.streams.some((s) => s.codec_type === "audio") ?? false,
@@ -300,20 +461,57 @@ export async function extractAudioMetadata(filePath, options) {
300
461
  const streamDuration = audioStream.duration ? parseFloat(audioStream.duration) : undefined;
301
462
  const sampleRate = audioStream.sample_rate ? parseInt(audioStream.sample_rate) : 44100;
302
463
  const audioCodec = audioStream.codec_name || "unknown";
303
- if (audioCodec === "aac" && sampleRate > 0) {
304
- const packetStdout = await runFfprobe(filePath, [
305
- "-select_streams",
306
- "a:0",
307
- "-count_packets",
308
- "-show_entries",
309
- "stream=nb_read_packets",
310
- "-print_format",
311
- "json",
312
- ]);
313
- const packetOutput = parseProbeJson(packetStdout);
314
- const packetCount = Number(packetOutput.streams[0]?.nb_read_packets);
315
- if (Number.isFinite(packetCount) && packetCount > 0) {
316
- durationSeconds = (packetCount * AAC_LC_SAMPLES_PER_PACKET) / sampleRate;
464
+ // AAC-LC container durations are often slightly wrong, so the packet
465
+ // count gives a better one. Three constraints on that refinement:
466
+ //
467
+ // 1. It must never fail the call. durationSeconds is ALREADY correct from
468
+ // format.duration at this point. `-count_packets` demuxes the whole
469
+ // container against runFfprobe's fixed 30s deadline, so a long file on
470
+ // slow or network storage times out — and the caller in htmlCompiler
471
+ // catches that under "Source file has no audio stream", returns
472
+ // duration 0, drops the audio element and ships a silent render.
473
+ // 2. It must honour the caller's AbortSignal. Only the first probe
474
+ // received it, so aborting during this one was ignored and the call
475
+ // resolved with full metadata long after cancellation.
476
+ // 3. It must apply ONLY to profiles whose 1024-sample framing is
477
+ // established. ffprobe reports codec_name "aac" for every AAC
478
+ // variant — the framing lives in the profile:
479
+ //
480
+ // LC 1024 samples/frame <- the only one this maths fits
481
+ // HE-AAC v1/v2 2048 output samples against a doubled sample_rate
482
+ // LD 512
483
+ // ELD 480
484
+ // Main/SSR/LTP 1024 nominally, but not verified here
485
+ // xHE-AAC (USAC) variable
486
+ //
487
+ // An ALLOWLIST, not a HE-AAC denylist. The denylist form let LD/ELD
488
+ // through (halving to a third of the true duration), and let an
489
+ // unknown or missing profile through too — so an unrecognised HE
490
+ // spelling preserved the exact truncation this is meant to close.
491
+ // A skipped refinement is harmless: format.duration is already correct.
492
+ const isAacLc = /^\s*LC\s*$/i.test(audioStream.profile ?? "");
493
+ if (audioCodec === "aac" && isAacLc && sampleRate > 0) {
494
+ try {
495
+ const packetStdout = await runFfprobe(filePath, [
496
+ "-select_streams",
497
+ "a:0",
498
+ "-count_packets",
499
+ "-show_entries",
500
+ "stream=nb_read_packets",
501
+ "-print_format",
502
+ "json",
503
+ ], options?.signal);
504
+ const packetOutput = parseProbeJson(packetStdout);
505
+ const packetCount = Number(packetOutput.streams[0]?.nb_read_packets);
506
+ if (Number.isFinite(packetCount) && packetCount > 0) {
507
+ durationSeconds = (packetCount * AAC_LC_SAMPLES_PER_PACKET) / sampleRate;
508
+ }
509
+ }
510
+ catch (error) {
511
+ // An abort is the caller's intent, not a refinement failure — let it
512
+ // through. Anything else keeps the container duration we already have.
513
+ if (options?.signal?.aborted)
514
+ throw error;
317
515
  }
318
516
  }
319
517
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"ffprobe.js","sourceRoot":"","sources":["../../src/utils/ffprobe.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,wBAAwB,GAAG,CAAC,GAAG,IAAI,CAAC;AAC1C,MAAM,uBAAuB,GAAG,CAAC,GAAG,IAAI,CAAC;AAEzC,SAAS,kBAAkB,CAAC,MAAc,EAAE,QAAgB;IAC1D,IAAI,CAAC,QAAQ;QAAE,OAAO,MAAM,CAAC;IAE7B,IAAI,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,aAAa;QAAE,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAE5E,2EAA2E;IAC3E,0EAA0E;IAC1E,2EAA2E;IAC3E,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,SAAS;YAChE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACtE,QAAQ,GAAG,UAAU,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACrD,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAc,EAAE,QAAgB;IACjE,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,CAAC;IACrF,IAAI,QAAQ,CAAC,MAAM,IAAI,uBAAuB;QAAE,OAAO,QAAQ,CAAC;IAChE,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED,+FAA+F;AAC/F,KAAK,UAAU,UAAU,CACvB,QAAgB,EAChB,gBAA0B,EAC1B,MAAoB;IAEpB,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClF,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QAC9B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,IAAI,EAAE;QAC5C,MAAM;QACN,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM;QACjC,cAAc,EAAE,wBAAwB;KACzC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;QACrC,IAAK,OAAO,CAAC,KAA2C,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5E,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CACb,UAAU;gBACR,CAAC,CAAC,iCAAiC,gBAAgB,KAAK,UAAU,2BAA2B;gBAC7F,CAAC,CAAC,oDAAoD,CACzD,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACxD,MAAM,UAAU,GAAG,yBAAyB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CACb,oBAAoB,OAAO,CAAC,MAAM,cAAc,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,4CAA4C,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CACjF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkC,CAAC;AACrE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkC,CAAC;AACrE,iFAAiF;AACjF,MAAM,yBAAyB,GAAG,IAAI,CAAC;AA0EvC,SAAS,KAAK,CAAC,GAAW;IACxB,IAAI,GAAG,GAAG,UAAU,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACxB,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,GAAW;IACtD,IACE,GAAG,CAAC,MAAM,GAAG,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;QACd,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;QACb,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;QACb,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;QACb,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;QACb,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;QACb,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;QACb,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EACb,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,kBAAkB,GAA2B,IAAI,CAAC;IACtD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QAC1D,IAAI,GAAG,GAAG,EAAE,GAAG,QAAQ,GAAG,GAAG,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAClD,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QAC/E,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAEhD,IAAI,SAAS,KAAK,MAAM,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YAC1C,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QAED,IAAI,SAAS,KAAK,MAAM,IAAI,QAAQ,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxD,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAErC,kBAAkB,GAAG;gBACnB,cAAc,EACZ,aAAa,KAAK,CAAC;oBACjB,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,aAAa,KAAK,CAAC;wBACnB,CAAC,CAAC,OAAO;wBACT,CAAC,CAAC,WAAW,aAAa,EAAE;gBAClC,aAAa,EACX,YAAY,KAAK,EAAE;oBACjB,CAAC,CAAC,WAAW;oBACb,CAAC,CAAC,YAAY,KAAK,EAAE;wBACnB,CAAC,CAAC,cAAc;wBAChB,CAAC,CAAC,YAAY,KAAK,CAAC;4BAClB,CAAC,CAAC,OAAO;4BACT,CAAC,CAAC,WAAW,YAAY,EAAE;gBACnC,UAAU,EACR,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,UAAU,EAAE;aACrF,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,KAAK,MAAM;YAAE,MAAM;QAChC,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;IACvB,CAAC;IAED,OAAO,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5F,CAAC;AAED,SAAS,yBAAyB,CAAC,QAAgB;IACjD,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAE5D,IAAI,CAAC;QACH,OAAO,4BAA4B,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,IAAoD,EAAE,IAAY;IACnF,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;IAC9E,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,cAAc,CAAC,YAAgC;IACtD,IAAI,CAAC,YAAY;QAAE,OAAO,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAC7C,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,QAAgB;IACzD,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,YAAY,GAAG,CAAC,KAAK,IAA4B,EAAE;QACvD,MAAM,cAAc,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAE3D,IAAI,MAAM,GAAyB,IAAI,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE;gBACxC,eAAe;gBACf,MAAM;gBACN,cAAc;gBACd,eAAe;aAChB,CAAC,CAAC;YACH,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,cAAc;gBAAE,MAAM,KAAK,CAAC;QACnC,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,OAAO,CAAC,CAAC;QAC1E,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO;oBACL,eAAe,EAAE,CAAC;oBAClB,0BAA0B,EAAE,CAAC;oBAC7B,KAAK,EAAE,cAAc,CAAC,KAAK;oBAC3B,MAAM,EAAE,cAAc,CAAC,MAAM;oBAC7B,GAAG,EAAE,CAAC;oBACN,UAAU,EAAE,KAAK;oBACjB,QAAQ,EAAE,KAAK;oBACf,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,KAAK;oBACf,UAAU,EAAE,cAAc,CAAC,UAAU;iBACtC,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,MAAM,IAAI,IAAI,CAAC;QAC3B,uFAAuF;QACvF,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC;QAE/F,MAAM,aAAa,GAAG,WAAW,CAAC,cAAc,IAAI,EAAE,CAAC;QACvD,MAAM,cAAc,GAAG,WAAW,CAAC,eAAe,IAAI,EAAE,CAAC;QACzD,MAAM,aAAa,GAAG,WAAW,CAAC,WAAW,IAAI,EAAE,CAAC;QACpD,MAAM,iBAAiB,GACrB,aAAa,IAAI,cAAc,IAAI,aAAa;YAC9C,CAAC,CAAC,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE;YAC9D,CAAC,CAAC,IAAI,CAAC;QACX,MAAM,UAAU,GAAG,iBAAiB,IAAI,cAAc,EAAE,UAAU,IAAI,IAAI,CAAC;QAC3E,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC5D,MAAM,QAAQ,GACZ,qDAAqD,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,SAAS,KAAK,GAAG,CAAC;QAE/F,MAAM,iBAAiB,GAAG,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,MAAM,cAAc,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnF,OAAO;YACL,eAAe,EAAE,iBAAiB;YAClC,0BAA0B,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,iBAAiB;YACnF,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,cAAc,EAAE,KAAK,IAAI,CAAC;YACtD,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,cAAc,EAAE,MAAM,IAAI,CAAC;YACzD,GAAG;YACH,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,SAAS;YAC/C,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,OAAO,CAAC,IAAI,KAAK;YACxE,KAAK;YACL,QAAQ;YACR,UAAU;SACX,CAAC;IACJ,CAAC,CAAC,EAAE,CAAC;IAEL,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC/C,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE;QACtB,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,YAAY,EAAE,CAAC;YACtD,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAEzD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAgB,EAChB,OAAkC;IAElC,4EAA4E;IAC5E,8EAA8E;IAC9E,qDAAqD;IACrD,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9E,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,YAAY,GAAG,CAAC,KAAK,IAA4B,EAAE;QACvD,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,QAAQ,EACR,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,CAAC,EAC1D,OAAO,EAAE,MAAM,CAChB,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,OAAO,CAAC,CAAC;QACzE,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAEpE,IAAI,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,MAAM,cAAc,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACvF,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,IAAI,SAAS,CAAC;QACvD,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE;gBAC9C,iBAAiB;gBACjB,KAAK;gBACL,gBAAgB;gBAChB,eAAe;gBACf,wBAAwB;gBACxB,eAAe;gBACf,MAAM;aACP,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;YACrE,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBACpD,eAAe,GAAG,CAAC,WAAW,GAAG,yBAAyB,CAAC,GAAG,UAAU,CAAC;YAC3E,CAAC;QACH,CAAC;QAED,OAAO;YACL,eAAe;YACf,qBAAqB,EAAE,cAAc,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;YACxF,UAAU;YACV,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,CAAC;YACnC,UAAU;YACV,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;SAC/E,CAAC;IACJ,CAAC,CAAC,EAAE,CAAC;IAEL,IAAI,OAAO,EAAE,MAAM;QAAE,OAAO,YAAY,CAAC;IACzC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC/C,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE;QACtB,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,YAAY,EAAE,CAAC;YACtD,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,YAAY,CAAC;AACtB,CAAC;AASD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAqC,CAAC;AAEnE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,QAAgB;IAC7D,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,OAAO,GAAG,gCAAgC,CAAC,QAAQ,CAAC,CAAC;IAC3D,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;QACjB,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,OAAO,EAAE,CAAC;YAC5C,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,gCAAgC,CAAC,QAAgB;IAC9D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE;QACxC,iBAAiB;QACjB,KAAK;QACL,aAAa;QACb,OAAO;QACP,eAAe;QACf,gBAAgB;QAChB,KAAK;QACL,SAAS;KACV,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,MAAM;SACtB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SACtC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAErC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,kBAAkB,EAAE,CAAC;YACrB,kBAAkB,EAAE,CAAC;YACrB,aAAa,EAAE,UAAU,CAAC,MAAM;YAChC,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,aAAa,IAAI,QAAQ,CAAC;QAC1B,IAAI,QAAQ,GAAG,WAAW;YAAE,WAAW,GAAG,QAAQ,CAAC;IACrD,CAAC;IAED,MAAM,WAAW,GAAG,aAAa,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5D,OAAO;QACL,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG;QACvD,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG;QACvD,aAAa,EAAE,UAAU,CAAC,MAAM;QAChC,aAAa,EAAE,WAAW,GAAG,CAAC;KAC/B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ffprobe.js","sourceRoot":"","sources":["../../src/utils/ffprobe.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperframes/engine",
3
- "version": "0.7.87",
3
+ "version": "0.7.89",
4
4
  "description": "Seekable web page to video rendering engine (Puppeteer + FFmpeg)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -38,8 +38,8 @@
38
38
  "linkedom": "^0.18.12",
39
39
  "puppeteer": "^25.2.1",
40
40
  "puppeteer-core": "^25.2.1",
41
- "@hyperframes/core": "^0.7.87",
42
- "@hyperframes/parsers": "^0.7.87"
41
+ "@hyperframes/core": "^0.7.89",
42
+ "@hyperframes/parsers": "^0.7.89"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/node": "^25.0.10",