@hyperframes/engine 0.7.59 → 0.7.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/config.d.ts +50 -0
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +92 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/index.d.ts +4 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +4 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/services/audioMixer.d.ts.map +1 -1
  10. package/dist/services/audioMixer.js +19 -0
  11. package/dist/services/audioMixer.js.map +1 -1
  12. package/dist/services/browserManager.d.ts.map +1 -1
  13. package/dist/services/browserManager.js +12 -0
  14. package/dist/services/browserManager.js.map +1 -1
  15. package/dist/services/frameCapture.d.ts +25 -0
  16. package/dist/services/frameCapture.d.ts.map +1 -1
  17. package/dist/services/frameCapture.js +34 -0
  18. package/dist/services/frameCapture.js.map +1 -1
  19. package/dist/services/pageNavigationTimeoutErrorHint.d.ts +79 -0
  20. package/dist/services/pageNavigationTimeoutErrorHint.d.ts.map +1 -0
  21. package/dist/services/pageNavigationTimeoutErrorHint.js +112 -0
  22. package/dist/services/pageNavigationTimeoutErrorHint.js.map +1 -0
  23. package/dist/services/parallelCoordinator.d.ts +21 -0
  24. package/dist/services/parallelCoordinator.d.ts.map +1 -1
  25. package/dist/services/parallelCoordinator.js +40 -1
  26. package/dist/services/parallelCoordinator.js.map +1 -1
  27. package/dist/services/protocolTimeoutErrorHint.d.ts +28 -0
  28. package/dist/services/protocolTimeoutErrorHint.d.ts.map +1 -0
  29. package/dist/services/protocolTimeoutErrorHint.js +45 -0
  30. package/dist/services/protocolTimeoutErrorHint.js.map +1 -0
  31. package/dist/services/systemMemory.d.ts.map +1 -1
  32. package/dist/services/systemMemory.js +4 -1
  33. package/dist/services/systemMemory.js.map +1 -1
  34. package/dist/services/videoFrameExtractor.d.ts +4 -5
  35. package/dist/services/videoFrameExtractor.d.ts.map +1 -1
  36. package/dist/services/videoFrameExtractor.js +18 -41
  37. package/dist/services/videoFrameExtractor.js.map +1 -1
  38. package/dist/types.d.ts +28 -0
  39. package/dist/types.d.ts.map +1 -1
  40. package/dist/utils/gpuParityDiff.d.ts +142 -0
  41. package/dist/utils/gpuParityDiff.d.ts.map +1 -0
  42. package/dist/utils/gpuParityDiff.js +205 -0
  43. package/dist/utils/gpuParityDiff.js.map +1 -0
  44. package/package.json +2 -2
@@ -0,0 +1,205 @@
1
+ /**
2
+ * GPU Parity Diff — diagnostic helpers for detecting shape-dependent
3
+ * hardware-GPU capture bugs by comparing frames captured via the two
4
+ * capture paths (hardware-GPU vs software-GPU / screenshot bypass).
5
+ *
6
+ * Field pattern this exists to catch:
7
+ *
8
+ * • ts=1784049136 · hardware-GPU capture emitted intermittent black
9
+ * rectangles in one scene; `--no-browser-gpu --low-memory-mode
10
+ * --workers 1` (software-GPU screenshot mode) resolved it.
11
+ * • ts=1784032286 · animated `clip-path` on a large image → intermittent
12
+ * black rectangles from Chrome capture; deterministic precomposited
13
+ * swipe states removed the artifact.
14
+ * • Baseline · JetBrains Mono glyph-drop on parallel/BeginFrame text
15
+ * capture.
16
+ *
17
+ * Common shape: hardware-GPU writes solid-black regions where content
18
+ * should exist; software-GPU / screenshot fallback renders the same
19
+ * region correctly. A raw per-pixel diff is a coarse signal for this —
20
+ * on its own it fires on every animation frame's compositor jitter, so
21
+ * this module also isolates the *asymmetric* black-in-A-only pattern
22
+ * that is the diagnostic fingerprint of the bug.
23
+ *
24
+ * This module is the reduced-scope first pass: a pure helper + unit
25
+ * tests. Wiring a `hyperframes verify-gpu-parity` CLI surface, capture
26
+ * orchestration, and integration coverage is intentionally deferred to
27
+ * a follow-up so the diagnostic primitive can land and be exercised
28
+ * against real captured frames in isolation.
29
+ */
30
+ import { decodePng } from "./alphaBlit.js";
31
+ // ── Defaults ────────────────────────────────────────────────────────────────
32
+ const DEFAULT_PIXEL_CHANNEL_TOLERANCE = 8;
33
+ const DEFAULT_BLACK_SUM_THRESHOLD = 12;
34
+ const DEFAULT_CONTENT_SUM_THRESHOLD = 32;
35
+ const DEFAULT_BLACK_ONLY_FRACTION_THRESHOLD = 0.001;
36
+ // ── Core diff ───────────────────────────────────────────────────────────────
37
+ /**
38
+ * Compare two RGBA frames captured via different GPU paths.
39
+ *
40
+ * The two inputs must have identical dimensions; on mismatch this throws
41
+ * (with the mismatched sizes surfaced in the message) so callers cannot
42
+ * silently compare misaligned frames.
43
+ *
44
+ * Alpha channel is *not* considered for the black-only detection — Chrome's
45
+ * capture output is opaque along the code paths this diagnostic targets,
46
+ * and considering alpha would false-positive on legitimately transparent
47
+ * pixels. `pixelChannelTolerance` also compares only R/G/B for the same
48
+ * reason.
49
+ */
50
+ export function diffGpuParityFrames(a, b, options = {}) {
51
+ if (a.width !== b.width || a.height !== b.height) {
52
+ throw new Error(`diffGpuParityFrames: frame size mismatch — A is ${a.width}x${a.height}, ` +
53
+ `B is ${b.width}x${b.height}`);
54
+ }
55
+ const expectedLen = a.width * a.height * 4;
56
+ if (a.data.length !== expectedLen) {
57
+ throw new Error(`diffGpuParityFrames: frame A data length ${a.data.length} does not match ` +
58
+ `expected ${expectedLen} (${a.width}x${a.height} * 4)`);
59
+ }
60
+ if (b.data.length !== expectedLen) {
61
+ throw new Error(`diffGpuParityFrames: frame B data length ${b.data.length} does not match ` +
62
+ `expected ${expectedLen} (${b.width}x${b.height} * 4)`);
63
+ }
64
+ const tol = options.pixelChannelTolerance ?? DEFAULT_PIXEL_CHANNEL_TOLERANCE;
65
+ const blackSum = options.blackSumThreshold ?? DEFAULT_BLACK_SUM_THRESHOLD;
66
+ const contentSum = options.contentSumThreshold ?? DEFAULT_CONTENT_SUM_THRESHOLD;
67
+ if (contentSum <= blackSum) {
68
+ throw new Error(`diffGpuParityFrames: contentSumThreshold (${contentSum}) must be strictly greater ` +
69
+ `than blackSumThreshold (${blackSum}) — overlapping thresholds would double-classify ` +
70
+ `borderline pixels`);
71
+ }
72
+ const total = a.width * a.height;
73
+ const aData = a.data;
74
+ const bData = b.data;
75
+ let diffPixels = 0;
76
+ let blackOnlyAPixels = 0;
77
+ let blackOnlyBPixels = 0;
78
+ let aMinX = a.width;
79
+ let aMinY = a.height;
80
+ let aMaxX = -1;
81
+ let aMaxY = -1;
82
+ let bMinX = a.width;
83
+ let bMinY = a.height;
84
+ let bMaxX = -1;
85
+ let bMaxY = -1;
86
+ for (let y = 0; y < a.height; y++) {
87
+ for (let x = 0; x < a.width; x++) {
88
+ const i = (y * a.width + x) * 4;
89
+ const ar = aData[i] ?? 0;
90
+ const ag = aData[i + 1] ?? 0;
91
+ const ab = aData[i + 2] ?? 0;
92
+ const br = bData[i] ?? 0;
93
+ const bg = bData[i + 1] ?? 0;
94
+ const bb = bData[i + 2] ?? 0;
95
+ if (Math.abs(ar - br) > tol || Math.abs(ag - bg) > tol || Math.abs(ab - bb) > tol) {
96
+ diffPixels++;
97
+ }
98
+ const aSum = ar + ag + ab;
99
+ const bSum = br + bg + bb;
100
+ if (aSum <= blackSum && bSum >= contentSum) {
101
+ blackOnlyAPixels++;
102
+ if (x < aMinX)
103
+ aMinX = x;
104
+ if (y < aMinY)
105
+ aMinY = y;
106
+ if (x > aMaxX)
107
+ aMaxX = x;
108
+ if (y > aMaxY)
109
+ aMaxY = y;
110
+ }
111
+ else if (bSum <= blackSum && aSum >= contentSum) {
112
+ blackOnlyBPixels++;
113
+ if (x < bMinX)
114
+ bMinX = x;
115
+ if (y < bMinY)
116
+ bMinY = y;
117
+ if (x > bMaxX)
118
+ bMaxX = x;
119
+ if (y > bMaxY)
120
+ bMaxY = y;
121
+ }
122
+ }
123
+ }
124
+ return {
125
+ width: a.width,
126
+ height: a.height,
127
+ totalPixels: total,
128
+ diffPixels,
129
+ diffFraction: diffPixels / total,
130
+ blackOnlyInA: {
131
+ pixels: blackOnlyAPixels,
132
+ fraction: blackOnlyAPixels / total,
133
+ boundingBox: blackOnlyAPixels === 0
134
+ ? null
135
+ : { x: aMinX, y: aMinY, width: aMaxX - aMinX + 1, height: aMaxY - aMinY + 1 },
136
+ },
137
+ blackOnlyInB: {
138
+ pixels: blackOnlyBPixels,
139
+ fraction: blackOnlyBPixels / total,
140
+ boundingBox: blackOnlyBPixels === 0
141
+ ? null
142
+ : { x: bMinX, y: bMinY, width: bMaxX - bMinX + 1, height: bMaxY - bMinY + 1 },
143
+ },
144
+ };
145
+ }
146
+ /**
147
+ * PNG-buffer convenience wrapper around `diffGpuParityFrames`. Decodes
148
+ * both inputs via `decodePng` and delegates. Errors from the decoder are
149
+ * re-thrown with `cause` preserved so the failing side (A or B) is
150
+ * obvious in the stack.
151
+ */
152
+ export function diffGpuParityPngs(pngA, pngB, options = {}) {
153
+ let a;
154
+ let b;
155
+ try {
156
+ a = decodePng(pngA);
157
+ }
158
+ catch (err) {
159
+ throw new Error(`diffGpuParityPngs: failed to decode frame A`, { cause: err });
160
+ }
161
+ try {
162
+ b = decodePng(pngB);
163
+ }
164
+ catch (err) {
165
+ throw new Error(`diffGpuParityPngs: failed to decode frame B`, { cause: err });
166
+ }
167
+ return diffGpuParityFrames(a, b, options);
168
+ }
169
+ /**
170
+ * Verdict wrapper — returns `{ ok, reason }` suitable for a follow-up
171
+ * CLI or gate to emit. `ok === false` when either black-only fraction
172
+ * exceeds `blackOnlyFractionThreshold`. Raw diff numbers are always
173
+ * included on both branches so callers can log or gate on their own
174
+ * metrics without a second pass.
175
+ */
176
+ export function verifyGpuParity(a, b, options = {}) {
177
+ const diff = diffGpuParityFrames(a, b, options);
178
+ const threshold = options.blackOnlyFractionThreshold ?? DEFAULT_BLACK_ONLY_FRACTION_THRESHOLD;
179
+ if (diff.blackOnlyInA.fraction > threshold) {
180
+ const bb = diff.blackOnlyInA.boundingBox;
181
+ const region = bb ? ` (bbox ${bb.x},${bb.y} ${bb.width}x${bb.height})` : "";
182
+ return {
183
+ ok: false,
184
+ reason: `hardware-GPU frame has ${diff.blackOnlyInA.pixels} pixel(s) ` +
185
+ `(${(diff.blackOnlyInA.fraction * 100).toFixed(3)}%) that are solid-black ` +
186
+ `while software-GPU frame has content there${region} — likely shape-dependent ` +
187
+ `hardware-GPU capture bug`,
188
+ diff,
189
+ };
190
+ }
191
+ if (diff.blackOnlyInB.fraction > threshold) {
192
+ const bb = diff.blackOnlyInB.boundingBox;
193
+ const region = bb ? ` (bbox ${bb.x},${bb.y} ${bb.width}x${bb.height})` : "";
194
+ return {
195
+ ok: false,
196
+ reason: `software-GPU frame has ${diff.blackOnlyInB.pixels} pixel(s) ` +
197
+ `(${(diff.blackOnlyInB.fraction * 100).toFixed(3)}%) that are solid-black ` +
198
+ `while hardware-GPU frame has content there${region} — unexpected inverse ` +
199
+ `pattern, worth investigating`,
200
+ diff,
201
+ };
202
+ }
203
+ return { ok: true, reason: "", diff };
204
+ }
205
+ //# sourceMappingURL=gpuParityDiff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpuParityDiff.js","sourceRoot":"","sources":["../../src/utils/gpuParityDiff.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.59",
3
+ "version": "0.7.60",
4
4
  "description": "Seekable web page to video rendering engine (Puppeteer + FFmpeg)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -38,7 +38,7 @@
38
38
  "linkedom": "^0.18.12",
39
39
  "puppeteer": "^25.2.1",
40
40
  "puppeteer-core": "^25.2.1",
41
- "@hyperframes/core": "^0.7.59"
41
+ "@hyperframes/core": "^0.7.60"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/node": "^25.0.10",