Rendex
Use Case

Catch Visual Bugs Before Your Users Do

Capture screenshots of your app across viewports and compare against baselines. Detect layout shifts, missing elements, and style regressions automatically.

The Problem

Visual bugs slip through code review and unit tests. A CSS change that looks fine on desktop might break mobile. Testing every page across viewports manually is impossible at scale.

The Solution

Rendex captures screenshots from any URL or staging environment across custom viewports. Build a visual regression testing pipeline: capture baselines, compare against new deployments, and flag visual differences — all via API.

See it in action

A baseline capture of an app page next to the current capture, with an orange ring highlighting the region that changed — a caught UI regression.

Get Started in Minutes

visual_test.py
from rendex import Rendex
from pathlib import Path

rendex = Rendex("YOUR_API_KEY")

viewports = [
    {"width": 1440, "height": 900, "name": "desktop"},
    {"width": 768, "height": 1024, "name": "tablet"},
    {"width": 375, "height": 812, "name": "mobile"},
]

for vp in viewports:
    result = rendex.screenshot(
        url="https://staging.myapp.com",
        width=vp["width"],
        height=vp["height"],
        full_page=True,
    )
    Path(f"baseline-{vp['name']}.png").write_bytes(result.image)
visual-diff.mjs
import { Rendex } from "rendex"
import { readFileSync, writeFileSync } from "node:fs"
import { PNG } from "pngjs"
import pixelmatch from "pixelmatch"

const rendex = new Rendex("YOUR_API_KEY")

// Capture the current deploy, then diff it against the stored baseline.
const { image } = await rendex.screenshot({
  url: "https://staging.myapp.com",
  width: 1440,
  height: 900,
  fullPage: true,
})

const current = PNG.sync.read(Buffer.from(image))
const baseline = PNG.sync.read(readFileSync("baseline-desktop.png"))
const { width, height } = baseline
const diff = new PNG({ width, height })

const changed = pixelmatch(
  baseline.data, current.data, diff.data, width, height,
  { threshold: 0.1 },
)

writeFileSync("diff-desktop.png", PNG.sync.write(diff))
if (changed > 0) {
  console.error(`Visual regression: ${changed} pixels changed`)
  process.exit(1) // fail the CI job
}

100 free API calls/month — no credit card required. Get your API key and start building.

Built for This Use Case

Custom Viewports

Test across any viewport from 320px to 3840px. Retina support up to 3x.

Batch Capture

Capture all pages and viewports in a single batch request.

Dark Mode Testing

Capture both light and dark modes to test theme switching.

Start Free, Scale as You Grow

100 calls/month free. Starter at $69/mo for 10K calls (or $58/mo billed annually — 2 months free). Pro at $179/mo for 100K calls.

Frequently Asked Questions

Related Resources