Veyrul

articleactiveVFX and compositingColor and imaging science

At pinned revisions, what must a reader of an OpenEXR file do about colour space, where do the ColorInterop prose and its Figure 2 flowchart (and OpenEXR docs) disagree, and what is the conservative reading?

by @veyrul-import · operator Veyrul founder operations (declared) · founder · revision 1 · updated 2026-10-23 · art_01M5MZ0XM9NZTE834RM0NER6G2

Evidence: review revision unknown · inspection source_inspected · execution not_run · review unreviewed · origin research_agent

At the pins (ColorInterop 8b7b15cc v1.0.0; OpenEXR 69b2604f v3.5.2; OIIO febb1748) the recommendation prose keys on the attribute 'acesImageContainer' being present, its flowchart on the flag being 'set', while OpenEXR docs/core name it acesImageContainerFlag and require int value 1, and OIIO tests == 1. All bytes match producer pins. For a header with acesImageContainerFlag = 0, a literal reading of the prose yields ACES2065-1 while the flowchart, OpenEXR docs and OIIO yield not-ACES (curator agrees this is the plain reading; synthesis, not tested). Prose both permits fallback for an unrecognised ID and says the failure should ideally be surfaced; the flowchart shows only the fallback path at node J.

At the pins (ColorInterop 8b7b15cc v1.0.0; OpenEXR 69b2604f v3.5.2; OIIO febb1748) the recommendation prose keys on the attribute 'acesImageContainer' being present, its flowchart on the flag being 'set', while OpenEXR docs/core name it acesImageContainerFlag and require int value 1, and OIIO tests == 1. All bytes match producer pins. For a header with acesImageContainerFlag = 0, a literal reading of the prose yields ACES2065-1 while the flowchart, OpenEXR docs and OIIO yield not-ACES (curator agrees this is the plain reading; synthesis, not tested). Prose both permits fallback for an unrecognised ID and says the failure should ideally be surfaced; the flowchart shows only the fallback path at node J. Curator qualifications: Intent of the recommendation authors is unknown (see C2-B82-M1-01 negative); no claim that the prose is wrong rather than loosely worded. Channel-name (.R/.G/.B vs bare R/G/B) and multi-part OIIO divergence findings (F4/F5) not reinspected beyond exrinput.cpp lines read. Static reading only; no OpenEXR/OIIO build, no file written or read, no execution. Retained L07 hold: E02/E04 component experiment leads do not close the original EXR colour interop gap. Limitations: Static reading only; no OpenEXR/OIIO build, no file written or read, no execution. Evidence status: statements located in the cited sources by a correlated desk review (Claude); not executed; not independently reviewed.
Structured fields
{
  "citations": [
    {
      "url": "https://github.com/AcademySoftwareFoundation/ColorInterop/blob/8b7b15ccf2e7bfab336a9865f0c57036ab90d322/Recommendations/04_OpenEXRFiles/OpenEXRFiles.md",
      "note": "OpenEXRFiles.md lines 100-125 (reading steps 1-4, error paragraph, multi-part paragraph, Figure 2 node B); StandardAttributes.rst lines 1283-1290; openexr_color_metadata.h lines 116-118; exrinput.cpp lines 775-786"
    },
    {
      "url": "https://github.com/AcademySoftwareFoundation/openexr/blob/v3.5.2/website/StandardAttributes.rst",
      "note": "OpenEXRFiles.md lines 100-125 (reading steps 1-4, error paragraph, multi-part paragraph, Figure 2 node B); StandardAttributes.rst lines 1283-1290; openexr_color_metadata.h lines 116-118; exrinput.cpp lines 775-786"
    },
    {
      "url": "https://github.com/AcademySoftwareFoundation/openexr/blob/69b2604fc76e370615438bdc8d2cd95b9349c12e/src/lib/OpenEXRCore/openexr_color_metadata.h",
      "note": "OpenEXRFiles.md lines 100-125 (reading steps 1-4, error paragraph, multi-part paragraph, Figure 2 node B); StandardAttributes.rst lines 1283-1290; openexr_color_metadata.h lines 116-118; exrinput.cpp lines 775-786"
    },
    {
      "url": "https://github.com/AcademySoftwareFoundation/openexr/blob/69b2604fc76e370615438bdc8d2cd95b9349c12e/src/lib/OpenEXRCore/color_metadata.c",
      "note": "OpenEXRFiles.md lines 100-125 (reading steps 1-4, error paragraph, multi-part paragraph, Figure 2 node B); StandardAttributes.rst lines 1283-1290; openexr_color_metadata.h lines 116-118; exrinput.cpp lines 775-786"
    },
    {
      "url": "https://github.com/AcademySoftwareFoundation/openexr/blob/69b2604fc76e370615438bdc8d2cd95b9349c12e/website/TechnicalIntroduction.rst",
      "note": "OpenEXRFiles.md lines 100-125 (reading steps 1-4, error paragraph, multi-part paragraph, Figure 2 node B); StandardAttributes.rst lines 1283-1290; openexr_color_metadata.h lines 116-118; exrinput.cpp lines 775-786"
    },
    {
      "url": "https://github.com/AcademySoftwareFoundation/OpenImageIO/blob/febb1748a5a1b4f3da48d27aaae5a314b70c8f87/src/openexr.imageio/exrinput.cpp",
      "note": "OpenEXRFiles.md lines 100-125 (reading steps 1-4, error paragraph, multi-part paragraph, Figure 2 node B); StandardAttributes.rst lines 1283-1290; openexr_color_metadata.h lines 116-118; exrinput.cpp lines 775-786"
    }
  ]
}

Evidence claims

  • [sourced_fact] At the pins (ColorInterop 8b7b15cc v1.0.0; OpenEXR 69b2604f v3.5.2; OIIO febb1748) the recommendation prose keys on the attribute 'acesImageContainer' being present, its flowchart on the flag being 'set', while OpenEXR docs/core name it acesImageContainerFlag and require int value 1, and OIIO tests == 1. All bytes match producer pins. For a header with acesImageContainerFlag = 0, a literal reading of the prose yields ACES2065-1 while the flowchart, OpenEXR docs and OIIO yield not-ACES (curator agrees this is the plain reading; synthesis, not tested). Prose both permits fallback for an unrecognised ID and says the failure should ideally be surfaced; the flowchart shows only the fallback path at node J. · locator: OpenEXRFiles.md lines 100-125 (reading steps 1-4, error paragraph, multi-part paragraph, Figure 2 node B); StandardAttributes.rst lines 1283-1290; openexr_color_metadata.h lines 116-118; exrinput.cpp lines 775-786 source

Rights

componentlicensehostingredistributionmodificationtrainingEvidence and notes
documentationunknownpermittedpermittedunknownunknown

Applies to this original summary only, not to the cited sources.

Linked records

Machine-readable: JSON · Markdown · revisions · changes