OpenEXRยถ

OpenEXR provides the specification and reference implementation of the EXR file format, the professional-grade image storage format of the motion picture industry.

The purpose of EXR format is to accurately and efficiently represent high-dynamic-range scene-linear image data. This is a significant difference to most image formats, which store images that are ready for display. Software that handles OpenEXR images may need to process them differently to images in other formats such as JPEG (see Scene-Linear Image Representation for more details). OpenEXR files have strong support for multi-part, multi-channel use cases, and extensive representation of associated metadata.

OpenEXR is widely used in host application software where accuracy is critical, such as photorealistic rendering, texture access, image compositing, deep compositing, and DI.

OpenEXR is a project of the Academy Software Foundation.

Latest Newsยถ

_images/news.png

March 1, 2026 - OpenEXR 3.4.6 Released

Patch release with several bug fixes, enhancements, and build improvements.

  • ๐Ÿ› A limit of UINT_MAX deep samples per pixel is now enforced, which prevents an integer overflow when using the CompositeDeepScanLine API to combine multiple deep parts.

  • ๐Ÿ› IlmThread now builds properl with glibc 2.43.

  • ๐Ÿ”ง In IlmThreadPool, replace deprecated std::atomic_load / std::atomic_exchange overloads for std::shared_ptr with the C++20 std::atomic<std::shared_ptr<T>> interface when available.

  • ๐Ÿ› The ZIP and ZIPS Compressor objects had incorrect compression types set, although the ill effects were miminal as the value is seldom used.

  • ๐Ÿ› Enable SSE2 on 32-bit x86 builds to fix test failures

Build improvements:

  • ๐Ÿ› ๏ธ OpenEXR now ships with an internal โ€œvendoredโ€ copy of the OpenJPH library. At configuration time, if CMake finds an external installation of OpenJPH, it will use it, but if that fails, or the CMake configuration option OPENEXR_FORCE_INTERNAL_OPENJPH is set, it will use the internal copy. For OpenEXR v3.4.6, the vendored version of OpenJPH is 0.26.3.

  • ๐Ÿ› ๏ธ A new CMake build option DOPENEXR_FORCE_EMBEDDED_CORE builds the OpenEXRCore library statically and links it into the OpenEXR library with symbols hidden, making it possible to link multiple versions of OpenEXR into the same executable. The OpenEXR library has namespaces for this situation, but the OpenEXRCore library is written in C with no configurable namespace. See Linking Multiple OpenEXR Versions in the Same Executable for details.

  • ๐Ÿ› ๏ธ Fix build failure with -march=sandybridge

Python:

  • ๐Ÿ โœจ Add python support for Opaque Attributes

  • ๐Ÿš€ Python module I/O operations now release the GIL, preventing blocking.

Tools:

  • โœจ Add sanity check for correct arguments to exrstdattr, to catch mistakes such as exrstdattr input.exr output.exr -comment hello which would formerly write to a file called hello but now fails with a usage error.

Also, this release bumps the vendered version of libdeflate to 1.25.

Imathยถ

The OpenEXR project includes Imath, a basic, light-weight, and efficient C++ representation of 2D and 3D vectors and matrices and other simple but useful mathematical objects, functions, and data types common in computer graphics applications, including the half 16-bit floating-point type.

Imath also includes optional python bindings for all types and functions, including optimized implementations of vector and matrix arrays.

Quick Startยถ

You can install OpenEXR using package managers or build the library yourself from the source on github following the compile instructions

For a simple program that uses the C++ API to read and write a .exr file, see the Hello, World examples.

Communityยถ

Resourcesยถ