[ocs-dev] Re: Foundry Questions

Jeremy Selan <jeremy...@...>

On May 5, 2:30 pm, brunobignose <bruno.j....@...>

What is you internal representation?
 - we know you want to present this as a black box but we would like
to know some technical details
My discussion of the internals as a 'black' box are meant to be from
the perspective of a simple client application, not from folks
interested in color management or to 'authoring' apps. (Authoring apps
being applications that can generate / introspect into color

 - what are the scope of the manipulations, are they all 3D ? Mixed 1D and 3D?
The internal transformations currently include 1D luts / (normal + log
allocation), matrix operations, gamma, 3D lut. They can be arbitrarily
chained and used in the forward or inverse directions (with the
exception of 3d luts, where it is left to use the user to provide an
inverse). We also are adding a group transform, which will be useful
in the API.

 - how do you represent
       - transforms
       - display devices
       - looks
Please see the file config_v0.ocs, you will see examples of all 3.

ColorSpaces are ordered lists of atomic transforms (1d luts, mtx,
gamma, 3d lut, etc). They can be used in any order as many times as
DisplayDevices are just labels that define additional blocks of
"Looks" are currently a bit in flux. If a look is constant across a
show (even if there are multiple looks), it is typically rolled into
the DisplayDevice block as this is more convenient. Examples of this
would be show-wide 'Warm Look', or "DI Gamut check', etc. If a look
is shot-varying we can use either a single 3dlut or asc color
correction. (However, before release i expect this will get more
general and allow for an arbitrary transform type).

What third party LUTs do you manage?
Currently the list is small, just some internal formats and .3dl
files. But, we hope to support all commercial ascii lut formats
before 1.0

 - any open source ones?
What open source lut formats are you referring to?

 - what happens if a user doesn't have a license for a proprietary lut
It is currently not obvious how we will add support for proprietary
(encrypted) lut formats. Example, truelight. Some companies allow for
the export of ascii luts, but others dont. One workaround would be to
provide a lut plugin interface, so 3rd party color management
companies could write OCS plugins that do the appropriate licence
checks before running a lut transform. A plugin API is probably
outside the scope of a 1.0 release, but could be added to 1.1 without
effecting binary compatibility.

How does one go about generating...
 - LUTs?
Any ways you want. This is not a problem we're looking to solve for
1.0, and is treading deep into philosophical / 'secret sauce' issues.
Internally at SPI, we have a bunch of raw measurement data (such as
film stock profiles, camera exposure sweeps, etc) that guide this
practice. You could make a whole class on this, I'm sure. There are
also a bunch of different philosophies on how this should be done,
many of which are equally valid. My gut feel is that if this project
succeeds, we'll end up with a whole mailing list devoted to this

Please read the color space comments in this file,

it provides a bit more info.

 - display profiles?
Same as above.

 - looks?
These are typically delivered by DI houses, and are director / DP
guided. If a user is not provided a look by their client, they
probably dont have to worry about one.

 - anything else in there...
Remember that we'll provide a few good default configurations, but I
expect all major facilities to define their own. And, we shouldnt
dictate how they do this. The default configurations wont suck
either, they're really what we use as the starting point for films.

Are you looking at making it extensible?
Not sure what you mean here. Anyone can add or create a custom
colorspace configuration. Anyone can take one of the posted
configurations and add new color spaces or devices to it. And the
whole library will be open source so the internal details wont be
secret. So,... "yes?"

How does this all play with ICC proiles?
We hope to add the ability to export ICC profiles, for lut preview in
tools such as photoshop. Other than that, they are not closely
related. We currently have no intent to add support for reading ICC

What level of thread safety is there?
The library is fully thread safe. (and efficient in a multi-thread

I am currently adding the color configuration mutable API, and am
grappling with a few corner issues such as ' what if one thread
manipulates the color configuration while another is processing
pixels?' but this is a mental correctness issue, not a crashing issue.

 - how guaranteed is that for the general colour transforms?
Color configurations specify whether each operation is invertible or
not. An 'auto' mode is provided for types that are easy to perfectly
invert, but we dont handle 'non-obvious' inversion cases. (i.e., 3d

Note that our 1D lut processing is really pretty clever (clever in a
good way), and guaranteed to have perfect invertibility. For
example, you can specify a 1d lut that goes from a low dynamic range
allocation to an arbitrary high-dynamic range allocation, and still
get perfect invertibility. We also have a validation script that
prints out info about the current color configuration, this has a step
thats walks through each colorspace and validates perfect
invertibility (flagging otherwise).

 - can you flag invertible transforms in any way?

Distributing colour management XML and LUTS
 - have you thought of how to pack XML + LUTS + whatever into a single
file for distribution?
Yes, we're starting to think about it. Internally a directory works
great but we're open to a single file as well. zip or tgz sound
great, we have no preference. I'd probably do a timing check and pick
whichever is faster to decompress live.

 - zip/tgz/voodoo?

OpenGL fragment shaders
 - how do we/you manage any LUTs that need to go along with the
shaders you create?
Only a single 3d lut is needed client side for the shader. The client
is responsible for uploading to the card as necessary, though we
provide a cacheid (cheap to compute) so it can be recomputed /
uploaded as infrequently as possible.

 - have you thought about OpenCL code generation?
Not yet. Are you interested in opengl?

 - we want to be able to supply our own names for objects in generated
code so as to avoid name collision, eg: the function name,
Yes, this is already part of the base api. please see the header.

Note that sidefx has already pointed out that we're going to have to
have finer granularity in our specification of glsl profiles (better
glsl versions), this has yet to be added but will soon.

On going support
 - who is responsible for support?
 - how do we manage folding in fixes?
It's an open source project, so at a minimum I'm responsible for
support. But my hope is that before 1.0 we develop a critical mass
community of those interested who can all work on this 'as developer
equals'. (multiple people having 'root' checkin privileges). I always
get suspicious of open source projects where one person approves all
checkins. My hope is that a few other reputable color folks will step
up and we can all be responsible for validating new code checkins,
etc. Of course, i'll be reading every line of code, but having more
folks on board helps prevent 'hit by bus' scenarios. (or more likely,
'caught in a hard production crunch-time' scenario).

Support on the artist / usage side will be open to a much broader
community, just as nuke-users is.

Are you shipping it with any vanilla XFMs that you have created at
 - and not just log/lin
 - device profiles?
What's an XFM? A configuration I presume? (im now calling them .ocs

Yes, we're gonna ship all input device profiles we've got, not just
log/lin. The only camera we've never characterized is RED, so we'd
have to leave that to someone else. (Or could adapt the nuke one for
use in our environment).

For device profiles the only ones we ever use are srgb, r709, and p3
dlp. These will be included.


Bruno NIcoletti

Join ocio-dev@lists.aswf.io to automatically receive all group messages.