GameMakerPNG grid workflow

Sprite Sheet Generator for GameMaker

Pack your frames into an evenly spaced sheet and bring it into GameMaker with the strip importer. Frame size, cells per row, and separation all line up.

A sprite sheet exported as a uniform PNG strip, next to the settings it needs in GameMaker
What you export

Format menu

PNG

Uniform PNG strip or grid

GameMaker does not read third-party atlas metadata, so the sheet carries the layout. Export a uniform PNG and the strip importer rebuilds your frames from three numbers: frame width, frame height, and how many cells sit per row. GameMaker builds its own texture pages at compile time, so packing tightness on your side does not matter, only that the grid is regular.

Step by step

Getting the sheet into GameMaker

  1. 1

    Export a uniform sheet

    Keep every cell the same size. Note the cell width, cell height, frames per row, and gutter before exporting the PNG.

  2. 2

    Create the sprite

    In the asset browser, create a new Sprite, then choose Import in the sprite editor and pick your PNG.

  3. 3

    Import as a strip

    Use the strip import options to set frame width and height, the number of frames, and frames per row. If you exported a gutter, set the horizontal and vertical separation to match.

  4. 4

    Set origin and speed

    Pick the origin (Middle Centre for characters) and set the sprite Speed in frames per second.

  5. 5

    Kill the interpolation

    Game Options > Graphics: turn off Interpolate colours between pixels so pixel art stays sharp.

GML
// Create event
image_speed = 1;      // sprite Speed value drives the FPS
image_index = 0;

// Swap animations by swapping sprite
if (moving) {
    sprite_index = spr_hero_walk;
} else {
    sprite_index = spr_hero_idle;
}
Cheat sheet
SettingGameMaker value
ImportSprite editor > Import Strip Image
Frame sizeFrame width and height, in pixels
LayoutNumber of frames and frames per row
GutterHorizontal / vertical separation
Crisp pixelsInterpolate colours between pixels: off
Built for the workflow

Strip or grid

Export a single row for a classic strip, or a rectangular grid and tell the importer how many cells per row.

Predictable spacing

You choose the gutter, so the separation values you type into the importer are numbers you already know.

Duplicate detection

Repeated frames get flagged before export, so you are not shipping the same idle pose four times.

Preview the timing

Scrub the animation at your target FPS first, then set the same number as the sprite Speed.

Troubleshooting

When the sheet fights GameMaker

Only one frame appears after importing the strip

Cause
The frame count, or the number of cells per row, is still at its default of one, so GameMaker read a single cell and ignored the rest of the image.
Fix
Set the number of frames and the frames per row to match the grid you exported. The editor shows both numbers, so they are values you already have rather than ones you measure.

The animation speed ignores the value you typed

Cause
Sprite Speed can be expressed in frames per second or in frames per game frame, and the two read the same box very differently.
Fix
Set the sprite Speed unit to frames per second, enter the rate you previewed, and leave image_speed at 1 in code. Use image_speed only for relative changes, such as 0.5 for a slow-motion effect.

The origin makes the sprite rotate or scale from a corner

Cause
A new sprite gets a top-left origin, which is what you want for tiles and wrong for almost every character.
Fix
Set the origin to Middle Centre for something that rotates, or Bottom Centre for something standing on ground. It is a per-sprite setting, so do it once at import rather than compensating in draw code.

Collisions trigger before the sprite visibly touches anything

Cause
The automatic collision mask is built from the whole frame, including the transparent margin that a uniform cell adds around smaller art.
Fix
Switch the mask to Automatic per frame, or set a manual rectangle. Trimming frames before export also shrinks the cell, which shrinks the mask at the same time.

A large sheet loads slowly or shows edge artefacts in the build

Cause
GameMaker repacks everything onto texture pages sized 2048 by default, and a sheet larger than the page gets its own page or is split awkwardly.
Fix
Raise the texture page size in Game Options, or split the sheet by animation. Per-animation sheets also let you assign texture groups so a level only loads the pages it needs.

Frames look duplicated in the sprite editor timeline

Cause
The source sheet contains repeated poses, usually inherited from a GIF that faked its timing with duplicate frames.
Fix
Drop the repeats before exporting and let the sprite Speed value produce the pause instead. The duplicate check in the editor flags them, so it is a quick pass rather than a frame-by-frame comparison.
Versions & compatibility

What changes between GameMaker versions

GameMaker 2024 and later
Import Strip Image lives in the sprite editor and takes frame width, frame height, frame count, frames per row, and separation. The dialog has been stable through the recent releases and the monthly naming changes did not touch it.
GameMaker Studio 2
Same importer, same fields, reached through the same sprite editor. A sheet exported here imports identically, so a project on an older 2.x runtime needs no different export.
Texture groups
Assign each sheet to a texture group that matches how the game loads. A boss whose sheets sit in their own group can be prefetched and freed, which matters far more than how tightly the sheet itself is packed.
Nine slices and tilesets
Nine-slice sprites and tile sets are separate asset types with their own importers. Export a zero-gutter uniform grid for a tile set, since GameMaker adds its own bleed when it builds the tile page.
GameMaker FAQ

Want the long version? Read the engine import guide, or see every export format.

Other engines

Export for GameMaker

Pack your frames in the browser. What you walk away with: Uniform PNG strip or grid, ready for GameMaker.