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

Implemented raster project subsets
FormatFramesPreserved raster dataKey rejections
PSDOne frame at 100 msRoot raster layers, order, names, visibility, opacity, offsets, RGBA pixelsPSB, non-RGB/8-bit, groups, text, smart objects, adjustments, masks, effects, clipping, non-normal blends, animation
Krita .kraOne frame at 100 msSupported paint layers, order, names, visibility, 0–255 opacity, signed offsets, RGBA pixelsVector layers, nested groups, masks, animation/keyframes, unsupported color depth or tile encoding, preview-only files
OpenRaster .oraOne frame at 100 msPNG-backed raster layers, order, names, visibility, opacity, signed offsetsNested stacks, masks, effects, animation metadata, non-source-over composite operations
Pixelorama .pxoMultiple supported framesPixel layers, order, names, visibility, opacity, full-canvas RGBA cels, FPS-derived durationsTilemaps, 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

  1. Keep the original project and create a simplified copy.
  2. Remove or rasterize unsupported editor objects only when doing so is acceptable for your workflow.
  3. Use normal blend behavior and ordinary raster/pixel/paint layers.
  4. For PSD, Krita, and OpenRaster, expect one output frame. Use Pixelorama only when its supported project subset carries the animation.
  5. 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.