Implement per-shot LUT in rv package

I’ve created a RV package, where I’ve set metadata such as project name, sequence, shot etc. on source node to identify them. I want to apply per-shot LUT based on the metadata that I’ve set.

What I’ve tried…
I’ve replaced RVNode in RVLookPipelineGroup with OCIOLook Node and have set the following properties.
ocio.active - 1
ocio.function – ‘look’
ocio.inColorSpace – ocio.Constants.ROLE_SCENE_LINEAR
ocio.ocio_context.SHOT – <shot name>

But it doesn’t seem to have any effect. What am I missing?

2 Likes

Hey Ashish,

Thank you for messaging us!

If you take a look at the Starting With OCIO guide, there’s a starter script called rv_ocio_setup_sample.py. If you download it, you can see how to set context per-node.

For example, setting up the Look pipe group:

    elif (nodeType == "RVLookPipelineGroup"):
        # If our config has a Look named shot_specific_look and uses the
        # environment/context variable "$SHOT" to locate any required
        # files on disk, then this is what that would likely look like
        result = [
            {"nodeType"   : "OCIOLook",
             "context"    : {"SHOT" : os.environ.get("SHOT","def123")}
             "properties" : {
                 "ocio.function"     : "look",
                 "ocio.inColorSpace" : OCIO.Constants.ROLE_SCENE_LINEAR,
                 "ocio_look.look"    : "shot_specific_look"}}]

Note that context here is grabbed from the environment variable that is set:

"context"    : {"SHOT" : os.environ.get("SHOT","def123")}

However, instead of the environment variable, you can set up a function to parse your metadata and set the context.

Hope this makes sense!

Thanks,
Alexa

2 Likes

Thanks for replying alexaz. Can you please tell me what is ‘shot_specific_look’.
What I understand that looks are also defined in the OCIO configuration. But our project configuration has no looks defined. So what should I set ‘ocio_look.look’ to?

From my limited understanding of OCIO, I think some luts are applied in certain process space different than reference space. If that’s the case…
Would OCIO.Constants.ROLE_SCENE_LINEAR work fine?

1 Like

Sure thing! shot_specific_look is the look name that you author in your OCIO config. For example:

looks:
- !<Look>
name: shot_specific_look
process_space: linear
transform: !<FileTransform> {src: "${PROD_ROOT}/common/lut/${SHOT}.cube", interpolation: linear}

If your project doesn’t have looks defined, then what are you defining per-shot? Do you have one OCIO config for the entire show for a specific colorspace? You can take a look at the config blurb I’ve posted above that shows how to set up a look to point to a per-shot cube. As a general rule of thumb, a look will have artistic color information rather than per-display color definitions. If you need to define colorspace for a display, you’ll need to set up an OCIODisplay node and author an OCIO config to feed into it.

2 Likes

This sounds similar to what I’m looking for, I need RV to apply a look from a cdl file relative to the media path of the EXR it’s currently playing. How do I get RV to get the filepath of the currently loaded media and then modify that path to find the cdl and then use that cdl in the look pipeline?