Skip to content

Sprite Sheet to PNG Frames — One File per Frame (ZIP)

When a tool wants separate images instead of a sheet, the classic Sprite Lab cuts the sheet by a grid you confirm or by transparent gaps and downloads a ZIP of frames — each PNG an exact copy of its box on the sheet.

Turning a sprite sheet into separate PNG files means cutting it into frame boxes, by a grid with margin and spacing or along transparent gaps, and saving each box as its own image. Nerulio's classic Sprite Lab does this in your browser and downloads one ZIP with a PNG per outlined frame, named after the sheet and numbered in frame order (hero_001.png, hero_002.png …). Every PNG is its box copied pixel for pixel: no resampling, no position data. For animations, pivots or engine files, cut the same sheet in the Studio instead.

Drop a sprite sheet (PNG)
Runs in your browser. Files are not uploaded.
Classic Sprite Lab: a CC0 sheet with every frame outlined before export
The real Sprite Lab (classic) with a CC0 asset (OpenGameArt).
Outputs
  • Frame PNGsMeasured· Pillow

Boxes, sizes and names

Loose frame files are what you want when a tool builds animations from a folder of images, or when frames are edited one by one elsewhere. The files carry no timing and no position: a frame's place is only its size and its transparent border. That is why each PNG keeps the full box, transparent margin included: frames cut from one grid all have the same size and still line up when a tool stacks them.

On an irregular sheet cut by transparent gaps, each box has its own size, so the PNGs differ in size and a tool that draws each from its corner will make the animation hop. Align the frames on one canvas first (the classic Lab has a normalize step; the Studio has Align frames) if they must line up.

Names are the sheet's name plus a zero-padded number, at least three digits (more for sheets of 1,000 frames or more), so sorting by name gives frame order in every file manager. Cells without any pixels are skipped rather than written as blank images.

Frame box
The rectangle cut from the sheet; the PNG has exactly this size.
Zero-padded number
001, 002 … 010, so that text sorting equals frame order.

Example: a 256 × 128 sheet of 64 × 64 frames

No margin and no gaps, 4 columns × 2 rows:

grid 64 × 64            → 256 ÷ 64 = 4 columns, 128 ÷ 64 = 2 rows = 8 frames
download                → hero-frames.zip
files                   → hero_001.png … hero_008.png, each 64 × 64, row by row
pixel check             → 8 × 64 × 64 = 32,768 = 256 × 128: every pixel is in one file

same art with a 1 px margin and 2 px gaps (263 × 131 sheet)
                        → still eight 64 × 64 PNGs; margin and gaps belong to no frame

263 = 1 + 4 × 64 + 3 × 2 + 0 and 131 = 1 + 2 × 64 + 1 × 2 + 0 (no right or bottom margin). If boxes land on the art instead of the gaps, see slicing that is off.

What it does

  • Frames found by alpha islands (irregular sheets) or a grid with margin and spacing.
  • One ZIP with a PNG for every outlined frame, in frame order.
  • Every frame PNG equals its region of the sheet pixel for pixel; nothing is resampled.
  • For animations, pivots, hitboxes or engine files, open the same sheet in the Studio instead.

How to do it

  1. Drop the sprite sheet.
  2. Check the detected frames or set the grid.
  3. Adjust any frame box if needed.
  4. Download the frames ZIP.

Check the result

  • Before downloading, look at the box outlines on the sheet: each box should hold one whole sprite and nothing of its neighbour.
  • Open the ZIP: the number of PNGs equals the number of outlined boxes, and consecutive frames of a grid sheet have the same pixel size.
  • Step through the files in an image viewer in name order; the animation should run in the order you expect.

Troubleshooting

SymptomLikely causeHow to checkFix
A PNG contains a sliver of its neighbourThe grid ignores a gap or a margin, so boxes overlap the next spriteThe outlines on the sheet cross the artSet the gap and offset, or drag the box, before downloading
Frames hop when played from the filesIslands gave boxes of different sizes, and the tool draws each PNG from its cornerCompare the pixel sizes of two PNGsCut by an equal grid, or align the frames on one canvas before exporting
A frame you expected is missingIts cell holds no opaque pixels, so it was skippedCount the drawn cells on the sheetNothing to fix if the cell is blank; if it holds faint pixels, lower the alpha threshold
A coloured box surrounds every frameThe sheet has an opaque background colourThe corners of each PNG are not transparentMake the background transparent first: remove the sprite background

Other ways to do it

OptionWhen it is the better choice
ezgif's sprite cutterYou also want JPG, BMP or WebP frames, or you continue in its GIF tools; the sheet is uploaded to ezgif's server. Compared on ezgif alternative.
The Studio's Sprite workspaceThe frames are for a game engine: tags, timing, pivots and one packed atlas instead of loose files. Start at the sprite sheet slicer.

Outputs and how each was checked

"Measured" means the downloaded file was opened again outside the page (Pillow, numpy or an independent parser) and the property was measured. Loading these files in a game engine was not tested.

TargetFilesCheck
Frame PNGs<sheet>-frames.zip (one PNG per frame)Measured PillowEvery frame PNG equals its outlined box on the sheet (Chromium and Firefox). No position data in the ZIP.

Evidence

Frames re-read from the ZIP equal their regions of the source sheet pixel for pixel.

Limits

  • The ZIP holds PNGs only, with no position or timing data.
  • Loose frame files are a classic Sprite Lab export; the Studio does not write them yet.
  • The classic Lab has no timeline or tags; use the Studio for animations.
  • Frames are cut by alpha islands or a grid you confirm.
  • Very large sheets are sliced in bands; the page shows progress.

Versions and sources

In the browser test suite each PNG of the ZIP was compared with its outlined region of a real CC0 sheet and matched pixel for pixel, in Chromium and Firefox. ezgif's output formats are quoted from its own page.

Official documentation used

Questions

Why is this not in the Studio?

The Studio exports engine atlases and animations; a ZIP of loose frame PNGs is still a classic Sprite Lab export.

Are the frames trimmed?

Each PNG is exactly the box outlined on the sheet; resize a box before exporting to change it. The ZIP holds only the PNGs, with no position data.

Is it free, and do I need an account?

Everything on these pages is free and works without an account. There is no watermark and no export that is held back.

Are my sprites uploaded?

No. The Studio decodes, packs and exports in this browser tab. Projects are autosaved in the browser (IndexedDB) and can be saved as a .nerulio file.

Does it need Aseprite or an engine plugin installed?

No. .aseprite files are read and written in the browser, and each engine bundle carries what that engine needs (for Godot, the import settings and scene; for Unity and the Godot TileSet, a small editor script).