Aseprite Alternative in the Browser — Measured Side by Side
Aseprite is the pixel editor many sprite artists draw in: a paid 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.
No browser editor replaces all of Aseprite, so choose by what your work depends on. Aseprite is a mature, paid desktop editor for Windows, macOS and Ubuntu (the free trial cannot save; the source may be compiled for personal use) with tilemap layers, layer groups, linked cels, Lua scripting and a command line. Nerulio's Pixel workspace is free in a browser tab, uses Aseprite's keys, reads and writes .aseprite, and adds grid-detecting cleanup, Lospec palettes by name and engine exports, but it lacks those Aseprite features. Because the file moves both ways, many pipelines can use both.

- .asepriteVerified· Aseprite 1.3.18
- Engine bundlesVerified· Godot 4.7.2 · Unity 6000.5
- Palette filesMeasured· read back
- Frame PNG · .nerulioPlain files
What an "alternative" has to preserve: your files, your tools and your automation
Start with the file. Nerulio opens an .aseprite with its layers, blend modes, opacity, palette, indexed mode, frames, durations, tags and slices, and writes all of those back; of 231 real files, 222 kept their layers and 9 were flattened because group opacity or per-cel z-order could not be reproduced exactly, and all 231 reopened in Aseprite with the same tags, durations and pixels. What does not survive is structure Nerulio has no model for: layer groups become separate layers named by their path, tilemap layers become plain pixels, linked cels become independent copies, and reference layers are left out.
Then the tools you reach for every day. The pencil, bucket, shapes, selections, layers, shading ink, symmetry, onion skin and palettes behave alike and were measured on the same sprite. Aseprite's larger toolbox (rotation of a selection, gradient, spray, text, custom brushes, tiled drawing, tilemaps) has no counterpart here.
Last, automation. If a build script calls Aseprite's command line to export sheets, or you rely on Lua scripts, the browser cannot take that over. Aseprite's purchase includes Windows, macOS and Ubuntu builds plus a Steam key and updates up to v1.9, according to its FAQ; Nerulio needs a Chromium-based browser for the verified behaviour.
- Linked cel
- One image shared by several frames in Aseprite; editing it changes all of them.
- Tilemap layer
- An Aseprite layer whose cells reference tiles of a tileset (Aseprite 1.3 and later).
- Round trip
- Opening a file in one tool, saving it, and opening it again in the other without losing data.
An .aseprite file through Nerulio and back
From the reader and writer in the repository and the 231-file corpus test.
| In your Aseprite file | Opened in Nerulio | Saved back as .aseprite |
|---|---|---|
| Layers, opacity, 19 blend modes | Kept when the layered result matches Aseprite's render pixel for pixel; otherwise flattened, with the reason shown | Layers, blend mode and opacity written |
| Layer groups | Leaf layers named by their path (Body/Arm); group opacity forces flattening | Flat list of layers, no groups |
| Indexed colour, palette, transparent index | Kept; cels stored as indexed PNG | Indexed file; real Aseprite reopened it as indexed |
| Tags and frame durations | Kept (direction and repeat count too) | Tags over consecutive frames, per-frame durations |
| Slices | Pivots, hit and hurt boxes, 9-slice data | Written back as slices |
| Tilemap layers | Rendered to ordinary pixels | Image layers; the tileset is gone |
| Linked cels | Independent copies per frame | No links |
| Reference layers | Left out | Not written |
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 | Paid desktop app (the trial cannot save); 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.
Other ways to do it
| Option | When it is the better choice |
|---|---|
| Aseprite | Your work uses tilemap layers, layer groups, linked cels, RotSprite or free rotation, gradient, spray or text tools, custom brushes, Lua scripts or the CLI in a build; or you want a desktop program that works without a browser. |
| Nerulio Pixel workspace | You cannot install software on the machine, you want drawing, pivots, hitboxes and Godot, Unity or Phaser files in one place, or you need Lospec palettes by name and the cleanup of upscaled art. |
| Both, one after the other | Draw in Aseprite and drop the .aseprite into Nerulio for engine bundles (see Aseprite to Godot), or sketch in the browser and finish in Aseprite. |
| Aseprite compiled from source | Its FAQ says the source code can be downloaded and compiled for your personal use; building is up to you, and the EULA restricts redistributing compiled builds. |
| Simpler web editors (Piskel, Lospec Pixel Editor) | Quick sketches only: in the repository's head-to-head, Piskel's bucket had no tolerance and its symmetry was centre-only, and the Lospec editor's bucket was contiguous only, with a fixed list of 11 preset palettes. |
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
- Missing structure: no layer groups, tilemap layers, reference layers or linked cels.
- Missing transforms and tools: no RotSprite, free rotation or scaling of a selection, gradient, spray, contour, text, blur, polygonal lasso, custom brushes or tiled-mode drawing.
- No Lua scripting, no command line and no screen for remapping keys.
- Outline is outer and 4-connected only, one frame at a time; Aseprite also offers inside outlines and applying it to all cels.
- Verified in Chromium only; on touch screens there is no right button, so the background colour needs the swap button or X.
- 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.
Versions and sources
Compared with Aseprite 1.3.18 (real CLI build) on 2026-09-24/25 on one CC0 sprite (docs/STUDIO-PIXEL.md §6); the 231-file .aseprite round trip reopened in Aseprite 1.3.18.6 (docs/STUDIO-SPRITE.md §10). Aseprite's platforms, trial, update and licence terms were read on aseprite.org on 2026-09-28. The price is not stated here because the purchase page did not show one we could verify.
Official documentation used
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).