Sprite Sheet Splitter

Drop a sprite sheet and it comes apart into frames — the cell size is measured from the sheet itself, so there is nothing to type.

Drop a sprite sheet, or a set of frame images, or click to choose

PNGWEBPGIFBMPJPEG

Drop several images at once and each one becomes a frame, ordered by filename: walk1, walk2, walk10.

What This Tool Does

Drop a sprite sheet and it comes apart into frames. The cell size is measured from the sheet itself rather than typed in, the frames play back as an animation so you can check the order before committing to anything, and the whole set downloads as a ZIP of numbered PNGs.

How the Grid Is Found

The tool collapses the sheet onto each axis: for every column it asks whether any pixel in that column is opaque, and likewise for every row. That produces two profiles of alternating full and empty stretches. The empty stretches are the gutters, and once their positions are known the cell size, the outer margin and the spacing all follow.

The detection refuses rather than guesses when the measurements disagree. If the cell widths vary by more than a pixel, or the gutters are unevenly spaced, no grid is reported — a wrong grid stated as fact costs more than an empty field, because you would trust it.

Correcting the Grid

ControlWhat it does
Cell width / heightThe size of one frame, in pixels
Columns / rowsThe same lattice expressed as counts — editing these updates the cell size
Margin X / YThe blank border before the first cell
Spacing X / YThe gap between neighbouring cells

The leftover warning below the form reports unused pixels on the right and bottom edges. Zero leftover on both axes usually means the numbers are right.

Selecting Frames

Sheets often hold several animations, one per row. The row buttons isolate a single row; the range inputs narrow to an explicit span of frames; and clicking any thumbnail toggles that frame on or off. The "skip empty" button switches off every frame with no opaque pixels at all, which is the usual state of the last row on a padded sheet.

Frequently asked questions

Is my sprite sheet uploaded anywhere?
No. The image is decoded in your browser, sliced by JavaScript running in the same tab, and zipped locally. Your file never travels over the network, which is also why the tool works offline once the page has loaded.
How does it know the cell size?
It measures the gaps. The tool counts opaque pixels down each column and across each row, and the runs of completely empty pixels are the gutters between cells. From their positions it derives the cell size, the outer margin and the spacing. If the cells touch each other there are no gutters to measure, so it falls back to guessing a common sprite size that divides the sheet evenly and lets you correct it.
What if the detected grid is wrong?
Type over it. You can set the cell width and height directly, or set the number of columns and rows and let the cell size follow — both directions work. A warning shows how many pixels are left over on the right and bottom edges, which is usually the fastest way to spot a cell size that is off by a pixel or two.
My sheet has several animations on it. Can I preview just one?
Yes. Character sheets usually put one animation per row, so there is a row selector above the frame strip: pick a row and the preview plays only that animation. You can also set an explicit frame range, or click individual frames to toggle them off.
Why do some frames look blurry in the preview?
They should not. The tool checks whether the alpha channel is effectively one-bit, which is what pixel art looks like, and switches the preview to nearest-neighbour scaling when it is. If a sheet with soft anti-aliased edges is scaled up it will look smooth rather than crisp, because that is what its own edges are.
What order are the exported files in?
Playback order, with zero-padded numbers so your file manager sorts them the same way. Frames you toggled off are skipped, and the numbering is contiguous across what remains rather than preserving gaps.
Which image formats can I drop in?
PNG, WebP, GIF, BMP and JPEG. PNG and WebP are the useful ones for sprite work because they carry an alpha channel. A JPEG or BMP sheet has no transparency at all, so every pixel counts as content, there are no empty gutters to measure and no grid is reported. The tool then takes the colour that dominates the sheet's outer border, treats everything within a tolerance of it as empty, and traces each sprite on its own instead. If those traced sprites differ in size, the page opens with them already found and nothing to type; if they are all the same size, the grid slicer stays in force and you set the cell size yourself. Either way the status line says which happened and why, and one button switches to the other.