OpenEXR is the high dynamic range image format of visual effects and 3D rendering. Industrial Light & Magic created it in 1999 and released it as open source in 2003; today the Academy Software Foundation maintains it, and it is the interchange format between renderers, compositors and color pipelines.
An .exr file stores floating-point pixels in linear light, so highlights far above
white survive intact. One file can hold many named channels — a beauty image beside depth,
normals, motion vectors, object IDs and any number of render passes — and, in the multipart
form, several independent images.
Paintapp opens OpenEXR files as layered documents: every image layer in the file becomes a layer, and every data channel becomes a channel in the Channels panel. Paintapp also exports OpenEXR, including multi-channel render passes from the path tracer.
| Feature | Details |
|---|---|
| Single-part and multipart files | Opened; each part becomes a layer |
| Scanline and tiled images | Both opened |
| Compression | None, RLE, ZIPS, ZIP, PIZ, PXR24, B44, B44A, DWAA, DWAB |
| Pixel types | 16-bit half and 32-bit float, kept at their own depth; 32-bit unsigned integer channels read as float |
| RGB and RGBA images | Opened as layers |
| Luminance (Y) images | Opened as grayscale layers |
| Luminance/chroma (Y, RY, BY) images | Opened and displayed in color, including subsampled chroma |
| Named layers and render passes | Image passes become layers; data passes become channels |
| Data channels (Z, masks, motion and disparity vectors, IDs) | Read into the Channels panel as extra channels |
| Stereo and multi-view files | Each view becomes a layer named after the view |
| Data window and display window | Honored: the document is the display window, the layer sits where its data window says |
| Chromaticities attribute | Applied: the document takes a color profile built from the file's own primaries and white point |
| Embedded preview | Used for thumbnails without decoding the image |
| Large files | Read on demand: the header first, pixels only for the parts you open |
| Export | 32-bit float RGBA; path-traced scenes export render passes as named channels |
Opened documents composite in linear light. See Color Management for how scene-linear documents are displayed.
| Limitation | Result |
|---|---|
| Deep images (deep scanline, deep tile) | Not supported; the file is refused with a message. Their headers can still be read |
| Mipmap and ripmap levels | Only the full-resolution level is opened; the smaller levels are skipped |
| Pixel aspect ratio | Not applied; non-square pixels display as square |
| Unsigned integer channels above 16,777,216 | Values lose precision, since they are held as 32-bit float |
| Luminance/chroma images with an alpha channel, or with unsubsampled chroma | Refused with a message |
| Export of layers, parts, views or data channels | Not supported; export writes the flattened image (plus render passes from the path tracer) |
| Export as 16-bit half, or with compression | Not supported; export writes uncompressed 32-bit float |
Opening an .exr file creates a layered document sized to the file's display
window. Pixels stay at the depth the file uses, 16-bit half or 32-bit float, and the document
composites in linear light, so values above 1.0 are preserved through editing.
OpenEXR files name their channels, and a dotted prefix groups channels into a layer:
R, G, B, A are the beauty image, while
albedo.R, albedo.G, albedo.B form a layer called
albedo. Paintapp sorts what it finds into two kinds:
Z), masks, motion
and disparity vectors, object IDs. Each channel becomes an extra channel in the Channels
panel, beside the document's own alpha and spot channels. A two-channel motion pass becomes
two channels, since a vector is not a picture.The beauty layer is the unnamed one when the file has one, otherwise a layer whose name says combined, beauty or rgba, otherwise the first layer with an alpha channel. It sits at the top of the stack. A file with a single image, the common case, opens as one layer named after the file.
Extra channels can be loaded as selections, viewed and deleted like any other channel. See Channels Panel.
A multi-view file names its views in a header attribute and prefixes each view's channels with the view name; the first view carries the unprefixed channels. Paintapp opens each view as a layer named after the view, with the first view visible. A multipart stereo file, one part per view, opens the same way with the part names.
An OpenEXR file distinguishes the display window, the frame of the image, from the data window, the rectangle that actually holds pixels. The two often differ: a render with overscan has a data window larger than the frame, and a crop or a sparse render has a smaller one. The document takes the display window as its size, and each layer is placed at its data window's offset. Pixels outside the frame are kept on the layer, not cut off.
OpenEXR pixels are scene-linear, and the file says which primaries they are in: the
chromaticities attribute gives the CIE coordinates of its red, green and blue
plus its white point. Opening builds a color profile from exactly those, with a linear tone
response, and assigns it to the document — so the file's own gamut is what the document is
in, not an assumption about it. You can see it, and change it, under Image > Assign Profile.
A file with no chromaticities attribute is not unknown: the format defines its
absence as Rec.709 primaries with a D65 white, so those files are profiled that way. Files
whose primaries are the CIE axes themselves hold XYZ rather than RGB, and are profiled as XYZ.
The document composites in linear light and is displayed through Paintapp's color management, as any float document is. Values above 1.0 survive editing, but the display conversion has no exposure or tone control of its own yet, so highlights well above white clip on screen.
Luminance/chroma files, the Y, RY, BY encoding some
tools write to halve file size, are reconstructed to color on display.
A writer can embed a small preview in the header. When one is present, the File Browser uses it and never decodes the image. Otherwise the beauty layer is decoded for the thumbnail.
Any document can be saved as OpenEXR. The flattened image is written as 32-bit float
R, G, B, A, uncompressed, in linear
light.
A document with a path-traced 3D scene can export render passes alongside the beauty image:
albedo, normal, depth, position and object ID. Each becomes a named layer in the file, using
the channel names Nuke and other compositors expect (albedo.R,
N.X, Z, and so on). See Path
Tracer.
OpenEXR is unusually well documented: the reference implementation, the file layout and the conventions for layers, views and deep data are all published by its maintainers.
The project's own image collection is the test set every OpenEXR reader is measured against: scanline and tiled images in every compression, luminance/chroma files, the multi-view Adjuster and Balls, the Beachball stereo sequence in both single-part and multipart form, and the display-window series that tests cropping and padding.