{"generated":"2026-11-03","what":"Where the pages of tracked developer websites visibly changed, as page geometry only. No screenshots are published: they would identify anonymous projects. Before, after and highlighted diff images are kept privately for 90 days and are available to a buyer on request.","trigger":"A capture is taken when the research agent sees the page text change (text fingerprint), or once to make a first baseline.","method":["Full-page screenshot in Chromium at 1280 px wide, animations off, lazy images scrolled into view, capped at 8000 px of page height.","Both captures scaled to 560 px wide and turned grey. Pixel rows are aligned between the two captures (longest matching blocks), so content that only moved down is not counted as changed.","Rows that do not align are changed. Inside replaced bands of equal height, pixels differing by more than 24 grey levels narrow the band to the columns that changed. Bands closer than 12 px merge; bands under 4 px are dropped.","Before comparing, the page is captured twice 3 seconds apart; rows that differ between those two shots (carousels, animation) are masked in the comparison and counted. A change is listed only if at least 1 % of the page area changed; smaller differences are counted as not visible.","Regions are [x, y, width, height] as fractions of the page width and of the new page height. Page height is rounded to 500 px."],"limits":{"own_site_only":true,"listing_portals_skipped":57,"max_page_height_px":8000,"time_budget_s":1500,"baseline_cap_mb":90,"artifact_cap_mb":40,"artifact_retention_days":90},"caveats":["Carousels, rotating banners, cookie notices, text that animates in and personalised content can still show as changes. In a test of 16 sites captured twice a few minutes apart with no real change, 2 crossed the 1 % threshold. A listed change is a prompt to look, confirmed by eye on the private images.","The first capture of a project is only a baseline: a change can be shown only from the second capture on.","History starts 3 November 2026."],"run":{"captured":148,"baselines_new":148,"changes_visible":0,"changes_invisible":0,"failed":2,"skipped_budget":0,"art_cap_hit":false,"base_cap_hit":false,"eligible":580,"queued":150,"changed_text":0,"without_baseline":580},"totals":{"projects_with_baseline":148,"projects_with_visible_change":0,"changes_listed":0},"recent":[],"data":"/data/visual-diff.json"}