Common Operations

Node Graphs

Create a node

import GafferScene
node = GafferScene.Sphere()
root.addChild( node )

Rename a node

node.setName( "newName" )

Get a node or plug name

name = node.getName()

Get a node or plug name relative to an ancestor

name = node["plugName"].relativeName( root )

Get a plug value

value = node["plugName"].getValue()

Set a plug value

node["plugName"].setValue( value )

Make a connection

destinationNode["destinationPlugName"].setInput( sourceNode["sourcePlugName"] )

Break a connection

node["plugName"].setInput( None )

Get a plug’s input connection

input = node["plugName"].getInput()

Get a plug’s output connections

outputs = node["plugName"].outputs()

Get all child plugs from a node

plugs = node.children( Gaffer.Plug )

Get the node from a plug

node = plug.node()

Get the parent of a node or plug

parent = node.parent()

Get a node’s ancestor of type Gaffer.ScriptNode

script = node.ancestor( Gaffer.ScriptNode )

Get a node by name

node = root["nodeName"]

Loop over all nodes

for node in root.children( Gaffer.Node ) :

Loop over child nodes of type GafferScene.Sphere

for node in GafferScene.Sphere.Range( root ) :

Loop over all descendant nodes of type Gaffer.Box

for node in Gaffer.Box.RecursiveRange( root ) :

Get the current filename


Serialize the node graph to file

root.serialiseToFile( "/path/to/file.gfr" )

Load a script

root["fileName"].setValue( "/path/to/file.gfr" )

Export a reference

root["boxToExport"].exportForReference( "/path/to/file.grf" )

Load a reference

referenceNode = Gaffer.Reference()
root.addChild( referenceNode )
referenceNode.load( "/path/to/file.grf" )

Query a script variable


Get selected nodes


Select a node

root.selection().add( root["nodeName"] )

Get the frame range

start = root["frameRange"]["start"].getValue()
end = root["frameRange"]["end"].getValue()

Set the current frame

root.context().setFrame( frame )

Get the playback range

GafferUI.Playback.acquire( root.context() ).getFrameRange()

Set the playback range

GafferUI.Playback.acquire( root.context() ).setFrameRange( start, end )

Set node as numeric bookmark 1

Gaffer.MetadataAlgo.setNumericBookmark( root, 1, root["nodeName"] )

Get the node set as numeric bookmark 1

Gaffer.MetadataAlgo.getNumericBookmark( root, 1 )

Set a node as the focus node

root.setFocus( root["nodeName"] )

Get the currently focussed node



Register a value for a plug/node

Gaffer.Metadata.registerValue( plug, "name", value )
Gaffer.Metadata.registerValue( node, "name", value )

Query a value for a plug/node

Gaffer.Metadata.value( plug, "name" )
Gaffer.Metadata.value( node, "name" )

Find plugs/nodes with specific metadata

Gaffer.Metadata.plugsWithMetadata( root, "name" )
Gaffer.Metadata.nodesWithMetadata( root, "name" )


Get an option

g = node["out"]["globals"].getValue()
o = g["option:render:camera"].value

Get an object at a location

o = node["out"].object( "/path/to/location" )

Get the local transform at a location

matrix = node["out"].transform( "/path/to/location" )

Get the full (world) transform at a location

node["out"].fullTransform( "/path/to/location" )

Get the local bounding box of a location

bound = node["out"].bound( "/path/to/location" )

Get the world space bounding box of a location

bound = node["out"].bound( "/path/to/location" ) * node["out"].fullTransform( "/path/to/location" )

Get the local attributes of a location

attributes = node["out"].attributes( "/path/to/location" )
attribute = attributes["name"].value

Get the full (inherited + local) attributes of a location

attributes = node["out"].fullAttributes( "/path/to/location" )
attribute = attributes["name"].value

Recurse through the scene hierarchy

def visit( scene, path ) :

	for childName in scene.childNames( path ) :
		visit( scene, path.rstrip( "/" ) + "/" + str( childName ) )

visit( node["out"], "/" )