File Formats
OpenGPEX supports 10+ image formats for import and export, with full metadata preservation.
Import Formats
| Category | Formats | Technology |
|---|---|---|
| Standard web | JPEG, PNG, WebP, AVIF, BMP, GIF | Browser-native decode |
| Professional | TIFF (16-bit, CMYK, BigTIFF) | wasm-vips in Worker |
| Camera RAW | CR2, NEF, ARW, DNG (50+ formats) | libraw-wasm in Worker |
| Vector | SVG, EPS | resvg-wasm / Ghostscript in Worker |
Export Formats
| Format | Precision | Technology |
|---|---|---|
| JPEG, PNG, WebP, BMP | 8-bit | Browser-native encode |
| AVIF | 8-bit | wasm-vips (heifsave + libheif/libaom) |
| PNG | 16-bit | wasm-vips |
| TIFF | 8/16/32-bit | wasm-vips (LZW/ZIP/JPEG compression) |
| GIF | 8-bit animated | gifenc in Worker |
Metadata Preservation
| Data | Formats | Behavior |
|---|---|---|
| ICC Color Profiles | JPEG, PNG, TIFF, WebP, HEIC, AVIF | Extract on import, inject on export |
| EXIF | JPEG, WebP, TIFF, AVIF | Preserved through edit cycle |
| DPI/Resolution | JPEG, PNG, TIFF, BMP | Dual-layer: frame-level + per-layer |
| PNG chunks | PNG | 9 chunk types (pHYs, iCCP, tEXt, gAMA, etc.) |
Native .gpex Format
The project save format is a binary container bundling:
- Thumbnail — WebP preview for file listings
- Manifest — JSON metadata (dimensions, layer count, editor version)
- Payload — ZIP archive containing serialized state + all image assets (by CAS hash)
Self-contained, offline-capable, and drag-and-droppable.
GIF Animation
Multi-frame GIF files decompose into individual layers on import (linked by sequence ID), and reassemble into animated GIF on export — preserving frame timing and loop metadata.
WASM Modules
All heavy format operations run in Web Workers, never blocking the UI:
| Module | Purpose | Loading |
|---|---|---|
| wasm-vips | TIFF/AVIF/HEIC encode/decode, CMYK→sRGB, 16/32-bit | Lazy, on first use |
| libraw-wasm | Camera RAW decoding (50+ formats) | Lazy, on first RAW import |
| resvg-wasm | SVG rasterization | Lazy, on first SVG import |
| gifenc | GIF multi-frame encoding | Lazy, on first GIF export |
Last updated: 2026-07-30