Aseprite Alternative in the Browser — Measured Side by Side
Aseprite is the pixel editor many sprite artists draw in: a $19.99 desktop app for Windows, macOS and Linux with layers, tags, onion skin, tilemaps, Lua scripting and a command line. Nerulio Studio now has a Pixel workspace that runs in a browser tab for free. We did the same 14 editing tasks in both on one CC0 sprite; this page shows where they match, where the browser tool is ahead, and the longer list of things only Aseprite does.

- .asepriteVerified· Aseprite 1.3.18
- Engine bundlesVerified· Godot 4.7.2 · Unity 6000.5
- Palette filesMeasured· read back
- Frame PNG · .nerulioPlain files
What it does
- The basics behave the same way in both: pixel-perfect freehand, bucket fill (contiguous, global, tolerance), symmetry, shading ink along a palette ramp and a team-colour swap on every frame (2662 of 2662 pixels, nothing else touched) were executed and measured in each.
- Converting the sprite to the PICO-8 palette without dither gave every opaque pixel its nearest PICO-8 colour in Nerulio, and its 1708 black pixels stayed black. With Aseprite's defaults only 23.0 % matched, because index 0 (black) became the transparent mask; switching the fit to RGB and adding an extra palette entry as the mask brought it to 100 %.
- A copy of the sprite resized ×3.78 with bilinear filtering came back 99.7 % exact in Nerulio, which found the 96×144 size by itself. Aseprite has no grid detection: typed with the true size its best result was 81.5 %, and a user guessing 25 % gets 54.4 %.
- Files go both ways. An indexed .aseprite written here reopened in the real Aseprite as indexed, with both layers, the Multiply blend at opacity 160 and the locked layer; and 231 real .aseprite files were read, re-written and reopened in Aseprite 1.3.18 with the same tags, durations and pixels.
- After drawing, the same project continues in the Studio: pivots and hitboxes in the Sprite workspace, packing and engine files for Godot 4, Unity 6, Phaser and PixiJS in Pack & Export, with no plugin and no Aseprite command line needed.
Nerulio Pixel workspace and Aseprite 1.3.18, the same tasks
Sumo Hulk by Eris (OpenGameArt, CC0), 96×144. Both columns were executed and measured on 2026-09-24/25 except cells marked documented.
| Task | Nerulio Pixel workspace | Aseprite 1.3.18 |
|---|---|---|
| Pixel-perfect pencil, bucket with tolerance, shading ink | Yes, all executed; pixel-perfect is on by default | Yes (documented features) |
| Symmetry | Vertical, horizontal, both; axis position typed | Same modes; axis dragged on the canvas (documented) |
| To indexed PICO-8, no dither | 100 % of opaque pixels get their nearest colour; black stays black | 23.0 % with defaults (black becomes transparent); 100 % with the RGB fit setting and an extra palette entry as the mask |
| Team colour on every frame | 2662/2662 px; in an indexed sprite one palette edit | 2662/2662 px |
| 1 px outline + drop shadow | 3 commands; 1846 + 705 px, identical to Aseprite's result | Outline is a command; the shadow is about 6 manual steps |
| ×3.78 bilinear copy → 1× | 99.7 % exact; size found automatically | 81.5 % with the true size typed; 54.4 % with a guessed 25 % |
| Palette by name from Lospec | Yes, after a consent dialog | No; load a downloaded file (documented) |
| Adobe .ase swatch file | Read (16 colours) | "Error reading header" (.ase is also its own sprite extension) |
| Price, platform, automation | Free, browser tab, nothing uploaded; no scripting | $19.99 desktop app; Lua API and a command line |
Source of these numbers: docs/STUDIO-PIXEL.md §6, docs/pixel-bench/H2H.md §4, docs/STUDIO-SPRITE.md
Where Aseprite is the better choice
- Structure Nerulio lacks: layer groups, linked cels, tilemap layers and reference layers.
- Transforming art: RotSprite and free rotation or scaling of a selection, and Sprite Size resampling. Nerulio only flips and turns by 90°.
- More drawing tools: gradient, spray, contour, text, blur and jumble, custom brushes from a selection, the polygonal lasso and tiled (seamless) drawing.
- Automation and comfort: a Lua scripting API, a command line for build scripts, key remapping and a symmetry axis you drag on the canvas.
- It is a desktop program that keeps working with no browser or website.
How to do it
- Drop your .aseprite file on this page; it opens in the Pixel workspace with its layers, blend modes, palette, frames and tags.
- Keep your habits: B for the pencil, G for the bucket, Shift+N for a layer, F3 for onion skin, Enter to play.
- Use what the browser adds when you need it: Lospec palettes by name, the upscale cleanup, or outline and drop shadow as single commands.
- Save it back with Pixel › Export .aseprite to continue in Aseprite, or go to Pack & Export for your engine.
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 |
|---|---|---|
| .aseprite | layers · blend · opacity · locked · indexed palette · frames · tags | Verified Aseprite 1.3.18The real Aseprite command line reopened the file as INDEXED with 2 layers, Multiply at opacity 160 and the locked layer not editable; the frames are pixel-identical. |
| Palette files | .gpl · .pal · .hex · .ase · .act · .json | Measured read backEach format was written and read back identical; Aseprite's own .gpl, .pal, .hex and .act and a real Adobe .ase (16 colours) were read. |
| Engine bundles | Godot 4 · Unity 6 · Phaser 3/4 · PixiJS 8 … through Pack & Export | Verified Godot 4.7.2 · Unity 6000.5The sprite you drew is packed in Pack & Export; those engine files were loaded in each engine on real CC0 assets (47 of 49 runs pass; the 2 failures are a Phaser 3.90 bug the Phaser 3 preset avoids). |
| Frame PNG · .nerulio | PNG-8 with the palette when an indexed frame fits it · project file | Plain filesPlain files for any tool; no engine run is claimed for them. |
Evidence
Cleanup benchmark, 69 CC0 cases with a known 1× original: the exact size found for 81 % (±1 px: 90 %) and 74.0 % of pixels exact with the background kept; the best competitor found 30 % of sizes (perfectPixel) and the best exact-pixel score was 44.6 % (unfake.js). An Aseprite-made ×4 nearest upscale came back 100 % exact and a ×3.78 bilinear resize 99.7 %, both with the size found automatically. A 1 px outline and a drop shadow matched Aseprite pixel for pixel (1846 and 705 px). .aseprite files written here reopen in Aseprite 1.3.18 as indexed, with their layers, blend mode and lock.
Limits
- Not in the Pixel workspace (Aseprite has them): layer groups, linked cels, tilemap layers, reference layers, RotSprite and free rotation or scaling of a selection (only flips and 90°), gradient, spray, contour and text tools, custom brushes (square or round, 1–16 px), tiled drawing, Lua scripting and a command line.
- The symmetry axis is typed, not dragged on the canvas. On touch there is no right button, so the background colour needs the swap button or X.
- Cleanup: JPEG input comes back close (84 % of pixels within ΔE 0.02 with the background kept) but rarely exact (12 %); simulated generated art gets the exact size 20 % of the time (±1 px: 80 %); none of 7 real generated images was snapped automatically — you type the pixel size the panel suggests.
- Indexed conversion picks the nearest colour in Oklab, not Aseprite's RGB distance: 68 % of the test sprite's pixels got a different (perceptually closer) pick. The Lospec search is the only network request and asks first.
Questions
Can it replace Aseprite completely?
Not for every artist. Layer groups, linked cels, tilemap layers, RotSprite, gradient, spray and text tools, custom brushes and Lua scripting are missing. For sprites drawn with the pencil, bucket, selections, layers and palettes it covers the daily work, and the file goes back to Aseprite whenever you need one of those.
What happens to an .aseprite file with layer groups?
Layers are kept when they compose exactly; otherwise the file is flattened and the Import panel says why. On a 231-file corpus 222 kept their layers and 9 were flattened, for example because of group opacity.
Why did my indexed colours come out different from Aseprite's conversion?
Nerulio picks the nearest colour in Oklab, which matches what the eye sees; Aseprite uses RGB distance. On the test sprite the two disagreed on 68 % of pixels. If you need Aseprite's exact result, convert in Aseprite and open the indexed file here.
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).