Skip to main content
CLI & uploads

A folder of screenshots and one command

Your tests already take screenshots that nobody compares. Upload them with @testkase/visual, from any language or CI, and get an exit code your pipeline already knows how to read.

No SDK · no framework plugin · zero runtime dependencies

ci — bash

$ npx @testkase/visual upload ./screenshots --project Marketing

Uploading 48 snapshots, 5 at a time…

✓ home.png ✓ pricing.png ✓ cart.png

± checkout.png changed

Build #2214 finished

48 snapshots · 3 changed · 3 to review

→ testkase.io/visual/builds/2214

$ echo $? 1

Your suite already takes the screenshots. Then it throws them away.

Playwright, Cypress, Selenium, XCUITest, a Python script — somewhere in your pipeline is a folder of PNGs nobody compares to anything. Written on every run, looked at once, deleted by the next build.

What the command gives you

Built to be boring in your pipeline, which is the highest compliment a CI tool can earn.

One command, any language

If your test can write a PNG, it can feed this — Java, Python, C#, Ruby, JavaScript, a shell script.

An exit code your pipeline reads

0 when nothing needs review, 1 when something changed, 2 when the command was wrong. That is the whole integration.

Zero runtime dependencies

It runs inside your CI with nothing of ours that can conflict with anything of yours.

Bytes go straight to storage

Images upload from your machine to object storage, never through our servers.

Builds, not loose images

A run of forty screens is one build with one verdict, not forty notifications.

One shared set of baselines

Uploads share baselines, thresholds and review with Live captures and scheduled runs.

The TestKase Visual Builds list, each row a batch of snapshots with its browser, timestamps, snapshot count, and unreviewed changes flagged

One step after your tests. One verdict your pipeline acts on.

The command uploads the folder and exits. A run of forty screens becomes one build to review, each change opening a before and after, tagged with the branch and commit that made it. Nothing to parse, no webhook, no API to poll.

FAQ

Frequently asked questions

All of them, because it does not integrate with any. If your tests can write a PNG to a folder — Playwright, Cypress, Selenium, XCUITest, Espresso, a Python script, a shell one-liner — the CLI can upload it. There is no plugin to install and nothing bound to your runner's version.

Point it at the screenshots you already have

One command against a folder your suite is already writing, and you have visual testing.