An EXR file has:
- Magic number (4 bytes)
- Version (4 bytes)
- Header (variable):
- Channels (RGB, alpha, depth, etc.)
- Compression type
- Metadata (camera matrix, frame number, etc.)
- Pixel data (per channel)
The header lists every channel in the file. A simple EXR has R, G, B, A. A multilayer EXR has dozens of layers, each with their own channel set.
EXR supports multiple compression types:
| Compression | Lossless? | Speed | Use case |
|---|
| None | Yes | Instant | Debugging |
| RLE | Yes | Fast | Simple graphics |
| ZIPS (single scanline) | Yes | Fast | General |
| ZIP (16 scanlines) | Yes | Slower | Better compression |
| PIZ | Yes | Fast | High-bit-depth photos |
| PXR24 | Lossy (24-bit float) | Fast | Common |
| B44 / B44A | Lossy | Fast | Beauty passes |
| DWA / DWB | Lossy | Slow | Wavelet, smallest files |
For most VFX work: ZIP or PIZ. Lossless and good compression. PXR24 is acceptable for beauty passes but lose information for compositing depth or normal data.
In Blender's compositor:
- View Layer Properties > enable render passes (Combined, Z, Normal, Vector, Object Index, etc.)
- File > Output Properties:
- File Format: OpenEXR Multilayer
- Color: RGBA
- Bit Depth: Half Float (16-bit)
- Codec: ZIP
The render produces one EXR per frame containing all enabled passes as separate layers.
For Cycles renders specifically:
View Layer:
Data:
- Combined (beauty)
- Z (depth)
- Mist (atmospheric)
- Normal (surface normal)
- Vector (motion)
- UV (texture coords)
Light:
- Diffuse Direct
- Diffuse Indirect
- Diffuse Color
- Glossy Direct
- Glossy Indirect
- Glossy Color
- Transmission Direct
- Volume Direct
Cryptomatte:
- CryptoObject
- CryptoMaterial
- CryptoAsset
Each enabled pass adds a layer to the EXR. The total file size grows with each pass; a 1080p frame with 15 passes can be 30-50 MB.
Cryptomatte is a system for storing object/material masks that survive lossy compression and antialiasing. Pre-Cryptomatte, masks had hard edges and broke easily. Cryptomatte produces clean, edge-soft masks for any object.
How it works:
- The renderer assigns each object a random hash
- The hash is encoded into special EXR channels (R0 R1 R2 A)
- In compositing, you click an object; the system identifies its hash and produces a mask
The result: artist-friendly mask creation without per-render setup. Click any object in the comp viewer to mask it.
Most modern renderers (Cycles, Arnold, Renderman, V-Ray, Octane) support Cryptomatte. Compositing tools (Nuke, Fusion, After Effects with plugin) read the format.
Nuke is the VFX industry standard for compositing. EXR handling is native:
Read node:
File: rendered.####.exr
The Read node auto-detects layers
Use Shuffle node to select specific layers
Use Cryptomatte node for object masks
Each layer can be processed separately. The beauty layer is the visible image. Depth lets you adjust depth-of-field. Normal lets you re-light. Velocity lets you add motion blur.
After Effects supports EXR via the EXtractoR plugin (free). Without the plugin, AE only sees the beauty channel.
Setup:
- Install EXtractoR (free download)
- Apply to EXR layer
- Select the channel set you want (Z-depth, Normal, etc.)
After Effects's EXR support is functional but not as fluid as Nuke. For VFX work in 2026, Nuke is the production choice; AE for motion graphics with limited compositing.
For AE render workflow, see After Effects Render Queue.
Per-frame EXR sizes for a 1080p shot with 15 render passes:
| Compression | File size | Read time |
|---|
| None | 90 MB | Instant |
| RLE | 75 MB | Fast |
| ZIPS | 35 MB | Fast |
| ZIP | 28 MB | Slower |
| PIZ | 22 MB | Fast |
| PXR24 (lossy) | 18 MB | Fast |
| DWA (lossy) | 8 MB | Slow |
For 1000 frames at ZIP compression: ~28 GB. For 4K at the same passes: ~120 GB. Storage planning matters for VFX projects.
For workflows transferring this data, see Batch Processing Files Guide.
EXR stores 16-bit half-float (or 32-bit full-float) color, well beyond what monitors display. Standard practice:
- Linear color space: store light values directly (not perceptually-mapped)
- Wide gamut: typically ACES (working space) or scene-referred linear
- Tone mapping at viewing time: the EXR is "scene state," tone mapping happens for display
For ACES integration:
Renderer outputs: Linear (scene-referred) ACES
EXR file: ACES color space
Compositing: ACES math operations
View transform: ACES sRGB or Rec.709 (for display)
Final output: tone-mapped MP4 or DPX
For ACES specifics, see ACES Color Pipeline.
For VFX shots delivered as EXR sequences, compression matters at scale:
A typical shot:
- 100 frames at 4K
- 30 passes per frame
- ZIP compression: ~280 GB
- DWA compression: ~85 GB
For final delivery, DWA's lossy compression is often acceptable. For master archive, ZIP lossless preserves all data.
| Format | Bit depth | Use case |
|---|
| OpenEXR | 16/32-bit float | VFX standard |
| DPX | 10-bit log | Cinema scanning |
| TIFF | 8/16/32-bit | Print, archival |
| HDR (Radiance) | 32-bit float | HDR photography |
| TGA | 8/16-bit | Game development |
| BMP | 8/16/24-bit | Legacy |
For VFX rendering and compositing: OpenEXR. For cinema (16mm/35mm scanning): DPX. For print: TIFF. For HDR photography: HDR or EXR.
For BMP comparison context, see BMP Format in 2026.
Layers don't show in After Effects: missing EXtractoR plugin or older AE version. Install plugin or upgrade.
Cryptomatte hash mismatch: layer ordering or channel naming differs between renderer and compositing tool. Verify with oiiotool --info file.exr.
Read times slow: ZIP compression on tens of frames per shot. Use ZIPS (single-line) or PIZ for faster reads.
Color shift in compositing: EXR is linear; viewer is applying gamma. Check view transform settings in Nuke or AE.
Frame range gaps: missing frames cause Read node errors. Use a frame substitution policy or render the missing frames.
For underlying render pipeline considerations, see After Effects Render Queue.
For VFX compositing work: EXR. For finished delivery: PNG sequence (then convert to MP4). EXR has all the data; PNG just has the final pixels.
Yes for HDR photography (multiple exposures merged). Most camera RAW formats are equivalent in dynamic range. Convert to EXR for compositing-specific workflows.
Roughly 2x. 16-bit half-float captures most useful range. 32-bit full-float is for scientific accuracy (e.g., simulations). For most VFX: 16-bit half is sufficient.
EXR sequence to MP4 via FFmpeg:
ffmpeg -framerate 24 -i frame_%04d.exr \
-c:v libx264 -preset slow -crf 18 \
-pix_fmt yuv420p \
-movflags +faststart \
output.mp4
Some EXR variants need explicit color space handling (linear to sRGB conversion).
Yes. Unreal Engine, Unity, and Blender's game engine all support EXR export from their cinematic rendering tools. Useful for cutscenes that go through additional VFX work.
JPEG XR was an alternative but never gained traction. The DWA codec in EXR is the production sweet spot for lossy compression with VFX-acceptable quality.
For VFX compositing: OpenEXR multilayer with ZIP compression for working files, DWA for delivery archives. Use Cryptomatte for object/material masks. Read in Nuke (best support) or After Effects with EXtractoR plugin. For final MP4 delivery, render EXR through compositing then encode to H.264. Our video compressor handles the final delivery encoding after EXR compositing.