How to Make a Sprite Sheet from Separate Images
4 min read · Updated August 2026
Whether you drew 30 frames in different files or downloaded an asset pack of loose PNGs, most engines want them combined into a single texture atlas: one image plus data describing where each sprite sits. SpritePilot’s Bulk Sprite Sheets tool does exactly that, entirely in your browser.
Open Bulk Sprite Sheets — free, in your browser, no signup.
- Upload your images. Drag all your individual sprites into the upload area at once — PNG, JPG, GIF, and WebP all work, and PNGs with transparency are recommended. Each file shows up as a thumbnail with its dimensions. Remove strays with the delete button that appears on hover.
- Choose a packing algorithm. "Bin Packing" sorts sprites by height and fits them tightly to waste as little space as possible — best when your images are different sizes. "Simple Grid" arranges everything in uniform cells sized to the largest image — best when frames belong to one animation and should stay evenly spaced.
- Set the limits and padding. "Max Width" and "Max Height" (256–8192, default 2048) cap the atlas size — keep these at or below your target platform’s texture limit. "Padding" (0–20, default 2) inserts empty pixels between sprites so neighbouring images never touch. "Background Fill" defaults to transparent; you can also bake in white, black, or gray.
- Generate and inspect. Click "Generate Sprite Sheet". The preview renders over a checkerboard so you can see exactly which areas are transparent. If the packer can’t fit everything inside your max dimensions, you’ll get an error telling you the size it needed — raise the limits or drop some images.
- Download PNG + JSON. One click downloads both the sheet (sprite-sheet.png) and a JSON file listing every sprite’s name, x, y, width, and height. Sprite names come from the original filenames, minus the extension.
Tips
- Most GPUs and engines are happiest with atlases at or under 2048×2048 — the default limits are a safe ceiling for mobile.
- Use at least 2 px of padding if the sheet will be scaled or mip-mapped; it prevents neighbouring sprites bleeding into each other.
- Need engine-specific metadata (TexturePacker, Godot, Phaser, Aseprite) instead of basic JSON? Split your sheet in Sprite Detection, then use Export & Download, which offers seven metadata formats plus per-sprite renaming.
- No images yet? Draw your frames in the built-in Pixel Art Editor — its "Send to Session" button routes them through Export & Download, which packs them into a sheet with engine metadata.
Is there a limit on how many images I can pack?
No hard count limit — the constraint is the atlas dimensions. If everything fits inside Max Width × Max Height with your padding, it packs.
Are my images uploaded anywhere?
No. The packer runs entirely in your browser; files never leave your device.
Related guides
- Sprite Sheet Export Formats Explained
- How to Split a Sprite Sheet into Individual Sprites
- How to Draw Your Own Pixel Art Sprite