Split Image for Instagram Grid

Slice one photo into equal tiles for a seamless Instagram profile grid. Pick 3x1, 3x2, 3x3 or a custom layout and get a ZIP numbered in posting order.

🌐 Español

Drop your file here (.jpg, .jpeg, .png, .webp)

🔒 Private by design: your files are processed locally in your browser and never uploaded to any server.

Instagram fills the grid newest first, so the tiles count down

A profile grid puts your most recent post in the top-left square and pushes everything older down and to the right. That single fact is what makes grid posts fiddly, because the reading order of a picture and the posting order of a feed run in opposite directions.

Post the top-left tile first and it will not stay top-left for long. Every subsequent upload shoves it along, and by the time the ninth tile goes up the picture is scrambled beyond rescue. The correct sequence is the exact reverse of reading order: bottom-right first, top-left last, so the final upload lands in the corner where the picture begins.

Rather than leaving that to you, the numbering in the archive is already reversed. For a 3x3 split of beach.jpg you get beach-1.jpg through beach-9.jpg, where beach-1.jpg is the bottom-right corner and beach-9.jpg is the top-left. Upload them in plain numerical order and the grid assembles itself. When a grid has ten tiles or more the numbers are zero-padded to match, so a 3x4 layout produces beach-01.jpg through beach-12.jpg and they sort correctly in every file manager.

Even boundaries, rounded one edge at a time

Each cut position is computed independently as a fraction of the full dimension and then rounded, rather than by multiplying out a single tile width. It sounds like a detail; it is what keeps the tiles gapless.

Take a 1000 pixel wide photo split into three columns. The boundaries land at 0, 333, 667 and 1000, which makes the columns 333, 334 and 333 pixels wide. Every column starts exactly where the previous one ended, so there is no seam and no overlap, and the widths still sum to 1000. A dimension that divides cleanly has no remainder to spread at all: a 4032 pixel wide phone photo gives three columns of exactly 1344 pixels, and a 1080 by 1080 square gives nine tiles of 360 by 360.

Picking a layout and collecting the archive

  1. Drop a photo on the panel or press Choose a file. JPG, PNG and WebP are accepted, one photo per run.
  2. Choose a Grid layout. 3x3 (9 tiles), the classic full-profile grid is the default and the one most people mean; 3x1 (3 tiles), a horizontal strip suits a panorama, and 3x2 (6 tiles) covers two rows.
  3. For anything else, pick Custom (set columns and rows below) and fill in Custom columns (used only when Grid layout is Custom) and Custom rows (used only when Grid layout is Custom). Both accept 1 to 10.
  4. Press Split Image for Instagram Grid. The progress bar advances one step per tile.
  5. Download the ZIP, unpack it, and upload the tiles in numerical order starting at 1.

Custom columns and rows, and what an empty box means

The custom fields are only read when the layout menu is set to Custom; leave the menu on a named preset and whatever is in them is ignored entirely.

When they are read, they are treated defensively. A value is rounded to a whole number, then clamped between 1 and 10, which caps the largest possible grid at 100 tiles. An empty box is not treated as a number at all: it means no value given, so the field falls back to the 3 it started with and clearing both simply returns you to the ordinary three by three grid. Typing a 0 is the one that clamps upward to 1, which is a slightly roundabout way of asking for your own photo back inside a ZIP.

The tiles are re-encoded, not carved out of the original file

Nothing here reaches into the file format and slices bytes. Your photo is decoded into a bitmap, and each tile is drawn from the source rectangle onto a canvas of exactly that size, at a one-to-one scale. No resampling happens, which is why a tile is precisely as detailed as the corresponding patch of the original.

The encoding step is the one honest cost. Each tile is written back out in the format it came from, and for a JPG or a WebP that means the browser’s own encoder runs at its default quality setting, adding one more lossy generation on top of whatever the photo already carried. A PNG comes back losslessly. It is a small effect on a single pass, and if the tiles need to be lighter for upload, unpack the archive and run them through Compress Images, which takes the whole set at once and gives you a quality dial this page does not.

One side effect is worth planning for: the canvas path discards the source metadata, so the tiles carry no EXIF at all. That is the same mechanism Remove EXIF Data from Photos uses on purpose. Here it is a freebie, not a promise about the original file, which is never modified.

Framing the photo before you split it

Instagram shows profile tiles as squares. Tiles come out square only when the source photo’s proportions match the grid you asked for, so a 3x3 split wants a square photo, a 3x2 split wants a 3:2 photo, and a 3x1 strip wants something roughly three times as wide as it is tall.

Getting there first is the difference between a grid that lines up and one the platform crops for you. Crop Images opens on a centred square by default and also offers 4:3, 16:9 and 9:16, and it takes a batch if you are preparing several grids. If your source is enormous, Resize Images beforehand keeps the tiles closer to what the platform will actually display, and a smaller source means a smaller archive. Both live on the image tools hub alongside the rest of the photo editing set.

If a run is taking longer than you expected on a very large custom grid, pressing Cancel stops it between tiles. Nothing partial is kept: the archive is only assembled once every tile has been rendered, so a cancelled run leaves the panel empty and ready for another attempt.

See it in action

Screenshot of the Split Image for Instagram Grid tool with sysfenix-sample.png (466 KB) loaded, Grid layout set to 3x3 (9 tiles), the classic full-profile grid, Custom columns (used only when Grid layout is Custom) set to 3
Split Image for Instagram Grid mid-process: sysfenix-sample.png (466 KB) loaded, Grid layout set to 3x3 (9 tiles), the classic full-profile grid, Custom columns (used only when Grid layout is Custom) set to 3.
Screenshot of the Split Image for Instagram Grid result screen showing sysfenix-sample-instagram-grid.zip ready to download (472 KB, 1% larger)
The finished result: sysfenix-sample-instagram-grid.zip ready to download (472 KB, 1% larger). The download link is a local blob URL — the file never leaves your device.

Frequently asked questions

Which numbered tile do I upload first?

The one numbered 1, which is the bottom-right corner of your picture. Work upward through the numbers and finish with the highest one, which is the top-left corner. That order exists because a profile grid puts your newest post at the top left, so the tile you post last is the one that ends up there.

Why is one column of tiles a pixel wider than the others?

Each cut line is rounded to a whole pixel on its own, and adjacent tiles share the rounded edge, so the widths always add back up to the full photo. A 1000 pixel wide photo cut into three columns gives 333, 334 and 333 pixels rather than dumping the leftover pixel at one end. Nobody has ever noticed this on a phone screen.

Do I get a ZIP even for a small grid?

Yes, always. Every run bundles its tiles into one archive named after your photo with "-instagram-grid.zip" on the end, whether that archive holds three tiles or a hundred. Even a custom one-by-one grid, which returns your whole picture as a single tile, arrives inside an archive.

What if I empty the custom columns or rows box?

A blank box counts as no value given, so it falls back to the three that field starts with. Clear both and you get the ordinary three by three grid. A typed zero is different, because zero is a real number and is pushed up to the minimum of one, so a one by one grid is something you ask for deliberately rather than something you fall into. Fractional entries are rounded, so 3.6 columns becomes 4, and anything above ten is pulled back down to ten.

Does the tile keep every pixel of quality from my photo?

The geometry is untouched, since each tile is a straight region copy at full resolution with no scaling anywhere in the path. The encoding is a different matter. A PNG source is written back out losslessly, while JPG and WebP tiles are re-encoded by your browser's own encoder at its default quality, which is one extra lossy generation.

Can I queue up several photos and split them all in one go?

No, this page takes a single photo per run, because each source produces its own archive of numbered tiles and merging two grids into one download would make the numbering ambiguous. Run it again for the next photo. Nothing is remembered between runs, so each archive stands alone.

Related tools