{"library":"openexr","title":"OpenEXR Python Bindings","description":"The `openexr` library provides official Python bindings for the OpenEXR image file format, a high-dynamic-range (HDR) image file format used in computer graphics and visual effects. It allows Python applications to read, write, and manipulate EXR files, including multi-part, multi-channel, and deep images. The library is actively maintained with frequent patch releases addressing security vulnerabilities and bug fixes, typically following the major C++ OpenEXR library releases.","language":"python","status":"active","last_verified":"Sat May 16","install":{"commands":["pip install openexr"],"cli":null},"imports":["import openexr","import Imath"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import openexr\nimport Imath\nimport numpy as np\n\n# Define image properties\nwidth = 256\nheight = 256\nhalf_channels = {'R': Imath.ChannelList().add('R', Imath.PixelType(Imath.PixelType.HALF)),\n                 'G': Imath.ChannelList().add('G', Imath.PixelType(Imath.PixelType.HALF)),\n                 'B': Imath.ChannelList().add('B', Imath.PixelType(Imath.PixelType.HALF))}\n\n# Create some dummy data (e.g., a simple gradient)\nx = np.linspace(0, 1, width)\ny = np.linspace(0, 1, height)\nR = np.outer(y, x).astype(np.float16)\nG = np.outer(y, 1-x).astype(np.float16)\nB = np.outer(1-y, x).astype(np.float16)\n\n# Write an EXR file\noutput_filename = 'example.exr'\nheader = openexr.Header(width, height)\n# Ensure correct channel types and data window if writing half data\n# header['channels'] = half_channels \n# The above is for explicit channel list. For simplicity, let's use default half for RGB.\n\nfile_out = openexr.OutputFile(output_filename, header)\nfile_out.writePixels({'R': R.tobytes(), 'G': G.tobytes(), 'B': B.tobytes()})\nfile_out.close()\nprint(f\"Written {output_filename}\")\n\n# Read the EXR file\nfile_in = openexr.InputFile(output_filename)\nheader_in = file_in.header()\ndata_window = header_in['dataWindow']\ndw = Imath.Box2i(data_window)\nsize = (dw.max.x - dw.min.x + 1, dw.max.y - dw.min.y + 1)\n\n# Read 'R' channel data as bytes and convert to numpy array\nr_channel_bytes = file_in.channel('R', Imath.PixelType(Imath.PixelType.HALF))\nr_data = np.frombuffer(r_channel_bytes, dtype=np.float16).reshape(size[1], size[0])\n\nprint(f\"Read R channel data shape: {r_data.shape}\")\nprint(f\"First few R values: {r_data.flatten()[:5]}\")\nfile_in.close()\n","lang":"python","description":"This quickstart demonstrates writing a simple RGB image with `HALF` precision to an EXR file and then reading the red channel back. It utilizes `numpy` for data manipulation, which is standard practice when working with image pixel data in `openexr`. Ensure you have `numpy` and `imath` installed (`pip install numpy imath`).","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":"3.4.11","pypi_latest":"3.4.11","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3.7,"avg_import_s":null,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"openexr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"97.0M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"openexr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":3.7,"import_time_s":null,"mem_mb":null,"disk_size":"89M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"openexr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"104.5M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"openexr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":3.5,"import_time_s":null,"mem_mb":null,"disk_size":"96M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"openexr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"92.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"openexr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":3.4,"import_time_s":null,"mem_mb":null,"disk_size":"84M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"openexr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"92.5M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"openexr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":3.6,"import_time_s":null,"mem_mb":null,"disk_size":"84M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"openexr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"104.8M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"openexr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":4.4,"import_time_s":null,"mem_mb":null,"disk_size":"99M"}]}}