For Aseprite users
Aseprite Sprite Sheet Unpacker
Export a sprite sheet image and its JSON data from Aseprite. This tool restores each cropped frame to its original canvas size.
Example: sheet.png + sheet.json → full-size frame PNGs
Try this tool- 1. AddAseprite image + JSON
- 2. AdjustRestore frame positions
- 3. SaveFull-size PNGs in a ZIP
1. Add both files exported from Aseprite
In Aseprite, export a sprite sheet with its JSON data. Choose the image and JSON from the same export.
How to use it
1. Export the image and JSON together
Export a sprite sheet with JSON metadata in Aseprite and keep both files from that export. This tool reads PNG or WebP sheets with JSON array or hash data, not native .ase or .aseprite projects.
2. Load the matching pair
Choose A. The image sheet and B. The matching JSON data, then restore. The importer checks meta.size and every crop and offset. Do not reuse old JSON after repacking or resizing the sheet.
3. Inspect and save the restored sequence
Use the Frame slider and playback preview to inspect alignment. Each crop is placed onto its sourceSize canvas using spriteSourceSize offsets. Download the ZIP and keep manifest.json for names, durations, and frame tags.
Three rectangles explain why trimmed sprites jump
frame locates the pixels inside the packed sheet. Its x and y are atlas coordinates, not the character’s original position. sourceSize gives the original canvas dimensions. spriteSourceSize gives the crop’s position inside that canvas.
A 64 × 64 pose trimmed to 22 × 38 may live at (128, 0) in the sheet but at (19, 20) in the original frame. Restoration creates a transparent 64 × 64 canvas, copies that 22 × 38 rectangle, and places it at (19, 20). Drawing it at (0, 0) would move the character.
Restoration does not undo intentional movement inside the original frame or invent a new pivot. Tags and durations are retained in the manifest, but the receiving application must use them. Uniform-FPS playback will not automatically preserve an unequal hold.
| Setting or input | What it means |
|---|---|
| frame: 128, 0, 22, 38 | Read this rectangle from the sheet |
| spriteSourceSize: 19, 20, 22, 38 | Place the crop at (19, 20) |
| sourceSize: 64 × 64 | Export a full-canvas PNG |
| duration: 100 | Retain 100 ms in manifest.json |
Check before downloading
Matching dimensions do not prove matching packing
Two exports can have identical sizes but different arrangements. Inspect recognizable first and last poses, and use files produced in the same export.
Stay within the supported export format
Rotated frames are unsupported. Limits: 2 MB JSON, 20 MB image, 100 frames, 4096 px sheet sides, 16 million sheet pixels, 1024 px restored frame sides, and 20 million restored pixels in total.
Questions
Can I upload a native Aseprite project?
No. Export a sheet and JSON first. Editable layers, cels, and native project structure are not loaded.
Why are rotated packed frames rejected?
This importer handles non-rotated crops. Re-export without rotation. Changing rotated to false in JSON would misinterpret the stored pixels rather than repair them.
Why are the PNGs bigger than the packed crops?
Each uses the original sourceSize canvas and its transparent padding. That preserves pose alignment. Keep the packed atlas when compact texture storage is the goal.
Does the ZIP preserve timing?
Durations and valid frame tags are in manifest.json. PNG files alone have no playback timing. Import or reproduce the metadata in the receiving editor or engine.
What should I do after a dimensions error?
Compare meta.size with the image and check for resizing or repacking after export. Regenerate both files together instead of altering metadata to bypass validation.
Related tools and tutorials
Restore Aseprite trimmed frames — Follow the offset example and diagnose a moving baseline.
Sprite Sheet Animator — Test restored frames at uniform FPS when unequal durations are unnecessary.
Aseprite export documentation — Read the editor’s instructions for generating a matching sheet and data.
