Defining an ACES OCIO environment variable in macOS

I am currently in the process of evaluating the industry standard Academy Colour Encoding System (ACES) workflow on a number of projects. ACES' purpose is to ensure consistent and predictable cross-application and cross-platform colour management.

Although designed with much larger projects in mind, I've found ACES to be very useful even for an independent artist. On smaller tasks I often find myself bouncing between multiple applications installed across macOS, iPadOS, Linux and Windows. Confidence in a reliable colour interchange system goes a long way.

Three coloured spheres inside a Cornell Box, rendered using the Academy Colour Encoding System.

One aspect of the setup that I'm not yet totally comfortable with, is the concept of a single source of truth for colour within an operating system. ACES is built around OpenColorIO (OCIO) and OCIO allows for a global environment variable to be specified that apps can check to locate the current colour configuration. A single destination where all of colour is defined can be useful, especially if you are working on a large long-term project, but it's somewhat heavy-handed if you just need to use ACES for a specific piece of work.

No worries though, OCIO authors have your back here - their guide suggests that while applications can read this global variable "most applications also provide a menu option to select a different OCIO configuration after launch."

Perfect, unless you use Houdini, whose developers have other ideas:

Set the OCIO environment variable to the file path of an OpenColorIO configuration file. The OCIO, OCIO_ACTIVE_VIEWS, and OCIO_ACTIVE_DISPLAYS environment variables are not Houdini environment variables. They must be set in the shell or desktop environment before launching Houdini.

Attempting to point Houdini in the direction of a configuration file from within the user interface doesn't work, and while setting an environment variable on Linux and Windows is relatively straightforward, achieving the same on macOS is trickier.

I couldn't find a guide, so I've covered the process of creating a custom launch agent below.

Permission to launch

To create a new launch agent, open the ~/Library/LaunchAgents directory and create new file named ocio.plist. Copy the following XML into the new file.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
<plist version="1.0">

Within the file replace the text that reads /path/to/your/config.ocio with the path to your chosen ACES OpenColorIO configuration file. Save the ocio.plist file.

Next enter the following into the Terminal app to activate the launch agent.

launchctl load ~/Library/LaunchAgents/ocio.plist

There should be no need to reboot the system, macOS is now OCIO aware and Houdini should happily pick up the configuration.

Although I see why the Houdini developers landed on this solution, it makes switching between various versions of ACES (and there are plenty) or opting-out of the system more difficult than it needs to be. Houdini's target market is large VFX studios who likely value stability and consistency over everything else, so that likely factored into the decision. It would be lovely to see this addressed in a future update.