Pack multiple frames into one sprite sheet · Set columns & padding · PNG download · 100% private
Individual frames exported from Aseprite or Photoshop often need combining into a single atlas before import into Godot or Unity. Existing packers either require installation or charge for the feature. Sprite Sheet Packer solves this in the browser — drag in frames, set columns, download the atlas.
A packer does the opposite of a slicer — it combines multiple individual frame images into one sprite sheet. This matters when you have exported animation frames, icon sets, or UI elements that need packing into an atlas.
Everything runs entirely in your browser. Upload multiple PNG frames, set columns and optional padding, and the packer arranges them into a uniform grid on Canvas.
Frames are packed in the order they were uploaded. To control the order, name your files with sequential numbers before uploading (e.g. frame_001.png, frame_002.png) and select them in order from your file manager.
Padding adds a transparent pixel gap between each frame in the sheet. This prevents texture bleeding — a visual artifact where the GPU samples pixels from an adjacent frame when rendering at non-integer scales. A padding of 1 or 2 pixels is recommended for most game engines.
The number of columns determines how many frames appear per row in the packed sheet. For animation sequences, a common approach is to use the total frame count as a single row (columns = frame count), or to use a square-ish layout. Check your game engine's sprite sheet import documentation to see if it has a preferred layout.
For best results, all frames should be the same dimensions. Most game engines expect uniform frame sizes in a sprite sheet. If your frames are different sizes, resize them to match before uploading — the tool will use the first frame's dimensions as the cell size.
The packed PNG sprite sheet works with any engine that supports sprite atlases, including Unity, Godot, GameMaker Studio, RPG Maker, Phaser, and Defold. Import the sheet and configure the frame dimensions in your engine's sprite editor to match the cell size you used when packing.
Yes. Click "Download JSON" after packing to get a JSON file containing the pixel coordinates of every frame in the sheet. The format lists each frame's x, y, width, and height, which most game engines and texture atlas tools can import directly. Unity, Godot, and Phaser all support JSON-based sprite atlas definitions.
Set the Frame Width and Frame Height fields manually to the target cell size before packing. All uploaded frames will be drawn into cells of that size — frames smaller than the cell will be centered, and frames larger than the cell will be cropped. For cleanest results, resize all frames to a uniform size before uploading.
There is no hard limit. The tool runs entirely in your browser and uses the HTML5 Canvas API, so the practical limit is your device's available memory. Packing hundreds of small frames (16×16 or 32×32) works reliably on any modern device. Very large frames (512×512 or larger) with many images may slow down on older hardware.
Texture bleeding is a rendering artifact where the GPU samples pixels from a neighboring frame when rendering at sub-pixel scales, fractional zoom levels, or with bilinear filtering enabled. Adding 1–2 pixels of transparent padding between frames creates a buffer zone that prevents neighboring pixels from being sampled. It is especially noticeable in mobile games and 3D engines where sprites are rendered on textured quads.
Yes. The packed sprite sheet is rendered on the preview canvas in real time after each change to columns, padding, or frame size. You can visually verify the layout — frame alignment, spacing, and order — before clicking download. The preview uses the same Canvas rendering that generates the final PNG, so what you see is exactly what you get.
→ General questions? Visit our FAQ page
Sprite Sheet Packer is part of a suite of free browser-based tools for game developers and pixel artists.
© 2026 ORH Studio. All rights reserved.
Home | About | Privacy Policy | Terms of Service | Contact