Project format comparison
Compare layered raster project formats before conversion
Compare the supported PSD, Krita, OpenRaster, and Pixelorama raster subsets, including layers, opacity, timing, blend limits, and failure reasons.
PSD, Krita, OpenRaster, and Pixelorama can all contain raster layers, but their supported paths are not interchangeable. This project chooses small, test-backed subsets and rejects source features that cannot be represented honestly in SpriteProject.
Comparison at a glance
| Format | Frames | Preserved raster data | Key rejections |
|---|---|---|---|
| PSD | One frame at 100 ms | Root raster layers, order, names, visibility, opacity, offsets, RGBA pixels | PSB, non-RGB/8-bit, groups, text, smart objects, adjustments, masks, effects, clipping, non-normal blends, animation |
| Krita .kra | One frame at 100 ms | Supported paint layers, order, names, visibility, 0–255 opacity, signed offsets, RGBA pixels | Vector layers, nested groups, masks, animation/keyframes, unsupported color depth or tile encoding, preview-only files |
| OpenRaster .ora | One frame at 100 ms | PNG-backed raster layers, order, names, visibility, opacity, signed offsets | Nested stacks, masks, effects, animation metadata, non-source-over composite operations |
| Pixelorama .pxo | Multiple supported frames | Pixel layers, order, names, visibility, opacity, full-canvas RGBA cels, FPS-derived durations | Tilemaps, effects, groups, 3D/audio, non-normal blends, per-cel opacity or z-index, ambiguous metadata |
PSD: direct RGB raster layers
The PSD importer accepts the ordinary PSD signature and version 1, RGB color mode, eight bits per channel, supported raw or PackBits channel data, and direct raster layers. Layer rectangles may occupy only part of the document; their signed canvas position becomes the cel offset. The exporter retains layer opacity separately from per-pixel alpha and does not pre-composite layers.
Visible groups and editor objects are rejected rather than flattened into misleading “preserved” layers. A flattened composite is not used as a fallback. PSD animation and layer-name conventions that merely imply frames are also unsupported.
Krita: native paint-layer data, not the preview
The .kra reader validates the ZIP container and Krita document XML, then decodes supported native paint-layer tile data. It requires the documented 8-bit RGBA subset, ordinary paint layers, normal compositing, and one frame. preview.png and mergedimage.png may exist, but they are never used to claim layer preservation. A preview-only archive is rejected because it lacks supported native layer data.
OpenRaster: a simple portable layer stack
OpenRaster stores a stack.xml plus PNG layer images. The importer accepts one root stack of ordinary PNG-backed layers, preserving source order, names, visibility, opacity, and signed positions. It validates safe archive paths, the required mimetype, ZIP metadata, XML structure, and referenced image dimensions. Nested stacks and composite operations other than supported source-over are outside the subset.
Pixelorama: the layered animation option
The Pixelorama subset is the only format on this comparison page that currently rebuilds multiple frames. Its data.json defines canvas size, FPS, layers, and frames, while ZIP entries such as image_data/frames/1/layer_1 carry raw full-canvas pixels. Every frame must have exactly one supported cel record per layer.
Frame duration is a multiplier combined with FPS:
durationMs = clamp(round((frame.duration × 1000) / fps), 1, 65535)
Normal pixel layers are supported. Per-cel opacity must be 1 and z-index 0 because the canonical model does not contain either field.
Why normal blend mode is a boundary
The Aseprite writer currently creates normal raster layers. Silently accepting multiply, erase, adjustment, or application-specific effects would change the displayed pixels or imply editability the output does not have. Each importer therefore rejects unsupported blend behavior before export. If the visual result matters more than editable layers, make a separate flattened copy in the source editor and convert that copy as frames.
Preparation workflow
- Keep the original project and create a simplified copy.
- Remove or rasterize unsupported editor objects only when doing so is acceptable for your workflow.
- Use normal blend behavior and ordinary raster/pixel/paint layers.
- For PSD, Krita, and OpenRaster, expect one output frame. Use Pixelorama only when its supported project subset carries the animation.
- Verify layer order, names, visibility, opacity, offsets, transparency, and pixels in Aseprite before discarding anything.
“Project file” does not mean “lossless.” Support is a mapping of specific verified structures, not an endorsement of universal compatibility with the source editor.