What is a sprite sheet?

A sprite sheet is a single image file containing many smaller images, usually laid out in a grid of equal-sized cells. Games load the one file and draw individual cells from it, so a walk cycle of eight frames is one PNG rather than eight. Splitting a sprite sheet means extracting those cells back out as separate images.

Frame counts computed with the same geometry function the sprite sheet splitter uses. Sheet and cell sizes are common conventions, not a published standard.
512 × 512 sheet, 32 × 32 cells256 frames (16 across × 16 down)
1024 × 1024 sheet, 64 × 64 cells256 frames (16 across × 16 down)
2048 × 2048 sheet, 64 × 64 cells1024 frames (32 across × 32 down)
2048 × 2048 sheet, 128 × 128 cells256 frames (16 across × 16 down)
384 × 216 sheet, 24 × 24 cells144 frames (16 across × 9 down)

Why games use one file instead of many

Three practical costs push developers toward packing artwork together.

Draw calls. Every time the graphics hardware has to switch to a different texture, it costs time. A scene drawing fifty separate PNGs makes the renderer swap textures fifty times. If all fifty live in one sheet, the renderer binds one texture and draws fifty rectangles from it, which batches into far less work.

Load time. On the web especially, one HTTP request for a 400 KB sheet beats sixty requests for sixty small PNGs. Each request carries overhead that has nothing to do with the pixels.

Keeping frames together. An animation is a sequence, and a sequence stored as one image cannot lose a frame, get renamed halfway, or end up with two files at slightly different sizes. Everything is aligned by construction.

The trade-off is that you need to know the cell geometry to use the sheet at all, which is why sheets almost always ship alongside either a data file or a strict grid convention.

Grid sheets versus texture atlases

The two words get used interchangeably, and they are not the same thing.

A sprite sheet in the strict sense is a uniform grid. Every cell is the same size, arranged in rows and columns, and a frame is identified by its number: frame 0, frame 1, frame 2, counting left to right and top to bottom. Phaser makes this explicit, describing a spritesheet as having “uniform cells in rows or columns” with frames “named as integers starting from 0”.

A texture atlas drops the grid. Frames can be any size, placed anywhere, rotated, and packed tightly to waste as little space as possible. Because there is no grid to infer, an atlas always ships with a data file listing each frame’s rectangle and name. Phaser describes an atlas as having “frames in any size and position” with frames “named in the atlas data”.

Which one you have determines how you split it.

A grid sheet can be split with nothing but the cell dimensions, which is what the sprite sheet splitter needs. An atlas cannot: without its .json, .plist, or .xml companion, the frame boundaries are unknowable by eye, and any grid you impose on it will cut through artwork. If you have an atlas and no data file, the data file is what you are missing, not a better splitter.

The middle case is a grid sheet with spacing between the cells and a margin around the edge. That is still a grid, just one with two extra numbers to supply.

Common sizes

There is no standard, but there are strong conventions.

Cell sizes cluster on powers of two: 8, 16, 24, 32, 48, 64, and 96 pixels are the ones you meet most. Retro-styled 2D games sit at 16 or 32. Higher-detail character work runs 64 to 128. A cell is usually square, though strips of wide cells for effects like explosions are common enough.

Sheet dimensions also favour powers of two: 512, 1024, 2048, or 4096 pixels on a side. GPU texture handling and mipmapping prefer power-of-two textures, and older hardware sometimes required them outright. Very large sheets risk hitting a device’s maximum texture size, which is why artwork is often split across several 2048 px sheets rather than one enormous one.

Layout is usually one animation per row: row 0 is idle, row 1 is walk, row 2 is attack. That convention means the row index maps to an animation and the column index maps to the frame number, which makes the engine code trivial. Some sheets instead run a single animation left to right across the whole sheet, wrapping at the edge.

None of this is enforced. Plenty of sheets in the wild are 384 × 216 with 24 px cells and an off-by-one margin, which is why the first job with any unfamiliar sheet is working out its geometry.

How to split one

Load the sheet into the sprite sheet splitter, enter the cell width and height, add the offset at the sheet’s edges and the spacing between cells if it has them, and download the frames as numbered PNGs. The preview shows the grid over your sheet, so you can see immediately whether the numbers are right.

Export as PNG, not JPG. JPG has no alpha channel and will fill your transparent background with a solid colour.

For working out the cell size, handling trim, and the naming conventions Unity, Godot, and Phaser expect, read how to split a sprite sheet.

FAQ

What is a sprite sheet used for?

Games use sprite sheets to hold animation frames, tile sets, user interface icons, and any other artwork that gets drawn many times per second. Packing it into one texture lets the renderer batch draw calls instead of switching textures for every element, which is where most of the performance benefit comes from.

What is the difference between a sprite sheet and a texture atlas?

A sprite sheet is a uniform grid of equal-sized cells addressed by number. A texture atlas holds frames of any size and position, packed tightly, addressed by name, and it requires a data file describing each frame. A grid sheet can be split from its cell size alone; an atlas cannot.

What size should a sprite sheet be?

Keep the whole sheet to a power of two, commonly 1024, 2048, or 4096 pixels on a side, because GPU texture handling prefers it and very large textures hit device limits. Cell sizes usually follow the same convention: 16, 32, and 64 pixels are the most common choices.

Can I split a sprite sheet online?

Yes. The sprite sheet splitter runs entirely in your browser: enter the cell size, offset, and spacing, and it exports numbered PNG frames in a ZIP. Nothing is uploaded, which matters for unreleased or licensed artwork. Transparency is preserved because the output is PNG.

Do sprite sheets have to be a grid?

No, but if they are not, they need a data file. Packed atlases place frames at arbitrary positions and sizes to save space, and the accompanying JSON or XML is the only record of where each frame sits. Without that file, an atlas cannot be reliably split.