Introduction

GridMarkets Envoy client is Python library which enables users to upload project files, submit the project for processing and lookup status of submissions by interfacing with the Envoy service.

Concepts

Envoy

Envoy is a tool which end users install on their machines to manage project files uploaded to GridMarkets, watch and download results.

Envoy consists of a user interface portion and an underlying local web service typically running at http://localhost:8090. Both Envoy user interface and the Envoy client library uses the web service to interact with GridMarkets system.

When the user opens the Envoy user interface, Envoy web service will automatically get started and keeps running in the background.

Project

A project defines a group of one or more jobs which need to be processed together.

Job

Job defines the product type, version and other parameters required for processing the same in GridMarkets. A job will be always be defined with a project.

Product types and plugins

Each job can be defined to run on a specific product version along with a list of compatible product plugins.

The following table shows the list of supported product types and their compatible plugins:

Note: Value in brackets are the short code to be used while defining the product type ina job

Product Type Compatible Plugins
Blender (blender) V-Ray (blender_vray)
Cinema 4D (c4d) Arnold (arnold), Redshift (redshift), V-Ray (vray)
Houdini (hou) Arnold (htoa), Nuke (hton), Redshift (hou_redshift), Renderman (prman), FFMPEG Transcode (htot), V-Ray (hou_vray)
Maya (hou) Arnold (mtoa), Redshift (maya_redshift), Renderman (maya_prman), V-Ray (maya_vray)
Nuke (nuke)
V-Ray (vray)

All the currently active list of product types and compatible plugins including versions can be fetched via the product resolver explained further in a separate section.

Machine types

CPU or a GPU machine type can be chosen to run a job depending on your requirement. Fetching the available machine types based on the product type and plugins are covered in a separate section.

Instances

This defines the requested number of concurrent tasks/frames to run for the job. Note that the instances are constrained by your service plan applied across all your jobs.

Operation Types

Each job has to define a operation type to use. This is also used for fetching machine types to use as well.

The following are the operation types supported:

Operation type Description
render Defines a render operation
sim Defines a simulation operation
composite Defines a composite operation
transcode Defines a transcode operation

Each product type defines the operation types supported.

Installation

The Envoy Python client library is available as a universal Wheel package for Python 2.6, 2.7 and 3.3+. Users can install it using pip or easy_install as a global module or to a specific folder path to use and package with product plugins.

Pre-requisites

This has dependency on Python future and requests 2.x libraries. When using pip or easy_install, dependencies are automatically installed.

Using in Python 2.6, 2.7 and 3.3+

# Install as python global module
pip install https://gm-envoy-client-docs.netlify.com/downloads/gridmarkets_envoy_client-7.1.9-py2.py3-none-any.whl
# Install to a folder location to package with plugin
pip install https://gm-envoy-client-docs.netlify.com/downloads/gridmarkets_envoy_client-7.1.9-py2.py3-none-any.whl -t <target_dir>

Creating an Envoy client instance

from gridmarkets import EnvoyClient

# create an instance of Envoy client
envoy_client = EnvoyClient()

Authentication

Authenticate user using authenticate method as below. AuthenticationError is thrown if authemtication is not successful.

envoy_client.authenticate('[email protected]', 'your_password')

Getting user details including credits balance

# get get user info
user_info = envoy_client.get_user_info()

Response

{
  "created": "2019-07-01T15:27:48",
  "credits_available": 1000.0,
  "credits_consumed": 200.0,
  "email_address": "email_address",
  "job_throughput_limit": 30,
  "max_throughput": 30,
  "name": "your_name",
  "service_plan": "Standard"
}

Discovering product types and supported product type plugins

Envoy client provides a product resolver which enables the user to do the following:

  • Get the list of all product types and their supported plugins.
  • Get the list of versions for a specific product type or plugin
  • Get compatible combination for one or more product types and/or plugins

Every product and product plugin has an associated code and version to identify a specific product. Few examples below:

  • hou represents a Houdini product type
  • hou_redshift represents a Houdini Redshift plugin
  • hou:17.0.459 represents Houdini version 17.0.459

Above formats can be used to perform searches using the methods available in product resolver.

Get all product types using product resolver

# get product resolver
resolver = envoy_client.get_product_resolver()

# get all products including plugins
products = resolver.get_all_types()

# get all products excluding plugins
products = resolver.get_all_types(False)

Response

{
  "hou": {
    "versions": ["17.5.173", "17.5.229"],
    "is_plugin": false,
    "name": "Houdini",
    "business_vertical": "media"
  },
  "hou_redshift": {
    "versions": ["2.6.38", "2.6.39"],
    "is_plugin": true,
    "name": "hou_redshift",
    "business_vertical": "media"
  }
}

Get the list of versions by product type or plugin type

# get product resolver
resolver = envoy_client.get_product_resolver()

# get products for Houdini product type
qry = 'hou'
products = resolver.get_versions_by_type(qry)

# get products supporting Houdini Redshift plugin
qry = 'hou_redshift'
products = resolver.get_versions_by_type(qry)

Response

["14.0.395", "15.0.459"]

Get compatible combination for a specific product type and version

# get product resolver
resolver = envoy_client.get_product_resolver()

# get compatible combinations for a specific Houdini version
# query type can be a list of tuple, the example below uses a tuple
qry = ('hou:17.5.173',) # or qry = ['hou:17.5.173']
products = resolver.get_compatible_combinations(qry)

Response

{
  "hou_redshift": {
    "versions": ["2.6.37", "2.6.38", "2.6.39"],
    "is_plugin": true,
    "name": "Houdini",
    "business_vertical": "media"
  },
  "htoa": {
    "versions": ["4.0.1", "4.0.2"],
    "is_plugin": true,
    "name": "htoa",
    "business_vertical": "media"
  }
}

Get compatible combination for one or more product type and versions

# get product resolver
resolver = envoy_client.get_product_resolver()

# get compatible combinations for Houdini versions 17.5.173 and 17.5.229
# query type can be a list of tuple, the example below uses a tuple
qry = ('hou:17.5.173', 'hou:17.5.229') # or qry = ['hou:17.5.173', 'hou:17.5.229'] 
products = resolver.get_compatible_combinations(qry)

Response

{
  "hou_redshift": {
    "versions": ["2.6.37", "2.6.38", "2.6.39"],
    "is_plugin": true,
    "name": "hou_redshift",
    "business_vertical": "media"
  }
}

Note that the queries can be one or more product types or the short code which is a combination of product type and version.

Fetching machine types

# get the CPU machines for say Cinema 4D
# Refer to the product types and plugins section to know about the codes to be used
envoy_client.get_machines('c4d', 'render', category=EnvoyClient.MACHINE_CATEGORY_CPU)

# get the GPU machines for say Cinema 4D and Arnold plugin
envoy_client.get_machines('c4d', 'render', category=EnvoyClient.MACHINE_CATEGORY_CPU, ['arnold'])

# get all machine types for say Cinema 4D
envoy_client.get_machines('c4d', 'render', category=EnvoyClient.MACHINE_CATEGORY_ALL)

Response

[
  {
    "gpu": false,
    "id": "gm4800",
    "is_default": true,
    "name": "GM4800"
  },
  {
    "gpu": false,
    "id": "gm6400",
    "is_default": false,
    "name": "GM6400"
  },
  {
    "gpu": true,
    "id": "1xp100-ob220",
    "is_default": true,
    "name": "1xP100 : OB220"
  },
  {
    "gpu": true,
    "id": "1xv100-ob330",
    "is_default": false,
    "name": "1xV100 : OB330"
  }
]

Uploading and submitting project together

Uploading of files and submission of the project for processing can be done together by following the steps below. This will be the common and most used method to send the project for processing in GridMarkets.

Uploading and submitting can be performed separately as well, this is more useful when you would want to run multiple jobs with different parameters on the same job files. This is covered in a separate section.

Create a instance of EnvoyClient

from gridmarkets import EnvoyClient
from gridmarkets import Project
from gridmarkets import Job
from gridmarkets import WatchFile

# create an instance of Envoy client
envoy_client = EnvoyClient()

# authenticate user
envoy_client.authenticate('[email protected]', 'your_password')

Create a project

# create a project
# project files root folder path
project_folder = "c:\\sample_project"

# name of the project is optional, if not passed inferred from the project root folder
# this is also used the as name for the remote root folder so ensure it is a valid file system folder name
project_name = "sample_project"

# submission name
# this is optional argument, if not passed, a timestamp based submission name is automatically set
submission_name = "submission 1"

# results output folder name
# this is optional argument to override the results folder name which is by default the submission name
results_folder_name = "my_results"

project = Project(project_folder, name=project_name, submission_name=submission_name, output_folder_name=results_folder_name)

Add project files for upload

# add files to project
# only files and folders within the project path can be added, use relative or full path
# any other paths passed will be ignored
# set the local folder, you can use path set in the project or can use a different folder path
local_folder = "c:\\sample_project" # or project.LocalRoot
# set the remote path, this path is either the remote folder or a folder within the remote folder path
remote_folder = project.RemoteRoot
# add 2 files from local folder into remote folder
project.add_files(local_folder, remote_folder, ['sample.c4d', 'another_file.ext'])

# add assets folder
local_folder = "c:\\sample_project\\assets"
# remote folders always use forward slashes as path separator
remote_folder = project.RemoteRoot + '/assets'
# all the files/folders in the local folder is added to the remote folder
project.add_files(local_folder, remote_folder)

Add job

# define the jobs
# create a Cinema4D job

job = Job(
  name="test job", # job name
  app="c4d", # product/app type
  app_version="R19", # product type version
  operation="render", # operation
  path="sample_project/sample.c4d", # job file to be run, note that the path is relative to the project name which is also the remote folder name
  instances=5, # instances - number of instances to to be used for processing the job
  machine_type='gm4800', # machine type to be used, check the section which describes fetching available machine types. If passed empty string then GridMarkets will select the default based on your profile settings
  plugins=None,
  # rest of the params are job specific params
  frames="0 0 1",
  output_height=600,
  output_width=400,
  output_format='tiff'
)

# add job to project
project.add_jobs(job)

Add watch files to auto download results

# setting watch files to auto download results
# Note that if watch files are not set, by default, results will get downloaded to the result folder argument `results_folder_name` set for the project.

# results regex pattern to download
# `project.remote_output_folder` provides the remote root folder under which results are available
# below is the regex to look for all folders and files under `project.remote_output_folder`
output_pattern = '{0}/.+'.format(project.remote_output_folder)

# download path
download_path = 'c:\\sample_project\my_results'

# create a watch file
watch_file = WatchFile(output_pattern, download_path)

# add watch files, this will auto download results to the defined `download_path`
project.add_watch_files(watch_file)

Submit project

# submit project
resp = envoy_client.submit_project(project) # returns project name

Uploading just the project files

There are cases where users might want to upload files and then run multiple submission based on the already uploaded files. The code below details the step to upload project files.

# upload files project
response = envoy_client.upload_project_files(project) # returns project name

Submitting a project skipping upload of files

As indicated in the prior section, users can perform multiple submissions with different parameters based on the already uploaded files. Note that all project files should be available in GridMarkets system for running jobs successfully. Follow the steps below to submit a project for processing in GridMarkets system.

# submit project
skip_upload = True
envoy_client.submit_project(project, skip_upload)

Setting up a project with job dependencies

Users can setup inter-job dependencies to enable GridMarkets system to pipeline the job processing accordingly.

job1 = Job(...)
job2 = Job(...)
job3 = Job(...)

# setting up job1 and job2 as dependencies to job3
# GridMarkets system will process job1 and job2 followed by job3.
job3.add_dependencies(job1, job2)

Setting credits budget limit and action trigger for a job


# create a job
job = Job(...)

# set credits limit for job and stop the job if consumed credits reaches 50
job.set_credits_budget(value=50.00,action=Job.CREDITS_BUDGET_ACTION_STOP)

# set credits limit for job and suspend the job if consumed credits reaches 50
# When a job gets suspended, already running tasks are allowed to complete and non-started tasks are stopped
job.set_credits_budget(value=50.00,action=Job.CREDITS_BUDGET_ACTION_SUSPEND)

# set credits limit for job and send an email alert if consumed credits reaches 50
job.set_credits_budget(value=50.00,action=Job.CREDITS_BUDGET_ACTION_ALERT)

Fetching status of the project

# project name
project_name = "sample_project"

resp = envoy_client.get_project_status(project_name)

Response

{
  "Code": 200,
  "State": "Uploading",
  "Message": "File uploads in progress.",
  "BytesDone": 0,
  "BytesTotal": 2971998,
  "Details": {
    "/sample project/test.c4d": {
      "Name": "/sample project/test.c4d",
      "State": "Uploading",
      "BytesDone": 0,
      "BytesTotal": 2971998,
      "Speed": 0
    }
  },
  "Speed": 0
}
{
  "Code": 200,
  "State": "Submitted",
  "Message": "Job submission successful.",
  "BytesDone": 2971998,
  "BytesTotal": 2971998,
  "Details": {
    "/sample project/test.c4d": {
      "Name": "/sample project/test.c4d",
      "State": "Completed",
      "BytesDone": 2971998,
      "BytesTotal": 2971998,
      "Speed": "0.00"
    }
  },
  "Speed": 0
}

Error handling

This section outlines the possible error/exceptions thrown by EnvoyClient while instantiating and calling the methods on it. It is always a good idea to wrap the instantiation and call to EnvoyClient functions within a try... except.. block.

AuthenticationError

This exception is thrown by Envoy client when user credentials are incorrect.

InsufficientCreditsError

This exception is thrown when the user credits is not positive while doing a submission using the Envoy client.

InvalidRequestError

If any of the Job data is incorrect then InvalidRequestError is thrown.

APIError

This is a generic error/exception thrown when EnvoyClient is not able to communicate with Envoy service or any other errors.

All exceptions in try..catch.. block

from gridmarkets import EnvoyClient
from gridmarkets import Project
from gridmarkets import Job
from gridmarkets import *

try:
  # create an instance of Envoy client
  envoy_client = EnvoyClient(email="EMAIL_ADDRESS", access_key="ACCESS_KEY")
  ...
  ... 
  ... 
  # any other calls on Envoy client
except AuthenticationError as e:
  # handle the exception pertaining to AuthenticationError
except InsufficientCreditsError as e:
  # handle the exception pertaining to InsufficientCreditsError
except InvalidRequestError as e:
  # handle the exception pertaining to InvalidRequestError
except ApIError as e:
  # handle the exception pertaining to APIError

Getting package version

Use the code below to get the current package version

version = envoy_client.version

Validating authentication

For some cases like usage within a plugin, you would want to explicitly validate whether the user credentials are valid. You can use the code below to validate authentication

try:
  is_auth_valid = envoy_client.validate_auth()
except AuthenticationError as e:
  # handle exception, this means that the user credentials are not valid

Validating user credits

For some cases like usage within a plugin, you would want to explicitly validate user credits. You can use the code below.

try:
  is_valid_credits = envoy_client.validate_credits()
except InsufficientCreditsError as e:
  # handle exception, this means that the user credits is not positive

Blender job

from gridmarkets import Job

job = Job(
  name=JOB_NAME, # job name
  app=PRODUCT_TYPE, # product type
  app_version=PRODUCT_VERSION, # product version
  operation=OPERATION, # operation
  path=RENDER_FILE, # job file to be run, note that the path is relative to the project name which is also the remote folder name
  instances=5, # requested concurrent machines
  machine_type=MACHINE_TYPE, # machine type to use
  plugins=PLUGINS, # plugins to be used
  frames=FRAMES, # rest are all job specific params
  output_prefix=OUTPUT_PREFIX,
  output_format=OUTPUT_FORMAT,
  engine=RENDER_ENGINE, # optional param
  gpu=GPU # optional param
)

Name Type Description
JOB_NAME string Job name is the first argument passed to Job instance
PRODUCT_TYPE string blender should be passed for Blender
PRODUCT_VERSION string Supported Blender version should be passed, fetched via product resolver
OPERATION string render is the only supported operation
RENDER_FILE string Path to .blend file expressed relative to the remote project folder. If your project name is sample_project then remote root becomes /sample project. Render file path example is /sample project/sample.blend
INSTANCES number Requested number of concurrent machine to process job
MACHINE_TYPE string Machine type to use, see section fetching machine types
PLUGINS string list Plugins to use
FRAMES string Defines the frame range in format start [end] [step],[start [end] [step]],...
OUTPUT_PREFIX string Defines the render output file prefix
OUTPUT_FORMAT string Defines the render output format
RENDER_ENGINE string (optional) Defines the render engine to be used
GPU bool (optional) Defines if a GPU is required for running the job.

Cinema4D job

from gridmarkets import Job

job = Job(
  name=JOB_NAME, # job name
  app=PRODUCT_TYPE, # product type
  app_version=PRODUCT_VERSION, # product version
  operation=OPERATION, # operation
  path=RENDER_FILE, # job file to be run, note that the path is relative to the project name which is also the remote folder name
  instances=5, # requested concurrent machines
  machine_type=MACHINE_TYPE, # machine type to use
  plugins=PLUGINS, # plugins to be used
  frames=FRAMES, # rest are all job specific params
  output_height=OUTPUT_HEIGHT,
  output_width=OUTPUT_WIDTH,
  output_prefix=OUTPUT_PREFIX,
  output_format=OUTPUT_FORMAT,
  output_multipass_prefix=OUTPUT_MULTIPASS_PREFIX # optional param,
  gpu=GPU
)

Name Type Description
JOB_NAME string Job name is the first argument passed to Job instance
PRODUCT_TYPE string c4d should be passed for Cinema4D
PRODUCT_VERSION string Supported Cinema4D version should be passed fetched via product resolver
OPERATION string render is the only supported operation
RENDER_FILE string Path to .c4d file expressed relative to the remote project folder. If your project name is sample_project then remote root becomes /sample project. Render file path example is /sample project/sample.c4d
INSTANCES number Requested number of concurrent machine to process job
MACHINE_TYPE string Machine type to use, see section fetching machine types
PLUGINS string list Plugins to use
FRAMES string Defines the frame range in format start [end] [step],[start [end] [step]],...
OUTPUT_WIDTH number Defines the render output file width
OUTPUT_HEIGHT number Defines the render output file height
OUTPUT_PREFIX string Defines the render output file prefix
OUTPUT_FORMAT string Defines the render output file format
OUTPUT_MULTIPASS_PREFIX string (optional) Defines the multipass render output file prefix
GPU bool (optional) Defines if a GPU is required for running the job.

Houdini Job

Project level parameters

# create a project
project = Project(SRC_PATH, PROJECT_NAME,
    project_summary_log_file=PROJECT_SUMMARY_LOG_FILE,
    project_param_output=PROJECT_PARAM_OUTPUT,
    project_param=PROJECT_PARAM,
    project_env=PROJECT_ENV)

Project level parameters are common and shared across all jobs in the project.

Name Type Description
PROJECT_SUMMARY_LOG_FILE string Defines the path of the summary log files generated by Houdini plugin
PROJECT_PARAM_OUTPUT list Defines the list of project output parameters
PROJECT_PARAM dict Defines the project output parameter mappings
PROJECT_ENV dict Defines the project level environment variable mappings
PROJECT_PARAM dict Defines the project parameters

Job level parameters

# create Houdini job
job = Job(
  name=JOB_NAME, # job name
  app=PRODUCT_TYPE, # product type
  app_version=PRODUCT_VERSION, # product version
  operation=OPERATION, # operation
  path=RENDER_FILE, # job file to be run, note that the path is relative to the project name which is also the remote folder name
  instances=5, # requested concurrent machines
  machine_type=MACHINE_TYPE, # machine type to use
  plugins=PLUGINS, # plugins to be used
  frames=FRAMES,
  take=TAKE,
  rop_nodetype=ROP_NODE_TYPE,
  rop_nodepath=ROP_NODE_PATH,
  output_upload=OUTPUT_UPLOAD,
  disk_output_ext=DISK_OUTPUT_EXT,
  disk_output_mode=DISK_OUTPUT_MODE,
  disk_output_parm=DISK_OUTPUT_PARM,
  disk_output_path=DISK_OUTPUT_PATH,
  disk_output_renderer=DISK_OUTPUT_RENDERER,
  disk_output_path_parm=DISK_OUTPUT_PATH_PARM
  gpu=GPU)
Name Type Description
JOB_NAME string Job name is the first argument passed to Job instance.
PRODUCT_TYPE string hou should be passed for Houdini.;
PRODUCT_VERSION string Supported Houdini version should be passed fetched via product resolver.
OPERATION string (optional) render, batch are supported operations. Default is render if this parameter is not passed.
RENDER_FILE string Path to .hip, .hipnc, .hiplc file expressed relative to the remote project folder. If your project name is sample_project then remote root becomes /sample project. Render file path example is /sample project/sample.hip.
INSTANCES number Requested number of concurrent machine to process job
MACHINE_TYPE string Machine type to use, see section fetching machine types
PLUGINS string list Plugins to use
FRAMES string Defines the frame range in format start [end] [step],[start [end] [step]],...
ROP_NODE_TYPE string Defines the render operation node type.
ROP_NODE_PATH string Defines the render operation node path.
OUTPUT_UPLOAD list Defines the output pattern to be uploaded to long time storage (LTS).
DISK_OUTPUT_EXT string (optional) Defines the disk output extension.
DISK_OUTPUT_MODE string (optional) Defines the disk output mode.
DISK_OUTPUT_PARM string (optional) Defines the disk output parameter.
DISK_OUTPUT_PATH string (optional) Defines the disk output path.
DISK_OUTPUT_RENDERER string (optional) Defines the disk output renderer.
DISK_OUTPUT_PATH_PARM string (optional) Defines the disk output path parameter.
GPU bool (optional) Defines if a GPU is required for running the job.

Maya job

# create Maya job
job = Job(
  name=JOB_NAME, # job name
  app=PRODUCT_TYPE, # product type
  app_version=PRODUCT_VERSION, # product version
  operation=OPERATION, # operation
  path=RENDER_FILE, # job file to be run, note that the path is relative to the project name which is also the remote folder name
  instances=5, # requested concurrent machines
  machine_type=MACHINE_TYPE, # machine type to use
  plugins=PLUGINS, # plugins to be used
  ## Maya specific parameters
  frames=FRAMES,
  output_height=OUTPUT_HEIGHT,
  output_width=OUTPUT_WIDTH,
  output_prefix=OUTPUT_PREFIX,
  output_format=OUTPUT_FORMAT,
  camera=CAMERA,
  renderer=RENDERER,
  gpu=GPU
Name Type Description
JOB_NAME string Job name is the first argument passed to Job instance
PRODUCT_TYPE string maya should be passed for V-Ray
PRODUCT_VERSION string Supported V-Ray version should be passed fetched via product resolver
OPERATION string render is the only supported operation
RENDER_FILE string Path to .ma or .mb file expressed relative to the remote project folder. If your project name is sample_project then remote root becomes /sample project. Render file path example is /sample project/sample.vrscene
INSTANCES number Requested number of concurrent machine to process job
MACHINE_TYPE string Machine type to use, see section fetching machine types
PLUGINS string list Plugins to use
FRAMES string Defines the frame range in format start [end] [step],[start [end] [step]],...
OUTPUT_WIDTH number Defines the render output width
OUTPUT_HEIGHT number Defines the render output height
OUTPUT_PREFIX string Defines the render output file prefix
OUTPUT_FORMAT string Defines the render output format
GPU bool (optional) Defines if a GPU is required for running the job.

Nuke job

# create Nuke job
job = Job(
  name=JOB_NAME, # job name
  app=PRODUCT_TYPE, # product type
  app_version=PRODUCT_VERSION, # product version
  operation=OPERATION, # operation
  path=RENDER_FILE, # job file to be run, note that the path is relative to the project name which is also the remote folder name
  instances=5, # requested concurrent machines
  machine_type=MACHINE_TYPE, # machine type to use
  plugins=PLUGINS, # plugins to be used
  frames=FRAMES,
  gpu=GPU # optional param

Name Type Description
JOB_NAME string Job name is the first argument passed to Job instance.
PRODUCT_TYPE string nuke should be passed for Nuke.;
PRODUCT_VERSION string Supported Nuke version should be passed fetched via product resolver.
OPERATION string (optional) render is the only supported operations. Default is render if this parameter is not passed.
RENDER_FILE string Path to .nk file expressed relative to the remote project folder. If your project name is sample_project then remote root becomes /sample project. Render file path example is /sample project/sample.nk.
INSTANCES number Requested number of concurrent machine to process job
MACHINE_TYPE string Machine type to use, see section fetching machine types
PLUGINS string list Plugins to use
FRAMES string Defines the frame range in format start [end] [step],[start [end] [step]],...
GPU bool (optional) Defines if a GPU is required for running the job.

V-Ray job

from gridmarkets import Job

job = Job(
  name=JOB_NAME, # job name
  app=PRODUCT_TYPE, # product type
  app_version=PRODUCT_VERSION, # product version
  operation=OPERATION, # operation
  path=RENDER_FILE, # job file to be run, note that the path is relative to the project name which is also the remote folder name
  instances=5, # requested concurrent machines
  machine_type=MACHINE_TYPE, # machine type to use
  plugins=PLUGINS, # plugins to be used
  frames=FRAMES, # rest are all job specific params
  output_height=OUTPUT_HEIGHT,
  output_width=OUTPUT_WIDTH,
  output_prefix=OUTPUT_PREFIX,
  output_format=OUTPUT_FORMAT,
  rt_engine=RT_ENGINE, # optional param
  sampling_type=SAMPLING_TYPE # optional param
  remap_file=REMAP_FILE # optional param
)

Name Type Description
JOB_NAME string Job name is the first argument passed to Job instance
PRODUCT_TYPE string vray should be passed for V-Ray
PRODUCT_VERSION string Supported V-Ray version should be passed fetched via product resolver
OPERATION string render is the only supported operation
RENDER_FILE string Path to .vrscene file expressed relative to the remote project folder. If your project name is sample_project then remote root becomes /sample project. Render file path example is /sample project/sample.vrscene
INSTANCES number Requested number of concurrent machine to process job
MACHINE_TYPE string Machine type to use, see section fetching machine types
PLUGINS string list Plugins to use
FRAMES string Defines the frame range in format start [end] [step],[start [end] [step]],...
OUTPUT_WIDTH number Defines the render output width
OUTPUT_HEIGHT number Defines the render output height
OUTPUT_PREFIX string Defines the render output file prefix
OUTPUT_FORMAT string Defines the render output format
RT_ENGINE number Defines the RT engine, supported values are regular render (0), CPU RT (1), GPU RT on OpenCL (3), GPU RT on CUDA (5)
SAMPLING_TYPE number Defines the sampling type, progressive or bucket
REMAP_FILE number XML file path which maps absolute paths to server folder resolved paths