OpenEXR
Python bindings for the OpenEXR image file format
What it is and what it does
OpenEXR is the Python binding for the professional-grade EXR image format used throughout the motion picture and visual effects industry. It reads and writes all major EXR variants—scanline, tiled, deep, multi-part, and multi-view images—with support for 16- and 32-bit float and unsigned 32-bit integer pixel types. Pixel data is exposed directly through numpy arrays, either as a single interleaved RGBA array or as separate per-channel arrays, making it straightforward to integrate with image processing pipelines.
The package is designed for high-dynamic-range scene-linear image data with strong metadata support. It's commonly used in photorealistic rendering, texture access, image compositing, deep compositing, and digital intermediate workflows where accuracy and data longevity are critical. The underlying library prioritizes robustness, backwards compatibility, and performance.
Use it for:
- Read and write high-dynamic-range images in professional rendering and compositing pipelines.
- Store multi-channel image data with per-channel or interleaved access patterns for visual effects workflows.
- Handle deep compositing data where multiple samples per pixel represent layered depth information.
- Manage multi-part EXR files containing separate image layers or passes in a single file.
- Access and modify EXR metadata (compression, display window, screen window, custom attributes) programmatically.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Read and write OpenEXR image files with support for scanline, tiled, deep, multi-part, and multi-view formats, exposing pixel data through numpy arrays.
Yes, with a license caveat. The package is actively maintained, has no known vulnerabilities, and is the standard Python interface for EXR files in professional visual effects and rendering. However, verify the actual license terms before use—the metadata does not declare an SPDX identifier or include raw license text, so you must confirm compatibility with your project's licensing requirements.
Install
openexr on PyPI
pip
pip install openexruv
uv add openexrpoetry
poetry add openexrInstalling OpenEXR
Before you install
Medium install friction due to compiled bindings; wheels are available for Python 3.10–3.12 across macOS, Linux, and Windows platforms. Package is actively maintained with a recent release and no known vulnerabilities.
License in practice
License treatment is unclear—no SPDX identifier or raw license text is available in the metadata. Verify the actual license terms before use in proprietary or restricted contexts.
Quickstart
import numpy as np
import OpenEXR
height, width = (20, 10)
RGB = np.random.rand(height, width, 3).astype('f')
channels = {"RGB": RGB}
header = {"compression": OpenEXR.ZIP_COMPRESSION, "type": OpenEXR.scanlineimage}
with OpenEXR.File(header, channels) as outfile:
outfile.write("output.exr")
Requires numpy as a runtime dependency; compiled extension requires a compatible C++ build environment at install time.
Verify before relying
- Exact license terms and conditions (SPDX identifier not declared in metadata)
- Whether the package is suitable for volumetric or 3D scene data despite the stated design scope
Package facts
| License | not declared (unclear) |
| Python support | supports the current Python release (>=3.7) |
| Install friction | medium — platform-specific wheel |
| Runtime dependencies | 1 — numpy |
| Maintenance | actively maintained — 7 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 695,981/month — #5,307 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: openexr-3.4.14-cp310-cp310-macosx_10_15_universal2.whl; openexr-3.4.14-cp310-cp310-macosx_10_15_x86_64.whl; openexr-3.4.14-cp310-cp310-macosx_11_0_arm64.whl; openexr-3.4.14-cp310-cp310-manylinux_2_28_aarch64.whl; openexr-3.4.14-cp310-cp310-manylinux_2_28_x86_64.whl; openexr-3.4.14-cp310-cp310-musllinux_1_2_aarch64.whl; openexr-3.4.14-cp310-cp310-musllinux_1_2_x86_64.whl; openexr-3.4.14-cp310-cp310-win_amd64.whl; openexr-3.4.14-cp311-cp311-macosx_10_15_universal2.whl; openexr-3.4.14-cp311-cp311-macosx_10_15_x86_64.whl; openexr-3.4.14-cp311-cp311-macosx_11_0_arm64.whl; openexr-3.4.14-cp311-cp311-manylinux_2_28_aarch64.whl; openexr-3.4.14-cp311-cp311-manylinux_2_28_x86_64.whl; openexr-3.4.14-cp311-cp311-musllinux_1_2_aarch64.whl; openexr-3.4.14-cp311-cp311-musllinux_1_2_x86_64.whl; openexr-3.4.14-cp311-cp311-win_amd64.whl; openexr-3.4.14-cp312-cp312-macosx_10_15_universal2.whl; openexr-3.4.14-cp312-cp312-macosx_10_15_x86_64.whl; openexr-3.4.14-cp312-cp312-macosx_11_0_arm64.whl; openexr-3.4.14-cp312-cp312-manylinux_2_28_aarch64.whl
Tags
More Graphics packages
Pillow adds image processing capabilities to…
permissive · top 100 on PyPI
fonttoolsfonttools manipulates font files in multiple…
permissive · top 1,000 on PyPI
matplotlib-inlineEnables matplotlib figures to display inline…
permissive · top 1,000 on PyPI
pymupdfPyMuPDF extracts, renders, converts, and…
agpl · top 1,000 on PyPI
pypdfium2pypdfium2 is a Python binding to PDFium that…
permissive · top 1,000 on PyPI
altairAltair is a declarative Python library for…
permissive · top 1,000 on PyPI
OpenImageIOOpenImageIO reads, writes, and processes images…
permissive · top 15,000 on PyPI
FileseqParses frame ranges and file sequences using…
permissive · top 15,000 on PyPI
pylibdmtxReads and writes Data Matrix barcodes,…
permissive · top 15,000 on PyPI
psd-toolspsd-tools reads and writes Adobe Photoshop…
permissive · top 15,000 on PyPI
spatial_imagespatial-image provides an N-dimensional spatial…
permissive · top 15,000 on PyPI
texture2ddecoderDecodes compressed texture formats (BC, PVRTC,…
permissive · top 15,000 on PyPI
pyzbarDecodes one-dimensional barcodes and QR codes…
permissive · top 5,000 on PyPI
odc-loaderConstructs xarray objects from parsed…
permissive · top 15,000 on PyPI
imagesizeReads image file headers to extract dimensions,…
permissive · top 1,000 on PyPI