Pixel art editor
Draw sprites on a pixel grid with pencil, eraser, fill, line, rectangle, ellipse and move, in layers and animation frames with onion skin. Export a PNG sprite sheet scaled with crisp pixels, frame data as JSON for game engines, an animated GIF, every frame as its own PNG, the palette, and a project file that opens here again. Everything is drawn and written in your browser on this device.
Pixel art editor
- Runs on your deviceNo upload. Nothing you enter leaves your browser.
- Free, no accountNo sign-up, nothing stored on our servers. Limits: sprites up to 256 × 256 px with up to 16 layers and 128 frames, within 16.7 million pixels over all layers and frames (a 256 × 256 sprite with 4 layers has room for 64 frames); sprite sheets up to 8192 px on a side and about 33.6 million pixels in all; the last 100 changes can be undone.
- FormatsDrawn here, or a PNG or a saved project in; PNG sprite sheet, JSON frame data, GIF, PNG frames, GPL and HEX palettes and a project file out
- Works onCurrent Chrome, Edge, Firefox and Safari, desktop and mobile.
How it works
- Choose a sprite size, or open a PNG or a project saved here. Pick a tool and a colour and draw with the mouse, a pen, a finger or the keyboard.
- Add layers to keep parts apart and frames to animate. Set how long each frame lasts, check the movement with onion skin and the preview, and name frame ranges with tags.
- Under Export choose the scale and the sheet layout, press Make the files and download the ZIP or single files. Save the project file to continue later.
Questions
What is in the download?
A PNG sprite sheet with every frame, a JSON file with the frame data, an animated GIF when the sprite has two or more frames, every frame as its own PNG (in the ZIP, in a frames folder), the palette as a GPL file for GIMP, Aseprite and Krita and as a HEX file as Lospec uses, the project file and a README. You can download the ZIP or the single files. Onion skin, the grid and the pivot mark are only drawn on the screen; they are never part of a file.
What does the frame data contain?
For every frame: its name, the rectangle of its pixels on the sheet (frame), where those pixels sit in the full frame (spriteSourceSize and sourceSize, which matter when Trim is on), the pivot as a fraction of the full frame and the duration in milliseconds. The meta block gives the image name, the sheet size and your tags as frameTags with from, to and direction, counted from 0. The layout is the one Aseprite and TexturePacker write, in two forms. The JSON array names the frames 0, 1, 2 and so on, which is what Phaser's Aseprite loader needs to build an animation from every tag. The JSON hash names them after the sprite and adds an animations list per tag in playing order and an anchor for each frame, which is what PixiJS reads; Phaser's atlas loader reads both. We loaded both forms with PixiJS 8.21, Phaser 3.90 and Phaser 4.2. The scale field is 1, as Aseprite writes it, so an engine draws the frames at their pixel size; pixelScale records how much every drawn pixel was enlarged.
How are sprites made larger?
At 1×, 2×, 3×, 4×, 6×, 8×, 12× or 16× with nearest-neighbour scaling: every pixel becomes a square block of exactly its colour, with no smoothing. The PNG files are written by the page itself, byte for byte from the values you drew, as 8-bit RGBA or, if you choose it and the sheet has at most 256 colours, as an indexed palette PNG with transparency. Border, spacing and padding are fully transparent pixels.
How do layers, opacity and transparency work?
The top of the layer list is in front. Every layer has an opacity; the picture and the files blend the visible layers from the bottom up. A hidden layer is left out of the picture and of the files. A locked layer refuses drawing, fill, move and colour replacement. Painting with a partly transparent colour sets the pixel to that colour rather than blending it over what the layer had. GIF has no partial transparency: in the GIF, pixels at least half opaque become opaque and the others transparent, and delays are rounded to hundredths of a second with a minimum of 20 ms; the PNG and the frame data keep the exact values.
Can I open existing art?
Yes, as PNG: the whole image as one frame when it is up to 256 × 256 px, or a sprite sheet cut into equal frames of the size you give, row by row; pixels that do not fill a whole frame at the right or the bottom are left out, and the page says how many. Every kind of PNG is read pixel for pixel, including palette, greyscale and interlaced files; 16-bit files are read at 8 bits per channel, and a damaged PNG is refused with the reason. Project files saved here open with their layers, frames, tags, pivot and palette. GIF, JPEG, WebP, Aseprite and Photoshop files are not read.
Is my drawing saved?
Not by the page: the drawing is not kept in the browser and nothing is sent anywhere. Save the project file and open it here later. If you leave or reload the page with changes that are not saved, the browser asks first. The last 100 changes can be undone, including a new or opened sprite, which brings the previous one back.
Can I draw without a mouse?
Yes. Focus the canvas and move the cursor with the arrow keys, one pixel at a time or eight with Shift; Space or Enter uses the tool at the cursor. Line, rectangle and ellipse take two presses, the start and the end, and Escape cancels. With the Move tool the arrow keys move the selected layer. The letters B, E, G, L, R, O, M and I choose the tool, comma and full stop change the frame, and the square brackets change the brush size; these keys work only while the canvas has the focus.
What is not here?
No selection, copy and paste of parts of a picture (the Move tool shifts the whole selected layer in the current frame), no rotation or resizing of a drawing, no text, gradient or dithering tools, no custom brushes or pen pressure, no tile map mode, and no indexed colour mode while drawing (only as a PNG option on export). No Aseprite, GIF or Photoshop import, no APNG, WebP or video export, and no saved or shared projects on a server.
Is anything uploaded?
No. The page loads a small script into your browser and every calculation runs on your device. You can check this yourself in the browser's network panel: after the page has loaded there are no upload requests. Closing the tab discards what you entered.
Do I need an account or to pay?
No. These basic tools are free and store nothing on our servers. The only limits are the tool's own: sprites up to 256 × 256 px with up to 16 layers and 128 frames, within 16.7 million pixels over all layers and frames (a 256 × 256 sprite with 4 layers has room for 64 frames); sprite sheets up to 8192 px on a side and about 33.6 million pixels in all; the last 100 changes can be undone.
What does this page keep in my browser?
Nothing you open or type. While the tab is open, the tool pages keep a short list of the steps taken in it, in the tab's session storage: the step (page opened, started, succeeded, first success, used again or failed), the tool's name, the time, how many files were used and, for a failure, an error code; never a file name, the contents of a file or your text. It holds at most the latest 200 steps, and the browser deletes it when the tab closes. The page never sends it. Where a Report a problem button is shown, you can attach the last 20 steps to your report; nothing is attached unless you tick that box. In local storage the page keeps only choices you made: a Light or Dark theme until you choose System again, the language you picked with the EN / 中文 switch if it differs from your browser's language, and this tool in your recently used list if you switched that list on at the tools page.
Questions or problems
Found a problem or missing feature? Tell us. Please describe the steps; do not send confidential data.