cbrowser 18.70.0 → 18.72.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.d.ts +32 -0
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +46 -2
- package/dist/browser.js.map +1 -1
- package/dist/cli.js +1475 -24
- package/dist/cli.js.map +1 -1
- package/dist/cognitive/index.d.ts +10 -0
- package/dist/cognitive/index.d.ts.map +1 -1
- package/dist/cognitive/index.js +8 -0
- package/dist/cognitive/index.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +151 -3
- package/dist/daemon.js.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +67 -0
- package/dist/mcp-server.js.map +1 -1
- package/dist/mcp-tools/base/capture-tools.d.ts +189 -0
- package/dist/mcp-tools/base/capture-tools.d.ts.map +1 -0
- package/dist/mcp-tools/base/capture-tools.js +667 -0
- package/dist/mcp-tools/base/capture-tools.js.map +1 -0
- package/dist/mcp-tools/base/gif-tools.d.ts +19 -0
- package/dist/mcp-tools/base/gif-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/gif-tools.js +45 -27
- package/dist/mcp-tools/base/gif-tools.js.map +1 -1
- package/dist/mcp-tools/base/index.d.ts +2 -1
- package/dist/mcp-tools/base/index.d.ts.map +1 -1
- package/dist/mcp-tools/base/index.js +5 -1
- package/dist/mcp-tools/base/index.js.map +1 -1
- package/dist/mcp-tools/tool-categories.d.ts.map +1 -1
- package/dist/mcp-tools/tool-categories.js +11 -0
- package/dist/mcp-tools/tool-categories.js.map +1 -1
- package/dist/recording/auto-capture.d.ts +72 -0
- package/dist/recording/auto-capture.d.ts.map +1 -0
- package/dist/recording/auto-capture.js +155 -0
- package/dist/recording/auto-capture.js.map +1 -0
- package/dist/recording/contact-sheet.d.ts +65 -0
- package/dist/recording/contact-sheet.d.ts.map +1 -0
- package/dist/recording/contact-sheet.js +204 -0
- package/dist/recording/contact-sheet.js.map +1 -0
- package/dist/recording/encoders.d.ts +101 -0
- package/dist/recording/encoders.d.ts.map +1 -0
- package/dist/recording/encoders.js +304 -0
- package/dist/recording/encoders.js.map +1 -0
- package/dist/recording/engine.d.ts +263 -0
- package/dist/recording/engine.d.ts.map +1 -0
- package/dist/recording/engine.js +896 -0
- package/dist/recording/engine.js.map +1 -0
- package/dist/recording/ssim.d.ts +78 -0
- package/dist/recording/ssim.d.ts.map +1 -0
- package/dist/recording/ssim.js +209 -0
- package/dist/recording/ssim.js.map +1 -0
- package/dist/recording/timing.d.ts +124 -0
- package/dist/recording/timing.d.ts.map +1 -0
- package/dist/recording/timing.js +251 -0
- package/dist/recording/timing.js.map +1 -0
- package/dist/recording/types.d.ts +316 -0
- package/dist/recording/types.d.ts.map +1 -0
- package/dist/recording/types.js +337 -0
- package/dist/recording/types.js.map +1 -0
- package/dist/testing/nl-test-suite.d.ts +10 -0
- package/dist/testing/nl-test-suite.d.ts.map +1 -1
- package/dist/testing/nl-test-suite.js +13 -1
- package/dist/testing/nl-test-suite.js.map +1 -1
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/recording/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CBrowser - Cognitive Browser Automation
|
|
3
|
+
* Copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com
|
|
4
|
+
* Learn more at https://cbrowser.ai - MIT License
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Reduce an image to a `size`x`size` grayscale signature normalised to 0..1.
|
|
8
|
+
*
|
|
9
|
+
* `fit: "fill"` is deliberate: aspect ratio is discarded so that two frames of
|
|
10
|
+
* the same recording always produce comparable signatures even if a region
|
|
11
|
+
* crop shifted by a pixel.
|
|
12
|
+
*
|
|
13
|
+
* @param input Image buffer or path to an image file.
|
|
14
|
+
* @param size Signature edge length; the result has `size * size` values.
|
|
15
|
+
*/
|
|
16
|
+
export declare function frameSignature(input: Buffer | string, size?: number): Promise<Float32Array>;
|
|
17
|
+
/**
|
|
18
|
+
* Global SSIM between two signatures.
|
|
19
|
+
*
|
|
20
|
+
* Returns exactly 1 for identical inputs and is exactly symmetric: the means,
|
|
21
|
+
* variances and covariance are accumulated in a single loop with commutative
|
|
22
|
+
* operations, so `ssim(a, b)` and `ssim(b, a)` agree bit-for-bit. The result is
|
|
23
|
+
* clamped to [-1, 1] to absorb floating-point overshoot.
|
|
24
|
+
*
|
|
25
|
+
* @throws if the signatures differ in length or are empty.
|
|
26
|
+
*/
|
|
27
|
+
export declare function ssim(a: Float32Array, b: Float32Array): number;
|
|
28
|
+
/** Edge length of the window grid used by {@link changeScore}. */
|
|
29
|
+
export declare const CHANGE_WINDOW = 8;
|
|
30
|
+
/**
|
|
31
|
+
* Change score: the MINIMUM SSIM across a grid of windows.
|
|
32
|
+
*
|
|
33
|
+
* {@link ssim} is global — one statistic over the whole frame — which makes it
|
|
34
|
+
* a quality-assessment metric. Asked a detection question it fails badly: a
|
|
35
|
+
* small localized change is diluted by the unchanged remainder of the frame.
|
|
36
|
+
* Measured on a 1280x800 page differing only by a 12px counter, global SSIM
|
|
37
|
+
* reads 0.999989 at a 128px signature and still 0.999254 at 1024px, so NO
|
|
38
|
+
* threshold below 1.0 can see it. Raising resolution does not help, and neither
|
|
39
|
+
* does averaging the windows (mean-over-windows scored 0.999956 — dilution
|
|
40
|
+
* again). Taking the minimum does: the same pair reads 0.901 at 512px.
|
|
41
|
+
*
|
|
42
|
+
* So: mean-over-windows for "how similar are these images", minimum-over-windows
|
|
43
|
+
* for "did any part of this image change". This is the latter.
|
|
44
|
+
*
|
|
45
|
+
* Identical inputs return exactly 1 and the score is symmetric, for the same
|
|
46
|
+
* reasons as {@link ssim} — every window is computed by the same loop shape.
|
|
47
|
+
*
|
|
48
|
+
* RESOLUTION LIMIT (measured, not incidental). The score is far more stable
|
|
49
|
+
* across viewport size than global SSIM, but only for changes large enough to
|
|
50
|
+
* survive the fixed `size`x`size` downsample. A change occupying less than
|
|
51
|
+
* roughly one window (`window/size` of a frame edge, ~6% at the defaults) can be
|
|
52
|
+
* averaged away before the windows see it — and how much of the frame it
|
|
53
|
+
* occupies is itself viewport-relative, so the downsample reintroduces exactly
|
|
54
|
+
* the viewport-dependence min-over-windows removes at the SSIM step, just moved
|
|
55
|
+
* to the resampling step. Measured on a 7-character status-word flip: at a 128px
|
|
56
|
+
* signature its tier membership varied across 600px-2560px viewports (key /
|
|
57
|
+
* change / none); at 512px it was stable (always key). A form fill, being a
|
|
58
|
+
* larger region, is stable at 128px. Pick `size` for the smallest change that
|
|
59
|
+
* must be reliably classified, against the per-frame CPU cost (512px is ~5x
|
|
60
|
+
* 128px). The default 128 is right for real interactions; sub-resolution changes
|
|
61
|
+
* on very large viewports need a larger signature.
|
|
62
|
+
*
|
|
63
|
+
* @param size Edge length of the square signature. Inferred from `a.length`
|
|
64
|
+
* when omitted.
|
|
65
|
+
* @throws on length mismatch, empty input, or a non-square signature.
|
|
66
|
+
*/
|
|
67
|
+
export declare function changeScore(a: Float32Array, b: Float32Array, options?: {
|
|
68
|
+
size?: number;
|
|
69
|
+
window?: number;
|
|
70
|
+
}): number;
|
|
71
|
+
/**
|
|
72
|
+
* Indices whose SSIM against the previous frame fell below `threshold`.
|
|
73
|
+
*
|
|
74
|
+
* `null` entries (frame 0, or frames where SSIM was not computed) are skipped
|
|
75
|
+
* rather than treated as maximal change.
|
|
76
|
+
*/
|
|
77
|
+
export declare function detectChangePoints(scores: (number | null)[], threshold: number): number[];
|
|
78
|
+
//# sourceMappingURL=ssim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssim.d.ts","sourceRoot":"","sources":["../../src/recording/ssim.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,SAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAyB9F;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CAyC7D;AAGD,kEAAkE;AAClE,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,WAAW,CACzB,CAAC,EAAE,YAAY,EACf,CAAC,EAAE,YAAY,EACf,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/C,MAAM,CAgER;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAQzF"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CBrowser - Cognitive Browser Automation
|
|
3
|
+
* Copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com
|
|
4
|
+
* Learn more at https://cbrowser.ai - MIT License
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Grayscale downsampled SSIM comparator.
|
|
8
|
+
*
|
|
9
|
+
* Frames are reduced to a fixed-size grayscale signature before comparison, so
|
|
10
|
+
* the cost of comparing two frames is independent of the capture resolution and
|
|
11
|
+
* the score is insensitive to sub-pixel noise. This is *global* SSIM (one
|
|
12
|
+
* window covering the whole signature), which is what the recorder needs: a
|
|
13
|
+
* single scalar per frame pair to drive change-point and anomaly detection.
|
|
14
|
+
*/
|
|
15
|
+
import sharp from "sharp";
|
|
16
|
+
/** SSIM stabilisation constants for data normalised to 0..1 (L = 1). */
|
|
17
|
+
const C1 = 0.01 * 0.01;
|
|
18
|
+
const C2 = 0.03 * 0.03;
|
|
19
|
+
/**
|
|
20
|
+
* Reduce an image to a `size`x`size` grayscale signature normalised to 0..1.
|
|
21
|
+
*
|
|
22
|
+
* `fit: "fill"` is deliberate: aspect ratio is discarded so that two frames of
|
|
23
|
+
* the same recording always produce comparable signatures even if a region
|
|
24
|
+
* crop shifted by a pixel.
|
|
25
|
+
*
|
|
26
|
+
* @param input Image buffer or path to an image file.
|
|
27
|
+
* @param size Signature edge length; the result has `size * size` values.
|
|
28
|
+
*/
|
|
29
|
+
export async function frameSignature(input, size = 128) {
|
|
30
|
+
if (!Number.isInteger(size) || size <= 0) {
|
|
31
|
+
throw new Error(`frameSignature: size must be a positive integer, got ${size}`);
|
|
32
|
+
}
|
|
33
|
+
const { data, info } = await sharp(input)
|
|
34
|
+
.resize(size, size, { fit: "fill" })
|
|
35
|
+
.removeAlpha()
|
|
36
|
+
.greyscale()
|
|
37
|
+
.raw()
|
|
38
|
+
.toBuffer({ resolveWithObject: true });
|
|
39
|
+
const expected = size * size;
|
|
40
|
+
const channels = info.channels;
|
|
41
|
+
if (data.length < expected * channels) {
|
|
42
|
+
throw new Error(`frameSignature: expected at least ${expected * channels} bytes, got ${data.length}`);
|
|
43
|
+
}
|
|
44
|
+
const out = new Float32Array(expected);
|
|
45
|
+
for (let i = 0; i < expected; i++) {
|
|
46
|
+
out[i] = data[i * channels] / 255;
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Global SSIM between two signatures.
|
|
52
|
+
*
|
|
53
|
+
* Returns exactly 1 for identical inputs and is exactly symmetric: the means,
|
|
54
|
+
* variances and covariance are accumulated in a single loop with commutative
|
|
55
|
+
* operations, so `ssim(a, b)` and `ssim(b, a)` agree bit-for-bit. The result is
|
|
56
|
+
* clamped to [-1, 1] to absorb floating-point overshoot.
|
|
57
|
+
*
|
|
58
|
+
* @throws if the signatures differ in length or are empty.
|
|
59
|
+
*/
|
|
60
|
+
export function ssim(a, b) {
|
|
61
|
+
if (a.length !== b.length) {
|
|
62
|
+
throw new Error(`ssim: signature length mismatch (${a.length} vs ${b.length})`);
|
|
63
|
+
}
|
|
64
|
+
if (a.length === 0) {
|
|
65
|
+
throw new Error("ssim: signatures must not be empty");
|
|
66
|
+
}
|
|
67
|
+
const n = a.length;
|
|
68
|
+
let sumA = 0;
|
|
69
|
+
let sumB = 0;
|
|
70
|
+
for (let i = 0; i < n; i++) {
|
|
71
|
+
sumA += a[i];
|
|
72
|
+
sumB += b[i];
|
|
73
|
+
}
|
|
74
|
+
const muA = sumA / n;
|
|
75
|
+
const muB = sumB / n;
|
|
76
|
+
let sqA = 0;
|
|
77
|
+
let sqB = 0;
|
|
78
|
+
let sqAB = 0;
|
|
79
|
+
for (let i = 0; i < n; i++) {
|
|
80
|
+
const da = a[i] - muA;
|
|
81
|
+
const db = b[i] - muB;
|
|
82
|
+
sqA += da * da;
|
|
83
|
+
sqB += db * db;
|
|
84
|
+
sqAB += da * db;
|
|
85
|
+
}
|
|
86
|
+
// Unbiased estimator; degenerate for n === 1, where all spread terms are 0.
|
|
87
|
+
const denom = n > 1 ? n - 1 : 1;
|
|
88
|
+
const varA = n > 1 ? sqA / denom : 0;
|
|
89
|
+
const varB = n > 1 ? sqB / denom : 0;
|
|
90
|
+
const cov = n > 1 ? sqAB / denom : 0;
|
|
91
|
+
const numerator = (2 * muA * muB + C1) * (2 * cov + C2);
|
|
92
|
+
const denominator = (muA * muA + muB * muB + C1) * (varA + varB + C2);
|
|
93
|
+
const score = numerator / denominator;
|
|
94
|
+
return Math.min(1, Math.max(-1, score));
|
|
95
|
+
}
|
|
96
|
+
/** Edge length of the window grid used by {@link changeScore}. */
|
|
97
|
+
export const CHANGE_WINDOW = 8;
|
|
98
|
+
/**
|
|
99
|
+
* Change score: the MINIMUM SSIM across a grid of windows.
|
|
100
|
+
*
|
|
101
|
+
* {@link ssim} is global — one statistic over the whole frame — which makes it
|
|
102
|
+
* a quality-assessment metric. Asked a detection question it fails badly: a
|
|
103
|
+
* small localized change is diluted by the unchanged remainder of the frame.
|
|
104
|
+
* Measured on a 1280x800 page differing only by a 12px counter, global SSIM
|
|
105
|
+
* reads 0.999989 at a 128px signature and still 0.999254 at 1024px, so NO
|
|
106
|
+
* threshold below 1.0 can see it. Raising resolution does not help, and neither
|
|
107
|
+
* does averaging the windows (mean-over-windows scored 0.999956 — dilution
|
|
108
|
+
* again). Taking the minimum does: the same pair reads 0.901 at 512px.
|
|
109
|
+
*
|
|
110
|
+
* So: mean-over-windows for "how similar are these images", minimum-over-windows
|
|
111
|
+
* for "did any part of this image change". This is the latter.
|
|
112
|
+
*
|
|
113
|
+
* Identical inputs return exactly 1 and the score is symmetric, for the same
|
|
114
|
+
* reasons as {@link ssim} — every window is computed by the same loop shape.
|
|
115
|
+
*
|
|
116
|
+
* RESOLUTION LIMIT (measured, not incidental). The score is far more stable
|
|
117
|
+
* across viewport size than global SSIM, but only for changes large enough to
|
|
118
|
+
* survive the fixed `size`x`size` downsample. A change occupying less than
|
|
119
|
+
* roughly one window (`window/size` of a frame edge, ~6% at the defaults) can be
|
|
120
|
+
* averaged away before the windows see it — and how much of the frame it
|
|
121
|
+
* occupies is itself viewport-relative, so the downsample reintroduces exactly
|
|
122
|
+
* the viewport-dependence min-over-windows removes at the SSIM step, just moved
|
|
123
|
+
* to the resampling step. Measured on a 7-character status-word flip: at a 128px
|
|
124
|
+
* signature its tier membership varied across 600px-2560px viewports (key /
|
|
125
|
+
* change / none); at 512px it was stable (always key). A form fill, being a
|
|
126
|
+
* larger region, is stable at 128px. Pick `size` for the smallest change that
|
|
127
|
+
* must be reliably classified, against the per-frame CPU cost (512px is ~5x
|
|
128
|
+
* 128px). The default 128 is right for real interactions; sub-resolution changes
|
|
129
|
+
* on very large viewports need a larger signature.
|
|
130
|
+
*
|
|
131
|
+
* @param size Edge length of the square signature. Inferred from `a.length`
|
|
132
|
+
* when omitted.
|
|
133
|
+
* @throws on length mismatch, empty input, or a non-square signature.
|
|
134
|
+
*/
|
|
135
|
+
export function changeScore(a, b, options = {}) {
|
|
136
|
+
if (a.length !== b.length) {
|
|
137
|
+
throw new Error(`changeScore: signature length mismatch (${a.length} vs ${b.length})`);
|
|
138
|
+
}
|
|
139
|
+
if (a.length === 0) {
|
|
140
|
+
throw new Error("changeScore: signatures must not be empty");
|
|
141
|
+
}
|
|
142
|
+
const size = options.size ?? Math.round(Math.sqrt(a.length));
|
|
143
|
+
if (size * size !== a.length) {
|
|
144
|
+
throw new Error(`changeScore: signature of ${a.length} values is not square (${size}x${size}); ` +
|
|
145
|
+
"pass an explicit size");
|
|
146
|
+
}
|
|
147
|
+
const win = options.window ?? CHANGE_WINDOW;
|
|
148
|
+
// A signature smaller than one window has nothing to localise; the global
|
|
149
|
+
// score is the honest answer rather than a fabricated window.
|
|
150
|
+
if (win <= 1 || size < win)
|
|
151
|
+
return ssim(a, b);
|
|
152
|
+
let worst = Number.POSITIVE_INFINITY;
|
|
153
|
+
const n = win * win;
|
|
154
|
+
for (let originY = 0; originY + win <= size; originY += win) {
|
|
155
|
+
for (let originX = 0; originX + win <= size; originX += win) {
|
|
156
|
+
let sumA = 0;
|
|
157
|
+
let sumB = 0;
|
|
158
|
+
for (let y = 0; y < win; y++) {
|
|
159
|
+
const row = (originY + y) * size + originX;
|
|
160
|
+
for (let x = 0; x < win; x++) {
|
|
161
|
+
sumA += a[row + x];
|
|
162
|
+
sumB += b[row + x];
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const muA = sumA / n;
|
|
166
|
+
const muB = sumB / n;
|
|
167
|
+
let sqA = 0;
|
|
168
|
+
let sqB = 0;
|
|
169
|
+
let sqAB = 0;
|
|
170
|
+
for (let y = 0; y < win; y++) {
|
|
171
|
+
const row = (originY + y) * size + originX;
|
|
172
|
+
for (let x = 0; x < win; x++) {
|
|
173
|
+
const da = a[row + x] - muA;
|
|
174
|
+
const db = b[row + x] - muB;
|
|
175
|
+
sqA += da * da;
|
|
176
|
+
sqB += db * db;
|
|
177
|
+
sqAB += da * db;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const denom = n - 1;
|
|
181
|
+
const varA = sqA / denom;
|
|
182
|
+
const varB = sqB / denom;
|
|
183
|
+
const cov = sqAB / denom;
|
|
184
|
+
const score = ((2 * muA * muB + C1) * (2 * cov + C2)) /
|
|
185
|
+
((muA * muA + muB * muB + C1) * (varA + varB + C2));
|
|
186
|
+
if (score < worst)
|
|
187
|
+
worst = score;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return Math.min(1, Math.max(-1, worst));
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Indices whose SSIM against the previous frame fell below `threshold`.
|
|
194
|
+
*
|
|
195
|
+
* `null` entries (frame 0, or frames where SSIM was not computed) are skipped
|
|
196
|
+
* rather than treated as maximal change.
|
|
197
|
+
*/
|
|
198
|
+
export function detectChangePoints(scores, threshold) {
|
|
199
|
+
const points = [];
|
|
200
|
+
for (let i = 0; i < scores.length; i++) {
|
|
201
|
+
const score = scores[i];
|
|
202
|
+
if (score === null || score === undefined)
|
|
203
|
+
continue;
|
|
204
|
+
if (score < threshold)
|
|
205
|
+
points.push(i);
|
|
206
|
+
}
|
|
207
|
+
return points;
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=ssim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssim.js","sourceRoot":"","sources":["../../src/recording/ssim.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CBrowser - Cognitive Browser Automation
|
|
3
|
+
* Copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com
|
|
4
|
+
* Learn more at https://cbrowser.ai - MIT License
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Pure timing helpers shared by the recording encoders.
|
|
8
|
+
*
|
|
9
|
+
* Capture is never perfectly cadenced — the browser drops screencast frames
|
|
10
|
+
* under load — so playback timing is derived from the recorded timestamps
|
|
11
|
+
* rather than from a constant `1000 / fps` cadence. These helpers own that
|
|
12
|
+
* derivation and the clamping rules the GIF/WebP containers impose.
|
|
13
|
+
*/
|
|
14
|
+
import type { Rect, Viewport } from "./types.js";
|
|
15
|
+
/**
|
|
16
|
+
* Minimum per-frame delay. GIF and WebP treat sub-20ms delays inconsistently
|
|
17
|
+
* (many decoders silently substitute 100ms), so delays are floored here.
|
|
18
|
+
*/
|
|
19
|
+
export declare const MIN_DELAY_MS = 20;
|
|
20
|
+
/**
|
|
21
|
+
* Maximum per-frame delay.
|
|
22
|
+
*
|
|
23
|
+
Sharp validates each delay against 0..65535 and rejects the whole encode
|
|
24
|
+
* otherwise: "Expected integer or an array of integers between 0 and 65535 for
|
|
25
|
+
* delay". A capture left running while the page goes quiet produces exactly
|
|
26
|
+
* that: the last frame's delay stretches to cover the silent tail, and one
|
|
27
|
+
* out-of-range value destroys the artifact.
|
|
28
|
+
*
|
|
29
|
+
* Note this is sharp's API limit, not the format's. GIF stores delay as a
|
|
30
|
+
* uint16 of CENTIseconds, so a single frame can legally be held for up to
|
|
31
|
+
* 655_350ms — ten times what sharp will accept in one value. That gap is what
|
|
32
|
+
* {@link expandForPlayback} exploits: libvips merges identical consecutive
|
|
33
|
+
* frames and SUMS their delays, so N legal repeats collapse back into one page
|
|
34
|
+
* holding for their combined duration. Verified end-to-end in
|
|
35
|
+
* tests/recording-encoder-delays.test.ts.
|
|
36
|
+
*
|
|
37
|
+
* Emitting an illegal delay is therefore not a caller error to validate — it is
|
|
38
|
+
* this function's job to make impossible. See {@link expandForPlayback} for
|
|
39
|
+
* holding a frame longer than this ceiling without lying about the timing.
|
|
40
|
+
*/
|
|
41
|
+
export declare const MAX_DELAY_MS = 65535;
|
|
42
|
+
/**
|
|
43
|
+
* Per-frame display delay in milliseconds, derived from consecutive timestamps.
|
|
44
|
+
*
|
|
45
|
+
* Frame `i` is displayed for `tMs[i + 1] - tMs[i]`; the last frame is displayed
|
|
46
|
+
* until `totalDurationMs`. Any lead-in before the first frame (`tMs[0] > 0`) is
|
|
47
|
+
* folded into frame 0's delay, so the delays describe the whole recording.
|
|
48
|
+
*
|
|
49
|
+
* Clamp behaviour, applied in this order:
|
|
50
|
+
*
|
|
51
|
+
* 1. FLOOR at {@link MIN_DELAY_MS}. When the floor inflates the total, the
|
|
52
|
+
* surplus is reclaimed from the frames that have headroom above it,
|
|
53
|
+
* proportionally to how much headroom each has, so the sum stays exactly
|
|
54
|
+
* `totalDurationMs` and no frame is singled out. If the recording is too
|
|
55
|
+
* short for every frame to hold the floor
|
|
56
|
+
* (`frames * MIN_DELAY_MS > totalDurationMs`), the floor wins and the sum is
|
|
57
|
+
* `frames * MIN_DELAY_MS` — the animation is then longer than the capture,
|
|
58
|
+
* which is the only way to keep all frames visible.
|
|
59
|
+
* 2. CEILING at {@link MAX_DELAY_MS}, last, so the reclaim cannot push a delay
|
|
60
|
+
* back over it. A capped delay means the returned timeline is SHORTER than
|
|
61
|
+
* `totalDurationMs`: a frame held past the ceiling cannot be expressed as a
|
|
62
|
+
* single delay. That truncation is the safe failure — the alternative is an
|
|
63
|
+
* encode that dies and takes the whole artifact with it. To keep real-time
|
|
64
|
+
* playback across a long hold, use {@link expandForPlayback}, which repeats
|
|
65
|
+
* the held frame instead of truncating it.
|
|
66
|
+
*
|
|
67
|
+
* Resulting guarantee: every returned delay is within
|
|
68
|
+
* `[MIN_DELAY_MS, MAX_DELAY_MS]`, for every input this function accepts.
|
|
69
|
+
*
|
|
70
|
+
* @throws if `tMs` is empty, contains negative or decreasing values, or if
|
|
71
|
+
* `totalDurationMs` is shorter than the last timestamp.
|
|
72
|
+
*/
|
|
73
|
+
export declare function delaysFromTimestamps(tMs: number[], totalDurationMs: number, options?: {
|
|
74
|
+
maxDelayMs?: number;
|
|
75
|
+
}): number[];
|
|
76
|
+
/**
|
|
77
|
+
* Pair items (frame paths, buffers) with legal delays, repeating any item held
|
|
78
|
+
* longer than the ceiling instead of truncating its delay.
|
|
79
|
+
*
|
|
80
|
+
* `delaysFromTimestamps` must cap a long hold, which shortens playback. This
|
|
81
|
+
* keeps real time: a frame held for 166_768ms becomes three copies of that same
|
|
82
|
+
* frame at ~55_589ms each. The result pairs 1:1 with its items, which is what
|
|
83
|
+
* the encoders require (`delays.length === frames.length`), and the delays sum
|
|
84
|
+
* to the same total as the uncapped timeline.
|
|
85
|
+
*
|
|
86
|
+
* Splitting evenly rather than emitting `[65535, 65535, 35698]` keeps the
|
|
87
|
+
* repeats visually indistinguishable in a scrubber and avoids a stray short
|
|
88
|
+
* frame at the end of a hold.
|
|
89
|
+
*
|
|
90
|
+
* @param items One entry per frame, in capture order.
|
|
91
|
+
* @throws if `items` and `tMs` differ in length, or on any input
|
|
92
|
+
* `delaysFromTimestamps` rejects.
|
|
93
|
+
*/
|
|
94
|
+
export declare function expandForPlayback<T>(items: T[], tMs: number[], totalDurationMs: number, options?: {
|
|
95
|
+
maxDelayMs?: number;
|
|
96
|
+
}): {
|
|
97
|
+
items: T[];
|
|
98
|
+
delays: number[];
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Intervals where capture stalled: a delta larger than
|
|
102
|
+
* `gapFactor * (1000 / targetFps)`.
|
|
103
|
+
*
|
|
104
|
+
* @throws if `targetFps` or `gapFactor` are not positive.
|
|
105
|
+
*/
|
|
106
|
+
export declare function findFrameGaps(tMs: number[], targetFps: number, gapFactor?: number): {
|
|
107
|
+
after_index: number;
|
|
108
|
+
gap_ms: number;
|
|
109
|
+
}[];
|
|
110
|
+
/**
|
|
111
|
+
* Clamp a capture rect into the viewport.
|
|
112
|
+
*
|
|
113
|
+
* Origin is clamped to the viewport first, then the extent is trimmed to what
|
|
114
|
+
* remains. `clamped` is true whenever any component changed, which the manifest
|
|
115
|
+
* surfaces as `region_clamped`.
|
|
116
|
+
*
|
|
117
|
+
* @throws if the input rect or the viewport has zero/negative area, or if the
|
|
118
|
+
* rect lies entirely outside the viewport (nothing left to capture).
|
|
119
|
+
*/
|
|
120
|
+
export declare function clampRect(rect: Rect, viewport: Pick<Viewport, "width" | "height">): {
|
|
121
|
+
rect: Rect;
|
|
122
|
+
clamped: boolean;
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=timing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../src/recording/timing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,YAAY,QAAQ,CAAC;AAKlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EAAE,EACb,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACpC,MAAM,EAAE,CA6EV;AAUD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,KAAK,EAAE,CAAC,EAAE,EACV,GAAG,EAAE,MAAM,EAAE,EACb,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACpC;IAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAgClC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EAAE,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,SAAI,GACZ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,CAe3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,CAAC,GAAG;IACnF,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;CAClB,CAyCA"}
|