[{"data":1,"prerenderedAt":191},["ShallowReactive",2],{"navigation_docs":3,"-viewer":93,"-viewer-surround":188},[4,41,46,89],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":40},"Learn","i-lucide-book-open","\u002Flearn","1.learn",[10,15,20,25,30,35],{"title":11,"path":12,"stem":13,"icon":14},"What visual regression testing is","\u002Flearn\u002Fwhat-is-visual-regression-testing","1.learn\u002F1.what-is-visual-regression-testing","i-lucide-eye",{"title":16,"path":17,"stem":18,"icon":19},"How image diffing works","\u002Flearn\u002Fhow-image-diffing-works","1.learn\u002F2.how-image-diffing-works","i-lucide-diff",{"title":21,"path":22,"stem":23,"icon":24},"Why screenshots flake","\u002Flearn\u002Fwhy-screenshots-flake","1.learn\u002F3.why-screenshots-flake","i-lucide-shuffle",{"title":26,"path":27,"stem":28,"icon":29},"Baselines and approval","\u002Flearn\u002Fbaselines-and-approval","1.learn\u002F4.baselines-and-approval","i-lucide-check-check",{"title":31,"path":32,"stem":33,"icon":34},"Running in CI","\u002Flearn\u002Frunning-in-ci","1.learn\u002F5.running-in-ci","i-lucide-workflow",{"title":36,"path":37,"stem":38,"icon":39},"Choosing a tool","\u002Flearn\u002Fchoosing-a-tool","1.learn\u002F6.choosing-a-tool","i-lucide-list-checks",false,{"title":42,"path":43,"stem":44,"icon":45},"Compare the tools","\u002Fcompare","2.compare","i-lucide-scale",{"title":47,"path":48,"stem":49,"children":50,"icon":53},"Manifest","\u002Fmanifest","3.manifest\u002F1.index",[51,54,59,64,69,74,79,84],{"title":52,"path":48,"stem":49,"icon":53},"The run manifest","i-lucide-file-json",{"title":55,"path":56,"stem":57,"icon":58},"The format","\u002Fmanifest\u002Fformat","3.manifest\u002F2.format","i-lucide-file-code",{"title":60,"path":61,"stem":62,"icon":63},"Reading manifests","\u002Fmanifest\u002Freading","3.manifest\u002F3.reading","i-lucide-book-open-check",{"title":65,"path":66,"stem":67,"icon":68},"Merging the manifests of a run","\u002Fmanifest\u002Fmerging","3.manifest\u002F4.merging","i-lucide-merge",{"title":70,"path":71,"stem":72,"icon":73},"Writing manifests","\u002Fmanifest\u002Fwriting","3.manifest\u002F5.writing","i-lucide-pencil-line",{"title":75,"path":76,"stem":77,"icon":78},"Converting to and from other formats","\u002Fmanifest\u002Fconverting","3.manifest\u002F6.converting","i-lucide-arrow-left-right",{"title":80,"path":81,"stem":82,"icon":83},"Reference","\u002Fmanifest\u002Freference","3.manifest\u002F7.reference","i-lucide-list",{"title":85,"path":86,"stem":87,"icon":88},"Schema reference","\u002Fmanifest\u002Fschema","3.manifest\u002F8.schema","i-lucide-braces",{"title":90,"path":91,"stem":92,"icon":14},"Viewer","\u002Fviewer","4.viewer",{"id":94,"title":90,"body":95,"description":181,"extension":182,"links":183,"meta":184,"navigation":185,"path":91,"seo":186,"stem":92,"__hash__":187},"docs\u002F4.viewer.md",{"type":96,"value":97,"toc":176},"minimark",[98,107,110,115,126,133,137,140,165,172],[99,100,101,102,106],"p",{},"Pick the folder a run left behind (the one that holds ",[103,104,105],"code",{},"visual-regression-manifest.json"," and the screenshots, usually the project root or an unpacked CI artifact) or drop the files here. Everything stays in your browser: the page reads the manifest, matches the image paths to the files you dropped, and shows baseline, actual and diff side by side.",[108,109],"manifest-viewer",{},[111,112,114],"h2",{"id":113},"what-it-shows","What it shows",[99,116,117,118,121,122,125],{},"The entries that need a human come first: ",[103,119,120],{},"failed"," and ",[103,123,124],{},"missing-baseline",". Each one shows the baseline and the actual image with a slider, the diff image when the tool wrote one, the diff ratio against the threshold, and where the test lives. Passed, created, updated and approved entries are listed below for completeness.",[99,127,128,129,132],{},"Merged runs work too: drop several manifests of one run (one per machine, one per worker) and the viewer merges them the way ",[103,130,131],{},"mergeManifests"," does, later CI attempts winning over earlier ones.",[111,134,136],{"id":135},"running-it-yourself","Running it yourself",[99,138,139],{},"The same viewer ships as a package for CI artifacts and offline review:",[141,142,147],"pre",{"className":143,"code":144,"language":145,"meta":146,"style":146},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx visual-regression-viewer path\u002Fto\u002Frun\n","bash","",[103,148,149],{"__ignoreMap":146},[150,151,154,158,162],"span",{"class":152,"line":153},"line",1,[150,155,157],{"class":156},"sBMFI","npx",[150,159,161],{"class":160},"sfazB"," visual-regression-viewer",[150,163,164],{"class":160}," path\u002Fto\u002Frun\n",[99,166,167,168,171],{},"writes a static ",[103,169,170],{},"index.html"," next to the manifest that works from the file system, without a server. It is in preparation; the page above is the first implementation.",[173,174,175],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":146,"searchDepth":177,"depth":177,"links":178},2,[179,180],{"id":113,"depth":177,"text":114},{"id":135,"depth":177,"text":136},"Drop a visual-regression-manifest and its images to review them in the browser. Nothing is uploaded.","md",null,{},{"icon":14},{"title":90,"description":181},"QyzbhW1Q5HvPJP12gy6Apl2Y87lhgvb2yyQag0jejOw",[189,183],{"title":85,"path":86,"stem":87,"description":190,"icon":88,"children":-1},"Every field of the manifest, generated from the JSON Schema at \u002Fschema\u002Fv1.json.",1791993875572]