[{"data":1,"prerenderedAt":1117},["ShallowReactive",2],{"navigation_docs":3,"-viewer-cli":100,"-viewer-cli-surround":1114},[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,"children":93,"icon":14},"Viewer","\u002Fviewer","4.viewer\u002F1.index",[94,95],{"title":90,"path":91,"stem":92,"icon":14},{"title":96,"path":97,"stem":98,"icon":99},"Command line","\u002Fviewer\u002Fcli","4.viewer\u002F2.cli","i-lucide-terminal",{"id":101,"title":96,"body":102,"description":1107,"extension":1108,"links":1109,"meta":1110,"navigation":1111,"path":97,"seo":1112,"stem":98,"__hash__":1113},"docs\u002F4.viewer\u002F2.cli.md",{"type":103,"value":104,"toc":1100},"minimark",[105,121,128,133,158,179,186,189,203,206,210,368,371,428,442,451,470,473,483,562,722,733,736,741,780,787,1089,1096],[106,107,108,109,116,117,120],"p",{},"The viewer reads the ",[110,111,112],"a",{"href":48},[113,114,115],"code",{},"visual-regression-manifest"," files of a run, merges them the way ",[113,118,119],{},"mergeManifests"," does (several machines, one file per worker, later CI attempts winning over earlier ones) and shows the result: the screenshots that need a human first, each with a baseline\u002Factual slider and the diff image, then everything else. It works on a local run, a CI artifact and a report folder you publish.",[106,122,123,124,127],{},"The command makes no network requests and sends no telemetry. A browser-only version, where you drop the run folder onto the page, is at ",[110,125,126],{"href":91},"visual-regression.dev\u002Fviewer",".",[129,130,132],"h2",{"id":131},"usage","Usage",[134,135,140],"pre",{"className":136,"code":137,"language":138,"meta":139,"style":139},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx visual-regression-viewer path\u002Fto\u002Frun\n","sh","",[113,141,142],{"__ignoreMap":139},[143,144,147,151,155],"span",{"class":145,"line":146},"line",1,[143,148,150],{"class":149},"sBMFI","npx",[143,152,154],{"class":153},"sfazB"," visual-regression-viewer",[143,156,157],{"class":153}," path\u002Fto\u002Frun\n",[106,159,160,161,164,165,168,169,172,173,168,176,127],{},"It needs Node 22.12 or newer. ",[113,162,163],{},"path\u002Fto\u002Frun"," is the folder that holds the manifests and the screenshots (the project root after a local run, an unpacked CI artifact), and defaults to the current directory. It can also be one manifest file, or a zip of the folder: a CI artifact as downloaded needs no unpacking. Every ",[113,166,167],{},"visual-regression-manifest.json"," and ",[113,170,171],{},"visual-regression-manifest.\u003Clabel>.json"," below the folder is read, except inside ",[113,174,175],{},"node_modules",[113,177,178],{},".git",[106,180,181,182,185],{},"By default the page is built in memory and served at ",[113,183,184],{},"http:\u002F\u002F127.0.0.1:4173"," (the next free port when that one is taken). Nothing is written to disk. The server hands out the page and the image files the manifests name. Other files in the folder are not reachable.",[106,187,188],{},"A zip is unpacked into a temporary folder, which is removed when the command stops. An entry that would land outside of that folder makes the command refuse the zip, and so does a zip that unpacks to more than 4 GiB.",[134,190,192],{"className":136,"code":191,"language":138,"meta":139,"style":139},"npx visual-regression-viewer artifact.zip\n",[113,193,194],{"__ignoreMap":139},[143,195,196,198,200],{"class":145,"line":146},[143,197,150],{"class":149},[143,199,154],{"class":153},[143,201,202],{"class":153}," artifact.zip\n",[106,204,205],{},"An image path in a manifest is resolved against the folder of the manifest. When the file is not there (an artifact is often unpacked into another layout than the machine that wrote it), the file whose path ends the same way is used. A path that leads outside the run folder is never linked.",[129,207,209],{"id":208},"options","Options",[211,212,213,225],"table",{},[214,215,216],"thead",{},[217,218,219,223],"tr",{},[220,221,222],"th",{},"Option",[220,224],{},[226,227,228,251,265,281,295,313,327,341,354],"tbody",{},[217,229,230,236],{},[231,232,233],"td",{},[113,234,235],{},"-o, --out \u003Cdir>",[231,237,238,239,242,243,246,247,127],{},"Write the page (",[113,240,241],{},"index.html",") and the images it links to into ",[113,244,245],{},"\u003Cdir>",". See ",[110,248,250],{"href":249},"#writing-a-report","Writing a report",[217,252,253,258],{},[231,254,255],{},[113,256,257],{},"--no-serve",[231,259,260,261,264],{},"Do not start the web server. Requires ",[113,262,263],{},"-o",", because without a server or an output there is nothing to do.",[217,266,267,272],{},[231,268,269],{},[113,270,271],{},"--no-watch",[231,273,274,275,277,278,280],{},"With a server and ",[113,276,263],{},": do not reload open pages when the files in ",[113,279,245],{}," change.",[217,282,283,288],{},[231,284,285],{},[113,286,287],{},"-p, --port \u003Cport>",[231,289,290,291,294],{},"Port of the web server. The default is ",[113,292,293],{},"4173",", and the next free port when it is taken; a port you name must be free.",[217,296,297,302],{},[231,298,299],{},[113,300,301],{},"--host \u003Chost>",[231,303,304,305,308,309,312],{},"Address the server listens on. The default is ",[113,306,307],{},"127.0.0.1",", so only your machine can reach it. ",[113,310,311],{},"0.0.0.0"," exposes the page and the images to the network.",[217,314,315,320],{},[231,316,317],{},[113,318,319],{},"--template \u003Cfile>",[231,321,322,323,127],{},"Use this HTML page instead of the built-in one. See ",[110,324,326],{"href":325},"#replacing-the-page","Replacing the page",[217,328,329,334],{},[231,330,331],{},[113,332,333],{},"--css \u003Cfile>",[231,335,336,337,127],{},"Add this stylesheet to the page. See ",[110,338,340],{"href":339},"#theming","Theming",[217,342,343,348],{},[231,344,345],{},[113,346,347],{},"--title \u003Ctext>",[231,349,350,351,127],{},"Page title. Defaults to ",[113,352,353],{},"Visual regression viewer",[217,355,356,365],{},[231,357,358,361,362],{},[113,359,360],{},"-v, --version",", ",[113,363,364],{},"-h, --help",[231,366,367],{},"Print the version, print the options.",[129,369,250],{"id":370},"writing-a-report",[134,372,374],{"className":136,"code":373,"language":138,"meta":139,"style":139},"# build the page and its images into .\u002Freport, serve it and reload it on changes\nnpx visual-regression-viewer path\u002Fto\u002Frun -o report\n\n# only write it, for publishing or for an artifact: opens from the file system too\nnpx visual-regression-viewer path\u002Fto\u002Frun -o report --no-serve\n",[113,375,376,382,398,405,411],{"__ignoreMap":139},[143,377,378],{"class":145,"line":146},[143,379,381],{"class":380},"sHwdD","# build the page and its images into .\u002Freport, serve it and reload it on changes\n",[143,383,385,387,389,392,395],{"class":145,"line":384},2,[143,386,150],{"class":149},[143,388,154],{"class":153},[143,390,391],{"class":153}," path\u002Fto\u002Frun",[143,393,394],{"class":153}," -o",[143,396,397],{"class":153}," report\n",[143,399,401],{"class":145,"line":400},3,[143,402,404],{"emptyLinePlaceholder":403},true,"\n",[143,406,408],{"class":145,"line":407},4,[143,409,410],{"class":380},"# only write it, for publishing or for an artifact: opens from the file system too\n",[143,412,414,416,418,420,422,425],{"class":145,"line":413},5,[143,415,150],{"class":149},[143,417,154],{"class":153},[143,419,391],{"class":153},[143,421,394],{"class":153},[143,423,424],{"class":153}," report",[143,426,427],{"class":153}," --no-serve\n",[106,429,430,431,433,434,437,438,441],{},"With ",[113,432,263],{}," the page is written to ",[113,435,436],{},"\u003Cdir>\u002Findex.html"," and the images are copied next to it with their relative paths kept, so the folder is self-contained and works from ",[113,439,440],{},"file:\u002F\u002F"," as well as from any static host.",[106,443,444,445,447,448,450],{},"When the server runs, it serves ",[113,446,245],{}," from the disk and watches it: whenever a file in it is added, changed or removed, the open pages reload. Running the command again into the same folder from another terminal, or editing ",[113,449,241],{}," by hand, shows up in the browser without a refresh.",[106,452,453,454,168,457,460,461,463,464,466,467,469],{},"The files given with ",[113,455,456],{},"--template",[113,458,459],{},"--css"," are watched too: saving one rebuilds the page into ",[113,462,245],{}," (reading the manifests again), which reloads the open pages. A rebuild that fails, say because the template lost its data marker, is reported and the previous page stays. ",[113,465,271],{}," turns all of this off, ",[113,468,257],{}," has no server to reload.",[129,471,340],{"id":472},"theming",[106,474,475,476,479,480,482],{},"The built-in page is styled only through CSS variables on ",[113,477,478],{},":root",". Override them in a stylesheet and pass it with ",[113,481,459],{},"; the stylesheet is added after the built-in one.",[134,484,488],{"className":485,"code":486,"language":487,"meta":139,"style":139},"language-css shiki shiki-themes material-theme-lighter material-theme material-theme-palenight",":root {\n  --vrv-accent: #e11d48;\n  --vrv-radius: 0;\n  --vrv-font: 'IBM Plex Sans', sans-serif;\n}\n","css",[113,489,490,503,520,533,557],{"__ignoreMap":139},[143,491,492,496,500],{"class":145,"line":146},[143,493,495],{"class":494},"sMK4o",":",[143,497,499],{"class":498},"spNyl","root",[143,501,502],{"class":494}," {\n",[143,504,505,509,511,514,517],{"class":145,"line":384},[143,506,508],{"class":507},"sTEyZ","  --vrv-accent",[143,510,495],{"class":494},[143,512,513],{"class":494}," #",[143,515,516],{"class":507},"e11d48",[143,518,519],{"class":494},";\n",[143,521,522,525,527,531],{"class":145,"line":400},[143,523,524],{"class":507},"  --vrv-radius",[143,526,495],{"class":494},[143,528,530],{"class":529},"sbssI"," 0",[143,532,519],{"class":494},[143,534,535,538,540,543,546,549,552,555],{"class":145,"line":407},[143,536,537],{"class":507},"  --vrv-font",[143,539,495],{"class":494},[143,541,542],{"class":494}," '",[143,544,545],{"class":153},"IBM Plex Sans",[143,547,548],{"class":494},"'",[143,550,551],{"class":494},",",[143,553,554],{"class":507}," sans-serif",[143,556,519],{"class":494},[143,558,559],{"class":145,"line":413},[143,560,561],{"class":494},"}\n",[211,563,564,577],{},[214,565,566],{},[217,567,568,571,574],{},[220,569,570],{},"Variable",[220,572,573],{},"Default (light)",[220,575,576],{},"What it colours",[226,578,579,594,609,624,639,654,669,691,706],{},[217,580,581,586,591],{},[231,582,583],{},[113,584,585],{},"--vrv-bg",[231,587,588],{},[113,589,590],{},"#ffffff",[231,592,593],{},"Page background",[217,595,596,601,606],{},[231,597,598],{},[113,599,600],{},"--vrv-surface",[231,602,603],{},[113,604,605],{},"#f4f4f5",[231,607,608],{},"List headings, hover",[217,610,611,616,621],{},[231,612,613],{},[113,614,615],{},"--vrv-fg",[231,617,618],{},[113,619,620],{},"#18181b",[231,622,623],{},"Text",[217,625,626,631,636],{},[231,627,628],{},[113,629,630],{},"--vrv-muted",[231,632,633],{},[113,634,635],{},"#71717a",[231,637,638],{},"Secondary text",[217,640,641,646,651],{},[231,642,643],{},[113,644,645],{},"--vrv-border",[231,647,648],{},[113,649,650],{},"#e4e4e7",[231,652,653],{},"Borders",[217,655,656,661,666],{},[231,657,658],{},[113,659,660],{},"--vrv-accent",[231,662,663],{},[113,664,665],{},"#4f46e5",[231,667,668],{},"Selection, slider",[217,670,671,685,688],{},[231,672,673,361,676,361,679,361,682],{},[113,674,675],{},"--vrv-error",[113,677,678],{},"--vrv-warning",[113,680,681],{},"--vrv-success",[113,683,684],{},"--vrv-info",[231,686,687],{},"red, amber, green, blue",[231,689,690],{},"Status colours",[217,692,693,698,703],{},[231,694,695],{},[113,696,697],{},"--vrv-radius",[231,699,700],{},[113,701,702],{},"0.5rem",[231,704,705],{},"Corner radius",[217,707,708,716,719],{},[231,709,710,361,713],{},[113,711,712],{},"--vrv-font",[113,714,715],{},"--vrv-mono",[231,717,718],{},"system fonts",[231,720,721],{},"Text and code fonts",[106,723,724,725,728,729,732],{},"The dark palette follows ",[113,726,727],{},"prefers-color-scheme","; override the variables inside a ",[113,730,731],{},"@media (prefers-color-scheme: dark)"," block to change it, or set them once to pin a theme.",[129,734,326],{"id":735},"replacing-the-page",[106,737,738,740],{},[113,739,319],{}," swaps the whole page for your own HTML. The viewer fills it in:",[742,743,744,758,770],"ul",{},[745,746,747,750,751,754,755,127],"li",{},[113,748,749],{},"\u003C!--vrv:data-->"," (required) is replaced with ",[113,752,753],{},"\u003Cscript type=\"application\u002Fjson\" id=\"vrv-data\">…\u003C\u002Fscript>"," that holds the merged run. Read it with ",[113,756,757],{},"JSON.parse(document.getElementById('vrv-data').textContent)",[745,759,760,763,764,766,767,127],{},[113,761,762],{},"\u003C!--vrv:css-->"," (optional) is replaced with the stylesheet from ",[113,765,459],{},". Without the marker the stylesheet goes before ",[113,768,769],{},"\u003C\u002Fhead>",[745,771,772,773,776,777,127],{},"The text of ",[113,774,775],{},"\u003Ctitle>"," is replaced with ",[113,778,779],{},"--title",[106,781,782,783,786],{},"The data has this shape (every image URL is relative to the page and ",[113,784,785],{},"null"," when the run has no such file):",[134,788,792],{"className":789,"code":790,"language":791,"meta":139,"style":139},"language-jsonc shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"title\": \"Visual regression viewer\",\n  \"manifests\": 2, \u002F\u002F files merged\n  \"tool\": { \"name\": \"…\", \"version\": \"…\" },\n  \"runner\": { \"name\": \"…\", \"version\": \"…\" },\n  \"counts\": {\n    \"failed\": 1,\n    \"passed\": 40,\n    \"missing-baseline\": 0,\n    \"created\": 0,\n    \"updated\": 0,\n    \"approved\": 0,\n  },\n  \"warnings\": [\"…\"], \u002F\u002F from the merge\n  \"entries\": [\n    {\n      \"id\": \"3f9c1a7b2d10\", \u002F\u002F short and URL-safe\n      \"name\": \"checkout\",\n      \"status\": \"failed\",\n      \"needsHuman\": true, \u002F\u002F failed or missing-baseline\n      \"test\": {\n        \"filePath\": \"e2e\u002Fcheckout.cy.ts\",\n        \"titlePath\": [\"checkout\", \"renders\"],\n        \"retry\": 0,\n      },\n      \"platform\": \"linux \u002F chrome\", \u002F\u002F '' when unknown\n      \"viewport\": { \"width\": 1000, \"height\": 660 },\n      \"message\": \"…\",\n      \"source\": \"visual-regression-manifest.json\", \u002F\u002F the manifest the entry came from\n      \"comparison\": {\n        \"diffRatio\": 0.12,\n        \"maxDiffRatio\": 0.01,\n        \"colorThreshold\": 0.1,\n        \"colorMetric\": \"yiq\",\n      },\n      \"images\": {\n        \"baseline\": \"shots\u002Fcheckout.png\",\n        \"actual\": \"shots\u002Fcheckout.actual.png\",\n        \"diff\": \"shots\u002Fcheckout.diff.png\",\n      },\n      \"paths\": {\n        \"baseline\": \"shots\u002Fcheckout.png\",\n        \"actual\": \"shots\u002Fcheckout.actual.png\",\n        \"diff\": \"shots\u002Fcheckout.diff.png\",\n      }, \u002F\u002F as the manifest names them\n    },\n  ],\n}\n","jsonc",[113,793,794,799,804,812,817,822,828,834,840,846,852,858,864,870,879,885,891,900,906,912,921,927,933,939,945,951,960,966,972,981,987,993,999,1005,1011,1016,1022,1028,1034,1040,1045,1051,1056,1061,1066,1072,1078,1084],{"__ignoreMap":139},[143,795,796],{"class":145,"line":146},[143,797,798],{},"{\n",[143,800,801],{"class":145,"line":384},[143,802,803],{},"  \"title\": \"Visual regression viewer\",\n",[143,805,806,809],{"class":145,"line":400},[143,807,808],{},"  \"manifests\": 2,",[143,810,811],{}," \u002F\u002F files merged\n",[143,813,814],{"class":145,"line":407},[143,815,816],{},"  \"tool\": { \"name\": \"…\", \"version\": \"…\" },\n",[143,818,819],{"class":145,"line":413},[143,820,821],{},"  \"runner\": { \"name\": \"…\", \"version\": \"…\" },\n",[143,823,825],{"class":145,"line":824},6,[143,826,827],{},"  \"counts\": {\n",[143,829,831],{"class":145,"line":830},7,[143,832,833],{},"    \"failed\": 1,\n",[143,835,837],{"class":145,"line":836},8,[143,838,839],{},"    \"passed\": 40,\n",[143,841,843],{"class":145,"line":842},9,[143,844,845],{},"    \"missing-baseline\": 0,\n",[143,847,849],{"class":145,"line":848},10,[143,850,851],{},"    \"created\": 0,\n",[143,853,855],{"class":145,"line":854},11,[143,856,857],{},"    \"updated\": 0,\n",[143,859,861],{"class":145,"line":860},12,[143,862,863],{},"    \"approved\": 0,\n",[143,865,867],{"class":145,"line":866},13,[143,868,869],{},"  },\n",[143,871,873,876],{"class":145,"line":872},14,[143,874,875],{},"  \"warnings\": [\"…\"],",[143,877,878],{}," \u002F\u002F from the merge\n",[143,880,882],{"class":145,"line":881},15,[143,883,884],{},"  \"entries\": [\n",[143,886,888],{"class":145,"line":887},16,[143,889,890],{},"    {\n",[143,892,894,897],{"class":145,"line":893},17,[143,895,896],{},"      \"id\": \"3f9c1a7b2d10\",",[143,898,899],{}," \u002F\u002F short and URL-safe\n",[143,901,903],{"class":145,"line":902},18,[143,904,905],{},"      \"name\": \"checkout\",\n",[143,907,909],{"class":145,"line":908},19,[143,910,911],{},"      \"status\": \"failed\",\n",[143,913,915,918],{"class":145,"line":914},20,[143,916,917],{},"      \"needsHuman\": true,",[143,919,920],{}," \u002F\u002F failed or missing-baseline\n",[143,922,924],{"class":145,"line":923},21,[143,925,926],{},"      \"test\": {\n",[143,928,930],{"class":145,"line":929},22,[143,931,932],{},"        \"filePath\": \"e2e\u002Fcheckout.cy.ts\",\n",[143,934,936],{"class":145,"line":935},23,[143,937,938],{},"        \"titlePath\": [\"checkout\", \"renders\"],\n",[143,940,942],{"class":145,"line":941},24,[143,943,944],{},"        \"retry\": 0,\n",[143,946,948],{"class":145,"line":947},25,[143,949,950],{},"      },\n",[143,952,954,957],{"class":145,"line":953},26,[143,955,956],{},"      \"platform\": \"linux \u002F chrome\",",[143,958,959],{}," \u002F\u002F '' when unknown\n",[143,961,963],{"class":145,"line":962},27,[143,964,965],{},"      \"viewport\": { \"width\": 1000, \"height\": 660 },\n",[143,967,969],{"class":145,"line":968},28,[143,970,971],{},"      \"message\": \"…\",\n",[143,973,975,978],{"class":145,"line":974},29,[143,976,977],{},"      \"source\": \"visual-regression-manifest.json\",",[143,979,980],{}," \u002F\u002F the manifest the entry came from\n",[143,982,984],{"class":145,"line":983},30,[143,985,986],{},"      \"comparison\": {\n",[143,988,990],{"class":145,"line":989},31,[143,991,992],{},"        \"diffRatio\": 0.12,\n",[143,994,996],{"class":145,"line":995},32,[143,997,998],{},"        \"maxDiffRatio\": 0.01,\n",[143,1000,1002],{"class":145,"line":1001},33,[143,1003,1004],{},"        \"colorThreshold\": 0.1,\n",[143,1006,1008],{"class":145,"line":1007},34,[143,1009,1010],{},"        \"colorMetric\": \"yiq\",\n",[143,1012,1014],{"class":145,"line":1013},35,[143,1015,950],{},[143,1017,1019],{"class":145,"line":1018},36,[143,1020,1021],{},"      \"images\": {\n",[143,1023,1025],{"class":145,"line":1024},37,[143,1026,1027],{},"        \"baseline\": \"shots\u002Fcheckout.png\",\n",[143,1029,1031],{"class":145,"line":1030},38,[143,1032,1033],{},"        \"actual\": \"shots\u002Fcheckout.actual.png\",\n",[143,1035,1037],{"class":145,"line":1036},39,[143,1038,1039],{},"        \"diff\": \"shots\u002Fcheckout.diff.png\",\n",[143,1041,1043],{"class":145,"line":1042},40,[143,1044,950],{},[143,1046,1048],{"class":145,"line":1047},41,[143,1049,1050],{},"      \"paths\": {\n",[143,1052,1054],{"class":145,"line":1053},42,[143,1055,1027],{},[143,1057,1059],{"class":145,"line":1058},43,[143,1060,1033],{},[143,1062,1064],{"class":145,"line":1063},44,[143,1065,1039],{},[143,1067,1069],{"class":145,"line":1068},45,[143,1070,1071],{},"      }, \u002F\u002F as the manifest names them\n",[143,1073,1075],{"class":145,"line":1074},46,[143,1076,1077],{},"    },\n",[143,1079,1081],{"class":145,"line":1080},47,[143,1082,1083],{},"  ],\n",[143,1085,1087],{"class":145,"line":1086},48,[143,1088,561],{},[106,1090,1091,1092,1095],{},"When the pages are live-reloading, a small script that listens for changes is added before ",[113,1093,1094],{},"\u003C\u002Fbody>"," of the page the server sends; the file on disk stays as it is.",[1097,1098,1099],"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);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":139,"searchDepth":384,"depth":384,"links":1101},[1102,1103,1104,1105,1106],{"id":131,"depth":384,"text":132},{"id":208,"depth":384,"text":209},{"id":370,"depth":384,"text":250},{"id":472,"depth":384,"text":340},{"id":735,"depth":384,"text":326},"Serve the viewer, write it to a folder, restyle it or replace the page, from the command line.","md",null,{"generated":403},{"icon":99},{"title":96,"description":1107},"I5v3wNtQgHCNouflGHRUPXFegkf31jjSAZtlS6pRkFA",[1115,1109],{"title":90,"path":91,"stem":92,"description":1116,"icon":14,"children":-1},"Drop a visual-regression-manifest and its images, or a zip of them, to review them in the browser. Nothing is uploaded.",1792450645179]