visual testing

The Percy alternative with free pixel snapshots.

Compare every screen with an approved baseline, in the browser and on real devices. Pixel snapshots cost no credits, and AI checks cover the screens where exact pixels don't matter.

1,000 credits, no card, 14 days.

baselinenew
1,000 free creditsNo card, 14 days
Pay for usage, not seatsAdd the whole team at no extra cost
Self-healing testsFixes are re-run and proven before they land
Checks on every pull requestResults in GitHub before you merge
Two kinds of check

Deterministic pixel checks + AI checks

Use exact pixels when every pixel matters, and a plain-language check when you only care that the screen is right.

Deterministic

Pixel checks

Every pixel is compared with the approved baseline. You set how different a pixel must be and how much of the screen may change, and mask clocks, ads and anything else that moves.

  • Up to 20 ignore regions per check
  • A size change always counts as changed
  • Pixel snapshots cost no credits
Probabilistic

AI checks

Write what must be true on the screen in plain language. A model says pass, fail or unsure, and you decide what unsure means for that check.

  • "The plan shown is Team and usage reads 12%"
  • Compare with the baseline, or the new screen alone
  • 1, 4 or 12 AI-check credits by model
Review

See what changed. Decide in one click.

Baseline, new and difference

Three panes side by side with zoom and the changed regions boxed.

A wipe slider

Drag across the screen to see exactly what moved.

Approve or reject in one click

Approve as the new baseline, reject, or confirm it as a bug. Every decision can be undone.

A review queue per suite

Changed screens wait in one list, with bulk approve and reject.

Baselines without the busywork

The first screen becomes the baseline automatically. Undo it if it was wrong.

Real devices too

On phones the screenshot is taken on the device, with system bars left out by default.

Set up

Two lines in the tests you already have

Works with Playwright, and with WebdriverIO and selenium-webdriver suites on the Kifas hub through @kifas/appium.

Installterminal
npm install --save-dev @kifas/playwright
Pixel and AI checkscheckout.spec.ts
import { kifas } from '@kifas/playwright'

await kifas.visualCheck(page, 'checkout-page', { mask: ['.timestamp'] })

await kifas.visualCheck(page, 'billing', {
  mode: 'ai',
  prompt: 'The plan shown is Team and usage reads 12%',
  compareTo: 'none',
})
Moving from Percy

One call changes. Your tests stay.

Swap the snapshot call, keep the names you use today, and move ignored areas to the mask option.

With Percycheckout.spec.ts
import percySnapshot from '@percy/playwright'

await percySnapshot(page, 'Checkout')
With Kifascheckout.spec.ts
import { kifas } from '@kifas/playwright'

await kifas.visualCheck(page, 'Checkout')
Side by side

Kifas and Percy

KifasPercy
Pixel snapshotsFree, no creditsPriced by screenshot
Review and approve baselines✓✓
Functional tests and devices in the same tool✓Visual testing only
FAQ

Questions teams ask before switching

Is it a drop-in for Percy?

Not line for line. Each percySnapshot(page, name) call becomes kifas.visualCheck(page, name), and options like ignored areas move to the mask option. Most suites change with a find and replace.

Are pixel snapshots really free?

Yes. Pixel snapshots cost no credits, however many you take. AI checks use AI-check credits: 1, 4 or 12 depending on the model.

Does it work on mobile apps?

Yes. With @kifas/appium, WebdriverIO and selenium-webdriver suites on the Kifas hub get the same pixel and AI checks. The screenshot is taken on the device, so nothing is uploaded from your CI.

How do I stop noisy diffs?

Mask the parts that change on every run, like clocks and ads, and tune the sensitivity and the share of pixels allowed to change. For screens where exact pixels do not matter, use an AI check instead.

Catch visual bugs before your users do.

Start free with 1,000 credits. Pixel snapshots cost nothing.

1,000 credits, no card, 14 days.

BrowserStack and Percy are trademarks of their respective owners.