FarmAPI¶
Introduction to Katana’s FarmAPI¶
The FarmAPI Python package allows developers to integrate render farms with
Katana. This allows artists to start renders on a render farm right from within
Katana’s user interface.
The API supports the following features:
Custom Farm Menu Commands: You can define custom render farm-related menu commands for the Util main menu and the context menu of nodes that support render farms, such as Render nodes.
Custom Farm Settings: You can define and retrieve custom render farm-related settings in the form of parameters on Render nodes.
Validity Checks: You can check whether a project contains nodes which will generate render passes which are valid and fulfill certain criteria as determined by specific flags.
Render Node Dependencies: You can retrieve information about dependencies between Render nodes, which can help in the creation of custom render farm submission tools.
Creating Farm Files: You can create
Farm filesthat can then be processed externally to Katana in order to create jobs on a render farm. A Generate Farm Output UI dialog for configuring the creation of such a Farm file is provided as well.
✨ New in Katana 4: Render Farm Plug-ins: The FarmAPI Python
package now provides a base class for a new type of plug-in that allows
developers to even more closely integrate a specific render farm system with
Katana. For every render farm plug-in that is registered with Katana, menu
commands for starting renders on the respective render farm are added to the
context menu of any 3D node in the Node Graph tab (not just Render
nodes).
✨ New in Katana 4: Katana Queue: Katana now ships with a
minimal render farm implementation, named Katana Queue, which is integrated
with Katana using a custom render farm plug-in. The Katana Queue system uses
Agent processes on the local workstation to host renderboot processes for
performing renders. It is also possible to run these Agents on other
workstations that are accessible on the network (Remote Agents), and to add
them to the pool of Agents that are managed by the local Katana Queue, thus
boosting rendering capabilities and increasing productivity even further.
FarmAPI Example Code¶
Katana ships with the following Python scripts as source, which demonstrate the
use of various parts of the FarmAPI:
Topic / Tool |
Python Source File |
|---|---|
Generating Farm XML Files |
|
Katana Queue farm plug-in |
|
Katana Queue tab |
|
Start Multiple Renders shelf item |
|
Launch Remote Agents shelf item |
|
|
Note
The OpenCue farm plug-in is provided as a reference example of how to
integrate OpenCue, an open source render management system, with Katana.
For more information on how to set up an OpenCue deployment, please consult the OpenCue documentation.
FarmAPI Reference Documentation¶
FarmAPI Python Package¶
Python package that allows developers to integrate render farms with Katana.
FarmAPI Constants¶
- FarmAPI.NODES_ALL¶
Value that indicates that farm operations should act on all Render nodes.
- FarmAPI.NODES_SELECTED¶
Value that indicates that farm operations should act on selected Render nodes only.
- FarmAPI.NODES_SINGLE¶
Value that indicates that farm operations should act on a single Render node only.
Custom Farm Settings¶
- FarmAPI.AddFarmSettingNumber(name='', defaultValue=0, hints=None)¶
Adds a custom farm setting (node parameter) of type number to the Render node and other applicable nodes (RenderScript, ImageWrite).
- Parameters:
name (
str) – The name of the new parameter.defaultValue (
int) – The default value for the parameter.hints (
dictorNone) – UI hints that will be assigned to the parameter.
- FarmAPI.AddFarmSettingNumberArray(name='', size=1, hints=None)¶
Adds a custom farm setting (node parameter) of type number array to the Render node and other applicable nodes (RenderScript, ImageWrite).
- Parameters:
name (
str) – The name of the new parameter.size (
int) – The number of elements to use for the number array parameter.hints (
dictorNone) – UI hints that will be assigned to the parameter.
- FarmAPI.AddFarmSettingString(name='', defaultValue='', hints=None)¶
Adds a custom farm setting (node parameter) of type string to the Render node and other applicable nodes (RenderScript, ImageWrite).
- Parameters:
name (
str) – The name of the new parameter.defaultValue (
str) – The default value for the parameter.hints (
dictorNone) – UI hints that will be assigned to the parameter.
- FarmAPI.AddFarmSettingStringArray(name='', size=1, hints=None)¶
Adds a custom farm setting (node parameter) of type string array to the Render node and other applicable nodes (RenderScript, ImageWrite).
- Parameters:
name (
str) – The name of the new parameter.size (
int) – The number of elements to use for the string array parameter.hints (
dictorNone) – UI hints that will be assigned to the parameter.
- FarmAPI.GetAddedFarmSettings()¶
- Return type:
listofFarmSetting- Returns:
A list of farm settings that were added via the functions above.
- FarmAPI.ExtractFarmSettingsFromNode(node)¶
- Return type:
dict- Parameters:
node (
NodegraphAPI.Node) – The node from which to extract the farm settings.- Returns:
A dictionary with names and values of farm settings that are stored on the given node.
- class FarmAPI.FarmSetting(name='', farmType='string', defaultValue=None, size=0, hints=None)¶
Bases:
objectClass representing a custom farm setting.
- Since:
Katana 1.0v1
- NUMBER = 'number'¶
- NUMBERARRAY = 'numberarray'¶
- QUALIFIER = 'farmSettings'¶
- STRING = 'string'¶
- STRINGARRAY = 'stringarray'¶
- VALID_TYPES = ('string', 'number', 'stringarray', 'numberarray')¶
- __init__(name='', farmType='string', defaultValue=None, size=0, hints=None)¶
Initializes an instance of the class.
- Parameters:
name (
str) – The name of the farm setting.farmType (
str) – The name of the type of the farm setting (FarmSetting.STRING,FarmSetting.NUMBER,FarmSetting.STRINGARRAY, orFarmSetting.NUMBERARRAY).defaultValue (
strorintorfloatorlistorNone) – The default value of the farm setting.size (
int) – The number of elements in the farm setting, for array settings.hints (
dictorNone) – A dictionary of UI hints for the farm setting, orNoneif no UI hints are provided.
- Raises:
Exception – If the given
farmTypeis not one of theFarmSetting.VALID_TYPES.
- getHints()¶
- Return type:
dictorNone- Returns:
A dictionary of UI hints for the farm setting, or
Noneif no UI hints are provided.
- getName()¶
- Return type:
str- Returns:
The name of the farm setting.
- getQualifiedName()¶
- Return type:
str- Returns:
The name of the farm setting with a
FarmSetting.QUALIFIERprefix.- Since:
Katana 4.0v1
- getSize()¶
- Return type:
int- Returns:
The number of elements in the farm setting, for array settings.
- getType()¶
- Return type:
str- Returns:
The name of the type of the farm setting (
FarmSetting.STRING,FarmSetting.NUMBER,FarmSetting.STRINGARRAY, orFarmSetting.NUMBERARRAY).
- getValue()¶
- Return type:
strorintorfloatorlistorNone- Returns:
The default value of the farm setting.
Validity Checks¶
- FarmAPI.IsSceneValid(nodeScope=None, allowUnsavedChanges=False, allowCapitalLetters=True, allowDigits=True, unwantedSymbols=[])¶
Returns a flag indicating whether or not the project contains nodes which will generate render passes which are valid and fulfill the criteria determined by the given flags. The warning and error message lists are populated if the validation fails. These messages are accessible using:
- Return type:
bool- Parameters:
nodeScope (
str) – Can be a single node, the selected nodes, or all nodes (FarmAPI.NODES_SINGLE,FarmAPI.NODES_SELECTED, orFarmAPI.NODES_ALL).allowUnsavedChanges (
bool) – Determines if a dirty project is valid.allowCapitalLetters (
bool) – Determines if a Render node’s pass name is allowed to contain capital letters.allowDigits (
bool) – Determines if a Render node’s pass name is allowed to contain numeric characters.unwantedSymbols (
listofstr) – Specifies a list of characters that are not allowed in the Render node’s pass name.
- Returns:
Trueif the project is valid, based on the nodes in the given scope, and the additional given criteria, otherwiseFalse.
- FarmAPI.AddWarningMessage(message)¶
Adds a custom warning message to the list of warning messages.
- Parameters:
message (
str) – The warning message to add.
- FarmAPI.AddErrorMessage(message)¶
Adds a custom error message to the list of error messages.
- Parameters:
message (
str) – The error message to add.
- FarmAPI.GetWarningMessages()¶
- Return type:
listofstr- Returns:
A list of any warning messages which have been added since
Initialise()was called, or whileIsSceneValid()was run.
- FarmAPI.GetErrorMessages()¶
- Return type:
listofstr- Returns:
A list of any error messages which have been added since
Initialise()was called, or whileIsSceneValid()was run.
Render Node Dependencies¶
- FarmAPI.GetSortedDependencies(nodeOrNodes=None, includeBypassed=False)¶
Returns a list of the render passes and their dependencies based on a list of input nodes.
- Return type:
listofNodeRenderSettings- Parameters:
nodeOrNodes (
NodegraphAPI.NodeorlistofNodegraphAPI.NodeorNone) – The input node or nodes which define the search scope for available render passes. If a node list is not supplied then a default list is used based on the current node scope.includeBypassed (
bool) – An optional flag that controls whether to include nodes that are bypassed.
- Returns:
A list of
NodeRenderSettingsinstances containing information about a node and its dependencies.- See:
- Raises:
ValueError – If the given
nodeOrNodesargument is not an instance ofNodegraphAPI.Node, not a sequence, and notNone.- Since:
Katana 2.1v1
- FarmAPI.GetSortedDependencyList(nodeList=None, syncAllOutputPorts=False, includeInternalDeps=False)¶
- Deprecated:
This function is deprecated. Please use
GetSortedDependencies()instead.
- class FarmAPI.NodeRenderSettings(dependencyListEntry=None)¶
Bases:
objectA class representing render settings for a node. Instances of this class provide the following instance variables:
nodeName- The name of the node.isEnabled- A flag indicating whether the node should be rendered.dependencies- A list of other nodes which this node’s render depends upon.renderType- The type of the render - either'3D'or'2D'.renderService- The name of the service used to render this node -'prman','arnold', etc.activeViews- A string containing the names of the active views to be rendered. Only applicable when rendering from a 2D ImageWrite node. If all views have been selected, this string will be'__all__'.passName- The name of the render pass to be rendered.outputs- A list of dictionaries containing information about this node’s outputs. Each dictionary has the following keys:'name' 'enabled' 'outputLocation' 'tempRenderLocation'
renderScriptSettings- ARenderScriptSettingsinstance containing information about a render script job.frameRange- A tuple containing two frame numbers giving the frame range to be rendered.dependAll- A flag indicating whether all frames of dependencies should be rendered before this node is rendered.renderInternalDependencies- A flag indicating whether internal dependencies of this node should be rendered in the same farm process as this node.memory- A string specifying the memory requirements for the render. Units should be specified as'm'for megabyte or'g'for gigabyte, e.g.'512m'or'2g'. Only applicable when rendering from a 2D ImageWrite node.customFarmSettings- A dictionary containing any other farm settings which were found in the dependency list entry.
- Since:
Katana 2.1v1
- __init__(dependencyListEntry=None)¶
Initializes an instance of the class.
- Parameters:
dependencyListEntry (
dictorNone) – A dictionary containing information about the render dependencies for a node, orNone.
- getNode()¶
- Return type:
NodegraphAPI.NodeorNone- Returns:
The node corresponding to this node render settings instance, or
Noneif no such node could be found.- Raises:
ValueError – If no node name has been set in this instance.
RuntimeError – If no node with the stored node name was found.
- getNodeType()¶
- Return type:
str- Returns:
The node type identified by the dependency list entry, e.g.
'Render'or'RenderScript'.- Raises:
ValueError – If no node name has been set in this instance.
RuntimeError – If no node with the stored node name was found.
- class FarmAPI.RenderScriptSettings(settings={})¶
Bases:
objectClass representing settings for a render script job.
- Since:
Katana 2.1v1
- __init__(settings={})¶
Initializes an instance of the class based on the given dictionary of render script settings. The command, arguments and keyword arguments for the render script job are obtained respectively from the
'outlineFunc','outlineArgs', and'extraArgs'entries in the given dictionary.- Parameters:
settings (
dict) – A dictionary containing render script settings.
- appendXML(xmlElement)¶
Appends a
<renderScriptCommand>element to the given XML element containing the settings for this instance.- Parameters:
xmlElement (
xml.etree.ElementTree.Element) – the parent XML element to which the<renderScriptCommand>element should be added.
Creating Farm Files¶
- FarmAPI.WriteFarmFile(fileName, farmString)¶
Writes farm contents into a file and creates necessary directories if they do not exist.
- Parameters:
fileName – The name and path of the file to create.
farmString – The string contents to write to the file.
- FarmAPI.OpenDefaultDialog(callback=None, dialogTitle='', fileExtension='')¶
Opens a basic dialog which can be used to specify a target filename and to configure the generic farm settings.
- Parameters:
callback (
callableorNone) – A function that is executed when the confirmation button in the dialog has been pressed. If no callback is given, then a default action of generating an XML file is executed.dialogTitle (
str) – The title of the dialog and the label of the confirmation button.fileExtension (
str) – The accepted file extension for the dialog’s file browser.
FarmAPI Helper Functions¶
- FarmAPI.Initialise(clickedNode=None)¶
Internal helper function that initializes the
FarmAPImodule before performing a render farm operation.Is called automatically
before calling a callback of a custom farm menu command that was chosen from Katana’s Util main menu,
before executing commands from the Render Farm section of the context menu of Render nodes in the Node Graph tab, and
before opening the dialog for creating a Farm file.
Clears internal module-global variables, such as the lists of warning and error messages, and initializes the nodes that may be affected by render farm commmands.
- Parameters:
clickedNode (
NodegraphAPI.Node) – The Render node for which a context menu was opened.
- FarmAPI.GetNodeProcessType()¶
Returns whether the current node scope is set to clicked only, selected nodes, or all nodes (
FarmAPI.NODES_SINGLE,FarmAPI.NODES_SELECTED, orFarmAPI.NODES_ALL).- Return type:
str- Returns:
The current node-scope.
- FarmAPI.GetClickedNode()¶
- Return type:
- Returns:
The node for which a context menu was opened, as passed to the
Initialise()function.
- FarmAPI.GetSelectedNodes()¶
- Return type:
listofNodegraphAPI.Node- Returns:
The nodes that were selected when the
Initialise()function was called.
- FarmAPI.GetCurrentNode()¶
- Return type:
- Returns:
The node for which a context menu was opened, as passed to the
Initialise()function, or the first of the nodes that were selected when theInitialise()function was called.
- FarmAPI.GetNodeList()¶
Returns nodes based on the current node scope. If a node was clicked then it is returned. Alternatively, the selected nodes and their children are found (recursively) and returned.
- Return type:
listofNodegraphAPI.NodeorNone- Returns:
A list of selected or clicked nodes, or
Noneif no such nodes could be found.
- FarmAPI.GetSceneFrameRange()¶
Returns the frame range for the current project, as returned by
NodegraphAPI.GetInTime()andNodegraphAPI.GetOutTime().- Return type:
dict- Returns:
A dictionary with the in and out time of the current project stored as values under
'start'and'end'keys.
- FarmAPI.GetCurrentNodeFrameRange()¶
Returns the frame range as defined by the farm settings.
- Return type:
dict- Returns:
A dictionary with the frame range defined in the farm settings stored on the current node as values under
'start'and'end'keys.- See:
- FarmAPI.GetKatanaFileName()¶
- Return type:
str- Returns:
The filename of the current Katana project.
Render Farm Plug-ins¶
✨ New in Katana 4
Render Farm Plug-ins are managed using the
FarmAPI.FarmPluginManager module.
FarmAPI.FarmPluginManager Module¶
Module that provides functionality to interact with registered FarmAPI
plug-ins.
- since:
Katana 4.0v1
- exception FarmAPI.FarmPluginManager.FarmPluginManagerException¶
Bases:
ExceptionClass representing an exceptional case that may occur when interacting with the
FarmAPI.FarmPluginManagermodule.
- class FarmAPI.FarmPluginManager.JobRequest(nodeName, renderContextName, frames, commands, environment, tempDir)¶
Bases:
objectContains the commands, environment and unique identifier that together make up a single render job that should be submitted to the render farm.
- __init__(nodeName, renderContextName, frames, commands, environment, tempDir)¶
Initializes an instance of this class.
- Parameters:
nodeName (
str) – The name of the 3D node from which the render was started.renderContextName (
str) – A globally unique identifier for this render job.frames (
listof int) –listof frames to render.commands (
listofstr) – orderedlistof commands to runenvironment (dict of
str) – environment variables that should be present when running the commands.tempDir (
str) – temporary directory used for this render on the farm.
- FarmAPI.FarmPluginManager.GetDefaultFarm()¶
- Return type:
str- Returns:
The farm plug-in that is used by functions of this module when none is specified.
- FarmAPI.FarmPluginManager.SetDefaultFarm(farm)¶
Sets the default farm plug-in to be used if none is specified.
- Parameters:
farm (
str) – The default farm plug-in to use if none is specified.- Raises:
FarmPluginManagerException – If no farm plug-in with the given name has been registered.
- FarmAPI.FarmPluginManager.GetFarmPluginNames()¶
- Return type:
listofstr- Returns:
A list of names of render farms and compute resources currently available to the user.
- FarmAPI.FarmPluginManager.CreateRenderContextName(sequenceID=None)¶
- Return type:
str- Parameters:
sequenceID (
intorNone) – A number that uniquely identifies a render in Katana’s catalog system in the current Katana session.- Returns:
A string that can be used to uniquely identify a render job.
- FarmAPI.FarmPluginManager.CreateTemporaryDirectory(renderContextName, farm=None)¶
Creates a temporary directory for the render job specified by
renderContextName.- Return type:
str- Parameters:
renderContextName (
str) – A globally unique identifier for the render job for which to create a tempoary directory.farm (
strorNone) – The name of the render farm plug-in to use, orNoneto use the default farm plug-in.
- Returns:
The path to a temporary directory for use by the render job.
- Raises:
FarmPluginManagerException – If no farm plug-in with the given name is registered.
- FarmAPI.FarmPluginManager.CopyRenderFiles(renderFiles, renderContextName=None, farm=None)¶
Copies the files specified in
renderFilesto a location accessible by the render farm, returning a mapping of where each file was copied to.- Return type:
mapofstrrarrstr- Parameters:
renderFiles (
listofstr) – A list of names of files to be copied.renderContextName (
strorNone) – A globally unique identifier for the render job for which to copy the files, orNoneto generate one usingCreateRenderContextName().farm (
strorNone) – The name of the render farm plug-in to use, orNoneto use the default farm plug-in.
- Returns:
Mapping of local file to farm file.
- Raises:
FarmPluginManagerException – If no farm plug-in with the given name is registered.
- FarmAPI.FarmPluginManager.SubmitJob(nodeName, renderContextName, remoteTempDir, commands, farm=None)¶
Submits the specified job to the render farm.
- Return type:
str- Parameters:
nodeName (
str) – The name of the 3D node from which the render was started.renderContextName (
str) – A globally unique identifier for the render job to submit.remoteTempDir (
str) – Temporary directory on farm to be used by this render.commands (
listofstr) – Ordered list of commands to be run by the render farm.farm (
str) – The name of the render farm plug-in to use, orNoneto use the default farm plug-in.
- Returns:
String that uniquely identifies the submitted job on the render farm.
- Raises:
FarmPluginManagerException – If no farm plug-in with the given name is registered.
- FarmAPI.FarmPluginManager.StartJob(jobId, farm=None)¶
(Re-)Starts the job specified by
jobId.Note: Depending on the implementation of the farm plug-in used, the job may enter the render farm’s queue in a ‘started’ or ready to start state, so a call of this function may not have any effect.
- Parameters:
jobId (
str) – The identifier for a job submitted to the render farm as returned bySubmitJob().farm (
strorNone) – The name of the render farm plug-in to use, orNoneto use the default farm plug-in.
- Raises:
FarmPluginManagerException – If no farm plug-in with the given name is registered.
- FarmAPI.FarmPluginManager.StopJob(jobId, farm=None)¶
Stops the job specified by
jobId.- Parameters:
jobId (
str) – The identifier for a job submitted to the render farm as returned bySubmitJob().farm (
strorNone) – The name of the render farm plug-in to use, orNoneto use the default farm plug-in.
- Raises:
FarmPluginManagerException – If no farm plug-in with the given name is registered.
- FarmAPI.FarmPluginManager.GetJobs(filters=None, farm=None)¶
- Return type:
listofFarmAPI.Job- Parameters:
filters (
listofstrorNone) – A list of filter entries of the format'<name>=<value>'. Defaults to an empty list if not provided, meaning all jobs managed by the render farm with the given name are returned.farm (
strorNone) – The name of the render farm plug-in to use, orNoneto use the default farm plug-in.
- Returns:
A list of render farm jobs matching the given list of filter criteria.
- Raises:
FarmPluginManagerException – If no farm plug-in with the given name is registered.
- FarmAPI.FarmPluginManager.GetRenderLogFilename(jobId, farm=None)¶
- Return type:
strorNone- Parameters:
jobId (
str) – The identifier for a job submitted to the render farm as returned bySubmitJob().farm (
strorNone) – The name of the render farm plug-in to use, orNoneto use the default farm plug-in.
- Returns:
The name of the render log file of the job with the given ID, or
Noneif the filename is not yet known, or inaccessible from this host.- Raises:
FarmPluginManagerException – If no farm plug-in with the given name is registered.
- FarmAPI.FarmPluginManager.GetJobState(jobId, farm=None)¶
- Return type:
str- Parameters:
jobId (
str) – The ID of the Job for which to retrieve the state.farm (
strorNone) – The name of the render farm plug-in to use, orNoneto use the default farm plug-in.
- Returns:
The state of the render farm job with the given ID.
- Raises:
FarmPluginManagerException – If no farm plug-in with the given name is registered.
- FarmAPI.FarmPluginManager.Initialize()¶
Initializes the
FarmAPI.FarmPluginManagermodule.Is called by Katana during application startup.
- FarmAPI.FarmPluginManager.LoadFarmPlugins()¶
Loads all
FarmAPIplug-ins, registers them with theFarmAPI.FarmPluginManagermodule, and sets the default farm plug-in to the first plug-in that was loaded.
- FarmAPI.FarmPluginManager.PrepareRemoteCommand(localCommandLine, renderContextName, remoteTempDirectory, farm=None)¶
Converts the given local command line to a remote equivalent, and copies any files required for this job to the farm, then returns the remote command line.
- Return type:
str- Parameters:
localCommandLine (
str) – The local command line to convert, containing quoted arguments separated by spaces.renderContextName (
str) – A globally unique identifier for the render job for which to prepare the remote command.remoteTempDirectory (
str) – Path to the temporary directory on the render farm used by this job.farm (
strorNone) – The name of the render farm plug-in to use, orNoneto use the default farm plug-in.
- Returns:
The remote command line created from the given local command line.
- Raises:
FarmPluginManagerException – If no farm plug-in with the given name is registered.
Footnotes