Animation
Turn a drawing into a frame-by-frame animation. Each frame is a full picture; onion skin shows the frames around the one you draw on, and playback shows the motion at the speed you set. When you are done, export an animated GIF to share, an animated PNG with every colour, a video for social apps, or a sprite sheet or one PNG per frame for your game.
Animation is a Pro feature. A project you never animate stays exactly as it was.
Frames and layers
The layers are shared by every frame: the same layers, in the same order, with the same names, blend modes, opacity, and locks. What changes from frame to frame is the pixels on each layer. So the Layers panel looks the same on every frame, and a change to a layer's visibility or opacity applies to the whole animation.
- A layer you add, duplicate, import, or create with Drop shadow is added to every frame. It is empty on the other frames (a duplicate copies the layer's pixels on every frame, and keeps its links).
- Deleting a layer removes it from every frame.
- A static layer is the same on every frame.
- Reference layers show on every frame and never move with the frames.
The Frames panel
- Phone — open the Frames tab at the bottom of the editor (the tab row scrolls if it does not all fit).
- Inner foldable / tablet — open the floating Frames panel. It is a floating panel of its own: drag its title bar to move it left or right. It starts collapsed; tap its title to open it.
The panel shows a thumbnail of every frame, in order. The frame you draw on is highlighted; tap another thumbnail to draw on that frame.
| Control | What it does |
|---|---|
| Add frame | Adds an empty frame after the current one and selects it. The first add turns the project into an animation. |
| Duplicate frame | Copies the current frame (pixels and duration) to a new frame after it. |
| Duplicate frame, linked | Adds a frame whose every layer is linked to the current one. |
| Delete frame | Deletes the current frame. A project keeps at least one frame. |
| Long-press + drag a thumbnail | Moves the frame to a new position. |
| First / Previous / Next / Last | Go to another frame. With Loop on, Previous and Next wrap around the ends. |
| Link | Links the current layer's cels over a range of frames. See Linked cels. |
| Tag | Makes a tag that starts on the current frame, or edits the tag the current frame is in. See Tags. |
| Import frames | Adds frames from a GIF, an APNG, or a sprite sheet. See Import frames. |
A project can hold up to 128 frames. On a very large project (big canvas, many layers, many frames) Dixel can also refuse a new frame or layer with "This project is large" — delete frames or layers to add more.
Frame duration and FPS
Each frame shows for its own time. Type the duration in milliseconds (10–65535 ms), or type frames per second and Dixel works out the milliseconds. Press Done on the keyboard to apply. A new frame starts at 100 ms (10 FPS); a duplicated frame keeps the duration of the frame it copies.
Playback, Loop, and Direction
- Play / Pause plays the animation on the canvas, starting from the current frame, and shows each frame for its duration.
- Loop on: playback starts again after the last frame. Loop off: it stops at the end. The loop setting is saved with the project.
- Direction sets how all frames play when no tag is chosen: Forward, Reverse, Ping-pong, or Ping-pong reverse. It is saved with the project.
- Play one tag — tap a tag's bar and Play loops only that tag, in its own direction. Tap the bar again to play every frame.
- Touch the canvas, tap a frame, or make any edit to stop playback. You always return to the frame you were drawing on, unchanged.
- Playback shows your visible layers and reference layers, and works with zoom, view rotation, pixel aspect ratio, and tiled mode. Reference layers look the same in playback as while you draw.
- With the CRT effect on, playback shows every frame with the full CRT effect, and reference layers stay on top as while you draw. On a very large canvas, or when the phone is low on memory, playback falls back to the quick preview.
Onion skin
Turn on Onion skin to see the frames just before and after the current one, faded, behind your drawing — so you can line up the next pose.
- Frames before are tinted red, frames after are tinted blue (the same colours as Aseprite).
- Onion-skin settings sets how many frames show on each side (0–3, default 1), how strong the nearest frame is (default 40%; farther frames are fainter), and whether the frames are tinted.
- With Loop on, the first frame also shows the last one as its "before" frame, and the last frame shows the first one as its "after" frame.
- Onion skin leaves static layers out.
- Onion skin is only a drawing aid: it never appears in exports, the gallery thumbnail, the minimap, or the eyedropper.
The settings are saved with each animation. Turn onion skin on, or change how many frames show and how strong, and that animation keeps its own settings; another animation keeps its own. An animation that never changed them uses your latest settings, and so do new animations. On a project you can only view, you can still change them, but they are not saved.
Undo across frames
There is one undo history for the whole animation. Undo and redo step back through every change on every frame, and adding, deleting, moving, and re-timing frames. When a step belongs to another frame, Dixel jumps to that frame first, then undoes it — one step. Tapping a thumbnail to change frames is not an undo step.
Adding, duplicating, and deleting a layer can be undone too — on every project, not only on animations.
Static layers
A static layer is the same on every frame. Draw a background or a border once and it shows in every frame, in playback, and in every export.
- Open the layer's menu and tap Static (same on every frame). A pin marks a static layer in the Layers panel.
- If the layer is different on other frames, Dixel asks first and keeps the frame you see. Undo brings the other frames back.
- Onion skin leaves static layers out.
Static layers are Pro.
Linked cels
A linked cel lets one layer share a single image across several frames. Draw on any linked frame and every linked frame changes — in the thumbnails, in playback, and in every export.
- Link in the Frames panel links the current layer's cels over a range of frames. They all take the current frame's pixels; undo brings the others back.
- A link mark and a bar under the frames show what is linked for the current layer.
- Unlink this frame or Unlink all give the frames their own copies again.
- Duplicate frame, linked adds a frame whose every layer is linked to the current one.
- Duplicating a layer keeps its links. Merging layers unlinks the merged result.
Linked cels are Pro.
Tags
A tag names a group of frames, like "Walk" for frames 2–5.
- Tap Tag in the Frames panel. It makes a tag that starts on the current frame, or edits the tag the current frame is in.
- Pick its frames, a name, a colour, and how it plays: Forward, Reverse, Ping-pong (there and back, without showing the end frames twice), or Ping-pong reverse.
- Tags show as coloured bars over the frames. They move with their frames when you add, delete, or reorder frames.
- Tap a tag's bar to play only that tag.
- Every tag change can be undone.
- When the project has tags, the exports can save all frames or one tag (see Range).
Tags are Pro.
Editing the whole animation
These work on an animated project and change every frame in one undo step:
- Merge down, Flatten, and Merge group — every frame gets its own merged result, and one undo brings every frame back. Merging a static layer with a per-frame layer gives a per-frame layer; the result stays static only when everything merged into it is static. A step too large to undo on a very large project is refused, and nothing changes.
- Resize canvas, Crop to selection, and Trim — every frame, static layer, and reference layer moves with the canvas. Trim keeps the content of every frame, not only the one you see. See Canvas size.
- Colour mode — converting to Indexed maps every frame to the palette you pick; switching back to RGBA changes no pixels. See Colors.
- Palette edits in Indexed mode — editing or removing a palette colour updates that colour on every frame and the palette together.
Everything that works on one layer of one frame — every drawing tool, selections, transform, paste, Outline, Adjust colours — works normally on the current frame.
A project has frames or a tilemap layer, not both.
Open an animated GIF or APNG
Tap Open image in the gallery and pick an animated GIF or APNG. Dixel opens it as a new animation: every frame becomes a frame, with its own duration, and the loop setting comes from the file.
- Up to 1024 × 1024 and the first 128 frames. Frames are never resized.
- On the free plan you can still open its first frame as a still image.
Import frames
Import frames in the Frames panel adds frames to the project you have open, after the last frame, on the layer you are drawing on — in one undo step. Pick:
- an animated GIF or APNG — every frame of the file, or
- a sprite sheet — set the cell size, the margin, the spacing, the number of frames, and their duration.
Smaller frames are centred. In an Indexed project Dixel asks first whether to fit the colours to its palette or switch to RGBA. Import frames is Pro.
Free and Pro
Animation is Pro: frames, static layers, linked cels, tags, import frames, and every animated export. On the free plan, Add frame and Duplicate frame open the Pro screen.
If you open an animated project on the free plan (for example after Pro ended), it opens read-only: you see the first frame, you can play the animation, and the 1× PNG export saves the first frame. The file is never changed.
The gallery thumbnail always shows the first frame, and it updates when you reorder or delete frames. In the gallery, an animated project's card shows a small film badge with its number of frames, and the Animations tab shows only your animations (see Getting started).
Export an animation
Tap Share. In the Image tab, What to export has five more choices when the project has more than one frame. All of them are Pro, and each opens the share sheet with its files. The GIF, animated PNG, and video can be cancelled while they run; nothing is saved then.
| Choice | What you get | Where |
|---|---|---|
| Animated GIF | One GIF that plays in every browser and chat app. | Pictures/Dixel |
| Animated PNG | One animated PNG (APNG) with no colour limit. | Pictures/Dixel |
| Video (MP4) | One video at 30 frames per second. | Movies/Dixel |
| Sprite sheet (PNG + JSON) | All frames in one PNG, plus a JSON file. | PNG in Pictures/Dixel, JSON in Documents/Dixel |
| Frame sequence | One PNG per frame. | Pictures/Dixel |
See Export and sharing for every option of each choice.
Range: all frames or one tag
When the project has tags, a Range choice exports all frames or one tag. The GIF, animated PNG, and video play the range in its direction (a ping-pong tag is saved there and back). The sprite sheet and the frame sequence save the range's frames in order, and the sheet's JSON lists the tags and the direction so a game engine can play them.
The sprite sheet JSON
The JSON uses our dixel-anim format:
{
"format": "dixel-anim", "version": 2,
"frameWidth": 64, "frameHeight": 64,
"columns": 4, "rows": 3, "frameCount": 12,
"borderPadding": 0, "spacing": 0, "scale": 1,
"pixelAspect": { "x": 1, "y": 1, "baked": true },
"loop": true,
"direction": "pingpong",
"range": { "from": 1, "to": 2, "tag": "Walk" },
"frameTags": [ { "name": "Walk", "from": 0, "to": 1, "direction": "pingpong", "color": "#3f8fefff" } ],
"sheet": { "file": "Walk_anim_1759140000000.png" },
"frames": [ { "ord": 0, "durationMs": 100, "x": 0, "y": 0 }, ... ]
}
frameWidth/frameHeightand each frame'sx/yare in sheet pixels (after the pixel-aspect stretch and the scale).borderPaddingandspacingare the values you chose, in canvas pixels.durationMsis each frame's duration;loopis the project's loop setting.directionis the direction of the exported range (forward,reverse,pingpong, orpingpong_reverse, Aseprite's names).rangegives the exported frames and the tag name (ornullfor all frames).frameTagslists the tags in the range, as indexes intoframes.sheet.fileis the name the PNG was actually saved under.pixelAspectis the project's pixel aspect and whether it is baked into the sheet.
When you turn on Packed, Trim empty edges, Merge duplicate frames, or
Apply CRT, the JSON is version 3. It adds layout, trim, mergeDuplicates,
crt, and sourceSize, and gives each frame its place on the sheet (x, y, w,
h), where it goes on the canvas (spriteSourceSize), and which frame it is the same as
(sameAs), so a game engine can rebuild every frame.
Most engines and editors can slice a plain grid sheet by frame size alone — give them the frame width and height (and the border and spacing, if you used any). Read the JSON when you also need the per-frame durations, the tags, or a packed or trimmed layout.
If the PNG is saved but the JSON cannot be written, Dixel tells you and shares the sheet alone.
The other export modes
Flattened image and Layers as separate files export the frame you see (the first frame on the free plan). Export slices can save the slices of the current frame, all frames, or one tag (see Slices).
:::tip Sending it over a chat app Use the GIF for chat apps. Chat apps often turn an animated PNG into a still. Attach a sprite sheet or PNGs as files, not photos: a chat app's photo mode can rename or recompress a PNG and drop its transparency. :::