Graph State Variables
Graph State Variables can be used to control which nodes in the node graph contribute to scene graph processing, based on the values of user-set variables. These values can be set either at the whole project level or by nodes in the node graph.
Graph State Variables have been designed to make it easier to set up a single Katana project, for instance to control the lighting for a whole sequence, or to perform edits and overrides only active in the node graph, depending on which output is currently being rendered. You can define your own variables and they can be used in many different ways.
The key concept is that Graph State Variables can be set either at a global, whole-project level, such as a variable for the shot number in a sequence that is being worked on, or at a local level using VariableSet nodes, such as for a variable that says which render pass is being evaluated.
You can then use VariableSwitch or VariableEnabledGroup nodes to control which nodes are active or not, based on the values of Graph State Variables. For instance, you could have a VariableSwitch node with different inputs based on the shot number, so which input is read depends on which shot in a sequence you are working on. Another example is that you could have an override for some attributes in a VariableEnabledGroup node, based on which render pass is being evaluated, so the override is only applied for specific output passes.
The essential idea is that Graph State Variables allow you to define the context in which the scene is currently being evaluated, and have nodes whose behavior can be changed depending on that context. You can also read the values of Graph State Variables in OpScripts or your own Op plug-ins in order to modify their behavior, based on the values of the Graph State Variables.
This video demonstrates how Graph State Variables can be used.