AI Sprite Sheet Generator

Six drawings, and the numbers that make them move

Every sheet made here comes with an atlas: where each frame sits, what the sequence is called, how long it is held. Below is a real one, playing. Move anything you like.

A caped figure hopping, drawn in the Stone style
10 sheets

The six phases

crouchpushrisetuckfallland

One hop is 1290 ms. The body travels on a curve the whole time; the drawing changes at these six boundaries, which is what makes six pictures read as one motion.

The numbers

{"height_pct":95,"distance_pct":120,"air_ms":680,"crouch_ms":280,"push_ms":110,"rise_pct":36,"fall_pct":32,"land_ms":220,"size_pct":58}

That line is the whole motion. It plays on any sheet of six poses — including the nine you did not pick.

The sheet it is playing

jump 0 · crouch
jump 1 · push
jump 2 · rise
jump 3 · tuck
jump 4 · fall
jump 5 · land

Six drawings in a 3×2 grid, one image. The box lighting up is the frame on screen right now. Every sheet in the strip has this same shape, which is why one line of numbers moves all ten.

The atlas that ships with it

{
  "frames": {
    "jump 0.png": {
      "frame": {
        "x": 0,
        "y": 0,
        "w": 341,
        "h": 512
      },
      "rotated": false,
      "trimmed": false,
      "spriteSourceSize": {
        "x": 0,
        "y": 0,
        "w": 341,
        "h": 512
      },
      "sourceSize": {
        "w": 341,
        "h": 512
      },
      "duration": 125
    },
    "jump 1.png": {
      "frame": {
        "x": 341,
        "y": 0,
        "w": 342,
        "h": 512
      },
      "rotated": false,
      "trimmed": false,
      "spriteSourceSize": {
        "x": 0,
        "y": 0,
        "w": 342,
        "h": 512
      },
      "sourceSize": {
        "w": 342,
        "h": 512
      },
      "duration": 125
    },
    "jump 2.png": {
      "frame": {
        "x": 683,
        "y": 0,
        "w": 341,
        "h": 512
      },
      "rotated": false,
      "trimmed": false,
      "spriteSourceSize": {
        "x": 0,
        "y": 0,
        "w": 341,
        "h": 512
      },
      "sourceSize": {
        "w": 341,
        "h": 512
      },
      "duration": 125
    },
    "jump 3.png": {
      "frame": {
        "x": 0,
        "y": 512,
        "w": 341,
        "h": 512
      },
      "rotated": false,
      "trimmed": false,
      "spriteSourceSize": {
        "x": 0,
        "y": 0,
        "w": 341,
        "h": 512
      },
      "sourceSize": {
        "w": 341,
        "h": 512
      },
      "duration": 125
    },
    "jump 4.png": {
      "frame": {
        "x": 341,
        "y": 512,
        "w": 342,
        "h": 512
      },
      "rotated": false,
      "trimmed": false,
      "spriteSourceSize": {
        "x": 0,
        "y": 0,
        "w": 342,
        "h": 512
      },
      "sourceSize": {
        "w": 342,
        "h": 512
      },
      "duration": 125
    },
    "jump 5.png": {
      "frame": {
        "x": 683,
        "y": 512,
        "w": 341,
        "h": 512
      },
      "rotated": false,
      "trimmed": false,
      "spriteSourceSize": {
        "x": 0,
        "y": 0,
        "w": 341,
        "h": 512
      },
      "sourceSize": {
        "w": 341,
        "h": 512
      },
      "duration": 125
    }
  },
  "meta": {
    "app": "Nano Studio Pro",
    "version": "1.0",
    "image": "jump-stone.png",
    "format": "RGBA8888",
    "size": {
      "w": 1024,
      "h": 1024
    },
    "scale": "1",
    "frameTags": [
      {
        "name": "jump",
        "from": 0,
        "to": 5,
        "direction": "forward"
      }
    ],
    "nsp": {
      "grid": {
        "cols": 3,
        "rows": 2
      },
      "cell": {
        "w": 341,
        "h": 512
      },
      "fps": 8,
      "pivot": {
        "x": 50,
        "y": 100
      },
      "registration": [],
      "note": "Every frame sits where its cell puts it."
    }
  }
}

Aseprite’s format, which Phaser, Pixi, Godot and Unity already read: the rectangle of every frame, a named tag with its range, and the grid and pivot under meta.nsp, where they survive instead of being guessed at from pixel runs. The per-frame duration here is the flat rate a flipbook uses — the hop above is timed by the phases instead.

These ten were made here, from a line of description each.

Your character, your poses, your grid — and the atlas comes with it. Free trial credits, no card.

Make your own sheet

A sprite sheet is not finished when the picture is

The image is the easy half. What costs an afternoon is everything after it: finding the frame edges, naming the sequence, deciding how long each drawing is held, and doing it again when the sheet is regenerated. That work is the atlas, and it ships with every sheet.

The grid is a fact, not a guess

The atlas carries the columns, the rows and the cell size, so an importer never has to find the frame edges by looking for gaps in the pixels — which is what breaks the moment a cape crosses a cell boundary.

Named tags, with ranges

A sequence is a tag: a name, a first frame, a last frame, a duration. An engine calls play("jump") instead of counting frames by hand. Several sequences can live on one sheet and keep their own names.

The ground keys out

Sprites are drawn on a flat ground on purpose, so the background lifts off cleanly. The ten figures on this page were cut that way — flood-filled from the border, with the black outline given back, because a plain threshold takes the outline and the dark hair with it.

Five kinds of sheet

They are not presets over one prompt. Each kind changes what you are asked, how many cells fit across a row, and how small a cell is allowed to get — because a walk cycle and an icon set fail in different ways when they are packed too tight.

Pixel sprites

8-bit or 16-bit game sprites on a keyable ground, up to eight across a row.

Animation frames

One subject, real or drawn, several frames of a single motion — up to five across, drawn large enough to read.

Icon set

A matched set of symbols at one weight and size, ready to cut out.

Sticker sheet

Die-cut stickers with a clean border, each one ready to peel off.

Props and objects

Separate objects on one sheet, each one cut-out ready.

From a sentence to frames an engine can read

1

Say what it is

A subject and a motion, picked from menus rather than typed into an empty box: a person, a creature, an object; idling, running, jumping, or a sequence you describe.

2

Pick the grid

Columns and rows, with a floor under the cell size so a frame is never too small to read. The layout is part of the instruction, not something you crop out afterwards.

3

Watch it move

The sheet plays back in place, so a frame that came out wrong is obvious before it reaches your engine.

4

Take the atlas

The image and its JSON. Drop both into Phaser, Pixi, Godot or Unity — or pull them over the API, where the atlas is a call of its own.

For agents

An assistant can build the set without you

The sheet service is the same over MCP and over HTTP: ask what a sheet can be, make one — with a dry run that quotes the credits before spending them — and read back the atlas for any sheet that already exists. That last call is what lets an agent actually use what it made instead of handing you a picture and stopping.

The MCP server

# what can a sheet be

sheet_options

# quote it, then make it

generate_sheet kind="frames" dry_run=true

# the frames, for the engine

get_sheet_atlas id="…"

Questions

What does the AI sprite sheet generator actually give me?+

Two things: one image with every frame laid out on a grid, and an atlas describing it. The atlas is Aseprite's JSON — each frame's rectangle, a named tag with its frame range and duration, and the grid, cell size and pivot under a namespaced block. That second file is the part most generators leave you to reconstruct by eye.

Can it make pixel art sprite sheets?+

Yes — pixel sprites are one of the sheet kinds, drawn at 8-bit or 16-bit weight on a flat ground that keys out. Up to eight sprites across a row, with a minimum cell size so the pixels stay legible rather than being packed until they mush.

How many frames fit on one sheet?+

It depends on what you are making, because the limit is legibility, not arithmetic. Pixel sprites and icons go up to eight across a row; animation frames of a full figure go up to five, because each one needs room to read as a pose. The grid you pick is part of the instruction the model is given.

Will it import into Godot, Unity, Phaser or Pixi?+

The atlas is Aseprite's format, which is also TexturePacker's with one addition, and all four read it or have a loader for it. Anything an importer does not know — our grid, pivot and per-frame registration — sits under meta.nsp, which importers skip without complaining.

Can I animate the frames, or do I only get the image?+

The sheet plays back in the studio, frame by frame, so you can check the motion before exporting. The jump at the top of this page goes a step further: the body follows a curve while the drawing switches on a schedule of named phases, and those numbers are a small document you can copy and play on any six-pose sheet.

Is it free?+

New accounts start with trial credits and no card, which is enough to make sheets and export their atlases. After that a sheet costs credits like any other generation; the prices are on the pricing page.

Can an AI agent make sheets without me?+

Yes. The same service is exposed over MCP and the HTTP API: one call lists what a sheet can be, one makes it — with a dry run that quotes the credits first — and one returns the atlas for a sheet that already exists. An agent can therefore build a set of assets and read back the frame data it needs to use them.

Where do the ten characters on this page come from?+

They were made here, one line of description each, as animation-frame sheets of the same six-pose jump: crouch, push, rise, tuck, fall, land. Nothing was drawn by hand afterwards — the frames were cut out of each sheet by a script and measured, which is where the heights the player uses come from.

Your character, on a grid

Free trial credits, no card required. Describe a sprite and get the poses back with the frame data already written.

Make a sprite sheet