Shot Delivery Preflight / ACES EXR delivery

Colour & delivery

ACES EXR delivery, explained

An "ACES EXR pull" is one of the most exacting deliverables a VFX vendor gets - and the failures are almost always the same two: wrong primaries and wrong encoding. Here is what ACES asks for, and what a streamer's ingest actually checks.

What "ACES" means on a spec sheet

ACES - the Academy Color Encoding System - is a colour-management framework, not a single file format. When a delivery spec says "ACES EXR", it almost always means the interchange encoding ACES2065-1: scene-linear image data on the AP0 primaries, wrapped in an OpenEXR file. That is the neutral, device-independent master the recipient can grade, archive and re-derive everything else from. Getting the container right (an .exr) is the easy part; getting the colour encoding right is where deliveries bounce.

AP0 vs AP1: the primaries that trip people up

ACES defines two sets of RGB primaries, and mixing them up is the number-one ACES rejection.

PrimariesEncodingRole
AP0ACES2065-1The archival / interchange master. Primaries sit outside the visible locus so the gamut covers every real colour. This is what an "ACES EXR" deliverable should be.
AP1ACEScgA working space for rendering, lighting and comp - a tighter gamut that behaves better in maths. Great to work in, wrong to deliver as "ACES2065-1".

Almost every VFX artist comps and renders in ACEScg (AP1) because it is the sane space to do maths in. But the deliverable is usually ACES2065-1 (AP0). If you export straight out of your comp package without the ACEScg-to-ACES2065-1 conversion, you have handed over an AP1 image mislabelled as AP0. It may look identical in a viewer - and it will still fail an ingest that reads the header chromaticities.

Why it has to be linear

ACES2065-1 is scene-linear: pixel values are proportional to light in the scene, with no display or log transfer curve baked in. That linearity is the whole point - it is what lets any downstream facility apply its own grade, its own output transform, and its own display rendering without fighting a curve someone else already applied. An EXR that carries a log-encoded or Rec.709-display image is simply not ACES, no matter what the filename says. Float or half-float linear is the norm; a "gamma-corrected" EXR is a contradiction for this deliverable.

What an ACES EXR pull spec enforces

Beyond the colour encoding, an ACES EXR pull typically nails down the same mechanical attributes any EXR spec does:

The common rejection causes

The tell is in the header. An EXR records its chromaticities, compression, pixel type and channels in the first few kilobytes - you do not need to decode a pixel to know whether a file is genuinely ACES AP0 linear at the right depth. Shot Delivery Preflight reads that header across a whole delivery folder and flags any EXR whose primaries, compression or bit depth fall outside your ACES spec's allow-list. ACES is a trademark of the Academy of Motion Picture Arts and Sciences; no affiliation.

FAQ

Is ACES delivery AP0 or AP1?

The archival/interchange deliverable - ACES2065-1 - is AP0: the wide, spectral-locus-covering primaries the whole system is anchored to. AP1 (ACEScg) is a working space for rendering and comp. If the spec says "ACES" or "ACES2065-1 EXR", it means AP0 linear, and an ACEScg render dropped in unconverted is the classic rejection.

Why does ACES delivery have to be linear?

ACES2065-1 is scene-linear by definition - values are proportional to light, with no display transfer curve baked in. That is what makes it a neutral master any downstream pipeline can grade. An EXR carrying a log or display-encoded image is not ACES, even if the primaries are right.

How can a preflight tell if an EXR is really ACES AP0?

The EXR header records chromaticities and, often, an ACES-conformant flag. Reading those attributes from the first few kilobytes lets a header-level check confirm the primaries match AP0 and flag a file that is merely labelled ACES. Shot Delivery Preflight reads that header and checks it against the spec.

Run the check before the client does

Shot Delivery Preflight batch-checks EXR headers, ACES primaries, naming and QuickTimes against the delivery spec in your browser - headers only, nothing uploads. 14-day free trial.

Try the example delivery →

Keep reading