Sprite sheet packer
The Sprite sheet tab packs individual PNG frames into a single atlas. Useful for shipping a tight texture rather than dozens of separate images, and for engines that prefer one draw call per atlas.
![]()
Open it
Section titled “Open it”Title bar Tools menu, then Pipeline tools, then Sprite sheet.
Inputs
Section titled “Inputs”- Frame images. File picker, multi-select. Drop your individual sprites in.
- Padding gutter. 0 to 8 pixels, slider. Adds transparent space between packed frames to prevent bleeding when the atlas is sampled with bilinear filtering.
- Atlas name. Used in the export filenames.
How it packs
Section titled “How it packs”Forge uses MaxRects with a best-short-side-fit heuristic. The bin grows in powers of two up to 4096px. The header shows occupancy (the percentage of the bin actually filled). Higher is better for memory and load time.
If a frame is larger than 4096px, packing fails and the tab tells you which frame is too big.
Preview
Section titled “Preview”The preview canvas renders the packed atlas at 1:1, with pixelated rendering so you can see exactly what’s about to be exported. Frames that couldn’t be placed are flagged inline.
Output
Section titled “Output”Two files saved to <project>/.forge/generated/spritesheets/<atlas-name>/:
- PNG atlas. The packed texture.
- JSON descriptor. A Phaser-compatible “JSON Hash” descriptor. Frames are keyed by basename, with source paths preserved for traceability.
{ "frames": { "walk-1.png": { "frame": { "x": 0, "y": 0, "w": 32, "h": 32 }, "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, "w": 32, "h": 32 }, "sourceSize": { "w": 32, "h": 32 } } }}The descriptor format is engine-flexible. Phaser ingests it directly. Aseprite, TexturePacker, and Unity sprite atlases use related but distinct schemas; you can reformat the JSON if you need a different shape.
- Unreadable images (corrupt PNGs, unsupported formats) are skipped silently. The pack continues with whatever loaded.
- Repacking after adding or removing frames re-runs the entire layout. Frame placement isn’t stable across packs.
- This is a single-atlas tool. For multi-atlas projects, run the tool once per atlas with a different name.