SplitPicture

How SplitPicture checks its tiles

Every archive can be checked after it is written: each tile is decoded again and laid back onto the picture, pixel by pixel. This page shows that check run on a fixed set of test pictures, with the date and the browser.

The check

After an archive is written, the board offers “Check these tiles go back together”. It does not trust its own plan: it takes the files exactly as they were encoded, decodes each one again, draws it at the position the plan gave it, and compares every pixel with the picture it was cut from. It reports the number of pixels compared, how many differ, the largest difference in any colour channel, the mean difference, and which tile was worst. It also confirms that every framed pixel landed in exactly one tile — or, with a gutter or a dropped remainder, how many pixels were left out on purpose.

For PNG the expected answer is “identical”: a lossless format given the exact pixels must hand them back. For JPEG and WebP the positions must still be exact, and the check reports how far the encoder moved the colours, because a lossy encoder works on each tile separately and its small errors differ on either side of a seam.

The test pictures

Four synthetic pictures, generated byte by byte by the measuring script from fixed seeds, so every run starts from identical inputs: smooth sky gradient over fine noise (1500 × 1000), one-pixel lines and a checkerboard (hard for lossy encoders) (1200 × 800), odd size, 1001 × 667, so tiles cannot all be equal (1001 × 667) and transparent background with a soft-edged disc (640 × 480). Each is cut with a grid chosen to exercise something: equal tiles, many tiles, a size that leaves a remainder, and transparency.

Results, 1 November 2026

Measured in Chromium 153.0.8010.12 by scripts/measure-tile-proof.mjs, which serves the built site, opens the board with a recipe link for each case, writes the archive and presses the check. The sentence in the last column is the board’s own output, copied verbatim.

Reassembly check results per fixture and format
PictureGridFormatLargest / meanArchive
1500 × 10003 × 3PNGidentical2.5 MB
1500 × 10003 × 3JPEG 927/255 · 1.29/255152 KB
1500 × 10003 × 3JPEG 828/255 · 1.51/25563 KB
1500 × 10003 × 3WebP 829/255 · 1.61/25522 KB
1200 × 8004 × 4PNGidentical176 KB
1200 × 8004 × 4JPEG 82116/255 · 14.15/255599 KB
1200 × 8004 × 4WebP 82114/255 · 13.20/255349 KB
1001 × 6677 × 5PNGidentical67 KB
1001 × 6677 × 5JPEG 82173/255 · 5.16/255145 KB
640 × 4802 × 2PNGidentical110 KB
640 × 4802 × 2WebP 8285/255 · 0.51/25519 KB

Every PNG case came back identical, including the odd-sized picture whose 7 × 5 tiles differ by a pixel and the transparent one. The lossy cases kept every position exact and moved colours by a few levels on the smooth gradient; on one-pixel lines, the hardest content there is for a block encoder, the worst single value reached 173/255 in JPEG 82 on the 1001 × 667 picture. That is the encoder, not the cut — which is exactly what the check is for telling apart.

Running it again

The results are a file, src/content/tile-proof.json, written by the script after a build; this page is generated from it, so the numbers here cannot be edited by hand without the file and the page disagreeing with the next run. The script needs a browser, so it is run by hand when encoders or the cutting code change, and the date at the top of the results moves with it.

These results describe these pictures in one browser on one date. Your own export can be checked the same way: the button appears under the result after every archive, and its answer is about your tiles.

Open it on the board

Illustration of a picture divided into tiles, for How Splitpicture Checks Its Tiles
How Splitpicture Checks Its Tiles