File formats

Omadesign imports supported content into its native layer tree and records conversion notes with the document. A format appearing in Open is not a promise of complete application compatibility. Save imported work as .oma to retain Omadesign's editable document and the import notes; retain the source when a conversion reports losses.

FormatImportExportMain limits
.omaNative document, groups, vectors, layout frames, comments, text, native samples, masks, profiles, motion and retained Live historyNativeFeatures select the oldest preserving reader, through version 28. Older apps must refuse newer required features.
.af, .affinityNative bounded Affinity archive/object reader; optional converter fallbackNo native writerV1/V2/V3 qualification is recorded separately. Unsupported features have notes and original source bytes are retained in OMA.
.afdesign, .afphoto, .afpub, .aftemplate, .afpackageSupported native vectors, type, groups, artboards, image layers, masks, paint and observed layer effectsNo native writerRich affine type/paint depend on shared stack changes. Unsupported effects, publishing structures and color profiles remain explicit limits. Original bytes are retained.
.psd, .psbLayered RGB/CMYK, 8/16/float samples, groups, masks, supported editable type and placed sourcesLayered PSD/PSB with retained depth, profiles, editable type and placed-source descriptorsUnsupported type, warp, effects and smart filters retain their descriptors or saved appearance and report limits. See the native-depth and PSD sections below.
.idmlEditable multipage text stories, styles, threaded frames, paths, masters, bleed and placed image linksStandard IDML ZIP/XMLExplicit conversion notes for unsupported tables/notes and other structures. Support and limits.
.pdfPages/artboards, paths, supported text, images and optional-content layersPDF with pages, vector artwork and optional-content layersComplex layer/group appearances export as pixels with notes; backdrop-dependent effects can require rasterized pages. PDF artwork is not a full source document.
.aiNative editing data from AI/EPS, including artboards, hierarchy, paths, supported type/paint and placements; PDF/PS fallbackNo Illustrator-native writerMixed rich type, meshes, patterns and unsupported live appearances produce notes. Original and readable linked-image bytes are retained once in OMA.
.svg, .svgzObjects, layer/group hierarchy, names, transforms, text, images, styles, visibility and supported masksSVGVector canvas area has no megapixel cap. Clips and alpha/luminance masks retain editable source artwork and export as vector mask content. Complex text can become editable outlines; unsupported paint/effects may become pixel layers, limited to 64 megapixels each and 512 MiB of decoded pixels in total. Scripts, animation and foreign content are not imported.
.oraOpenRaster pixel layers/groups, offsets, names, visibility, opacity, isolation and supported blendsOpenRaster with layers, stack.xml, merged preview and thumbnailVectors/text become pixels per layer. Masked/effected groups become one pixel layer. Extended SVG layer sources and unsupported compositing operations are rejected.
.xcfNative GIMP reader: pixel layers, groups, names, visibility, opacity, offsets, supported blends and applied layer masksNo XCF writer; export OpenRaster or PSDLive text, layer effects, paths and floating selections are not reconstructed. High bit depth becomes 8-bit RGBA. Unmapped blend modes display as Normal. Save .oma to keep the imported stack.
.eps, .psGhostscript conversion to PDF, then native PDF importNo direct writerGhostscript must be installed. Conversion can discard original layer metadata or flatten artwork.
.omaphotoReopens the matching original in Photo with saved development, optical calibration, local masks, crop and rotationSave settings beside the originalContains settings, not pixels. Keep the original and sidecar together with matching names; the source size and modification time must still match.
.omapresetPhoto preset library ImportPhoto preset library ExportSource-independent, named adjustment collections in versioned JSON. No image pixels or source identity. Crop and rotation are opt-in.
Camera RAW: DNG, CR2/CR3, NEF/NRW, ARW, RAF, ORF, RW2, PEF and othersFull-resolution sensor decoding and Photo developmentDeveloped PNG/TIFF with 16-bit channels, or JPEG; no camera RAW writerSupport depends on the camera and compression mode. Native Design placement retains float samples; proprietary camera looks and unsupported DNG opcodes/profiles are not recreated.
PNG, JPEG, WebP, GIF, BMP, TIFFPixel imagePNG and JPEG through headless conversion; other existing export actions remain separateThis path imports a single image, not layered TIFF or animated GIF structure.

SVG editability

Compound paths retain their individual Bézier contours and fill rule. Centered circular radial gradients with padded edges retain their editable stops. Stretched horizontal text and equivalent adjacent text spans remain native type when the font and styling can be represented.

Custom miter limits, nonuniformly transformed strokes, extended dash arrays and stroke-first paint order retain vector artwork. Stroke settings the native stroke model cannot express become editable filled outlines, with a conversion note. Their original width and dash controls are no longer live stroke properties. Unsupported text styling still becomes editable outlines; unsupported patterns, gradient geometry and effects can still require pixel layers. These limits describe the affected objects, not the vector canvas area.

Camera RAW

RAW decoding is built into Omadesign using the pinned LibRaw 0.22.2 source. It does not require an installed converter or a download when opening a photo. The decoder reads sensor data at full resolution, subtracts black levels, demosaics supported Bayer/X-Trans sensors, applies the camera white balance and color matrix, and honors image orientation. It returns 16-bit linear sRGB with automatic brightness disabled. DNG baseline exposure and the Photo exposure/white-balance adjustments are applied before the display transfer function.

Recognized extensions are .3fr, .arw, .bay, .cap, .cr2, .cr3, .crw, .dcr, .dcs, .dng, .drf, .erf, .fff, .iiq, .k25, .kdc, .mdc, .mef, .mos, .mrw, .nef, .nrw, .orf, .pef, .ptx, .pxn, .raf, .raw, .rw2, .rwl, .rwz, .sr2, .srf, .srw, .sti and .x3f. An extension identifies a family; it does not establish support for every camera or compression mode. JPEG XL-compressed DNG, GPR, EIP packages and R3D video are not supported by this build. Only the first image of a multi-image RAW is developed, with a conversion note.

Open a RAW through File → Open, the Photo library, a folder, a file-manager Open With action, or a drop. Loading and folder scans run in background workers. Photo keeps the original decoded linear pixels separate from its development settings and its 1600-pixel display preview. Camera/lens information and exposure metadata are shown when present. Before shows the default camera-balanced development, not the camera's embedded JPEG. At close zoom, a background worker develops full-resolution detail and the viewer uploads only the visible tiles. The previous preview stays visible while detail is prepared; results from an older photo or adjustment are discarded.

Save settings writes a small adjacent file such as DSC_0001.NEF.omaphoto. Resume with File → Open, a drop, or Photo → Library → ··· → Open photo or settings…, choosing either the original or the settings file. Opening .omaphoto restores the original source, including RAW precision, and its development settings. The source photograph is never rewritten. Keep the settings file and original together with matching names. Settings are bound to the source size and modification time. An explicit settings open fails without replacing the current photo when the original is missing or changed, or the settings are invalid. Opening the original instead shows default development and a note if its settings cannot be used. Failed saves retain unsaved edits for retry. This metadata check is not a cryptographic content identity. Unsaved changes exist only in the current Photo session. A .oma Design document does not contain the RAW source or its development settings.

Photo export develops the full-resolution source, including crop and rotation. RAW PNG/TIFF exports retain 16-bit developed channels; JPEG is an 8-bit delivery image. Exported files use display sRGB values and do not preserve the sensor mosaic, camera edit history, or all source metadata. Place in Design and document conversion retain developed float pixels separately from their RGBA8 display cache. Placement into an existing document uses its actual color model, profile and rendering intent. Keep the RAW and .omaphoto settings for further development. Native RAW writing is not provided.

Photo’s Detail → Lens and perspective stores a named manual camera/lens calibration, radial distortion, red/blue chromatic scaling, optical center, corner light gain, perspective, straighten and scale. The inverse geometry samples the oriented source in linear light before white balance, exposure and the display transfer. Corrections, crop and rotation use the same pipeline for previews, detail tiles and 16-bit exports; the original linear data remains untouched. Calibration is manual; camera metadata does not select a measured profile automatically.

Photo’s Local tab adds radial, graduated and painted masks with editable geometry, feathering, strength, inversion and local light/color. Brush strokes keep their points, radius, hardness, flow and erase operation; Paint on photo paints in source-relative coordinates through saved crop and rotation. Show mask is a viewer overlay and is excluded from exports. Local exposure, white balance and color run in linear light; masks travel in .omaphoto settings. Sidecars remain bounded to 2 MiB and 32 local adjustments. Older global-only sidecars retain version 1; optical settings use version 2 and local masks use version 3 so older readers refuse unfamiliar edits. Copy/paste and presets include optics and local masks only when their categories are explicitly selected.

Photo’s Library → Catalog opens or creates a catalog in a chosen folder. Import folder recursively records originals in place without retaining decoded images. The catalog supports up to 100,000 originals and 256 MiB of metadata, star ratings, keywords, combined filters and named stacks. Its virtual list opens only requested originals. Catalog-opened photos save editable development to the journal after a gesture; Save settings also writes a portable sidecar. Folder browsing still works independently. Reopen the catalog folder after restart to resume.

The versioned catalog uses SHA-256 checked journal records, synced writes, atomic compaction and an exclusive writer lock. Recovery skips damaged or torn records, retains valid later records and preserves the original damaged log beside the recovered catalog. Relink original accepts a moved file only when its content hash matches; catalog edits survive missing sidecars and changed modification times. Imported copies at different paths remain separate. Damaged records that have no later replacement cannot be reconstructed; recovery reports the skipped count and backup path.

Rendering is not intended to match Lightroom, Capture One or an in-camera JPEG exactly. Proprietary looks, full Adobe camera profiles, automatic lens correction, some DNG opcodes and multi-frame computational rendering are not implemented. Sensor/channel clipping cannot be recovered by later exposure changes. RAW admission uses checked decoder, sample and development-memory demand rather than a fixed megapixel limit; source inputs remain bounded to 512 MiB. Cancellation uses LibRaw's progress callback and checks in development and writing. It is cooperative, not a promise that every codec stops at a particular wall-clock deadline.

Real-file verification covers an iPhone 16 Pro Max ProRAW DNG, a compressed Canon EOS R6 CR3 and a compressed Fujifilm X-T30 II X-Trans RAF. These exercise different sensor layouts, compression, camera metadata and orientation. On the validated native build, the decoded 16-bit RGB and full-resolution PNG exports matched independently generated system LibRaw and sRGB-transfer references pixel for pixel. The files cover 3024 × 4032, 3407 × 2271 and 6246 × 4170 pixels. A separate sidecar round trip restored exposure, rotation and crop; its 3024 × 1512 TIFF retained 16-bit pixels and exactly matched an independent development/crop reference, while the JPEG retained the same dimensions. Source SHA-256 checks remained unchanged. These checks do not establish support for every listed camera family or bit-identical output across architectures.

LibRaw is distributed under its CDDL option, with its source and license in vendor/libraw. Release packages and the installer retain that source and the native JPEG/zlib notices. Omadesign's own code remains MIT-licensed.

Affinity

Native import reads supported archive/object data directly in Rust. See native Affinity import for the supported subset, lossless source recovery, licensing and pinned qualification procedure. The separate converter is an optional fallback when native reading fails; its setup remains in affinity-import.md. Opening a file installs nothing.

The converter supports the new .af container through upstream Affinity V3 work. Legacy Designer fixtures have been converted, and real user .afdesign and .afphoto files have been exercised. This does not establish general .afpub, .aftemplate, .afpackage, or unified .af fidelity.

A real Photo document exposed a missing format-9 raster decoder. The separate GPL compatibility module now reads its floating-point channel tiles, including constant-one alpha tiles. That file produces seven image objects without conversion exceptions, versus four before the fix. Channels become 8-bit RGBA, values outside 0–1 are clipped, and custom profile transforms are not applied; the import report says so. This is not an HDR-preserving conversion.

Affinity resources such as .afassets, .afbrushes, .afstyles, .afpalette and .afmacro are not layered documents. .afbook references chapter documents. An .afpackage is a document accompanied by resource folders, not necessarily a ZIP archive. Linked resources still need to be available to the conversion path.

The Rust application remains MIT-licensed. Inkscape, its converter and the files in scripts/affinity-bridge/ are separately licensed GPL programs. Setup preserves their source and license. A distribution bundling them must preserve the corresponding source and license obligations.

Photoshop

The reader supports raw, RLE, ZIP and ZIP-predicted channels, grayscale/RGB/CMYK documents, and 8/16/32-bit source channels. Higher depth becomes 8-bit RGBA; CMYK conversion is approximate and does not apply embedded ICC profiles. Layer hierarchy, Unicode names, negative offsets, hidden layers, opacity and the supported blend modes are preserved. Masks retain their placement, default fill and density. Feathering is not supported. Clipping relationships are baked into editable pixel masks, so later edits to the base no longer propagate automatically.

Text and smart objects retain their separate saved pixel layers rather than native type or embedded documents. A supported Normal Color Overlay becomes an editable native color effect. Other adjustments, fills and effects are not recreated, and their notes explain the limitation. Vector masks use a cached pixel mask when available.

Export writes RGB/8-bit PSD or PSB with separate layers, groups, pixel masks, offsets and supported color overlays. Vectors, native text, transformations and other effects are rendered into their individual pixel layers. Opaque canvas paper is exported as a background layer. Application limits include 64 megapixels, 512 MiB decoded working budgets, 8,192 layers and 64 group levels.

Verification includes independent Photoshop samples and a real 37 MB PSD. Independent psd-tools inspection confirmed the supported color overlay remained editable after export, the original layer pixels were unchanged, and the saved composite matched pixel for pixel. Nine focused codec tests cover independent PSD/PSB fixtures and mask/group cases.

PDF and Illustrator

PDF import creates artboards for all pages, editable paths and strokes, nested optional-content layer groups, and pixel layers for embedded images. It reads supported axial/radial gradients and multi-stop shading functions, blending, opacity, clipped artwork and alpha/luminosity soft masks; clips and soft masks become cropped pixel masks. Supported straightforward text and embedded OpenType remain editable; CID horizontal widths and full embedded TrueType fonts are read. Embedded CFF and transformed/complex text can become editable outlines. Embedded subset fonts may not contain characters needed for later edits.

Import reports approximations for unsupported drawing operators, focal/two-circle radial, mesh and pattern shading, dash phases/patterns, custom miter limits, font substitutions, ICC/spot/pattern colors, overprint and knockout. PDF transparency groups are imported, but nonisolated groups are approximated as isolated groups. Annotations and form fields are not artwork. Encrypted PDFs must be saved as unlocked copies before importing. Illustrator editing data is attempted before the PDF path. See Illustrator editing data for native features, fixture checks and current fidelity limits. PDF fallback is identified explicitly in conversion notes.

PDF export writes pages, paths, raster images with alpha, opacity/blending and optional-content layer metadata, including names, order, visibility and locks. Linear and affine two-circle radial fills and gradient strokes use vector shadings, including focal placement, inner radius, multiple stops and varying stop opacity. Repeat and reflect fields use explicit repeated axial/radial shading segments, avoiding periodic calculator-field undersampling in independent renderers. Retained SVG patterns use reusable vector PDF tiles; effects inside a tile have a named appearance reduction when necessary. Live alpha/luminance artwork masks retain vector sources in PDF soft-mask groups; mask regions remain clipping paths. Pixel masks remain gray mask images without rasterizing their painted artwork. Isolated groups preserve group opacity and blending through transparency forms. Permitted standalone TrueType fonts are embedded once per face, with positioned PDF text, CID glyph mappings, Unicode extraction and ActualText. Native point text uses the composer’s effective face and size for every range, including affine transforms, kerning, tracking, wrapping and rotation. Solid range paints remain text paint; gradient and pattern range paints use glyph text clipping with the same embedded font and logical Unicode. Full faces retain unused characters for later editing. Fonts that restrict editable embedding, variable/CFF/collection fonts, path/area text and multi-glyph clusters retain correctly painted outlines with an object-specific note. Positioned, vertical and path SVG text use the resolved source layout’s painted outlines, retaining range paints and the editable native text in .oma. Retained SVG filter graphs render the current edited subtree and live masks into a bounded RGBA8 appearance layer, respecting filter extent and artboard coordinates. This path does not claim high-depth fidelity. Unsupported filters, shape/conic gradients, frame composition and noncentered stroke alignment still use bounded appearance fallback. A rendered group becomes one named PDF layer; its internal objects and hierarchy remain in the .oma master. Hidden layers retain their visibility state. Backdrop-dependent pass-through effects can require rendering entire pages. Every fallback produces a note explaining the reduction in editability; effects are not silently dropped or replaced with a single gradient color. Fallback images are limited to 64 megapixels each and a 512 MiB total pixel budget.

A real four-page kitchen drawing imported with 608 shapes, 48 groups and 142 layers and was visually compared with Poppler rendering. A 28-artboard Illustrator document exposed blank PDF-compatible pages; an independent PDF renderer also showed them as blank. Artwork present only in Illustrator's private data cannot be recovered through the PDF path. Independent export checks cover hidden optional-content layers, raster alpha, vector masked multi-stop/radial gradients, shadows, group opacity, embedded fonts and Unicode text extraction. Vector-only fixtures are checked for zero image objects. Imported PDF text is saved to .oma and reopened in a fresh process to verify portable font bytes. The page fallback for backdrop-dependent blending retained the exact native composite pixels and rendered pixel for pixel with Poppler's Cairo backend; a separate Splash-backend check covers layers and alpha. Poppler’s Cairo backend treats nonisolated masked groups as isolated; strict native/Splash mask bands and an isolated Cairo control distinguish this renderer limitation.

Supported legacy Illustrator operators and EPS editing data are parsed directly. Other PostScript Illustrator, EPS and PS files use an installed Ghostscript executable to create PDF before native import. The process uses a private temporary directory and bounded runtime and output; missing Ghostscript produces setup guidance.

OpenRaster

OpenRaster import/export uses the public 0.0.6 ZIP/XML specification. PNG layers stay separate, including hidden layers and negative offsets. Groups preserve hierarchy and isolation. Imported pass-through group opacity is applied to descendants with a note to preserve OpenRaster's compositing rules. When exporting a translucent native pass-through group, a note explains that overlapping children may composite differently; isolated groups provide consistent interchange. Layer locks use an Omadesign XML extension that other applications may ignore. Unsupported Porter–Duff compositing and extended non-PNG layer content are rejected instead of silently changed to Normal blending. Sixteen-bit PNG channels become 8-bit RGBA with a note.

Export renders vector artwork separately for each layer; masked/effected groups become one pixel layer. Rendered layers are clipped to the document canvas. The archive includes the required first, uncompressed mimetype entry, stack.xml, mergedimage.png and a thumbnail no larger than 256×256. ZIP entries are read directly without filesystem extraction. Archive, expanded-data and aggregate pixel budgets are 512 MiB; canvas size is limited to 32,768 pixels per side and 64 megapixels.

Verification includes a fixture generated independently with Python's ZIP, PNG and compression primitives, plus independent Python zipfile, XML and Pillow inspection of Omadesign's exported archive. These checks cover order, nested groups, hidden layers, exact pixel channels, negative offsets and required previews.

GIMP XCF

The reader follows the GIMP XCF specification. It does not launch GIMP or write .xcf. Pixel layers, groups, names, visibility, opacity, offsets, supported blend modes and applied layer masks become native layers. 32-bit and 64-bit pointers, RLE, uncompressed and zlib tiles are accepted. 8-bit RGB, grayscale and indexed documents are preferred; higher precision is reduced to 8-bit RGBA with a note. Live text, layer effects, paths and floating selections are not reconstructed. Unmapped blend modes display as Normal. Export OpenRaster or PSD for GIMP; keep .oma as the editable source.

Verification uses independently encoded fixtures for grouped RLE layers, 64-bit pointers and zlib tiles, plus a bounded oversize rejection.

Headless inspection and conversion

The command line uses the same readers and writers as the desktop. Inspection writes JSON with canvas dimensions, pages, layer metadata and import notes. Conversion prints notes to stderr and writes a separate destination file:

omadesign --inspect artwork.afdesign
omadesign --inspect artwork.psd
omadesign --inspect artwork.xcf
omadesign --inspect photograph.NEF
omadesign --inspect photograph.NEF.omaphoto
omadesign --convert photograph.NEF.omaphoto --output developed.tif
omadesign --convert photograph.dng --output photograph.tif
omadesign --convert artwork.afphoto --output artwork.oma
omadesign --convert artwork.oma --output artwork.psd
omadesign --convert artwork.oma --output artwork.pdf
omadesign --convert artwork.oma --output artwork.ora

Headless document output formats are .oma, .svg, .png, .tif/.tiff, .jpg/.jpeg, .psd, .psb, .pdf, .ora and .idml. RAW inspection includes camera metadata, source dimensions, precision and saved development settings. RAW-to-PNG/TIFF conversion uses the full-resolution 16-bit Photo pipeline; RAW-to-JPEG produces an 8-bit image. Saved .omaphoto settings are applied automatically. Converting RAW to a native document retains float pixel samples. Same-file conversion is refused to protect the original. General source-file size is limited to 512 MiB; specific readers also enforce object, pixel, decompression or process limits.

Primary references: Affinity V3 converter source, OpenRaster archive specification, OpenRaster layer-stack specification.

Native document depth and profiles

Raster layers imported from 16-bit PNG/TIFF/PSD or float TIFF/PSD retain authoritative floating-point samples independently of the RGBA8 display cache. PSD/PSB and TIFF preserve the authored depth; RGB PNG preserves 16-bit samples. Float PNG and JPEG exports require an explicit document conversion. File → Color and precision converts working mode/profile/depth with one undo step. Native samples require project version 19, document color/profile 20, editable PSD type 21 and placed-source data 22.

CMYK PSD and TIFF retain original ink coverage, alpha and embedded ICC bytes. Little CMS 2.19 is statically included in every binary, built offline from pinned MIT sources; --color-runtime-check checks the linked version. Portable archives and prefix installs use the same built-in engine. No system liblcms2 lookup or download is needed. Malformed/mismatched profiles fail with an error. Untagged CMYK retains its samples and explicitly reports its uncalibrated device-formula preview.

Pixel masks, mask inversion/application, raster filter edits, ordinary brush painting, fill and erase operate on authoritative samples and support undo/reopen. Native group masks resize without an RGBA8 intermediate. Healing, clone and smudge use native float donor and working samples, including selection clipping and undo. AI cutout upscaling is refused on native layers; mask-only background removal preserves original samples. Live artwork-mask flattening and PDF/OpenRaster exchange refuse native reductions. The native compositor supports a bounded set of float paths, gradients, centered strokes, geometric frame clips and unit-interval bitmap masks. Unsupported SVG graphs, patterns, appearance isolation, effects and paint combinations refuse rather than silently reduce precision. Full float SVG coverage and effects remain unfinished.

Native compositing and ICC transforms are software paths. The live canvas uses an RGBA8 display surface. Monitor profiles, physical display accuracy and print matching have not been qualified by these headless checks.

Editable PSD type

PSD TySh and EngineData map to native TypeRun/CharSpan objects: Unicode text, full affine transform, requested font, per-run size/color, tracking, leading, baseline shift and horizontal/vertical scale remain editable. Export regenerates standard TySh/EngineData from current native text. Multiple type objects in one native layer become separate type layers in a Photoshop group. Original descriptor fields and unsupported warp settings remain in the project and exported PSD.

Missing fonts produce an explicit note and native fallback preview while retaining the requested name. Text warp and vertical orientation currently retain their Photoshop parameters but use horizontal, unwarped native previews. Native path/SVG positioning exports as editable Photoshop point text with an explicit note. Saved pixels remain the fallback when a type descriptor cannot be parsed. These limits are separate from the independent editable horizontal type acceptance fixture.

Placed PSD sources and smart filters

SoLd/SoLE and legacy PlLd records retain their source association, full perspective quad and complete Photoshop descriptor. Embedded lnk2/lnk3/lnkD sources use the shared immutable SourceAttachment store once. Linked source descriptors and missing source state survive .oma and PSD export; no linked path is followed automatically.

The raster inspector can make a placed source, edit a separate PSD source copy, reload that edited source, replace/relink the source, adjust/toggle supported smart filters, and rasterize explicitly. Each replacement/filter change is one undo step; previous original bytes remain recoverable. Native moves, scales, rotations and shears update the exported placed-object quad. Perspective preview recomputation samples native floating-point source pixels. Gaussian blur, motion blur, brightness/contrast and invert have native filter mappings. Their parameters and unknown filter descriptors remain standard Photoshop data in exported files.

An unsupported active filter or warp keeps the imported saved preview and gives an explicit explanation before native recomputation. Missing external sources can be relinked without discarding their stored placement/filter parameters. Native source editing/filter recomputation is software-qualified separately from Adobe Photoshop/GIMP application testing and native desktop interaction.