# Put both versions on one image People claim two versions of a page look the same without ever seeing them next to each other. Then a vague reassurance ships something broken. This pass ends that. The page being matched on the left, the page being built on the right, on a single image. **That combined image is what gets reviewed.** Finding the differences is not this pass. This pass builds the thing the differences are found in. Commands assume a folder named `beargrassai` on the machine running them. --- ## The two words **REFERENCE** — the version the page must match. Usually the live site, but not always: sometimes a static export of an old shop, sometimes a client's existing site on another platform, sometimes a dated copy published to a separate address for review. Whatever the work names, that is the reference. **CANDIDATE** — the version being built. It is not accepted until someone has compared it and said so. --- ## What you are doing here Building the board somebody else will read. You are not the reviewer yet. Done means: every page in scope has a combined image, there is a gallery to scroll, and there is a list saying how many pairs were made and how many pictures failed to find a partner. --- ## The rule this pass exists to enforce **Before anyone claims two versions match, a combined image must exist for every page in scope.** Folders of single-side pictures are not the review surface. Counting elements in the markup is not a substitute. Building the image is not itself the verdict — someone still has to read it. --- ## What this produces 1. Two sets of pictures, one per side, same pages, same screen size. Start with desktop. 2. **A gallery** — `sidebyside-gallery.html`, for a person to scroll, reference on the left. 3. **The combined images** — `pair-shots/sidebyside__.png`. One file per page, both sides in it. These are what get reviewed. 4. **A list** — `sidebyside-manifest.json`: which pages paired, which did not, which folders went in. The single-side files stay where they are as inputs. **They are not the deliverable.** --- ## Do it Two page-sets. **Identical addresses, and identical names for the screen sizes.** The tool pairs pictures by filename and the filename starts with the screen-size name, so one set saying `laptop-1280` and the other saying `desktop` produces zero pairs while every command still looks like it worked. The candidate must be a **pinned** version — a local server running one specific build, or a fixed address for one specific deployment. Record which build you used. What is refused is a moving address that may have changed under you between the two captures. A reference built as folders carries a trailing slash — `/about/`. A candidate may serve `/about`. The tool normalises both to the same key, so they still pair. ``` node agent-tools/picviewer/capture.mjs --project -reference --only desktop node agent-tools/picviewer/capture.mjs --project -candidate --only desktop ``` Use the sign-in-wall wrapper for either side that needs it. Picture count must equal page count on both sides. Write down both output folders. Then combine: ``` node agent-tools/picviewer/sidebyside.mjs \ --live agent-tools/picviewer/out// \ --clone agent-tools/picviewer/out// \ --out Clients///sidebyside-