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.

- 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 frame263 = 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
- Drop the sprite sheet.
- Check the detected frames or set the grid.
- Adjust any frame box if needed.
- 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
| Symptom | Likely cause | How to check | Fix |
|---|---|---|---|
| A PNG contains a sliver of its neighbour | The grid ignores a gap or a margin, so boxes overlap the next sprite | The outlines on the sheet cross the art | Set the gap and offset, or drag the box, before downloading |
| Frames hop when played from the files | Islands gave boxes of different sizes, and the tool draws each PNG from its corner | Compare the pixel sizes of two PNGs | Cut by an equal grid, or align the frames on one canvas before exporting |
| A frame you expected is missing | Its cell holds no opaque pixels, so it was skipped | Count the drawn cells on the sheet | Nothing to fix if the cell is blank; if it holds faint pixels, lower the alpha threshold |
| A coloured box surrounds every frame | The sheet has an opaque background colour | The corners of each PNG are not transparent | Make the background transparent first: remove the sprite background |
Other ways to do it
| Option | When it is the better choice |
|---|---|
| ezgif's sprite cutter | You 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 workspace | The 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.
| Target | Files | Check |
|---|---|---|
| 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).