All guides
Getting Started: Your First Sprite Sheet
BeginnerStart here6 min readUpdated November 1, 2026

Getting Started: Your First Sprite Sheet

A screen-by-screen walkthrough of the editor: import and slice an image, arrange the grid, preview the animation, fix pixels, recolor, and export.

Written by Dennis Postma
Game developer, maintainer of Spritesheet Generator

TL;DR

Drop an image into the editor, tell the importer how big one frame is, and you have a sprite sheet. The rest is cleanup: arrange the grid, play the animation at your engine's fps, fix stray pixels, recolor if you want variants, and export in a format your engine reads. There is nothing to install.

Keep the editor open in another tab and follow along. The screenshots are of the real interface.

What You Need

Any of these works as a starting point: a batch of PNG frames, one existing sprite sheet, or an animated GIF. You do not need an account, and your frames stay in the browser while you work.

Several PNGs dropped at once become one frame each. A single image opens the importer, which offers to slice it. After that the steps are the same either way.

Step 1: Import and Slice

Drag an image onto the editor or click Add image. A single image always opens the importer, because the editor cannot tell whether it is one sprite or twenty four sprites packed together.

Import dialog slicing a 192x128 sheet into 24 sprites on a 32x32 grid
The importer shows every frame it found before anything lands in the editor.

There are three ways to cut it, plus a fourth for GIFs:

  1. Even grid fits almost every sprite sheet. Enter the cell size (say 32 x 32), or the number of columns and rows, and the preview updates as you type. The line under the inputs does the math for you: 192x128px -> 6x4 cells. If that is not the count you expected, the cell size is wrong.
  2. Detect sprites looks for separate shapes against the background and boxes each one. Use it for sheets with no consistent spacing. If two sprites come out as one box, move the Sensitivity slider toward "More sprites"; if one sprite gets split, move it toward "Fewer sprites". Merge nearby sprites and Connect diagonal pixels help with detached bits like a floating sword.
  3. Atlas reads the data file that came with the sheet and uses its rectangles as they are: TexturePacker or Phaser JSON, Sparrow XML, or a Cocos2d .plist. Rotated frames are turned back upright. Pick this whenever you have the data file.
  4. GIF frames only shows up for GIFs and pulls out each frame of the animation.

Skip empty cells drops fully transparent cells, so a 6x4 grid with two blanks imports as 22 frames. Keep cell padding keeps each sprite at its position inside the cell, which matters if your frames are deliberately off-center.

Tip

If the image is not a sheet at all, click Use as single sprite at the bottom left.

Step 2: Arrange the Grid

Confirm the import and the frames appear on a grid.

Sprite sheet editor showing 24 imported frames on a six column grid at 300% zoom
Twenty-four 32x32 frames on a six column grid. The chips in the top bar show sprite count and cell size.

The controls you will use most:

Control What it does When you need it
Columns Frames per row Matching what your engine expects, or keeping the sheet roughly square
Force Size Locks every cell to fixed dimensions Frames of different sizes that your engine wants on a uniform grid
Padding Transparent gutter around every cell Thin seams or bleeding at sprite edges. See packing and padding
Trim Transparent Crops empty borders off each frame Shrinking a sheet before packing
Alignment Snaps sprites to an edge inside their cells Keeping a character's feet on the same baseline

Drag a frame to move it. Multi lets you select several at once, Swap exchanges two cells, and Frames in View Options numbers every cell so you can see the order.

The Grid / Packed toggle in the top bar switches between a uniform grid and a MaxRects-packed atlas with the empty space squeezed out. A grid is easier to read and for engines to slice. Packed is smaller.

Step 3: Check the Animation

Open the Preview tab to see the frames move.

Animation preview playing a slime bounce at 12 FPS with zoom and onion skin controls
Preview plays the sheet in order. Scrub, change FPS, and zoom without touching the frames.

Set Speed (FPS) to the rate your engine will use. Twelve is a reasonable default; the basics guide has a table of how 8, 12, and 24 look. Onion skinning ghosts the frames on either side of the current one, which shows a limb that jumps a pixel between poses.

Watch out

The preview plays visible frames in grid order. If a walk cycle looks scrambled, the frames are out of order on the canvas. Go back to the Editor tab, turn on frame numbers, and drag them into sequence.

Step 4: Fix Pixels in Place

For a stray pixel you do not need another program. Open the Draw tab and pick the frame.

Built-in pixel editor with a 32x32 slime frame zoomed to 16x on a pixel grid
A zoomable pixel grid with drawing tools. Saving writes the frame straight back into the sheet.

The tools are pencil, eraser, fill, eyedropper, line, rectangle, ellipse, and select, with undo and redo. Onion skin works here too, so you can line a fix up against the neighboring frames. Save frame puts the edit back into the sheet.

Step 5: Recolor

The Recolor tab changes colors across every frame at once.

Recolor tab applying a 180 degree hue shift across all 24 frames of a sprite sheet
One hue shift gives a second palette variant. The original pixels stay untouched until you bake.

The live filter covers hue, saturation, brightness, contrast, sepia, and invert, with a few presets. It only changes the preview until you bake it into the frames. There is also a per-color map for swapping specific colors. The palette guide covers both and how to use them for enemy variants.

Step 6: Export

The export buttons sit at the top of the sidebar. PNG and WebP save the sheet image, JSON the frame data, and ZIP every frame as its own file. GIF renders the animation at an fps you choose, which is handy for a devlog or an itch.io page.

Export For dialog listing Phaser, Aseprite, Godot, Tiled, CSS sprites and Sparrow XML, with an animation name field
Format exports write metadata your engine already reads. The animation name field sets frame names in the XML export.

For an engine, use Format:

  • Phaser / PixiJS: JSON atlas, TexturePacker-compatible
  • Aseprite: Aseprite-compatible JSON atlas
  • Godot: a SpriteFrames resource (.tres) for an AnimatedSprite2D
  • Tiled: JSON tileset (.tsj)
  • CSS Sprites: ready-made classes for the web
  • Sparrow / Starling XML: the TextureAtlas format Friday Night Funkin also reads. Set the animation name in the dialog and frames export as idle0000, idle0001, and so on

Unity does not need a data file: export the PNG and slice it in the Sprite Editor. The engine import guide has step-by-step settings for Godot, Unity, Phaser, and Construct, including the filter setting that keeps pixel art from going blurry.

Where to Go Next

No account, nothing to install. Open the editor

Try it in the editor

The editor is free and needs no account. Open it in another tab and work through the steps above with your own frames.

Keep reading