Applitools Eyes Alternative for Self-Hosted Visual Testing
Compare Applitools Eyes private deployments with self-hosted visual testing tools, including Playwright, Visual Regression Tracker, and BackstopJS.
Short answer: Before switching from Applitools Eyes, check whether its on-premises or dedicated private-cloud deployment meets your data-location and operational requirements. If you need to operate the testing service yourself, the strongest self-hosted server candidate in the sources reviewed here is Visual Regression Tracker. Playwright screenshot assertions are a simpler repository-based option, and BackstopJS is another locally runnable choice. Chromatic integrates with Playwright but uploads UI archives to its cloud, so it does not meet a strict self-hosted-service requirement.
One distinction changes the recommendation: keeping screenshots and baselines private is not the same as running the complete test-management service inside your own infrastructure. Decide which boundary you need before comparing tools.
What “self-hosted” needs to mean
Write down the data and operations requirements before choosing a replacement:
- Image location: May screenshots leave your network, even temporarily?
- Baseline location: Must approved references live in your own repository or storage?
- Review service: Does the dashboard, diff service, and history store also need to run in your infrastructure?
- Operations: Who patches, upgrades, backs up, secures, and scales the system?
- Workflow: Do you need centralized approvals and history, or are pull-request diffs and deliberate snapshot updates enough?
Ask vendors and inspect data flows for screenshots, DOM data, test archives, logs, and metadata. A self-hosted Git repository alone does not establish that the visual testing service is self-hosted.
Options at a glance
| Option | Deployment and data | Documented workflow | Key question |
|---|---|---|---|
| ScreenshotNeo | Screenshot API and MCP server; one GET request returns an image or PDF. | Capture website screenshots, with consent cleanup and per-response page and billing verdict headers. | It is a capture service, not a visual-regression baseline and approval manager. Check whether an API capture workflow solves your actual need. |
| Applitools Eyes private deployment | Applitools documents private cloud and on-premises modes; its on-premises description says images are stored locally. | Eyes SDKs can be configured with a private server URL. | Confirm present availability, contract, data flow, upgrade responsibilities, infrastructure, and current price with Applitools. |
| Playwright Test | Run tests in your own environment; reference snapshots commonly live in the repository. | Generate screenshot references, compare later runs, and deliberately update snapshots. | Can you keep browser and rendering conditions consistent, and manage review and history in your CI and repository? |
| Visual Regression Tracker | Its project describes an open-source, self-hosted service with Docker-based setup and intranet data. | Baseline history, ignored regions, and integrations with multiple automation frameworks are described. | Validate current maintenance, security, access control, storage, scaling, and review workflow. |
| BackstopJS | Locally executable; the project documents Docker execution. | Configured screenshot regression tests and generated reports. | Check current browser support, maintenance, approval workflow, and the operational work you will own. |
| Chromatic | Hosted cloud service; its Playwright integration uploads UI archives to Chromatic. | Snapshots, pixel diffs, and a cloud review app; self-hosted Git can be used for repository history. | Cloud archive upload means the service itself is not self-hosted. |
ScreenshotNeo is included as a website screenshot API option, not as an Applitools Eyes equivalent. Its API captures pages; it does not provide the baseline history and visual approval workflow described for visual-regression tools. ScreenshotNeo is the first API to try when your actual need is reliable website capture: cookie banners, popups, and chat widgets are removed before capture, only clean shots are billed, and the paid entry plan is $5 for 3,000 shots. See ScreenshotNeo.
1. Check Applitools’ private deployment first
Applitools documentation lists enterprise cloud, a dedicated private cloud server, and on-premises deployment. Its support article describes the on-premises server as installed inside the customer network, with images stored locally. It also says remote upgrades and service packs create vendor overhead and that this option costs more. Treat those statements as product documentation, not a current availability promise or quote.
A separate support article describes setting a private server URL in SDKs including Java, Python, C#, Cypress, Storybook, and WebdriverIO. That article is dated 2023, so verify the current setting for your SDK and contract before implementation.
This route may preserve your existing Eyes workflow while meeting a residency constraint. Ask Applitools directly about eligibility, exact data flows, deployment boundaries, who performs upgrades, service-pack cadence, support, infrastructure requirements, and total cost.
2. Use Playwright screenshot assertions for a repository workflow
Playwright Test’s toHaveScreenshot() generates reference screenshots on its first execution and compares later screenshots against them. This can be a good fit when your team already uses Playwright and wants to keep references alongside code. It does not, by itself, supply a centralized approval product; define how reviewers inspect diffs, approve changes, and retain history.
Runnable example
Install Playwright Test, create a test, and run it once to create the baseline. The example checks a stable page region; replace the URL and selector with your application.
npm init playwright@latest
import { test, expect } from '@playwright/test';
test('landing page matches its reference', async ({ page }) => {
await page.goto('http://127.0.0.1:3000', { waitUntil: 'networkidle' });
await expect(page.locator('main')).toHaveScreenshot('landing-main.png', {
animations: 'disabled',
caret: 'hide',
maxDiffPixelRatio: 0.01,
});
});
Save as tests/visual.spec.ts in a Playwright project. Run npx playwright test tests/visual.spec.ts. On the first run, inspect and commit the generated reference only after confirming it is the intended appearance. Review later diffs before updating references; do not automatically bless every changed screenshot.
Rendering consistency and options
- Use the same operating system, browser version, fonts, browser settings, and headless mode when creating and comparing snapshots. Playwright warns that rendering varies with host environment, hardware, power source, and other conditions.
- Choose a stable viewport and test data. Avoid capturing while content, timestamps, rotating banners, or animations are changing.
animations: 'disabled'andcaret: 'hide'reduce common sources of variation. Use screenshot assertion options such as pixel-difference thresholds only when you understand what visual changes they may allow.- For dynamic regions, stabilize the page data or use screenshot styling to suppress known changing elements. Keep suppression narrow: hiding a large area can mask a real regression.
- Use explicit names for snapshots and establish a team process for reviewing changes and updating references.
What you operate
With repository snapshots, your team chooses how to present diffs in CI, how to protect approvals, how to retain history, and how to handle artifacts. The workflow is lightweight, but repository and CI conventions become part of the visual-testing system.
3. Consider Visual Regression Tracker for a self-hosted review service
Visual Regression Tracker (VRT) is the strongest self-hosted server candidate in this evidence set. Its project describes an open-source service with Docker setup, baseline history, ignored regions, and connections to multiple automation frameworks. It describes support through JavaScript, Java, Python, .NET, or REST, and screenshots from web, mobile, and desktop applications. A standalone Java tool is described for PDF comparison.
These are project claims, not independent checks of current production readiness or security. Before adopting VRT, review the current repository and deployment instructions, then validate authentication and access control, image storage and retention, backup and restore, upgrade process, scaling, and the actual review experience with a representative test.
Choose VRT when you need a central self-hosted service and are willing to operate it. Confirm that the supported integrations and review model fit your stack rather than assuming feature parity with Eyes.
4. Consider BackstopJS for local screenshot regression
BackstopJS documents local test execution and a Docker workflow. That makes it worth evaluating if you want a configured screenshot regression process that your team operates. The reviewed project material does not establish a current feature matrix comparable to Eyes or VRT.
Check the current repository for maintenance activity, browser support, configuration behavior, report output, baseline approval steps, and Docker image instructions. Include the cost of maintaining those pieces in your selection decision.
Why Chromatic is a boundary case
Chromatic’s Playwright integration captures a UI archive and uploads it to Chromatic’s cloud, where snapshots and pixel diffs are handled and reviewed. A self-hosted Git provider can supply repository history, but the review service remains hosted. If your rule forbids sending UI archives outside your infrastructure, this workflow does not satisfy it.
How to choose
- Define the boundary. Decide whether private images and baselines are enough or whether the complete service must run inside your environment.
- Check Eyes deployment eligibility. Request current private-cloud and on-premises terms, architecture, data flow, operational split, and pricing.
- Pick the simplest workflow that fits. Start with Playwright assertions if repository snapshots and your own review process are enough. Evaluate VRT if you need a central self-hosted service. Evaluate BackstopJS for a locally run workflow.
- Verify operations before migration. Test backups, restore, upgrades, access control, retention, and CI behavior using your own representative pages.
- Document baseline ownership. Define who approves visual changes, how references are promoted, and how you investigate environment-only diffs.
- Compare total cost. Include licensing or hosting, storage, CI runtime, maintenance, upgrade work, and the time spent reviewing false positives. Comparable current prices were not established in the reviewed material.
ScreenshotNeo for website capture
If the job is to capture a website as an image or PDF, ScreenshotNeo is the alternative to try first. It is a website screenshot API and MCP server from Yorker Media. One GET request returns a PNG, JPEG, WebP, or PDF. Its capture workflow accepts cookie and consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each cleanup step can be turned off. Responses identify page and billing outcomes in headers.
It is not a visual regression testing manager: the stated features do not include screenshot baselines, pixel-diff review, or approval history. Use it for capture, and use a visual-testing workflow when you need to compare and approve changes.
cURL
curl -G "https://api.screenshotneo.com/v1/shot" \
-d access_key=YOUR_API_KEY \
--data-urlencode url=https://stripe.com \
-o shot.webp
Python
import requests
r = requests.get(
"https://api.screenshotneo.com/v1/shot",
params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"},
timeout=90,
)
open("shot.webp", "wb").write(r.content)
Node.js
const q = new URLSearchParams({
access_key: 'YOUR_API_KEY',
url: 'https://stripe.com',
});
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
See the ScreenshotNeo API documentation for parameters and response details. The service also supports full-page capture with lazy images loaded, selector capture, device and viewport settings, retina scale, PDF settings, custom CSS and JavaScript, selector waits and network-idle waits, request blocking, headers and cookies, timezone and geolocation, resizing, caching, signed image links, asynchronous jobs with signed webhooks, bulk capture, a usage API, and an OpenAPI specification. Parameter names used by other screenshot APIs also work.
Or skip the browser setup
Make one request to capture a page:
curl -G "https://api.screenshotneo.com/v1/shot" \
-d access_key=YOUR_API_KEY \
--data-urlencode url=https://stripe.com \
-o shot.webp
Cookie banners, popups, and chat widgets are removed before the shot. Bot checks, blank pages, and failed loads are never billed. An MCP server lets AI agents take screenshots. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000. Create a free ScreenshotNeo account.
Troubleshooting and reliability
| Symptom | Likely cause | What to do |
|---|---|---|
| Playwright diffs change between machines | Different OS, browser versions, fonts, hardware, settings, or headless mode. | Run comparisons in the same environment used for the baseline; pin the browser setup and stabilize fonts and test data. |
| Snapshots fail on content that appears late | The page was captured before application content settled, or data varies between runs. | Wait for a meaningful page condition, stabilize fixtures, and avoid arbitrary delays where a reliable selector or state check is available. |
| Many false visual changes | Animations, caret blinking, timestamps, rotating content, or broad unstable regions. | Disable animations, hide the caret, use fixed test data, and suppress only narrowly defined dynamic regions. |
| Snapshot update hides a regression | References were refreshed without reviewing the diff. | Require a human review of the proposed visual change before promoting a baseline. |
| Self-hosted service is inaccessible or loses history | Deployment, storage, access, backup, or upgrade assumptions were not validated. | Verify current deployment guidance, permissions, backups, restore, retention, and upgrade procedures before relying on it. |
| A tool advertised as self-hosted sends artifacts to a vendor | Only the repository or runner is self-hosted; the review service still uses a hosted endpoint. | Trace the complete data path, including archives, images, metadata, and logs. Chromatic’s documented Playwright flow uploads UI archives to its cloud. |
Visual tests are only as reliable as their rendering environment and data. For any candidate, run the same representative pages repeatedly in the intended CI environment, inspect diffs, and test failure and recovery behavior. This is a recommended evaluation procedure, not a benchmark result.
FAQ
Does self-hosted mean the same thing as private cloud?
No. Private cloud can be vendor-hosted on dedicated infrastructure. Ask who controls the server, where images and metadata are stored, and who operates it.
Is Playwright a full Eyes replacement?
It provides screenshot assertions and reference comparisons. The reviewed documentation does not establish parity with Eyes’ visual AI, cross-platform coverage, or managed review workflow.
Does ScreenshotNeo compare screenshots against baselines?
Not according to the product facts used here. It captures website images and PDFs; pair it with a visual regression system if you need baseline comparison and approval.
Can I choose based on current price from this comparison?
No comparable current pricing was established for these visual-testing products. Request current terms and include infrastructure and operating costs in the comparison.
