FAQ

Questions
and answers.

How TestivAI works, what it supports, what it does with your data.

General Email
General

General
questions.

Yes, MIT-licensed. The packages run locally, with no account: capture, pixel diff with tolerances, DOM and style checks, an HTML report, approvals from a PR comment. For AI review, connect @testivai/mcp to your own model.

Every screenshot is paired with the page's DOM and, on most adapters, computed styles. Each changed region is attributed to its element, and the verdict names the kind of change: structural, style-only, layout shift, or likely render noise.

Comparison runs on your machine or CI runner; speed depends on your hardware and screenshot sizes. Most of the time is browser rendering.

Playwright adapters (TypeScript, Python, Java): Chromium, Firefox and WebKit, with per-browser baselines (a variant such as "firefox" in Python and Java). Selenium adapters in JavaScript, Python and Java (experimental): full-page capture on Chrome and Edge, and on Firefox in Python and Java. Mobile web through Playwright's device emulation, baselines per device. Mobile web guide →

Yes. TestivAI is MIT-licensed open source and free to use, including commercially: no account, no registration, no caps. See the philosophy page and the repository.

Technical

Technical
details.

Yes. Shards capture only; one job merges the captures and compares once: one report, one PR comment. If a shard never reports, the merge refuses to compare.

Two environment variables, TESTIVAI_SHARD=3/8 and TESTIVAI_CAPTURE_ONLY=1, in the Playwright, Selenium, Python, Java and Ruby adapters (not yet WebdriverIO). Full recipe →

Not by default. A visual change posts as a neutral check: visible in the pull request, not blocking the merge, even when the check is required. Set fail-on-diff: true on the Action for a hard gate. Enforce fail-on-missing on its own: a baseline that received no capture means coverage disappeared.

A full-page screenshot of a plain page is about 175 KB; PNG is already compressed, so git saves little between versions. A 50-snapshot suite is roughly 8.5 MB, plus about that much per round of approvals. Approve deliberately, use ignoreSelectors, let CI shallow-clone.

Git LFS: usually no; it costs past GitHub's free quota, burns CI bandwidth and breaks forks. Full guidance →

The detection is not AI. Regions, selectors, DOM and style checks are deterministic: no tokens, no network call. A model adds interpretation: tying the change to the edit you made, or triaging thirty changed snapshots down to the two with a different cause. It never decides whether something changed, so it cannot invent or hide a regression. Example payload →

In Claude Code, yes. Add the server (claude mcp add testivai -- npx -y @testivai/mcp), run the tests and ask what changed. Say "approve home" and Claude Code asks you to confirm, every time, in every permission mode. To skip the prompt, pass --no-approval-prompt or set "mcpApprovalPrompt": false; then nothing in the client enforces your confirmation. How it works →

Yes, on your computer, with the testivai-report plugin. Install it from a terminal: claude plugin install testivai-report --marketplace testivai/testivai-oss. Then /testivai-report shows the whole report, screenshots included, in the side panel. Cloud sessions cannot load plugins. Setup →

One developer, Budi Sugianto; no company behind it, and free to use. First release March 2026; it ships regularly on npm, PyPI and RubyGems: releases, roadmap.

If maintenance stopped, nothing of yours breaks: MIT licence, baselines in your own repository, results.json a semver-governed contract, no account, key or network call. Full details →

Pixel comparison uses perceived colour distance (YIQ) with a threshold, so small anti-aliasing shifts do not register. Then the DOM and styles decide the verdict. Pixels differ, DOM and styles identical, diff small and scattered: "likely render noise", still shown, auto-passed only with noiseAutoPass. A diff in one area is not called noise. Changed styles, identical DOM: "style-only change", with the selectors. Styles not recorded: "styles not compared". A browser or OS change since the baseline, with the page unchanged, is "rendering drift", named in the report. A web font or stylesheet that failed to load makes an "unhealthy capture" (Playwright and testivai witness), never noise.

Two ways. During capture, ignoreSelectors hides matching elements: timestamps, ads, live widgets. In the diff, mask excludes areas by selector or coordinates and hatches them in the report. Both are empty by default.

Before each capture, TestivAI freezes animations and transitions, hides the caret and waits for web fonts. Then it waits for the page to stop changing: no DOM changes for 150 ms, capped at 5 seconds. Content that arrives later: assert it in your test before calling witness(). Details →

Integration

CI and
test frameworks.

Yes. On GitHub, the Action posts the report on the pull request and a collaborator approves with a /testivai approve comment. A second action publishes each run's report to GitHub Pages and links it from that comment. Elsewhere, run the tests as usual and publish visual-report/; the exit code and results.json work everywhere. CI recipes →

Yes. Add a witness() call where you want visual coverage.

Playwright in TypeScript/JavaScript, Python (pytest plugin) and Java (JUnit 5, experimental); Selenium in JavaScript, Python and Java; WebdriverIO; Ruby with Capybara, RSpec and Cucumber. Cypress, Puppeteer and Robot Framework go through the experimental CLI sidecar. No test suite: npx testivai witness <url>.

Yes. Every pull request captures every page and compares it with the approved baselines; Claude reviews the diff through @testivai/mcp, and a person approves. An hourly job loads the live pages in Chrome and files an issue if one breaks.

Data

Where your
data goes.

None. Screenshots, DOM snapshots and diff images stay in .testivai/; the software uploads nothing. @testivai/mcp runs locally and makes no network calls. If you connect it to a hosted AI model, your AI client sends the results and diff images to that provider.

Questions

Ask on GitHub
or by email.

Email testivai.app@gmail.com → Open a GitHub issue