PX-Art

GUIDE

How do you export AI sprites to Aseprite?

PX-Art exports an animation as a sprite sheet PNG plus a manifest, or as an Aseprite package. In Aseprite, open the sheet through the Import Sprite Sheet dialog and set the cell size to the sheet width divided by the frame count. Every frame lands on the same baseline because the pipeline crops the whole sequence with one shared bounding box.

What you can export

From an animation in PX-Art you can take:

  • a sprite sheet PNG — the frames as one strip, uniformly scaled and aligned to a shared baseline;
  • an Aseprite package, if you would rather not run the import dialog;
  • a GIF, for reviewing timing outside the editor;
  • a plain ZIP containing the images and a manifest. Inside the package, manifest.pxart is simply the JSON entry file that lists the contents — it is not a format you need to support anywhere.

The strip is the important one for Aseprite, because Aseprite's importer is built around fixed-size cells and PX-Art's output is already fixed-size by construction.

Why the import lines up

The action pipeline decodes the generated clip to frames, samples them by delivery semantics, keys out the background, then takes the union bounding box of the whole sequence — not per-frame crops — before assembling the strip with one scale and one baseline. Two consequences matter at import time:

  • Every cell is the same size, so sheet width / frame count is an exact integer and Aseprite's grid falls on frame boundaries.
  • Movement inside the animation is preserved rather than cropped away. A wind-up that drifts left stays drifted left, because the crop was computed across all frames at once.

Loop semantics also survive the trip. A looping action is sampled from the first frame up to but excluding the last, so the strip contains no duplicated end pose — tag the entire frame range in Aseprite and the loop is already correct. A one-shot action keeps its true first and last frames, so do not trim its ends.

Step by step

  1. Finish frame editing in PX-Art firstDelete bad frames and refill them before exporting. Refilled frames come from the retained dense frame set and share the surviving frames' scale and baseline; a frame you paint back in Aseprite does not.
  2. Export the sprite sheet PNG and note the frame countYou need two numbers: the frame count you generated with, and the PNG's pixel dimensions. Read the dimensions from your file manager or with any image tool.
  3. Compute the cell sizeFor a horizontal strip, cell width equals image width divided by frame count and cell height equals image height. If the strip runs vertically, swap the two. The division must come out exact — if it does not, you are looking at the wrong frame count.
  4. Import in AsepriteFile → Import Sprite Sheet. Choose the sheet type that matches the strip orientation, enter the cell width and height, leave padding at zero, and confirm. You get one layer with N frames.
  5. Set frame durations and tag the loopSelect all frames, set a duration (100 ms per frame gives a 10 fps walk cycle), then create a tag over the full range — walk_south, direction Forward for a looping action, Once for a one-shot.
  6. Keep the canvas honestDo not trim or auto-crop the imported sprite. The transparent margin is what carries the shared baseline; cropping it re-introduces exactly the per-frame jitter the union crop removed.
  7. Re-export for your engineSave the .aseprite as your editable master and export the runtime sheet plus its JSON data from the CLI so it is reproducible in a build script.

A worked example

An 8-frame looping walk, exported as a horizontal strip:

file      walk_south_8f.png
size      512 x 64 px
frames    8
cell      512 / 8 = 64 px wide, 64 px tall
padding   0
loop      yes -> sampled [first, last), so 8 distinct poses, no repeat

In the Import Sprite Sheet dialog that is Type: Horizontal Strip, Width 64, Height 64, X/Y padding 0. Then select frames 1-8, set 100 ms, and add a tag:

tag name   walk_south
range      1 - 8
direction  Forward        (use Once for attack, hurt and other one-shot actions)

Once the master file exists, re-export from the command line so a build can repeat it:

aseprite -b walk_south.aseprite --sheet walk_south_sheet.png --sheet-type horizontal --data walk_south.json --format json-array --list-tags

The resulting walk_south.json carries per-frame rectangles and the tag ranges, which is the shape most engine importers expect. If you are heading for Godot instead, you can skip Aseprite entirely and slice the strip directly — see using AI-generated assets in Godot.

Limits and caveats

  • Aseprite is a pixel editor, not a validator. It will happily import at the wrong cell size and give you frames sliced through the middle of a pose — check the arithmetic before you blame the export.
  • Generation is probabilistic. Frames can still contain artifacts the automated checks did not catch, so review the strip frame by frame before it goes into a build.
  • The video-based action pipeline depends on the model obeying a key-color background and a fixed camera. When it does not, the run fails and asks for regeneration instead of delivering bad frames, so occasionally you will re-run an action before you have anything to import.
  • Round-tripping is one-way. Editing frames in Aseprite does not update the asset stored in your PX-Art game project, and the retained dense frame set only helps for frames refilled inside PX-Art.
  • Legally generated assets can be used commercially, but you remain responsible for checking third-party rights, applicable law and AI provider restrictions. AI output is not guaranteed to be exclusive or registrable for copyright.
  • Checkout is still under review and not open yet. New accounts start with 20 credits; a frame-based action costs 10 credits and a video-based action costs 18.

FAQ

What cell size should I use in the Import Sprite Sheet dialog?

For a horizontal strip, cell width is the PNG width divided by the frame count and cell height is the full PNG height. The division is exact because every frame in a PX-Art strip is the same size — if it does not divide evenly, you have the wrong frame count.

Do I need to align frames after importing?

No. The pipeline crops the entire sequence against one union bounding box and assembles the strip with a single scale and baseline, so frames are already aligned. Do not trim or auto-crop the canvas in Aseprite — the transparent margin is what carries that alignment.

Why does my looping animation have no repeated end frame?

Looping actions are sampled from the first frame up to but excluding the last, so the loop does not stutter on a duplicated pose. Tag the full frame range with direction Forward. One-shot actions keep their true first and last frames, so leave those ends alone.

Should I export the Aseprite package or the sprite sheet PNG?

Take the Aseprite package if you want to open the animation directly in the editor, and the sprite sheet PNG if you want to control the import yourself or feed the strip straight into an engine. A plain ZIP with the images and a manifest is also available.

What is manifest.pxart?

It is the JSON entry file inside an exported package that lists what the package contains. It is a convenience for reading the archive, not a format you need to support in your engine or tooling.

Can I fix a single bad frame without regenerating the animation?

Yes, and do it before exporting. The result bench supports frame-by-frame preview, deleting frames, redoing the sequence, and local repair of one frame for 2 credits. Deleted frames can be refilled from a retained dense frame set of up to 30 frames.

Related

Generate a strip you can import cleanly

Give PX-Art a base sprite, an action, a facing and a frame count, then take the sprite sheet PNG or the Aseprite package straight into your editor.

Create a free accountSee pricing

New accounts start with 20 credits. Checkout is still under review and not open yet.