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.
Files changed (67) hide show
  1. package/dist/browser.d.ts +32 -0
  2. package/dist/browser.d.ts.map +1 -1
  3. package/dist/browser.js +46 -2
  4. package/dist/browser.js.map +1 -1
  5. package/dist/cli.js +1475 -24
  6. package/dist/cli.js.map +1 -1
  7. package/dist/cognitive/index.d.ts +10 -0
  8. package/dist/cognitive/index.d.ts.map +1 -1
  9. package/dist/cognitive/index.js +8 -0
  10. package/dist/cognitive/index.js.map +1 -1
  11. package/dist/daemon.d.ts.map +1 -1
  12. package/dist/daemon.js +151 -3
  13. package/dist/daemon.js.map +1 -1
  14. package/dist/mcp-server.d.ts.map +1 -1
  15. package/dist/mcp-server.js +67 -0
  16. package/dist/mcp-server.js.map +1 -1
  17. package/dist/mcp-tools/base/capture-tools.d.ts +189 -0
  18. package/dist/mcp-tools/base/capture-tools.d.ts.map +1 -0
  19. package/dist/mcp-tools/base/capture-tools.js +667 -0
  20. package/dist/mcp-tools/base/capture-tools.js.map +1 -0
  21. package/dist/mcp-tools/base/gif-tools.d.ts +19 -0
  22. package/dist/mcp-tools/base/gif-tools.d.ts.map +1 -1
  23. package/dist/mcp-tools/base/gif-tools.js +45 -27
  24. package/dist/mcp-tools/base/gif-tools.js.map +1 -1
  25. package/dist/mcp-tools/base/index.d.ts +2 -1
  26. package/dist/mcp-tools/base/index.d.ts.map +1 -1
  27. package/dist/mcp-tools/base/index.js +5 -1
  28. package/dist/mcp-tools/base/index.js.map +1 -1
  29. package/dist/mcp-tools/tool-categories.d.ts.map +1 -1
  30. package/dist/mcp-tools/tool-categories.js +11 -0
  31. package/dist/mcp-tools/tool-categories.js.map +1 -1
  32. package/dist/recording/auto-capture.d.ts +72 -0
  33. package/dist/recording/auto-capture.d.ts.map +1 -0
  34. package/dist/recording/auto-capture.js +155 -0
  35. package/dist/recording/auto-capture.js.map +1 -0
  36. package/dist/recording/contact-sheet.d.ts +65 -0
  37. package/dist/recording/contact-sheet.d.ts.map +1 -0
  38. package/dist/recording/contact-sheet.js +204 -0
  39. package/dist/recording/contact-sheet.js.map +1 -0
  40. package/dist/recording/encoders.d.ts +101 -0
  41. package/dist/recording/encoders.d.ts.map +1 -0
  42. package/dist/recording/encoders.js +304 -0
  43. package/dist/recording/encoders.js.map +1 -0
  44. package/dist/recording/engine.d.ts +263 -0
  45. package/dist/recording/engine.d.ts.map +1 -0
  46. package/dist/recording/engine.js +896 -0
  47. package/dist/recording/engine.js.map +1 -0
  48. package/dist/recording/ssim.d.ts +78 -0
  49. package/dist/recording/ssim.d.ts.map +1 -0
  50. package/dist/recording/ssim.js +209 -0
  51. package/dist/recording/ssim.js.map +1 -0
  52. package/dist/recording/timing.d.ts +124 -0
  53. package/dist/recording/timing.d.ts.map +1 -0
  54. package/dist/recording/timing.js +251 -0
  55. package/dist/recording/timing.js.map +1 -0
  56. package/dist/recording/types.d.ts +316 -0
  57. package/dist/recording/types.d.ts.map +1 -0
  58. package/dist/recording/types.js +337 -0
  59. package/dist/recording/types.js.map +1 -0
  60. package/dist/testing/nl-test-suite.d.ts +10 -0
  61. package/dist/testing/nl-test-suite.d.ts.map +1 -1
  62. package/dist/testing/nl-test-suite.js +13 -1
  63. package/dist/testing/nl-test-suite.js.map +1 -1
  64. package/dist/types.d.ts +22 -0
  65. package/dist/types.d.ts.map +1 -1
  66. package/dist/types.js.map +1 -1
  67. 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"}