DiforaGuides

Migrate from Lost Pixel with a verified first baseline.

Keep the screenshot generation you can reproduce, establish new baselines in Difora and verify the next build before replacing your existing CI gate. Review history and approvals are not automatically imported.

1. Inventory what your current setup produces

Lost Pixel’s repository was archived on April 22, 2026; its README announces the team joining Figma and a product sunset. This guide does not assume that your particular account remains accessible. Preserve any records you can legitimately export before changing your workflow.

List screenshot names, browser/viewport/theme variants, baseline branch, capture dependencies, masks and thresholds. Record which states the full suite must include. Identify the directory containing current captures, separately from old baselines, diffs and test-failure images.

2. Keep or replace the capture step

Start each run with a clean generated directory. Preserve relative names, or deliberately document the new name mapping. Browser/theme variants need distinct names. Difora treats relative PNG paths as identities; it does not infer identity from the old tool’s history.

screenshots/
  checkout-desktop.png
  checkout-mobile.png

This is an illustrative manifest layout, not customer evidence. Capture the complete intended suite, wait for success, and keep any Difora metadata sidecars with their matching PNGs. Do not combine old baselines and current images in one upload directory.

3. Establish new baselines deliberately

Create a Free account, verify your email, accept Agreements as the organization owner, create the project and obtain its upload token. Install difora as a development dependency (Node 20+); keep DIFORA_TOKEN in your CI secret store, never in a committed config or command.

Check out the intended baseline branch and set the same baseline branch in the project. For a repository whose baseline branch is main, upload its complete current captures:

npx difora upload ./screenshots --branch main

Replace main with your actual branch. The first build is unreviewed and exits 1. Open the printed build link, inspect names and every image, then approve the baseline. Do not enable automatic approval simply to get a green migration run.

Previously exported baseline PNGs may be uploaded as a separately reviewed first build if you know their source and name mapping. They are not imported approvals or review history, and a different renderer can produce broad changes. A fresh capture in your intended CI environment is the recommended starting point.

4. Prove the next build

Clear the generated directory and capture the same suite again in the same environment. An unchanged build should pass (exit 0). Next, make one intentional UI change on a test branch and confirm that it produces a visible diff and review requirement (exit 1). Restore that test change after the check. Usage or upload errors use exit 2; comparison errors use exit 1, and a wait timeout uses exit 3. Investigate failures instead of ignoring the exit code.

Difora’s thresholds and masks have their own semantics. Recreate only the rules you need using the configuration guide; do not assume numeric settings translate directly. Missing names may be removals, not skipped tests. Use environment evidence to explain large renderer differences.

5. Switch the CI gate and keep a rollback path

Keep the old configuration and its recorded dependencies until the Difora baseline, unchanged repeat and intentional-change check work. During the trial, keep the new job separate from required merge checks. Then deliberately make the new job required and remove the superseded job. Do not publish or duplicate captures to a service you are no longer authorized to use.

The CLI exit code works independently of repository-host integration. Difora’s GitHub App is not currently configured; use the documented CLI-side GitHub status recipe if you need it. Check your branch-protection settings separately.

If the trial fails, retain or restore the previous CI configuration only where it still works and remains authorized. A copy of an archived runner is not a guarantee of hosted-service availability. Revoke retired tokens and remove obsolete generated artifacts after accepting the migration, preserving records under your own retention policy.

Common migration failures

Source checked September 20, 2026: Lost Pixel’s repository and sunset notice. For product fit, read the Lost Pixel comparison.

Difora is an independent service. Product names identify the tools discussed; no affiliation or endorsement is implied.