@hyperframes/engine 0.6.70 → 0.6.72

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.
@@ -97,6 +97,8 @@ export declare function createCaptureSession(serverUrl: string, outputDir: strin
97
97
  * of which form Chrome emits.
98
98
  */
99
99
  export declare function isFontResourceError(type: string, text: string, locationUrl: string): boolean;
100
+ /** @internal exported for unit testing only */
101
+ export declare function pollImagesReady(page: Page, timeoutMs: number, intervalMs?: number): Promise<boolean>;
100
102
  export declare function initializeSession(session: CaptureSession): Promise<void>;
101
103
  export declare function captureFrame(session: CaptureSession, frameIndex: number, time: number): Promise<CaptureResult>;
102
104
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"frameCapture.d.ts","sourceRoot":"","sources":["../../src/services/frameCapture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frameCapture.d.ts","sourceRoot":"","sources":["../../src/services/frameCapture.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI,EAAsC,MAAM,gBAAgB,CAAC;AAM7F,OAAO,EAOL,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EACV,cAAc,EAEd,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;AAEvF,wGAAwG;AACxG,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5E,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC1C,aAAa,EAAE,OAAO,CAAC;IAIvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,WAAW,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,WAAW,EAAE,WAAW,CAAC;IAEzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,EAAE,MAAM,CAAC;IACjC,uBAAuB,EAAE,MAAM,CAAC;IAChC,qFAAqF;IACrF,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CAChC;AAOD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,IAAI,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,sEAAsE;IACtE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAID;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvF;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,IAAI,CAAC,CAoBf;AAsBD,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,eAAe,GAAE,iBAAiB,GAAG,IAAW,EAChD,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC7B,OAAO,CAAC,cAAc,CAAC,CAqIzB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAM5F;AAkOD,+CAA+C;AAC/C,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,UAAU,GAAE,MAAY,GACvB,OAAO,CAAC,OAAO,CAAC,CA8BlB;AAkGD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAgR9E;AA2KD,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,CAAC,CAcxB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,mBAAmB,CAAC,CAI9B;AAED;;;;;;GAMG;AACH,MAAM,MAAM,yBAAyB,GAAG,CACtC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,KACT,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,cAAc,EACvB,UAAU,GAAE,MAAU,EACtB,IAAI,GAAE,MAAU,EAChB,YAAY,GAAE,yBAA4C,GACzD,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAoChF;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,iBAAiB,GAAG,IAAI,GACxC,IAAI,CAeN;AAED,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAMrF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,kBAAkB,CASjF"}
@@ -1,3 +1,4 @@
1
+ // fallow-ignore-file complexity
1
2
  /**
2
3
  * Frame Capture Service
3
4
  *
@@ -73,6 +74,7 @@ async function waitForCloseWithTimeout(promise) {
73
74
  clearTimeout(timer);
74
75
  return !timedOut;
75
76
  }
77
+ // fallow-ignore-next-line unit-size
76
78
  export async function createCaptureSession(serverUrl, outputDir, options, onBeforeCapture = null, config) {
77
79
  if (!existsSync(outputDir))
78
80
  mkdirSync(outputDir, { recursive: true });
@@ -224,6 +226,91 @@ async function pollPageExpression(page, expression, timeoutMs, intervalMs = 100)
224
226
  }
225
227
  return Boolean(await page.evaluate(expression));
226
228
  }
229
+ const HF_READY_DIAGNOSTIC_EXPR = `(function() {
230
+ var hf = window.__hf;
231
+ var player = window.__player;
232
+ var renderReady = !!window.__renderReady;
233
+ var hasSeek = !!(hf && typeof hf.seek === "function");
234
+ var duration = hf ? hf.duration : -1;
235
+ var hasTimeline = !!(window.__timelines && Object.keys(window.__timelines).length > 0);
236
+ var root = document.querySelector("[data-composition-id]");
237
+ var declaredDuration = root ? Number(root.getAttribute("data-duration")) : -1;
238
+ return {
239
+ renderReady: renderReady,
240
+ hasHf: !!hf,
241
+ hasSeek: hasSeek,
242
+ hasPlayer: !!player,
243
+ duration: duration,
244
+ hasTimeline: hasTimeline,
245
+ declaredDuration: declaredDuration,
246
+ };
247
+ })()`;
248
+ // fallow-ignore-next-line complexity
249
+ function buildZeroDurationDiagnostic(diag) {
250
+ const hints = [];
251
+ if (!diag.hasPlayer) {
252
+ hints.push("window.__player was never set — the HyperFrames runtime did not initialize.");
253
+ }
254
+ if (!diag.hasTimeline) {
255
+ hints.push("No GSAP timeline registered (window.__timelines is empty). " +
256
+ "If using CSS/WAAPI/Lottie/Three.js animations, add data-duration to the root element.");
257
+ }
258
+ if (diag.declaredDuration <= 0 && !diag.hasTimeline) {
259
+ hints.push('Fix: add data-duration="<seconds>" to your root <div data-composition-id="..."> element.');
260
+ }
261
+ if (diag.hasSeek && diag.duration === 0 && diag.renderReady) {
262
+ hints.push("The runtime finished initializing but reported zero duration — this is permanent.");
263
+ }
264
+ return (`[FrameCapture] Composition has zero duration.\n` +
265
+ ` Runtime ready: ${diag.renderReady}, __player: ${diag.hasPlayer}, ` +
266
+ `__hf.seek: ${diag.hasSeek}, GSAP timeline: ${diag.hasTimeline}, ` +
267
+ `data-duration: ${diag.declaredDuration > 0 ? diag.declaredDuration + "s" : "not set"}\n` +
268
+ (hints.length > 0 ? hints.map((h) => ` → ${h}`).join("\n") : ""));
269
+ }
270
+ async function evaluateHfDiagnostic(page) {
271
+ return (await page.evaluate(HF_READY_DIAGNOSTIC_EXPR));
272
+ }
273
+ async function pollHfReady(page, timeoutMs, intervalMs = 100) {
274
+ const readyExpr = `!!(window.__hf && typeof window.__hf.seek === "function" && window.__hf.duration > 0)`;
275
+ const FAST_FAIL_AFTER_MS = 10_000;
276
+ // Throttle diagnostic CDP calls to ~1000ms — running evaluateHfDiagnostic on
277
+ // every 100ms poll tick after the 10s mark generates ~350 unnecessary CDP
278
+ // round-trips per failed render. One diagnostic per second is enough.
279
+ const DIAGNOSTIC_INTERVAL_MS = 1_000;
280
+ const deadline = Date.now() + timeoutMs;
281
+ let lastDiagnosticAt = 0;
282
+ while (Date.now() < deadline) {
283
+ const ready = Boolean(await page.evaluate(readyExpr));
284
+ if (ready)
285
+ return;
286
+ const elapsed = timeoutMs - (deadline - Date.now());
287
+ if (elapsed >= FAST_FAIL_AFTER_MS) {
288
+ const now = Date.now();
289
+ if (now - lastDiagnosticAt >= DIAGNOSTIC_INTERVAL_MS) {
290
+ lastDiagnosticAt = now;
291
+ const diag = await evaluateHfDiagnostic(page);
292
+ // Only fast-fail when BOTH signals are permanently zero:
293
+ // 1. No GSAP timeline registered (GSAP sets duration synchronously
294
+ // before __renderReady, so a missing timeline won't self-correct).
295
+ // 2. No data-duration declared on the root element.
296
+ // A composition with a GSAP timeline but no data-duration is still
297
+ // valid — GSAP drives duration via __timelines, not data-duration.
298
+ if (diag.renderReady && diag.hasSeek && !diag.hasTimeline && diag.declaredDuration <= 0) {
299
+ throw new Error(buildZeroDurationDiagnostic(diag));
300
+ }
301
+ }
302
+ }
303
+ await new Promise((resolve) => setTimeout(resolve, intervalMs));
304
+ }
305
+ const diag = await evaluateHfDiagnostic(page);
306
+ if (diag.hasSeek && diag.duration === 0) {
307
+ throw new Error(buildZeroDurationDiagnostic(diag));
308
+ }
309
+ throw new Error(`[FrameCapture] window.__hf not ready after ${timeoutMs}ms. ` +
310
+ `Page must expose window.__hf = { duration, seek }.\n` +
311
+ ` State: __hf=${diag.hasHf}, seek=${diag.hasSeek}, player=${diag.hasPlayer}, ` +
312
+ `renderReady=${diag.renderReady}, duration=${diag.duration}`);
313
+ }
227
314
  async function pollSubCompositionTimelines(page, timeoutMs, intervalMs = 150) {
228
315
  const expression = `(function() {
229
316
  var hosts = document.querySelectorAll("[data-composition-id]");
@@ -292,9 +379,87 @@ async function pollVideosReady(page, skipIds, timeoutMs, intervalMs = 100) {
292
379
  }
293
380
  return check();
294
381
  }
382
+ // Wait for every `<img>` with a non-`data:` src to have settled — either
383
+ // successfully loaded (`complete && naturalWidth > 0`) or failed with a
384
+ // broken-image marker (`complete && naturalWidth === 0`, the HTMLImageElement
385
+ // equivalent of HTMLMediaElement.error). htmlCompiler localises remote `<img>`
386
+ // URLs to the local file server before this point, so in practice this polls
387
+ // for the local fetch to land — but the guard is a defensive net so that any
388
+ // future composition path that leaves a remote URL in place won't capture
389
+ // frames before the pixels arrive. Mirrors `pollVideosReady` for parity with
390
+ // the video-side readiness contract (videos exit-early on `ve.error`; images
391
+ // exit-early on `complete && naturalWidth === 0`).
392
+ /** @internal exported for unit testing only */
393
+ export async function pollImagesReady(page, timeoutMs, intervalMs = 100) {
394
+ const check = async () => {
395
+ return Boolean(await page.evaluate(() => {
396
+ const imgs = Array.from(document.querySelectorAll("img"));
397
+ return (imgs.length === 0 ||
398
+ imgs.every((img) => {
399
+ const ie = img;
400
+ const src = ie.getAttribute("src") || "";
401
+ if (!src || src.startsWith("data:"))
402
+ return true;
403
+ // A `complete` image with zero naturalWidth has settled with an
404
+ // error (404 / decode failure / CORS rejection / blocked). Treat
405
+ // as done — waiting won't make it load — and let the render
406
+ // continue with the broken-image marker visible. Mirrors how
407
+ // pollVideosReady treats `ve.error`.
408
+ if (ie.complete && ie.naturalWidth === 0)
409
+ return true;
410
+ if (ie.complete && ie.naturalWidth > 0)
411
+ return true;
412
+ return false;
413
+ }));
414
+ }));
415
+ };
416
+ const deadline = Date.now() + timeoutMs;
417
+ while (Date.now() < deadline) {
418
+ if (await check())
419
+ return true;
420
+ await new Promise((resolve) => setTimeout(resolve, intervalMs));
421
+ }
422
+ return check();
423
+ }
424
+ // Force every successfully-loaded `<img>` to be GPU-uploaded before the first
425
+ // frame capture. `naturalWidth > 0` means the bitmap has been decoded into
426
+ // CPU memory, but compositor-side GPU upload can still happen lazily on first
427
+ // paint. Calling `img.decode()` returns a Promise that resolves once the image
428
+ // is ready for synchronous painting — eliminating the small first-frame race
429
+ // between "image is technically loaded" and "the rasterized texture is on the
430
+ // GPU and ready to composite".
431
+ //
432
+ // Note this is purely an init-time guard; it doesn't prevent Chrome from
433
+ // evicting decoded pixels mid-render. The producer-side `localizeRemoteImageSources`
434
+ // is what bounds the eviction risk (a re-fetch hits the local file server's
435
+ // disk-backed paging, not S3 over the network).
436
+ //
437
+ // Critical: `decode()` on an in-flight image waits for the fetch to resolve.
438
+ // If `pollImagesReady` timed out with some images still loading (`!complete`),
439
+ // calling `decode()` on them would block here until the network finally
440
+ // completes — or until puppeteer's evaluate timeout fires and throws an
441
+ // uncaught error that aborts the render. Skip in-flight and broken images;
442
+ // only force GPU upload for images that successfully loaded.
443
+ async function decodeAllImages(page) {
444
+ await page.evaluate(async () => {
445
+ const imgs = Array.from(document.querySelectorAll("img"));
446
+ await Promise.all(imgs.map((img) => {
447
+ const ie = img;
448
+ if (typeof ie.decode !== "function")
449
+ return Promise.resolve();
450
+ // Skip still-loading images (in-flight decode() would hang) and
451
+ // broken images (decode() rejects, but pre-filtering is clearer
452
+ // than relying on the .catch).
453
+ if (!ie.complete || ie.naturalWidth === 0)
454
+ return Promise.resolve();
455
+ return ie.decode().catch(() => undefined);
456
+ }));
457
+ });
458
+ }
295
459
  async function applyVideoMetadataHints(page, hints) {
296
460
  if (!hints || hints.length === 0)
297
461
  return;
462
+ // fallow-ignore-next-line complexity
298
463
  await page.evaluate((metadataHints) => {
299
464
  for (const hint of metadataHints) {
300
465
  if (!hint.id ||
@@ -331,9 +496,11 @@ async function waitForOptionalTailwindReady(page, timeoutMs) {
331
496
  throw new Error(`[FrameCapture] window.__tailwindReady not resolved after ${timeoutMs}ms. Tailwind browser runtime must finish before frame capture starts.`);
332
497
  }
333
498
  }
499
+ // fallow-ignore-next-line unit-size
334
500
  export async function initializeSession(session) {
335
501
  const { page, serverUrl } = session;
336
502
  // Forward browser console to host with [Browser] prefix
503
+ // fallow-ignore-next-line complexity
337
504
  page.on("console", (msg) => {
338
505
  const type = msg.type();
339
506
  const text = msg.text();
@@ -377,10 +544,7 @@ export async function initializeSession(session) {
377
544
  // Screenshot mode: standard navigation, rAF works normally
378
545
  await page.goto(url, { waitUntil: "domcontentloaded", timeout: 60000 });
379
546
  const pageReadyTimeout = session.config?.playerReadyTimeout ?? DEFAULT_CONFIG.playerReadyTimeout;
380
- const pageReady = await pollPageExpression(page, `!!(window.__hf && typeof window.__hf.seek === "function" && window.__hf.duration > 0)`, pageReadyTimeout);
381
- if (!pageReady) {
382
- throw new Error(`[FrameCapture] window.__hf not ready after ${pageReadyTimeout}ms. Page must expose window.__hf = { duration, seek }.`);
383
- }
547
+ await pollHfReady(page, pageReadyTimeout);
384
548
  await pollSubCompositionTimelines(page, pageReadyTimeout);
385
549
  await applyVideoMetadataHints(page, session.options.videoMetadataHints);
386
550
  // Wait for all video elements to have decoded their CURRENT frame, not
@@ -408,6 +572,24 @@ export async function initializeSession(session) {
408
572
  console.warn(`[FrameCapture] Some video elements did not decode within ${pageReadyTimeout}ms: ${failedVideos}. ` +
409
573
  `Continuing render — affected videos will appear as blank/black frames.`);
410
574
  }
575
+ const imagesReady = await pollImagesReady(page, pageReadyTimeout);
576
+ if (!imagesReady) {
577
+ const failedImages = await page.evaluate(() => {
578
+ return Array.from(document.querySelectorAll("img"))
579
+ .filter((img) => {
580
+ const ie = img;
581
+ const src = ie.getAttribute("src") || "";
582
+ if (!src || src.startsWith("data:"))
583
+ return false;
584
+ return !(ie.complete && ie.naturalWidth > 0);
585
+ })
586
+ .map((img) => img.src || img.getAttribute("src") || "(no src)")
587
+ .join(", ");
588
+ });
589
+ console.warn(`[FrameCapture] Some image elements did not load within ${pageReadyTimeout}ms: ${failedImages}. ` +
590
+ `Continuing render — affected images may appear blank/missing in early frames.`);
591
+ }
592
+ await decodeAllImages(page);
411
593
  await page.evaluate(`document.fonts?.ready`);
412
594
  await waitForOptionalTailwindReady(page, pageReadyTimeout);
413
595
  // For PNG captures, force the page background fully transparent so the
@@ -472,17 +654,12 @@ export async function initializeSession(session) {
472
654
  // Poll for window.__hf readiness using manual evaluate loop (waitForFunction
473
655
  // uses rAF polling internally, which won't fire in beginFrame mode).
474
656
  const pageReadyTimeout = session.config?.playerReadyTimeout ?? DEFAULT_CONFIG.playerReadyTimeout;
475
- const pollDeadline = Date.now() + pageReadyTimeout;
476
- while (Date.now() < pollDeadline) {
477
- const ready = await page.evaluate(`!!(window.__hf && typeof window.__hf.seek === "function" && window.__hf.duration > 0)`);
478
- if (ready)
479
- break;
480
- await new Promise((r) => setTimeout(r, 100));
657
+ try {
658
+ await pollHfReady(page, pageReadyTimeout);
481
659
  }
482
- const pageReady = await page.evaluate(`!!(window.__hf && typeof window.__hf.seek === "function" && window.__hf.duration > 0)`);
483
- if (!pageReady) {
660
+ catch (err) {
484
661
  warmupState.running = false;
485
- throw new Error(`[FrameCapture] window.__hf not ready after ${pageReadyTimeout}ms. Page must expose window.__hf = { duration, seek }.`);
662
+ throw err;
486
663
  }
487
664
  await pollSubCompositionTimelines(page, pageReadyTimeout);
488
665
  await applyVideoMetadataHints(page, session.options.videoMetadataHints);
@@ -500,6 +677,26 @@ export async function initializeSession(session) {
500
677
  console.warn(`[FrameCapture] Some video elements did not decode within ${pageReadyTimeout}ms: ${failedVideos}. ` +
501
678
  `Continuing render — affected videos will appear as blank/black frames.`);
502
679
  }
680
+ // Image readiness — parity with pollVideosReady. Defense against remote
681
+ // <img> URLs that bypass the htmlCompiler localize step.
682
+ const bfImagesReady = await pollImagesReady(page, pageReadyTimeout);
683
+ if (!bfImagesReady) {
684
+ const failedImages = await page.evaluate(() => {
685
+ return Array.from(document.querySelectorAll("img"))
686
+ .filter((img) => {
687
+ const ie = img;
688
+ const src = ie.getAttribute("src") || "";
689
+ if (!src || src.startsWith("data:"))
690
+ return false;
691
+ return !(ie.complete && ie.naturalWidth > 0);
692
+ })
693
+ .map((img) => img.src || img.getAttribute("src") || "(no src)")
694
+ .join(", ");
695
+ });
696
+ console.warn(`[FrameCapture] Some image elements did not load within ${pageReadyTimeout}ms: ${failedImages}. ` +
697
+ `Continuing render — affected images may appear blank/missing in early frames.`);
698
+ }
699
+ await decodeAllImages(page);
503
700
  // Font check (no rAF dependency — uses fonts.ready API directly)
504
701
  await page.evaluate(`document.fonts?.ready`);
505
702
  await waitForOptionalTailwindReady(page, pageReadyTimeout);
@@ -1 +1 @@
1
- {"version":3,"file":"frameCapture.js","sourceRoot":"","sources":["../../src/services/frameCapture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frameCapture.js","sourceRoot":"","sources":["../../src/services/frameCapture.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.6.70",
3
+ "version": "0.6.72",
4
4
  "description": "Seekable web page to video rendering engine (Puppeteer + FFmpeg)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -21,7 +21,7 @@
21
21
  "linkedom": "^0.18.12",
22
22
  "puppeteer": "^24.0.0",
23
23
  "puppeteer-core": "^24.39.1",
24
- "@hyperframes/core": "^0.6.70"
24
+ "@hyperframes/core": "^0.6.72"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^25.0.10",
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Tests for `pollImagesReady` — the image-side analog of `pollVideosReady`.
3
+ *
4
+ * Critical contract:
5
+ * - Successfully loaded image (complete=true, naturalWidth>0) → settled.
6
+ * - Broken / 404 image (complete=true, naturalWidth=0) → settled.
7
+ * This mirrors `pollVideosReady`'s `ve.error` early-exit. Without it,
8
+ * the htmlCompiler 404-fallback path (where a remote <img> URL failed
9
+ * to download and the original URL is preserved) would silently spin
10
+ * the full `pageReadyTimeout` budget waiting for an image that will
11
+ * never load — a 45 s regression vs the pre-PR behavior.
12
+ * - In-flight image (complete=false) → still waiting.
13
+ * - data: URI src → settled (no network fetch).
14
+ * - Empty src → settled (nothing to load).
15
+ */
16
+
17
+ import { describe, expect, it } from "vitest";
18
+ import type { Page } from "puppeteer-core";
19
+ import { pollImagesReady } from "./frameCapture.js";
20
+
21
+ interface ImageSpec {
22
+ src: string;
23
+ complete: boolean;
24
+ naturalWidth: number;
25
+ }
26
+
27
+ // Mock `page` whose `evaluate(fn)` invokes `fn` with a Node-side `document`
28
+ // mock that returns synthetic image objects matching the spec. Snapshots the
29
+ // image state at evaluate-time, so callers can mutate `imgs` between polls
30
+ // to simulate progressive load completion.
31
+ function makeMockPage(imgs: () => ImageSpec[]): Page {
32
+ return {
33
+ evaluate: async (fn: () => unknown) => {
34
+ const snapshot = imgs();
35
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
+ const prevDoc = (globalThis as any).document;
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ (globalThis as any).document = {
39
+ querySelectorAll: () =>
40
+ snapshot.map((spec) => ({
41
+ getAttribute: (attr: string) => (attr === "src" ? spec.src : null),
42
+ complete: spec.complete,
43
+ naturalWidth: spec.naturalWidth,
44
+ })),
45
+ };
46
+ try {
47
+ return await fn();
48
+ } finally {
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ (globalThis as any).document = prevDoc;
51
+ }
52
+ },
53
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
54
+ } as any as Page;
55
+ }
56
+
57
+ describe("pollImagesReady", () => {
58
+ it("resolves immediately when there are no <img> elements", async () => {
59
+ const page = makeMockPage(() => []);
60
+ const result = await pollImagesReady(page, 1000, 10);
61
+ expect(result).toBe(true);
62
+ });
63
+
64
+ it("resolves immediately when every image has loaded successfully", async () => {
65
+ const page = makeMockPage(() => [
66
+ { src: "/a.png", complete: true, naturalWidth: 100 },
67
+ { src: "/b.png", complete: true, naturalWidth: 200 },
68
+ ]);
69
+ const result = await pollImagesReady(page, 1000, 10);
70
+ expect(result).toBe(true);
71
+ });
72
+
73
+ it("treats a broken image (complete=true, naturalWidth=0) as settled — does NOT wait for timeout", async () => {
74
+ // This is the bug Magi flagged. Without the broken-image escape, this
75
+ // test would block the full 1000ms timeout and return false.
76
+ const page = makeMockPage(() => [
77
+ { src: "/a.png", complete: true, naturalWidth: 100 },
78
+ { src: "https://broken.example.com/404.png", complete: true, naturalWidth: 0 },
79
+ ]);
80
+ const t0 = Date.now();
81
+ const result = await pollImagesReady(page, 1000, 10);
82
+ const elapsed = Date.now() - t0;
83
+ expect(result).toBe(true);
84
+ // Must resolve fast — well under the 1000ms timeout.
85
+ expect(elapsed).toBeLessThan(500);
86
+ });
87
+
88
+ it("treats a data: URI src as settled regardless of complete/naturalWidth", async () => {
89
+ const page = makeMockPage(() => [
90
+ { src: "data:image/svg+xml,%3Csvg/%3E", complete: false, naturalWidth: 0 },
91
+ ]);
92
+ const result = await pollImagesReady(page, 1000, 10);
93
+ expect(result).toBe(true);
94
+ });
95
+
96
+ it("treats an empty src as settled (nothing to load)", async () => {
97
+ const page = makeMockPage(() => [{ src: "", complete: false, naturalWidth: 0 }]);
98
+ const result = await pollImagesReady(page, 1000, 10);
99
+ expect(result).toBe(true);
100
+ });
101
+
102
+ it("waits for an in-flight image and resolves once it completes", async () => {
103
+ // Image starts in-flight, then completes after ~50ms.
104
+ let started = false;
105
+ const startTime = { value: 0 };
106
+ const page = makeMockPage(() => {
107
+ if (!started) {
108
+ started = true;
109
+ startTime.value = Date.now();
110
+ }
111
+ const elapsed = Date.now() - startTime.value;
112
+ const loaded = elapsed >= 50;
113
+ return [{ src: "/slow.png", complete: loaded, naturalWidth: loaded ? 100 : 0 }];
114
+ });
115
+ const result = await pollImagesReady(page, 1000, 10);
116
+ expect(result).toBe(true);
117
+ });
118
+
119
+ it("times out and returns false when an in-flight image never resolves", async () => {
120
+ // Image stays in-flight (complete=false) for the full timeout.
121
+ const page = makeMockPage(() => [
122
+ { src: "/never-loads.png", complete: false, naturalWidth: 0 },
123
+ ]);
124
+ const result = await pollImagesReady(page, 100, 10);
125
+ expect(result).toBe(false);
126
+ });
127
+
128
+ it("mixed batch: loaded + broken + data: + in-flight → waits only on the in-flight image", async () => {
129
+ let resolved = false;
130
+ const start = Date.now();
131
+ const page = makeMockPage(() => {
132
+ const elapsed = Date.now() - start;
133
+ if (elapsed >= 30) resolved = true;
134
+ return [
135
+ { src: "/loaded.png", complete: true, naturalWidth: 800 },
136
+ { src: "https://broken.example.com/404.jpg", complete: true, naturalWidth: 0 },
137
+ { src: "data:image/svg+xml,abc", complete: false, naturalWidth: 0 },
138
+ {
139
+ src: "/in-flight.png",
140
+ complete: resolved,
141
+ naturalWidth: resolved ? 200 : 0,
142
+ },
143
+ ];
144
+ });
145
+ const t0 = Date.now();
146
+ const result = await pollImagesReady(page, 1000, 10);
147
+ const elapsed = Date.now() - t0;
148
+ expect(result).toBe(true);
149
+ // Should wait roughly for the in-flight image to settle (~30ms) — not the
150
+ // full timeout. Allow generous slack for CI scheduler jitter.
151
+ expect(elapsed).toBeLessThan(500);
152
+ });
153
+ });
@@ -1,3 +1,4 @@
1
+ // fallow-ignore-file complexity
1
2
  /**
2
3
  * Frame Capture Service
3
4
  *
@@ -172,6 +173,7 @@ async function waitForCloseWithTimeout(promise: Promise<unknown>): Promise<boole
172
173
  return !timedOut;
173
174
  }
174
175
 
176
+ // fallow-ignore-next-line unit-size
175
177
  export async function createCaptureSession(
176
178
  serverUrl: string,
177
179
  outputDir: string,
@@ -349,6 +351,124 @@ async function pollPageExpression(
349
351
  return Boolean(await page.evaluate(expression));
350
352
  }
351
353
 
354
+ const HF_READY_DIAGNOSTIC_EXPR = `(function() {
355
+ var hf = window.__hf;
356
+ var player = window.__player;
357
+ var renderReady = !!window.__renderReady;
358
+ var hasSeek = !!(hf && typeof hf.seek === "function");
359
+ var duration = hf ? hf.duration : -1;
360
+ var hasTimeline = !!(window.__timelines && Object.keys(window.__timelines).length > 0);
361
+ var root = document.querySelector("[data-composition-id]");
362
+ var declaredDuration = root ? Number(root.getAttribute("data-duration")) : -1;
363
+ return {
364
+ renderReady: renderReady,
365
+ hasHf: !!hf,
366
+ hasSeek: hasSeek,
367
+ hasPlayer: !!player,
368
+ duration: duration,
369
+ hasTimeline: hasTimeline,
370
+ declaredDuration: declaredDuration,
371
+ };
372
+ })()`;
373
+
374
+ // fallow-ignore-next-line complexity
375
+ function buildZeroDurationDiagnostic(diag: {
376
+ renderReady: boolean;
377
+ hasHf: boolean;
378
+ hasSeek: boolean;
379
+ hasPlayer: boolean;
380
+ duration: number;
381
+ hasTimeline: boolean;
382
+ declaredDuration: number;
383
+ }): string {
384
+ const hints: string[] = [];
385
+ if (!diag.hasPlayer) {
386
+ hints.push("window.__player was never set — the HyperFrames runtime did not initialize.");
387
+ }
388
+ if (!diag.hasTimeline) {
389
+ hints.push(
390
+ "No GSAP timeline registered (window.__timelines is empty). " +
391
+ "If using CSS/WAAPI/Lottie/Three.js animations, add data-duration to the root element.",
392
+ );
393
+ }
394
+ if (diag.declaredDuration <= 0 && !diag.hasTimeline) {
395
+ hints.push(
396
+ 'Fix: add data-duration="<seconds>" to your root <div data-composition-id="..."> element.',
397
+ );
398
+ }
399
+ if (diag.hasSeek && diag.duration === 0 && diag.renderReady) {
400
+ hints.push("The runtime finished initializing but reported zero duration — this is permanent.");
401
+ }
402
+ return (
403
+ `[FrameCapture] Composition has zero duration.\n` +
404
+ ` Runtime ready: ${diag.renderReady}, __player: ${diag.hasPlayer}, ` +
405
+ `__hf.seek: ${diag.hasSeek}, GSAP timeline: ${diag.hasTimeline}, ` +
406
+ `data-duration: ${diag.declaredDuration > 0 ? diag.declaredDuration + "s" : "not set"}\n` +
407
+ (hints.length > 0 ? hints.map((h) => ` → ${h}`).join("\n") : "")
408
+ );
409
+ }
410
+
411
+ interface HfDiagnostic {
412
+ renderReady: boolean;
413
+ hasHf: boolean;
414
+ hasSeek: boolean;
415
+ hasPlayer: boolean;
416
+ duration: number;
417
+ hasTimeline: boolean;
418
+ declaredDuration: number;
419
+ }
420
+
421
+ async function evaluateHfDiagnostic(page: Page): Promise<HfDiagnostic> {
422
+ return (await page.evaluate(HF_READY_DIAGNOSTIC_EXPR)) as HfDiagnostic;
423
+ }
424
+
425
+ async function pollHfReady(page: Page, timeoutMs: number, intervalMs: number = 100): Promise<void> {
426
+ const readyExpr = `!!(window.__hf && typeof window.__hf.seek === "function" && window.__hf.duration > 0)`;
427
+ const FAST_FAIL_AFTER_MS = 10_000;
428
+ // Throttle diagnostic CDP calls to ~1000ms — running evaluateHfDiagnostic on
429
+ // every 100ms poll tick after the 10s mark generates ~350 unnecessary CDP
430
+ // round-trips per failed render. One diagnostic per second is enough.
431
+ const DIAGNOSTIC_INTERVAL_MS = 1_000;
432
+ const deadline = Date.now() + timeoutMs;
433
+ let lastDiagnosticAt = 0;
434
+
435
+ while (Date.now() < deadline) {
436
+ const ready = Boolean(await page.evaluate(readyExpr));
437
+ if (ready) return;
438
+
439
+ const elapsed = timeoutMs - (deadline - Date.now());
440
+ if (elapsed >= FAST_FAIL_AFTER_MS) {
441
+ const now = Date.now();
442
+ if (now - lastDiagnosticAt >= DIAGNOSTIC_INTERVAL_MS) {
443
+ lastDiagnosticAt = now;
444
+ const diag = await evaluateHfDiagnostic(page);
445
+ // Only fast-fail when BOTH signals are permanently zero:
446
+ // 1. No GSAP timeline registered (GSAP sets duration synchronously
447
+ // before __renderReady, so a missing timeline won't self-correct).
448
+ // 2. No data-duration declared on the root element.
449
+ // A composition with a GSAP timeline but no data-duration is still
450
+ // valid — GSAP drives duration via __timelines, not data-duration.
451
+ if (diag.renderReady && diag.hasSeek && !diag.hasTimeline && diag.declaredDuration <= 0) {
452
+ throw new Error(buildZeroDurationDiagnostic(diag));
453
+ }
454
+ }
455
+ }
456
+
457
+ await new Promise((resolve) => setTimeout(resolve, intervalMs));
458
+ }
459
+
460
+ const diag = await evaluateHfDiagnostic(page);
461
+ if (diag.hasSeek && diag.duration === 0) {
462
+ throw new Error(buildZeroDurationDiagnostic(diag));
463
+ }
464
+ throw new Error(
465
+ `[FrameCapture] window.__hf not ready after ${timeoutMs}ms. ` +
466
+ `Page must expose window.__hf = { duration, seek }.\n` +
467
+ ` State: __hf=${diag.hasHf}, seek=${diag.hasSeek}, player=${diag.hasPlayer}, ` +
468
+ `renderReady=${diag.renderReady}, duration=${diag.duration}`,
469
+ );
470
+ }
471
+
352
472
  async function pollSubCompositionTimelines(
353
473
  page: Page,
354
474
  timeoutMs: number,
@@ -430,12 +550,96 @@ async function pollVideosReady(
430
550
  return check();
431
551
  }
432
552
 
553
+ // Wait for every `<img>` with a non-`data:` src to have settled — either
554
+ // successfully loaded (`complete && naturalWidth > 0`) or failed with a
555
+ // broken-image marker (`complete && naturalWidth === 0`, the HTMLImageElement
556
+ // equivalent of HTMLMediaElement.error). htmlCompiler localises remote `<img>`
557
+ // URLs to the local file server before this point, so in practice this polls
558
+ // for the local fetch to land — but the guard is a defensive net so that any
559
+ // future composition path that leaves a remote URL in place won't capture
560
+ // frames before the pixels arrive. Mirrors `pollVideosReady` for parity with
561
+ // the video-side readiness contract (videos exit-early on `ve.error`; images
562
+ // exit-early on `complete && naturalWidth === 0`).
563
+ /** @internal exported for unit testing only */
564
+ export async function pollImagesReady(
565
+ page: Page,
566
+ timeoutMs: number,
567
+ intervalMs: number = 100,
568
+ ): Promise<boolean> {
569
+ const check = async (): Promise<boolean> => {
570
+ return Boolean(
571
+ await page.evaluate(() => {
572
+ const imgs = Array.from(document.querySelectorAll("img"));
573
+ return (
574
+ imgs.length === 0 ||
575
+ imgs.every((img) => {
576
+ const ie = img as HTMLImageElement;
577
+ const src = ie.getAttribute("src") || "";
578
+ if (!src || src.startsWith("data:")) return true;
579
+ // A `complete` image with zero naturalWidth has settled with an
580
+ // error (404 / decode failure / CORS rejection / blocked). Treat
581
+ // as done — waiting won't make it load — and let the render
582
+ // continue with the broken-image marker visible. Mirrors how
583
+ // pollVideosReady treats `ve.error`.
584
+ if (ie.complete && ie.naturalWidth === 0) return true;
585
+ if (ie.complete && ie.naturalWidth > 0) return true;
586
+ return false;
587
+ })
588
+ );
589
+ }),
590
+ );
591
+ };
592
+ const deadline = Date.now() + timeoutMs;
593
+ while (Date.now() < deadline) {
594
+ if (await check()) return true;
595
+ await new Promise((resolve) => setTimeout(resolve, intervalMs));
596
+ }
597
+ return check();
598
+ }
599
+
600
+ // Force every successfully-loaded `<img>` to be GPU-uploaded before the first
601
+ // frame capture. `naturalWidth > 0` means the bitmap has been decoded into
602
+ // CPU memory, but compositor-side GPU upload can still happen lazily on first
603
+ // paint. Calling `img.decode()` returns a Promise that resolves once the image
604
+ // is ready for synchronous painting — eliminating the small first-frame race
605
+ // between "image is technically loaded" and "the rasterized texture is on the
606
+ // GPU and ready to composite".
607
+ //
608
+ // Note this is purely an init-time guard; it doesn't prevent Chrome from
609
+ // evicting decoded pixels mid-render. The producer-side `localizeRemoteImageSources`
610
+ // is what bounds the eviction risk (a re-fetch hits the local file server's
611
+ // disk-backed paging, not S3 over the network).
612
+ //
613
+ // Critical: `decode()` on an in-flight image waits for the fetch to resolve.
614
+ // If `pollImagesReady` timed out with some images still loading (`!complete`),
615
+ // calling `decode()` on them would block here until the network finally
616
+ // completes — or until puppeteer's evaluate timeout fires and throws an
617
+ // uncaught error that aborts the render. Skip in-flight and broken images;
618
+ // only force GPU upload for images that successfully loaded.
619
+ async function decodeAllImages(page: Page): Promise<void> {
620
+ await page.evaluate(async () => {
621
+ const imgs = Array.from(document.querySelectorAll("img"));
622
+ await Promise.all(
623
+ imgs.map((img) => {
624
+ const ie = img as HTMLImageElement;
625
+ if (typeof ie.decode !== "function") return Promise.resolve();
626
+ // Skip still-loading images (in-flight decode() would hang) and
627
+ // broken images (decode() rejects, but pre-filtering is clearer
628
+ // than relying on the .catch).
629
+ if (!ie.complete || ie.naturalWidth === 0) return Promise.resolve();
630
+ return ie.decode().catch(() => undefined);
631
+ }),
632
+ );
633
+ });
634
+ }
635
+
433
636
  async function applyVideoMetadataHints(
434
637
  page: Page,
435
638
  hints: readonly CaptureVideoMetadataHint[] | undefined,
436
639
  ): Promise<void> {
437
640
  if (!hints || hints.length === 0) return;
438
641
 
642
+ // fallow-ignore-next-line complexity
439
643
  await page.evaluate(
440
644
  (metadataHints: CaptureVideoMetadataHint[]) => {
441
645
  for (const hint of metadataHints) {
@@ -488,10 +692,12 @@ async function waitForOptionalTailwindReady(page: Page, timeoutMs: number): Prom
488
692
  }
489
693
  }
490
694
 
695
+ // fallow-ignore-next-line unit-size
491
696
  export async function initializeSession(session: CaptureSession): Promise<void> {
492
697
  const { page, serverUrl } = session;
493
698
 
494
699
  // Forward browser console to host with [Browser] prefix
700
+ // fallow-ignore-next-line complexity
495
701
  page.on("console", (msg: ConsoleMessage) => {
496
702
  const type = msg.type();
497
703
  const text = msg.text();
@@ -546,16 +752,7 @@ export async function initializeSession(session: CaptureSession): Promise<void>
546
752
 
547
753
  const pageReadyTimeout =
548
754
  session.config?.playerReadyTimeout ?? DEFAULT_CONFIG.playerReadyTimeout;
549
- const pageReady = await pollPageExpression(
550
- page,
551
- `!!(window.__hf && typeof window.__hf.seek === "function" && window.__hf.duration > 0)`,
552
- pageReadyTimeout,
553
- );
554
- if (!pageReady) {
555
- throw new Error(
556
- `[FrameCapture] window.__hf not ready after ${pageReadyTimeout}ms. Page must expose window.__hf = { duration, seek }.`,
557
- );
558
- }
755
+ await pollHfReady(page, pageReadyTimeout);
559
756
 
560
757
  await pollSubCompositionTimelines(page, pageReadyTimeout);
561
758
 
@@ -593,6 +790,26 @@ export async function initializeSession(session: CaptureSession): Promise<void>
593
790
  );
594
791
  }
595
792
 
793
+ const imagesReady = await pollImagesReady(page, pageReadyTimeout);
794
+ if (!imagesReady) {
795
+ const failedImages = await page.evaluate(() => {
796
+ return Array.from(document.querySelectorAll("img"))
797
+ .filter((img) => {
798
+ const ie = img as HTMLImageElement;
799
+ const src = ie.getAttribute("src") || "";
800
+ if (!src || src.startsWith("data:")) return false;
801
+ return !(ie.complete && ie.naturalWidth > 0);
802
+ })
803
+ .map((img) => (img as HTMLImageElement).src || img.getAttribute("src") || "(no src)")
804
+ .join(", ");
805
+ });
806
+ console.warn(
807
+ `[FrameCapture] Some image elements did not load within ${pageReadyTimeout}ms: ${failedImages}. ` +
808
+ `Continuing render — affected images may appear blank/missing in early frames.`,
809
+ );
810
+ }
811
+ await decodeAllImages(page);
812
+
596
813
  await page.evaluate(`document.fonts?.ready`);
597
814
  await waitForOptionalTailwindReady(page, pageReadyTimeout);
598
815
 
@@ -666,22 +883,11 @@ export async function initializeSession(session: CaptureSession): Promise<void>
666
883
  // Poll for window.__hf readiness using manual evaluate loop (waitForFunction
667
884
  // uses rAF polling internally, which won't fire in beginFrame mode).
668
885
  const pageReadyTimeout = session.config?.playerReadyTimeout ?? DEFAULT_CONFIG.playerReadyTimeout;
669
- const pollDeadline = Date.now() + pageReadyTimeout;
670
- while (Date.now() < pollDeadline) {
671
- const ready = await page.evaluate(
672
- `!!(window.__hf && typeof window.__hf.seek === "function" && window.__hf.duration > 0)`,
673
- );
674
- if (ready) break;
675
- await new Promise((r) => setTimeout(r, 100));
676
- }
677
- const pageReady = await page.evaluate(
678
- `!!(window.__hf && typeof window.__hf.seek === "function" && window.__hf.duration > 0)`,
679
- );
680
- if (!pageReady) {
886
+ try {
887
+ await pollHfReady(page, pageReadyTimeout);
888
+ } catch (err) {
681
889
  warmupState.running = false;
682
- throw new Error(
683
- `[FrameCapture] window.__hf not ready after ${pageReadyTimeout}ms. Page must expose window.__hf = { duration, seek }.`,
684
- );
890
+ throw err;
685
891
  }
686
892
 
687
893
  await pollSubCompositionTimelines(page, pageReadyTimeout);
@@ -709,6 +915,28 @@ export async function initializeSession(session: CaptureSession): Promise<void>
709
915
  );
710
916
  }
711
917
 
918
+ // Image readiness — parity with pollVideosReady. Defense against remote
919
+ // <img> URLs that bypass the htmlCompiler localize step.
920
+ const bfImagesReady = await pollImagesReady(page, pageReadyTimeout);
921
+ if (!bfImagesReady) {
922
+ const failedImages = await page.evaluate(() => {
923
+ return Array.from(document.querySelectorAll("img"))
924
+ .filter((img) => {
925
+ const ie = img as HTMLImageElement;
926
+ const src = ie.getAttribute("src") || "";
927
+ if (!src || src.startsWith("data:")) return false;
928
+ return !(ie.complete && ie.naturalWidth > 0);
929
+ })
930
+ .map((img) => (img as HTMLImageElement).src || img.getAttribute("src") || "(no src)")
931
+ .join(", ");
932
+ });
933
+ console.warn(
934
+ `[FrameCapture] Some image elements did not load within ${pageReadyTimeout}ms: ${failedImages}. ` +
935
+ `Continuing render — affected images may appear blank/missing in early frames.`,
936
+ );
937
+ }
938
+ await decodeAllImages(page);
939
+
712
940
  // Font check (no rAF dependency — uses fonts.ready API directly)
713
941
  await page.evaluate(`document.fonts?.ready`);
714
942
  await waitForOptionalTailwindReady(page, pageReadyTimeout);