Skip to main content

Visual regression checking with figma-first baselines, pixel+SSIM diffing, ignore regions, and HTML reports.

Project description

visualcheck

Visual regression checking with:

  • Figma-first baselines (optionally synced via Figma API)
  • Runtime baselines (auto-create when missing; never overwrite by default)
  • Pixel diff % + SSIM (with optional resize-on-mismatch + WARN)
  • Ignore regions (mask dynamic areas via selectors + explicit rects)
  • Self-contained HTML report + report.json

Install

pip install visualcheck
playwright install chromium

Config (visualcheck.yaml)

project: consumer_website
suite: daily_sanity

envs:
  prod: "https://www.wakefit.co"

views:
  desktop_profiles: ["desktop_1440x900", "macbook_1440x900"]
  mobile_devices: ["iPhone 15 Pro Max", "iPhone 13 mini", "Pixel 7"]

pages:
  - id: home
    url: "/"
    wait_for: "body"
    full_page: true

# Optional flows (multi-step user journeys)
flows:
  - id: search_flow
    start_url: "/"
    steps:
      - action: click
        selector: "text=Search"
      - action: wait
        ms: 500
    snapshots:
      - id: after_search
        wait_for: "body"
        full_page: true

baseline:
  # Locked resolution order:
  # figma -> runtime -> create runtime baseline (if enabled)
  priority: ["figma", "runtime"]
  create_if_missing: true
  never_overwrite: true
  on_created: "INFO"  # INFO|WARN|FAIL

compare:
  resize_on_mismatch: true
  mismatch_level: "WARN"  # WARN|FAIL
  thresholds:
    max_pixel_diff_pct: 0.10
    min_ssim: 0.995

ignore_regions:
  global:
    selectors: ["#cookie-banner", ".chat-widget"]
  by_snapshot:
    home:
      rects:
        - {x: 0, y: 0, width: 300, height: 120}

# Optional Figma sync (writes into visual_baseline/<project>/<suite>/figma/...)
# figma:
#   token_env: FIGMA_TOKEN
#   file_key: "<FIGMA_FILE_KEY>"
#   frames:
#     - id: home
#       node_id: "123:456"
#       view_id: "desktop_1440x900"   # optional

Commands

Run full check

visualcheck run --env prod

Outputs:

  • Baselines:
    • visual_baseline/<project>/<suite>/figma/<view>/<snapshot>.png
    • visual_baseline/<project>/<suite>/runtime/<view>/<snapshot>.png
  • Run artifacts:
    • test_report/<project>/visual_runs/<run_id>/current/...
    • test_report/<project>/visual_runs/<run_id>/diff/...
    • test_report/<project>/visual_runs/<run_id>/report/report.html
    • test_report/<project>/visual_runs/<run_id>/report/report.json

Capture only

visualcheck capture --env prod --out current

Diff only

visualcheck diff --baseline visual_baseline/myproj/mysuite/runtime --current current --out report

Sync Figma baselines

export FIGMA_TOKEN="..."
visualcheck figma-sync

Approve current run as runtime baseline (explicit)

visualcheck approve --env prod --run-id 20260207_235500
# Overwrite existing runtime baselines only with:
visualcheck approve --env prod --run-id 20260207_235500 --force

Baseline rules (locked)

For each snapshot + view:

  1. If a Figma baseline exists → use it
  2. Else if a runtime baseline exists → use it
  3. Else → capture and create runtime baseline (controlled by baseline.create_if_missing)

Notes

  • Ignore regions are masked with a solid color before diffing.
  • If screenshot sizes differ and compare.resize_on_mismatch=true, current is resized to baseline size and a warning is recorded.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

visualcheck-0.2.0.tar.gz (16.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

visualcheck-0.2.0-py3-none-any.whl (18.1 kB view details)

Uploaded Python 3

File details

Details for the file visualcheck-0.2.0.tar.gz.

File metadata

  • Download URL: visualcheck-0.2.0.tar.gz
  • Upload date:
  • Size: 16.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for visualcheck-0.2.0.tar.gz
Algorithm Hash digest
SHA256 26e10d48aca5f9b57c8e4b8519b0a25c5a8a1fe9df075e3bbe26c8ab8f021b77
MD5 18c7720f668c7462cfe1152fcf82492a
BLAKE2b-256 c9b8348c2bd1c490071d67d568f96ba2b09abff397919a4219924d77c69b4071

See more details on using hashes here.

File details

Details for the file visualcheck-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: visualcheck-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 18.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for visualcheck-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 464c7a753c0b1481a586bafd36e9670d79955b29f98b151db79599ebd875c45b
MD5 8acc2ec43f53125043133c3ee596eb66
BLAKE2b-256 432ae73d31f260395382f1b3021ad26c4e2d4313b930eef0127316c9c55a062f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page