Sprite sheet splitter

Enter the size of one cell and every frame is cut out, numbered and packed into a ZIP. Offset and spacing handle sheets with a border or gaps between frames.

Drop an image here

or , or paste with Ctrl+V

JPG, PNG, WebP, GIF, BMP and AVIF, up to 50 MB.

Split by
Grid

Your image never leaves your device. Splitting runs in your browser with the Canvas API.

How to split a sprite sheet

  1. Step 1: Set the cell size

    Type the width and height of one frame in pixels. Most hand-drawn sheets use 16, 32 or 64, and a sheet that came with a JSON or XML file already lists the number.

  2. Step 2: Adjust offset and spacing until the grid lands on the frames

    Offset moves the whole grid away from the top-left corner, for sheets with a border. Spacing is the gap between neighbouring cells. Watch the preview and change one number at a time.

  3. Step 3: Download the ZIP

    Every frame comes out as a numbered PNG with transparency kept, packed into one ZIP. Click a single frame instead if you only want one.

Worked examples

Frame counts computed by the same cell-size function the tool runs. A sheet that does not divide cleanly drops the partial cells unless you ask for them.
A 512 × 512 sheet cut at 64 px64 frames of 64 × 64 px
A 1024 × 256 strip cut at 128 px with 2 px spacing7 frames of 128 × 128 px, with 116 px left over on the right
A 320 × 512 sheet cut at 64 px40 frames of 64 × 64 px
A 500 × 500 sheet cut at 64 px49 frames of 64 × 64 px, with 52 px left over on the right

Load your sheet above, type the width and height of one cell, and every frame is cut out and numbered. Offset and spacing controls handle sheets with a border or gaps between cells, and the preview grid shows where the cuts land before you download anything. Output is PNG with transparency intact, packed into a ZIP.

Why this is not the same as a grid splitter

A general image splitter asks for rows and columns. A sprite sheet is defined the other way round: the cell size is fixed by whoever drew it, and the row and column count falls out of that.

Typing “8 columns” into a splitter when the sheet is really 7.5 cells wide plus a margin produces frames that drift further out of alignment with every column. The first one looks fine. By the end of the row you are exporting half of one character and half of the next.

Enter the cell size instead and the grid is correct everywhere, or obviously wrong immediately. The preview tells you which within a second.

The controls

Cell width and height. The size of one frame in pixels. Usually square and usually a power of two: 16, 32, and 64 cover most hand-made sheets. If the division leaves a remainder, the sheet has an offset or spacing you have not entered yet.

Offset X and Y. The gap between the top-left corner of the image and the first cell. Sheets with a decorative border or a one-pixel guide line need this. Phaser calls the same thing margin; Unity’s Sprite Editor calls it Offset.

Spacing X and Y. The gap between neighbouring cells. Artists add spacing so that texture filtering does not bleed one frame into the next during rendering. Phaser calls this spacing. If your frames come out with a stripe of the next frame down one edge, this is the missing number.

Trim transparent edges. Removes fully transparent rows and columns from the outside of each exported frame. Useful when you are re-packing into a new atlas or shipping individual assets. Leave it off when the frames are going back into an engine as an animation, because equal frame sizes are what stop a character jumping between frames.

Skip empty cells. Sheets often have blank cells at the end of a row. This drops fully transparent frames from the output rather than exporting a set of empty PNGs you then have to delete.

Numbering. Frames are numbered row by row, left to right, top to bottom. Choose sequential names (sheet_00.png, sheet_01.png) or row and column names (sheet_r0c0.png) depending on what your pipeline expects. Numbers are zero-padded so a file listing sorts in frame order rather than putting frame 10 before frame 2.

Finding the cell size

If the sheet shipped with a .json, .plist, .xml, or .tres, open it. The frame rectangles are listed and there is nothing to work out.

Without one: count the frames across a row and divide the image width by that number. Check the result against a power of two, since most sheets use one. If the number is not clean, zoom in on the boundary between two frames and look for a gap; that gap is your spacing, and subtracting it makes the arithmetic work.

Then type a number here and look at the preview. It is faster than measuring.

Output

PNG, always. Sprite frames need an alpha channel, and JPG does not have one: exporting sprites as JPG replaces every transparent pixel with a solid colour, usually black or white, and there is no way back. PNG is also lossless, so each frame is pixel-identical to that region of the sheet.

Frames download as a ZIP, or individually if you only want a few. The ZIP is built in your browser and streamed straight to disk.

Specifications

  • Maximum file size: 50 MB.
  • Maximum source resolution: roughly 60 megapixels.
  • Input formats: PNG, WebP, GIF, BMP, AVIF, JPG. PNG is the normal case for sprite work.
  • Output: PNG, with the alpha channel preserved.
  • Cell size: any whole number of pixels, in each direction independently.
  • Offset and spacing: set separately for X and Y.
  • Naming: {base}_{n}.png or {base}_r{row}c{col}_{n}.png, zero-padded.
  • Processing: the sheet is decoded and cut on your own device with the Canvas API. Nothing is uploaded, which matters when the artwork is unreleased or licensed.

No account, no watermark, no cap on how many sheets you cut.

FAQ

How do I split a sprite sheet into individual frames?

Load the sheet, enter the width and height of one cell, and add the offset and spacing if the sheet has a border or gaps. The preview grid shows where the cuts land. Download the frames as numbered PNGs in a ZIP, or save them one at a time.

What if I do not know the cell size?

Divide the sheet width by the number of frames across one row. If it does not divide evenly, there is an offset or spacing to account for. Most sheets use powers of two, so try 16, 32, or 64 first and check the preview grid against the artwork.

Does this preserve transparency?

Yes. Output is PNG, which carries an alpha channel, and the frames are never flattened onto a background. Do not export sprite frames as JPG: JPG has no alpha channel, so every transparent pixel becomes a solid colour and the loss is permanent.

Can it handle sheets with spacing between frames?

Yes. Set the spacing values for X and Y and the grid skips those gaps instead of including them in each frame. If your exported frames carry a stripe of the neighbouring frame along one edge, spacing is the setting you are missing.

Should I trim the transparent edges?

Not if the frames are going back into a game engine as an animation, because equal frame dimensions are what keep a character anchored between frames. Do trim if you are re-packing into a texture atlas or shipping individual assets, where smaller files matter and the packer recalculates offsets anyway.

Is my artwork uploaded anywhere?

No. The sheet is decoded and cut in your browser with the Canvas API, and the ZIP is assembled on your device. No copy of the file is sent to a server at any point, which is the reason this tool is usable on unreleased or client-owned artwork.