There's a pricing model in visual testing that creates a perverse incentive: the more thoroughly you test, the more you pay.
Percy charges per screenshot. Their mid-tier plan gives you 100K screenshots/month for roughly $5,000. Applitools starts at $699/month. Chromatic charges $179/month for 35K snapshots. Mabl starts at $500/month with complete vendor lock-in.
The Math Gets Ugly Fast
Consider a modest application: 50 pages, 3 viewport sizes, 2 browsers. That's 300 screenshots per build.
Now consider how often you build: 10 developers pushing 3 PRs/week each = 30 builds/week. Each PR triggers 2 CI runs = 60 runs/week. That's 18,000 screenshots/week - or 72,000/month. You're already past Percy's Starter plan. For a 50-page app with 10 developers.
Scale to a real product: 200 pages, 4 viewports, 3 browsers, 20 developers. You're looking at 720,000 screenshots/month. Four engineers' salaries worth of screenshot hosting.
The Perverse Incentive
Per-screenshot pricing punishes the exact behaviors you want to encourage:
- Testing more pages - every new page multiplies cost across all viewports and browsers
- Testing more viewports - responsive bugs are caught by testing responsive layouts, but each viewport costs money
- Running CI more frequently - trunk-based development and continuous deployment require frequent builds, each costing money
- Multi-step flows - a checkout flow with 5 screens costs 5× a single page
Teams make coverage decisions based on budget, not risk. That's backwards.

What You're Actually Paying For
Break down what these tools provide: Screenshot capture - Playwright does this for free. Image storage - S3 costs $0.023/GB. Pixel comparison - pixelmatch runs in milliseconds, open source. You're paying $5,000/month for a dashboard and some cloud VMs.
The Self-Hosted Alternative: $0 with Unlimited Screenshots
Self-hosting visual testing means your only cost is the compute you already have:
- Screenshots: Unlimited. Stored locally. Cost = disk space you already have.
- Diff computation: Your CPU. A pixelmatch comparison takes ~15ms.
- Dashboard: Runs on the same server as your app.
- AI features: One-time cost during test generation. Running tests consumes zero AI tokens.
Once the test exists, it's a deterministic Playwright script. Running it 10,000 times costs the same as running it once: nothing.
The SHA256 Optimization
Self-hosted tools can implement optimizations that per-screenshot services never will (because those optimizations reduce the billable unit). SHA256 hash comparison: if the hash matches the baseline, the test passes instantly. A cloud service has no incentive to implement this. A hash match is still a screenshot in their billing model.
The Data Privacy Angle
Per-screenshot pricing has a second hidden cost: your screenshots leave your network. Every visual test uploads your application's rendered UI to a third party's cloud. For healthcare, finance, government - it's a compliance dealbreaker.
Self-hosted visual testing eliminates this entirely. Screenshots are captured, compared, and stored on your own infrastructure. Nothing leaves your network.
The only thing per-screenshot pricing guarantees is that your team will test less than they should. That's the hidden tax: not the dollars, but the coverage you silently sacrifice to keep the bill reasonable.
