Instagram Grid Image Splitter — one picture, many tiles
A profile grid is a wall of small squares, and one picture spread across several of them reads as a single large image when somebody opens the profile. Getting there means cutting the picture into tiles that line up exactly, and uploading them in an order that feels backwards while you are doing it. This grid image splitter does both parts: you load an image from your device, choose how many columns and rows to cut it into, decide how it should be fitted to that shape, and download the tiles as a ZIP with the upload order baked into the filenames. The image is decoded and sliced by your own browser and is never uploaded anywhere.
Posting order is the reverse of reading order
This is the part that catches people. A profile grid fills from the top-left and pushes older posts right and down, so the newest thing you post occupies the cell a visitor reads first. To assemble a three-by-three picture you therefore upload the bottom-right tile first and the top-left tile last. Get it backwards and the finished grid is flipped through both diagonals — recognisably your picture, scrambled. The tool numbers every file in posting order by default, so grid_post-01_r3c3.png is the first upload and grid_post-09_r1c1.png is the last, and sorting the extracted folder by name gives you the queue directly. A README.txt inside the ZIP repeats the list, because the tiles usually end up on a phone where this page is not in front of you.
Cover, Contain and the Free aspect
Your image and your grid rarely share proportions. Three columns of squares is a 1:1 rectangle; a typical camera photo is 3:2. Something has to give, and the fit mode decides what. Cover scales the image until it fills the grid and crops the overflow, which keeps it full-bleed and undistorted — the preview draws the discarded region dimmed outside the grid so you can see what is going, and the focal point handle chooses which part survives. Contain scales the image to fit inside the grid and fills the leftover margin with a colour you pick, keeping every pixel of the original at the cost of visible bands. The Free tile aspect sidesteps the choice: it shapes the grid to your image, so nothing is cropped and nothing is padded, though the tiles are then no longer square.
Tile size, and the one-pixel difference
Fixed tile width renders every tile at the same pixel width and builds the grid as an exact multiple of it, so all tiles are identical and there is no remainder. Keep original pixels cuts the image at its own resolution instead, which resamples nothing but runs into arithmetic: an image 3001 pixels wide does not divide into four equal whole-pixel columns. Rounding down would discard a strip along the edge and rounding up would run off the end, so the leftover pixels are handed out one each from the left, and from the top for rows. The result is that one or two tiles are a pixel larger than their neighbours, every tile edge still meets its neighbour exactly, and each thumbnail shows its true size so the difference is visible rather than surprising.
Starting on a clean row
A grid only reads correctly when its first tile lands at the start of a row, which happens only when the number of posts already on the profile is an exact multiple of the column count. Tell the tool how many posts are already there and it works out how many filler posts to publish first, showing them as plain placeholders below the mockup. It makes no claim about what those fillers should contain.
Formats, quality and what leaves your device
PNG is lossless and safest for flat colour, text and sharp edges. JPEG is far smaller for photographs, and the quality slider changes both the file size and the picture — each tile's real encoded size updates in the strip as you move it. WebP usually beats both at equal quality but is not universally supported. The slider is disabled for PNG on purpose: PNG is lossless and the browser's encoder ignores the quality argument for it entirely, so a slider that appeared to work would be lying. Note that JPEG has no alpha channel, so a transparent pad flattens to white.
Everything happens locally. There is no upload endpoint, no account and no server — the site is a set of static files — which is also why there is no field for an image address. An image fetched from another origin taints the canvas, and the browser then refuses to let the page read the pixels back out, so the export would fail at the final step. Local files only: the picker, drag-and-drop, or a paste from the clipboard.