cbrowser 18.24.0 → 18.25.1
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/cli.js +30 -0
- package/dist/cli.js.map +1 -1
- package/dist/mcp-tools/base/index.d.ts +1 -1
- package/dist/mcp-tools/base/index.js +1 -1
- package/dist/mcp-tools/base/visual-testing-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/visual-testing-tools.js +112 -0
- package/dist/mcp-tools/base/visual-testing-tools.js.map +1 -1
- package/dist/visual/distance-metrics.d.ts +260 -0
- package/dist/visual/distance-metrics.d.ts.map +1 -0
- package/dist/visual/distance-metrics.js +919 -0
- package/dist/visual/distance-metrics.js.map +1 -0
- package/dist/visual/index.d.ts +1 -0
- package/dist/visual/index.d.ts.map +1 -1
- package/dist/visual/index.js +1 -0
- package/dist/visual/index.js.map +1 -1
- package/dist/visual/regression.d.ts +89 -0
- package/dist/visual/regression.d.ts.map +1 -1
- package/dist/visual/regression.js +463 -5
- package/dist/visual/regression.js.map +1 -1
- package/package.json +2 -1
|
@@ -18,7 +18,7 @@ import type { McpServer, ToolRegistrationContext } from "../types.js";
|
|
|
18
18
|
* - Analysis: 4 (analyze_page, generate_tests, find_element_by_intent, ai_benchmark)
|
|
19
19
|
* - Session: 4 (save_session, load_session, list_sessions, delete_session)
|
|
20
20
|
* - Healing: 1 (heal_stats)
|
|
21
|
-
* - Visual Testing:
|
|
21
|
+
* - Visual Testing: 9 (visual_baseline, visual_regression, cross_browser_test, cross_browser_diff, responsive_test, ab_comparison, smart_baseline, smart_regression, transport_map)
|
|
22
22
|
* - Testing: 5 (nl_test_file, nl_test_inline, repair_test, detect_flaky_tests, coverage_map)
|
|
23
23
|
* - Bug Analysis: 2 (hunt_bugs, chaos_test)
|
|
24
24
|
* - Persona Comparison: 3 (compare_personas, compare_personas_init, compare_personas_complete)
|
|
@@ -38,7 +38,7 @@ import { registerLlmsTxtTools } from "./llms-txt-tools.js";
|
|
|
38
38
|
* - Analysis: 4 (analyze_page, generate_tests, find_element_by_intent, ai_benchmark)
|
|
39
39
|
* - Session: 4 (save_session, load_session, list_sessions, delete_session)
|
|
40
40
|
* - Healing: 1 (heal_stats)
|
|
41
|
-
* - Visual Testing:
|
|
41
|
+
* - Visual Testing: 9 (visual_baseline, visual_regression, cross_browser_test, cross_browser_diff, responsive_test, ab_comparison, smart_baseline, smart_regression, transport_map)
|
|
42
42
|
* - Testing: 5 (nl_test_file, nl_test_inline, repair_test, detect_flaky_tests, coverage_map)
|
|
43
43
|
* - Bug Analysis: 2 (hunt_bugs, chaos_test)
|
|
44
44
|
* - Persona Comparison: 3 (compare_personas, compare_personas_init, compare_personas_complete)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-testing-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp-tools/base/visual-testing-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAU7C;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"visual-testing-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp-tools/base/visual-testing-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAU7C;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0TlE"}
|
|
@@ -155,5 +155,117 @@ export function registerVisualTestingTools(server) {
|
|
|
155
155
|
],
|
|
156
156
|
};
|
|
157
157
|
});
|
|
158
|
+
// ── Smart Baseline (v18.0.0) ──
|
|
159
|
+
server.tool("smart_baseline", "Capture a smart consensus baseline using Wasserstein barycenter. Takes N screenshots, rejects outliers, computes optimal reference. Robust to dynamic content and timing variations.", {
|
|
160
|
+
url: z.string().describe("URL to capture"),
|
|
161
|
+
name: z.string().describe("Baseline name"),
|
|
162
|
+
captures: z.number().optional().describe("Number of screenshots (default: 5)"),
|
|
163
|
+
delay: z.number().optional().describe("Delay between captures in ms (default: 1500)"),
|
|
164
|
+
selector: z.string().optional().describe("CSS selector to capture"),
|
|
165
|
+
device: z.string().optional().describe("Device emulation"),
|
|
166
|
+
}, async ({ url, name, captures, delay, selector, device }) => {
|
|
167
|
+
const { captureSmartBaseline } = await import("../../visual/index.js");
|
|
168
|
+
const result = await captureSmartBaseline(url, name, {
|
|
169
|
+
numCaptures: captures,
|
|
170
|
+
captureDelay: delay,
|
|
171
|
+
selector,
|
|
172
|
+
device,
|
|
173
|
+
});
|
|
174
|
+
return {
|
|
175
|
+
content: [
|
|
176
|
+
{
|
|
177
|
+
type: "text",
|
|
178
|
+
text: JSON.stringify({
|
|
179
|
+
name: result.name,
|
|
180
|
+
captures: result.numCaptures,
|
|
181
|
+
outliers: result.numOutliers,
|
|
182
|
+
meanDistance: result.meanDistance,
|
|
183
|
+
stdDev: result.stdDevDistance,
|
|
184
|
+
adaptiveThreshold: result.adaptiveThreshold,
|
|
185
|
+
reference: result.referencePath,
|
|
186
|
+
computeTime: `${result.computeTimeMs.toFixed(0)}ms`,
|
|
187
|
+
}, null, 2),
|
|
188
|
+
},
|
|
189
|
+
],
|
|
190
|
+
};
|
|
191
|
+
});
|
|
192
|
+
server.tool("smart_regression", "Run visual regression against a smart baseline. Uses Wasserstein distance with adaptive threshold based on observed render variance.", {
|
|
193
|
+
url: z.string().describe("URL to test"),
|
|
194
|
+
baseline: z.string().describe("Smart baseline name"),
|
|
195
|
+
threshold: z.number().optional().describe("Override adaptive threshold (0-1)"),
|
|
196
|
+
transportMap: z.boolean().optional().describe("Also generate visual transport map"),
|
|
197
|
+
}, async ({ url, baseline, threshold, transportMap: wantMap }) => {
|
|
198
|
+
if (wantMap) {
|
|
199
|
+
const { runRegressionWithTransportMap } = await import("../../visual/index.js");
|
|
200
|
+
const result = await runRegressionWithTransportMap(url, baseline, { threshold });
|
|
201
|
+
return {
|
|
202
|
+
content: [
|
|
203
|
+
{
|
|
204
|
+
type: "text",
|
|
205
|
+
text: JSON.stringify({
|
|
206
|
+
passed: result.passed,
|
|
207
|
+
similarity: result.analysis.similarityScore,
|
|
208
|
+
status: result.analysis.overallStatus,
|
|
209
|
+
summary: result.analysis.summary,
|
|
210
|
+
hotspots: result.transportMap?.hotspots,
|
|
211
|
+
flows: result.transportMap?.flows.length,
|
|
212
|
+
svgPath: result.transportMapSvgPath,
|
|
213
|
+
}, null, 2),
|
|
214
|
+
},
|
|
215
|
+
],
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
const { runSmartRegression } = await import("../../visual/index.js");
|
|
219
|
+
const result = await runSmartRegression(url, baseline, { threshold });
|
|
220
|
+
return {
|
|
221
|
+
content: [
|
|
222
|
+
{
|
|
223
|
+
type: "text",
|
|
224
|
+
text: JSON.stringify({
|
|
225
|
+
passed: result.passed,
|
|
226
|
+
similarity: result.analysis.similarityScore,
|
|
227
|
+
status: result.analysis.overallStatus,
|
|
228
|
+
summary: result.analysis.summary,
|
|
229
|
+
rawAnalysis: result.analysis.rawAnalysis,
|
|
230
|
+
}, null, 2),
|
|
231
|
+
},
|
|
232
|
+
],
|
|
233
|
+
};
|
|
234
|
+
});
|
|
235
|
+
server.tool("transport_map", "Generate a Visual Transport Map showing WHERE visual content moved between two screenshots. Produces heatmap, flow arrows, hotspots, and SVG visualization.", {
|
|
236
|
+
baselinePath: z.string().describe("Path to baseline screenshot"),
|
|
237
|
+
currentPath: z.string().describe("Path to current screenshot"),
|
|
238
|
+
cellSize: z.number().optional().describe("Grid cell size in pixels (default: 32)"),
|
|
239
|
+
hotspots: z.number().optional().describe("Number of hotspots to identify (default: 5)"),
|
|
240
|
+
}, async ({ baselinePath, currentPath, cellSize, hotspots: numHotspots }) => {
|
|
241
|
+
const { computeTransportMap } = await import("../../visual/distance-metrics.js");
|
|
242
|
+
const result = await computeTransportMap(baselinePath, currentPath, { cellSize, numHotspots });
|
|
243
|
+
// Save SVG
|
|
244
|
+
const { writeFileSync, mkdirSync, existsSync } = await import("fs");
|
|
245
|
+
const { join } = await import("path");
|
|
246
|
+
const { homedir } = await import("os");
|
|
247
|
+
const baseDir = process.env.CBROWSER_DATA_DIR || join(homedir(), ".cbrowser");
|
|
248
|
+
const mapsDir = join(baseDir, "transport-maps");
|
|
249
|
+
if (!existsSync(mapsDir))
|
|
250
|
+
mkdirSync(mapsDir, { recursive: true });
|
|
251
|
+
const svgPath = join(mapsDir, `transport-map-${Date.now()}.svg`);
|
|
252
|
+
writeFileSync(svgPath, result.svg);
|
|
253
|
+
return {
|
|
254
|
+
content: [
|
|
255
|
+
{
|
|
256
|
+
type: "text",
|
|
257
|
+
text: JSON.stringify({
|
|
258
|
+
grid: result.gridSize,
|
|
259
|
+
flows: result.flows.length,
|
|
260
|
+
totalCost: result.totalCost,
|
|
261
|
+
hotspots: result.hotspots,
|
|
262
|
+
svgPath,
|
|
263
|
+
dimensions: result.dimensions,
|
|
264
|
+
computeTime: `${result.computeTimeMs.toFixed(0)}ms`,
|
|
265
|
+
}, null, 2),
|
|
266
|
+
},
|
|
267
|
+
],
|
|
268
|
+
};
|
|
269
|
+
});
|
|
158
270
|
}
|
|
159
271
|
//# sourceMappingURL=visual-testing-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-testing-tools.js","sourceRoot":"","sources":["../../../src/mcp-tools/base/visual-testing-tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"visual-testing-tools.js","sourceRoot":"","sources":["../../../src/mcp-tools/base/visual-testing-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,qCAAqC,EACrC;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QAC7D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KACnD,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,OAAO,EAAE,IAAI;wBACb,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,GAAG,EAAE,MAAM,CAAC,GAAG;wBACf,SAAS,EAAE,MAAM,CAAC,SAAS;qBAC5B,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,kDAAkD,EAClD;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC7C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KACzE,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAC5D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE,eAAe;wBACjD,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO;wBACjC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;qBAC/C,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,8CAA8C,EAC9C;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC7C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KACrG,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC1B,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,GAAG,EAAE,MAAM,CAAC,GAAG;wBACf,aAAa,EAAE,MAAM,CAAC,aAAa;wBACnC,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM;wBAC1C,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM;wBAC1C,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACtF,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACpF,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAChE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,4CAA4C,EAC5C;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAChD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KACxG,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC1B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,GAAG,EAAE,MAAM,CAAC,GAAG;wBACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACtF,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACpF,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAChE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,2CAA2C,EAC3C;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC7C,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;KACvG,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,GAAG,EAAE,MAAM,CAAC,GAAG;wBACf,aAAa,EAAE,MAAM,CAAC,aAAa;wBACnC,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM;qBAC1C,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,mDAAmD,EACnD;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAC5D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAChE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC7D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;KAC/D,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,aAAa,EAAE,MAAM,CAAC,aAAa;wBACnC,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE,eAAe;wBACjD,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BACrD,IAAI,EAAE,CAAC,CAAC,IAAI;4BACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;4BACpB,WAAW,EAAE,CAAC,CAAC,WAAW;4BAC1B,YAAY,EAAE,CAAC,CAAC,YAAY;yBAC7B,CAAC,CAAC;wBACH,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM;wBAC1C,gBAAgB,EAAE;4BAChB,CAAC,EAAE;gCACD,QAAQ,EAAG,MAAM,CAAC,WAAW,CAAC,CAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;gCACxE,KAAK,EAAG,MAAM,CAAC,WAAW,CAAC,CAAS,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;gCAClE,KAAK,EAAG,MAAM,CAAC,WAAW,CAAC,CAAS,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC;gCAC1D,OAAO,EAAG,MAAM,CAAC,WAAW,CAAC,CAAS,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;6BACvE;4BACD,CAAC,EAAE;gCACD,QAAQ,EAAG,MAAM,CAAC,WAAW,CAAC,CAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;gCACxE,KAAK,EAAG,MAAM,CAAC,WAAW,CAAC,CAAS,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;gCAClE,KAAK,EAAG,MAAM,CAAC,WAAW,CAAC,CAAS,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC;gCAC1D,OAAO,EAAG,MAAM,CAAC,WAAW,CAAC,CAAS,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;6BACvE;yBACF;wBACD,QAAQ,EAAE,MAAM,CAAC,QAAQ;qBAC1B,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,iCAAiC;IAEjC,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,sLAAsL,EACtL;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC9E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QACrF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACnE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KAC3D,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QACzD,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE;YACnD,WAAW,EAAE,QAAQ;YACrB,YAAY,EAAE,KAAK;YACnB,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,QAAQ,EAAE,MAAM,CAAC,WAAW;wBAC5B,QAAQ,EAAE,MAAM,CAAC,WAAW;wBAC5B,YAAY,EAAE,MAAM,CAAC,YAAY;wBACjC,MAAM,EAAE,MAAM,CAAC,cAAc;wBAC7B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;wBAC3C,SAAS,EAAE,MAAM,CAAC,aAAa;wBAC/B,WAAW,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;qBACpD,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,sIAAsI,EACtI;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QACvC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC9E,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KACpF,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE;QAC5D,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,EAAE,6BAA6B,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAChF,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YACjF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,eAAe;4BAC3C,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,aAAa;4BACrC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;4BAChC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,QAAQ;4BACvC,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM;4BACxC,OAAO,EAAE,MAAM,CAAC,mBAAmB;yBACpC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACZ;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACtE,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,eAAe;wBAC3C,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,aAAa;wBACrC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;wBAChC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;qBACzC,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,6JAA6J,EAC7J;QACE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QAChE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QAC9D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;QAClF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;KACxF,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE;QACvE,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,kCAAkC,CAAC,CAAC;QACjF,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QAE/F,WAAW;QACX,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACpE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,iBAAiB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACjE,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAEnC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,IAAI,EAAE,MAAM,CAAC,QAAQ;wBACrB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;wBAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,OAAO;wBACP,UAAU,EAAE,MAAM,CAAC,UAAU;wBAC7B,WAAW,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;qBACpD,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Distance metrics for visual comparison
|
|
3
|
+
*
|
|
4
|
+
* Implements Sliced Wasserstein Distance (SWD) for robust image comparison.
|
|
5
|
+
* Based on optimal transport theory — measures minimum cost to transform
|
|
6
|
+
* one image distribution into another.
|
|
7
|
+
*
|
|
8
|
+
* Key advantages over byte-diff / SSIM:
|
|
9
|
+
* - Robust to sub-pixel shifts, anti-aliasing, font rendering differences
|
|
10
|
+
* - Cross-resolution capable (compares distributions, not pixel grids)
|
|
11
|
+
* - Decomposable (can show WHERE visual mass moved)
|
|
12
|
+
* - Supports barycenter computation (consensus baselines from N captures)
|
|
13
|
+
*
|
|
14
|
+
* @version 1.0.0
|
|
15
|
+
* @see https://github.com/alexandriashai/cbrowser/issues/158
|
|
16
|
+
*/
|
|
17
|
+
export interface DistanceMetricResult {
|
|
18
|
+
metric: 'byte-diff' | 'wasserstein' | 'sliced-wasserstein' | 'combined';
|
|
19
|
+
distance: number;
|
|
20
|
+
normalizedScore: number;
|
|
21
|
+
details: {
|
|
22
|
+
computeTimeMs: number;
|
|
23
|
+
dimensions?: {
|
|
24
|
+
width: number;
|
|
25
|
+
height: number;
|
|
26
|
+
};
|
|
27
|
+
numProjections?: number;
|
|
28
|
+
channelDistances?: {
|
|
29
|
+
r: number;
|
|
30
|
+
g: number;
|
|
31
|
+
b: number;
|
|
32
|
+
spatial: number;
|
|
33
|
+
};
|
|
34
|
+
transportCost?: number;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export interface WassersteinConfig {
|
|
38
|
+
/** Number of random 1D projections for sliced approximation (default: 64) */
|
|
39
|
+
numProjections?: number;
|
|
40
|
+
/** Compare mode: 'color' for color histogram, 'spatial' for spatial distribution, 'combined' for both */
|
|
41
|
+
compareMode?: 'color' | 'spatial' | 'combined';
|
|
42
|
+
/** Downscale factor for performance (0.0-1.0, default: 0.5 for 2x downscale) */
|
|
43
|
+
downscale?: number;
|
|
44
|
+
/** Regions to ignore (e.g. dynamic content areas) */
|
|
45
|
+
ignoreRegions?: Array<{
|
|
46
|
+
x: number;
|
|
47
|
+
y: number;
|
|
48
|
+
width: number;
|
|
49
|
+
height: number;
|
|
50
|
+
}>;
|
|
51
|
+
}
|
|
52
|
+
export interface BarycenterConfig {
|
|
53
|
+
/** Number of Sinkhorn iterations (default: 50) */
|
|
54
|
+
iterations?: number;
|
|
55
|
+
/** Entropy regularization parameter (default: 0.01) */
|
|
56
|
+
epsilon?: number;
|
|
57
|
+
/** Downscale for performance */
|
|
58
|
+
downscale?: number;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Compute Sliced Wasserstein Distance between two images.
|
|
62
|
+
*
|
|
63
|
+
* @param baselinePath - Path to baseline PNG/JPEG
|
|
64
|
+
* @param currentPath - Path to current PNG/JPEG
|
|
65
|
+
* @param config - Configuration options
|
|
66
|
+
* @returns DistanceMetricResult with similarity score (0-1)
|
|
67
|
+
*/
|
|
68
|
+
export declare function computeWassersteinDistance(baselinePath: string, currentPath: string, config?: WassersteinConfig): Promise<DistanceMetricResult>;
|
|
69
|
+
/**
|
|
70
|
+
* Compute the existing byte-diff metric (for comparison / fallback).
|
|
71
|
+
*/
|
|
72
|
+
export declare function computeByteDiff(baselinePath: string, currentPath: string): DistanceMetricResult;
|
|
73
|
+
/**
|
|
74
|
+
* Compute combined distance using multiple metrics.
|
|
75
|
+
* Runs byte-diff (fast) and Wasserstein (robust), combines scores.
|
|
76
|
+
*/
|
|
77
|
+
export declare function computeCombinedDistance(baselinePath: string, currentPath: string, weights?: {
|
|
78
|
+
byteDiff?: number;
|
|
79
|
+
wasserstein?: number;
|
|
80
|
+
}, wassersteinConfig?: WassersteinConfig): Promise<DistanceMetricResult>;
|
|
81
|
+
/**
|
|
82
|
+
* Compute color histogram barycenter of multiple images.
|
|
83
|
+
* Returns the "average" color distribution — useful for creating
|
|
84
|
+
* consensus baselines from multiple captures.
|
|
85
|
+
*
|
|
86
|
+
* For Phase 2: full Wasserstein barycenter via Sinkhorn/IBP.
|
|
87
|
+
* This simpler version averages histograms, which approximates
|
|
88
|
+
* the Wasserstein barycenter for 1D marginals.
|
|
89
|
+
*/
|
|
90
|
+
export declare function computeHistogramBarycenter(imagePaths: string[], config?: BarycenterConfig): Promise<{
|
|
91
|
+
histogram: {
|
|
92
|
+
r: Float64Array;
|
|
93
|
+
g: Float64Array;
|
|
94
|
+
b: Float64Array;
|
|
95
|
+
};
|
|
96
|
+
meanDistance: number;
|
|
97
|
+
}>;
|
|
98
|
+
export interface SmartBaselineConfig {
|
|
99
|
+
/** Number of captures to take (default: 5) */
|
|
100
|
+
numCaptures?: number;
|
|
101
|
+
/** Delay between captures in ms (default: 1000) */
|
|
102
|
+
captureDelay?: number;
|
|
103
|
+
/** Downscale for barycenter computation (default: 0.5) */
|
|
104
|
+
downscale?: number;
|
|
105
|
+
/** Directory to store baseline data */
|
|
106
|
+
outputDir?: string;
|
|
107
|
+
/** Outlier rejection threshold — captures with distance > threshold * stddev are excluded (default: 2.0) */
|
|
108
|
+
outlierThreshold?: number;
|
|
109
|
+
}
|
|
110
|
+
export interface SmartBaseline {
|
|
111
|
+
id: string;
|
|
112
|
+
name: string;
|
|
113
|
+
url: string;
|
|
114
|
+
/** Path to the median reference screenshot (closest to barycenter) */
|
|
115
|
+
referencePath: string;
|
|
116
|
+
/** Paths to all individual captures */
|
|
117
|
+
capturePaths: string[];
|
|
118
|
+
/** Barycenter histogram (consensus color distribution) */
|
|
119
|
+
barycenter: {
|
|
120
|
+
r: Float64Array;
|
|
121
|
+
g: Float64Array;
|
|
122
|
+
b: Float64Array;
|
|
123
|
+
};
|
|
124
|
+
/** Distance of each capture from the barycenter */
|
|
125
|
+
captureDistances: number[];
|
|
126
|
+
/** Mean distance — lower = more consistent renders */
|
|
127
|
+
meanDistance: number;
|
|
128
|
+
/** Standard deviation of distances — measures render stability */
|
|
129
|
+
stdDevDistance: number;
|
|
130
|
+
/** Number of captures used (after outlier rejection) */
|
|
131
|
+
numCaptures: number;
|
|
132
|
+
/** Number of captures rejected as outliers */
|
|
133
|
+
numOutliers: number;
|
|
134
|
+
/** Adaptive threshold: suggested comparison threshold based on observed variance */
|
|
135
|
+
adaptiveThreshold: number;
|
|
136
|
+
timestamp: string;
|
|
137
|
+
computeTimeMs: number;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Compute a Smart Barycenter Baseline from multiple screenshot paths.
|
|
141
|
+
*
|
|
142
|
+
* Algorithm:
|
|
143
|
+
* 1. Compute per-image color histograms
|
|
144
|
+
* 2. Compute Wasserstein barycenter (optimal consensus distribution)
|
|
145
|
+
* 3. Measure each capture's distance to the barycenter
|
|
146
|
+
* 4. Reject outliers (captures too far from consensus)
|
|
147
|
+
* 5. Recompute barycenter without outliers
|
|
148
|
+
* 6. Select the median capture (closest to barycenter) as reference image
|
|
149
|
+
* 7. Compute adaptive threshold based on observed variance
|
|
150
|
+
*
|
|
151
|
+
* The result: a baseline that represents the "typical" rendering,
|
|
152
|
+
* robust to timing variations, dynamic content, and animation states.
|
|
153
|
+
*
|
|
154
|
+
* @param screenshotPaths - Array of PNG paths (pre-captured)
|
|
155
|
+
* @param name - Baseline name
|
|
156
|
+
* @param url - Source URL
|
|
157
|
+
* @param config - Configuration
|
|
158
|
+
*/
|
|
159
|
+
export declare function computeSmartBaseline(screenshotPaths: string[], name: string, url: string, config?: SmartBaselineConfig): Promise<SmartBaseline>;
|
|
160
|
+
/**
|
|
161
|
+
* Compare a new screenshot against a Smart Baseline.
|
|
162
|
+
*
|
|
163
|
+
* Uses the barycenter's color distribution as the reference rather than
|
|
164
|
+
* a single screenshot — this makes the comparison robust to the natural
|
|
165
|
+
* variance observed during baseline creation.
|
|
166
|
+
*
|
|
167
|
+
* @param screenshotPath - Path to the new screenshot
|
|
168
|
+
* @param baseline - Smart baseline to compare against
|
|
169
|
+
* @param config - Wasserstein configuration
|
|
170
|
+
*/
|
|
171
|
+
export declare function compareAgainstSmartBaseline(screenshotPath: string, baseline: SmartBaseline, config?: WassersteinConfig): Promise<DistanceMetricResult & {
|
|
172
|
+
withinVariance: boolean;
|
|
173
|
+
varianceRatio: number;
|
|
174
|
+
}>;
|
|
175
|
+
export interface TransportFlow {
|
|
176
|
+
/** Source grid cell */
|
|
177
|
+
from: {
|
|
178
|
+
x: number;
|
|
179
|
+
y: number;
|
|
180
|
+
row: number;
|
|
181
|
+
col: number;
|
|
182
|
+
};
|
|
183
|
+
/** Destination grid cell */
|
|
184
|
+
to: {
|
|
185
|
+
x: number;
|
|
186
|
+
y: number;
|
|
187
|
+
row: number;
|
|
188
|
+
col: number;
|
|
189
|
+
};
|
|
190
|
+
/** Amount of visual mass transported (0-1) */
|
|
191
|
+
mass: number;
|
|
192
|
+
/** Euclidean distance of the flow */
|
|
193
|
+
distance: number;
|
|
194
|
+
/** Dominant color at source (hex) */
|
|
195
|
+
colorFrom: string;
|
|
196
|
+
/** Dominant color at destination (hex) */
|
|
197
|
+
colorTo: string;
|
|
198
|
+
}
|
|
199
|
+
export interface TransportMapResult {
|
|
200
|
+
/** Grid dimensions used */
|
|
201
|
+
gridSize: {
|
|
202
|
+
rows: number;
|
|
203
|
+
cols: number;
|
|
204
|
+
};
|
|
205
|
+
/** All transport flows (filtered to significant ones) */
|
|
206
|
+
flows: TransportFlow[];
|
|
207
|
+
/** Per-cell change magnitude (heatmap data) */
|
|
208
|
+
heatmap: Float64Array;
|
|
209
|
+
/** Total transport cost */
|
|
210
|
+
totalCost: number;
|
|
211
|
+
/** Regions with highest change */
|
|
212
|
+
hotspots: Array<{
|
|
213
|
+
region: {
|
|
214
|
+
x: number;
|
|
215
|
+
y: number;
|
|
216
|
+
width: number;
|
|
217
|
+
height: number;
|
|
218
|
+
};
|
|
219
|
+
magnitude: number;
|
|
220
|
+
description: string;
|
|
221
|
+
}>;
|
|
222
|
+
/** SVG visualization */
|
|
223
|
+
svg: string;
|
|
224
|
+
/** Image dimensions */
|
|
225
|
+
dimensions: {
|
|
226
|
+
width: number;
|
|
227
|
+
height: number;
|
|
228
|
+
};
|
|
229
|
+
computeTimeMs: number;
|
|
230
|
+
}
|
|
231
|
+
export interface TransportMapConfig {
|
|
232
|
+
/** Grid cell size in pixels (default: 32) */
|
|
233
|
+
cellSize?: number;
|
|
234
|
+
/** Minimum flow mass to include (default: 0.01) */
|
|
235
|
+
minFlowMass?: number;
|
|
236
|
+
/** Maximum number of flows to return (default: 100) */
|
|
237
|
+
maxFlows?: number;
|
|
238
|
+
/** Downscale factor (default: 0.5) */
|
|
239
|
+
downscale?: number;
|
|
240
|
+
/** Number of hotspots to identify (default: 5) */
|
|
241
|
+
numHotspots?: number;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Compute a Visual Transport Map between two images.
|
|
245
|
+
*
|
|
246
|
+
* Divides both images into a grid, computes the color distribution
|
|
247
|
+
* per cell, then solves a transport problem to determine how
|
|
248
|
+
* visual mass flows from the baseline to the current state.
|
|
249
|
+
*
|
|
250
|
+
* The result shows:
|
|
251
|
+
* - WHERE changes happened (heatmap)
|
|
252
|
+
* - HOW visual content moved (flow arrows)
|
|
253
|
+
* - WHAT changed most (hotspots)
|
|
254
|
+
* - A rendered SVG overlay visualization
|
|
255
|
+
*
|
|
256
|
+
* @since v18.0.0 (Phase 3)
|
|
257
|
+
* @see https://github.com/alexandriashai/cbrowser/issues/158
|
|
258
|
+
*/
|
|
259
|
+
export declare function computeTransportMap(baselinePath: string, currentPath: string, config?: TransportMapConfig): Promise<TransportMapResult>;
|
|
260
|
+
//# sourceMappingURL=distance-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distance-metrics.d.ts","sourceRoot":"","sources":["../../src/visual/distance-metrics.ts"],"names":[],"mappings":"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"}
|