ScreenshotNeo

BlogHow-to

How to approve or reject visual changes in Happo

Review Happo screenshots and diffs, decide whether a change is expected, and resolve comparisons in the UI or through its MCP server.

By the ScreenshotNeo team4 October 20266 min read

To approve or reject visual changes in Happo, open the comparison from its CI job, pull request, or Happo job page. Inspect the before and after screenshots and the highlighted diff, decide whether the changes match the intended code or design change, then select Accept for expected changes or Reject for unintended or unexplained changes. Happo announced on September 3, 2026 that comparison and multi-project job pages use one-click Accept and Reject controls.

How to approve or reject visual changes in Happo

  1. Open the review. Follow the comparison link from the relevant CI run or pull request, or open the job in Happo and select the comparison needing review. Happo’s [CI and integration documentation](https://happo.io/docs/) describes review links for configured workflows.
  2. Inspect the evidence. Compare the before and after views. Use side-by-side to scan the overall result, diff to locate changed pixels, and swipe to toggle between the states. Review all affected snapshots, including relevant stories, browsers, and viewports.
  3. Check the change against intent. Ask whether the rendered differences follow from the code or design change. A small component edit can affect several stories or screen variants, so inspect the breadth of the run rather than judging only its first diff.
  4. Resolve the comparison. Choose Accept when the visual changes are expected and acceptable under your team’s review policy. Choose Reject when they are unintended, or still unexplained. The controls record a review decision; they do not determine whether a change is correct for your product.

Reviewing multi-project jobs

For a job covering multiple projects, first check which projects completed and which have diffs. Happo announced status grouping, sortable columns, hidden unchanged projects, and a completed-project diff summary alongside the one-click controls. Use that overview to identify the affected projects, then inspect their comparisons before resolving them. A project with no reported diff is not a substitute for checking that the expected projects and snapshots ran.

How to decide whether a diff is safe to accept

Use the intended change as the standard, not the size or color of the highlighted diff alone. A practical review can follow this checklist:

  • Does the changed area correspond to the component, content, or styling edited in the pull request?
  • Are layout, alignment, text wrapping, images, and interactive states still correct?
  • Did the run include the relevant stories, screens, browsers, and viewport sizes?
  • Are there unexpected changes outside the intended component or page?
  • Can a teammate explain any difference that is not immediately obvious?

Accept only when the observed changes are understood and acceptable to the team. Reject or investigate if the run contains unexplained differences. Happo’s documentation describes the review controls but does not impose a universal acceptance policy; teams should agree on who can resolve comparisons and what evidence they require.

Color-delta tolerance and visual noise

If a diff appears to consist of small pixel variations, check whether the run uses color-delta tolerance. Happo says tolerance can ignore minor differences such as anti-aliasing and compression noise. Tolerance can reduce visual noise, but it cannot establish that a substantive layout, color, or styling change is harmless. Review the affected region and the configured threshold before deciding.

Review a Happo comparison with its MCP server

For an authorized MCP client, Happo documents tools to find comparisons for a commit SHA, retrieve comparison details (including diffs and added, deleted, or ignored snapshots), approve or reject a comparison needing review, and report a specific diff as a flake. The MCP connection uses Streamable HTTP and OAuth 2.1. The assistant inherits the connected Happo account’s permissions, and decisions are recorded against that user. Revoke a connection through the Connected applications section of account API token settings.

The exact tool-call arguments depend on the MCP client and the current Happo tool schema. Use Happo’s [official MCP documentation](https://happo.io/docs/) to connect and inspect the currently available tools; don’t guess an approval payload or use an agent account with broader permissions than the review requires. Reporting a diff as a flake ignores that diff and records a Flake row attributed to the connected user, so use that action only when it is truly flaky rather than as a shortcut to acceptance.

What a visual comparison proves

A screenshot comparison shows rendered output against a baseline for the snapshots the team configured and ran. It does not prove that every route, browser, viewport, or interactive state was covered. Happo documents integrations for Storybook, Cypress, and Playwright; Storybook can capture states such as loading, error, hover, and open menus. Happo also describes accessibility regression checks as an option alongside screenshot runs. Coverage depends on the project’s configuration and executed tests.

When a review is incomplete, distinguish a clean diff from missing evidence: check run status and snapshot coverage, then rerun or add the missing state if needed. Do not accept a comparison solely because the displayed differences look small when the relevant state was never captured.

Troubleshooting Happo visual reviews

Problem Likely cause What to do
No comparison or review link The CI or pull-request integration did not publish a link, or the job has not completed. Open the Happo job directly, confirm the CI run finished, and check the project’s integration configuration and job output.
Accept or Reject is unavailable The comparison may not be in a reviewable state, or the connected account may lack permission. Confirm the comparison says it needs review, sign in with an authorized account, and check the account’s access.
A diff looks noisy Rendering changes, anti-aliasing, or compression can produce small pixel differences. Inspect the region and configured color-delta tolerance. Do not use tolerance as a reason to ignore a meaningful layout or styling change.
The result does not cover the changed behavior The relevant story, route, viewport, browser, or interaction state may not have run. Check the configured snapshot set and job results; add or run the missing case before deciding.
An MCP action fails or cannot resolve a comparison The OAuth connection may be missing, expired, revoked, or authorized for an account without the required access. Reconnect through the official MCP setup, verify the connected user’s Happo permissions, and use the documented tool schema.
A resolved change later proves wrong The review may have missed an affected snapshot or misunderstood intended behavior. Reopen the relevant CI or Happo context, identify the missed evidence, and follow the team’s process for creating and reviewing a corrective change.

Performance, reliability, and review cost

Review speed depends on the number of projects and snapshots, how quickly the job completes, and how clearly diffs identify changed regions. Multi-project grouping and sorting can help locate affected projects, while hiding unchanged projects can reduce scanning. These are workflow aids, not guarantees that a review is complete.

For reliable decisions, make sure the visual run completed and covers the relevant states before accepting. Treat missing, failed, or partial capture results as incomplete evidence. Happo’s reviewed documentation does not establish a universal cost per approval or review, so check your account’s current plan and usage details rather than inferring a price from the number of diffs.

Or skip the browser setup

If the goal is to capture a clean website screenshot outside Happo’s baseline review workflow, ScreenshotNeo is a website screenshot API and MCP server for developers. One GET request returns a PNG, JPEG, WebP, or PDF. The examples and parameters are in the ScreenshotNeo docs.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

ScreenshotNeo removes cookie banners, newsletter popups, and chat widgets before the shot. Bot checks, blank pages, and failed loads are never billed. Its MCP server lets AI agents take screenshots. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000. Sign up for 1,000 free screenshots a month, no card required.

FAQ

Does Accept change the code in my pull request?

No. It resolves the visual comparison review; your code change remains part of your repository workflow.

Can an AI agent approve a comparison?

An authorized MCP client can resolve a comparison needing review. It acts with the connected Happo user’s permissions, and the decision is attributed to that user.

Should I accept a diff caused by anti-aliasing?

First check the configured tolerance and confirm the difference is only rendering noise. If the change affects actual layout or styling, review it as a product change.

Does a clean Happo run mean every page was checked?

No. It covers the snapshots and states configured and executed for that run.