Sprite Editor Online — From Art File to Engine-Ready Sprites
Nerulio Studio is a sprite editor for game work rather than for painting. Bring the sheet, frames, GIF or .aseprite file you already have, and it becomes timed animations with pivots and boxes, packed into the files your engine opens — all inside one browser tab.

- Godot 4Verified· Godot 4.7.2
- Unity 6Verified· Unity 6000.5.3f1
- Phaser 3 / 4Verified· Phaser 3.90 + 4.2
- PixiJS 8Verified· PixiJS 8.21
- Aseprite JSONVerified· Phaser load.aseprite · PixiJS 8.21
- .asepriteVerified· Aseprite 1.3.18
- Spine / libGDXVerified· spine-canvas 4.2
- Starling / Sparrow XMLVerified· Phaser 4.2
- LÖVEVerified· LÖVE 11.5
- DefoldBuilt· Defold bob.jar 1.13.1
- GameMakerUNVERIFIED
- CSS spritesVerified· Chromium
- GIF / APNGDecoded· Pillow
What it does
- Four workspaces are live: Sprite (import, timeline, pivots, boxes), Pack & Export (atlas packing and 18 output formats), Tile (autotile rules and test maps) and Texture (normal maps and 2D lights). One project holds them all.
- Every automatic guess on import — grid, key colour, islands, one animation per row — is listed with a confidence (high, medium or low), its reasons and one-click alternatives. Nothing is cut until you press Apply, and Apply is a single undo step.
- Frame editing on whole pixels: the pivot tool (P), rectangle, circle and polygon boxes (B, C, Q), a mirrored copy of a tag, and Align frames, which moves art without ever resampling it.
- Your work stays on your machine: projects autosave in the browser's IndexedDB and can be saved as a .nerulio file. No account, no watermark, no upload.
- What it does not do yet is draw. There is no pencil or palette editing in the Studio; paint in Aseprite, Pixelorama or Piskel and bring the result here.
How to do it
- Finish the drawing in your usual pixel editor and save a PNG sheet, numbered frames, a GIF or the .aseprite file itself.
- Drop it on this page; the Sprite workspace opens with the proposed cut and the reasons behind it.
- Press Apply, then shape the result: name tags on the timeline, type durations, place a pivot per frame and draw hit or hurt boxes.
- Open Pack & Export, pick Godot 4, Unity 6 or another of the 18 formats, and download the bundle for your project.
The six Studio workspaces
What each workspace does today, and where the two unfinished ones send you instead.
| Workspace | What you do there today | Status |
|---|---|---|
| Sprite | Import sheets, frame files, GIF / APNG, .aseprite and atlas data; timeline with tags and per-frame durations; pivots, boxes, collision polygons; Align frames | Live |
| Pack & Export | MaxRects, Skyline or Guillotine packing with trim, alias, extrude and multipack; 18 formats, from Godot 4 and Unity 6 to CSS sprites and GIF | Live |
| Tile | Recognise an autotile layout from the pixels, set terrain bits, list missing tiles, paint a test map, generate full sets; Godot, Tiled, Unity and LDtk files | Live |
| Texture | Generate a normal map from the sprite's silhouette, light it the way Godot 2D does, check OpenGL vs DirectX; Godot and Unity bundles | Live |
| Pixel | Drawing and palette work — not in the Studio yet; the Pixel Lab handles palette locking and cleanup today | Coming (Pixel Lab meanwhile) |
| UI | Nine-slice panels, button states and bitmap fonts — the UI Lab does these today | Coming (UI Lab meanwhile) |
Engine exports and how each was checked
"Verified" means the exported files were loaded by the real engine or tool on real CC0 assets and the result was compared with the source. Anything that was not loaded is labelled as such.
| Target | Files | Check |
|---|---|---|
| Godot 4 | .tres SpriteFrames · .tscn AnimatedSprite2D · .png.import | Verified Godot 4.7.2Loaded by Godot; every animation frame drawn and compared with the source file. The scene uses Nearest filtering; rotation is never used. |
| Unity 6 | .unity.json · Editor/NerulioSpriteImporter.cs · AnimationClip | Verified Unity 6000.5.3f1Batch mode: sprite rects, pivots, pixels, clip keys and durations checked. |
| Phaser 3 / 4 | atlas JSON (multiatlas) · .anims.json | Verified Phaser 3.90 + 4.2Frames and animations drawn by both versions. |
| PixiJS 8 | spritesheet JSON · animations · anchor · meta.scale | Verified PixiJS 8.21Rotated and multi-page atlases included. |
| Aseprite JSON | hash / array · frameTags · slices | Verified Phaser load.aseprite · PixiJS 8.21Tags keep their direction and repeat count. |
| .aseprite | layers · tags · durations · slices | Verified Aseprite 1.3.18Opened and rendered by the Aseprite command line. |
| Spine / libGDX | .atlas | Verified spine-canvas 4.2Every region drawn by the Spine runtime, rotated and trimmed; libGDX itself was not run. |
| Starling / Sparrow XML | XML per page | Verified Phaser 4.2Phaser 3.90 draws trimmed XML frames wrongly (its own bug); the "Sparrow XML (Phaser 3)" preset turns trim off and passes in 3.90 and 4.2. |
| LÖVE | Lua quads · nerulio_atlas.lua · main.lua | Verified LÖVE 11.5Every frame drawn and every animation stepped through the shipped helper. |
| Defold | .atlas · .tilesource | Built Defold bob.jar 1.13.1Built by Defold's command-line builder; the built texture's UVs were read back. |
| GameMaker | spr_<name>_stripN.png · gamemaker.json | UNVERIFIEDNot loaded in GameMaker (no headless GameMaker). The strips are cut the way its strip importer cuts them. |
| CSS sprites | .css · preview .html | Verified ChromiumEvery class drawn from the shipped stylesheet. |
| GIF / APNG | one file per animation | Decoded PillowEvery frame and delay decoded again after export; APNG is exact. |
Evidence
GIF decoder: 408 of 408 frames identical to Pillow on 29 real GIFs; APNG 132 of 132 on 16 files. .aseprite: 231 corpus files imported, re-written and reopened in Aseprite 1.3.18 with the same tags, durations and pixels (231/231). Exports: 49 runs in the real engines on real CC0 assets, 47 pass — the 2 failures are Phaser 3.90's trimmed-XML bug, which the Phaser 3 preset avoids.
Limits
- A grid or island guess is a preview with a confidence; nothing is cut until you press Apply, and every choice has one-click alternatives.
- .aseprite files whose layers do not compose exactly (e.g. group opacity) are imported flattened, and the Import panel says why.
- Rotated frames in an imported atlas stay rotated; their export is UNVERIFIED.
- Images up to 32,768 px per side (268 million pixels), subject to your browser's memory.
Questions
Can I paint pixels in this sprite editor?
No. The Studio has no pencil yet; a Pixel workspace is planned. Until it ships, draw in Aseprite, Pixelorama or Piskel. An .aseprite file comes in with its layers, tags, durations and slices; from the other editors, export a PNG sheet or frame files.
Is this the same as Unity's Sprite Editor?
No. Unity's Sprite Editor slices a texture inside a Unity project. This runs in a browser tab, measures the grid for you, and writes a JSON plus a small editor script that creates the sprite rects, pivots and one AnimationClip per tag in Unity 6 — checked in Unity 6000.5.3f1 batch mode.
How big a sheet can it open?
Images up to 32,768 px per side (268 million pixels), as far as your browser's memory allows. The packer handled 1,000 frames in 2.4 s in a Chromium worker, and Cancel stops a pack at once.
Is it free, and do I need an account?
Everything on these pages is free and works without an account. There is no watermark and no export that is held back.
Are my sprites uploaded?
No. The Studio decodes, packs and exports in this browser tab. Projects are autosaved in the browser (IndexedDB) and can be saved as a .nerulio file.
Does it need Aseprite or an engine plugin installed?
No. .aseprite files are read and written in the browser, and each engine bundle carries what that engine needs (for Godot, the import settings and scene; for Unity and the Godot TileSet, a small editor script).