User Guide Cancel

PySbs batchtools module | Substance 3D Automation ToolKit

  1. Substance 3D home
  2. Home
  3. Command Line Tools
    1. Command Line overview
    2. sbsbaker
      1. sbsbaker overview
      2. sbsbaker command line options
      3. sbsbaker Example Command Lines
    3. sbscooker
      1. sbscooker overview
      2. sbscooker command line options
      3. sbscooker pattern variables
    4. sbsmtools
      1. sbsmtools overview
      2. sbsmtools command line options
    5. sbsmutator
      1. sbsmutator overview
      2. sbsmutator command line options
      3. sbsmutator Example Command Lines
    6. sbsrender
      1. sbsrender overview
      2. sbsrender base parameters and pattern variables
      3. sbsrender command line options
      4. sbsrender example command lines
    7. sbsupdater
      1. sbsupdater overview
      2. sbsupdater command line options
  4. Pysbs - Python API
    1. Pysbs - Python API overview
    2. Getting started
    3. General topics
      1. Basic manipulation
      2. Substance creation
      3. Substances modification
      4. Dependencies management
      5. PySbs batchtools module
      6. metadata manipulation
      7. SAT demos
      8. Edit sbsar with SBSARManager
      9. Spot Colors
      10. Thumbnail creation with SAT
    4. Examples
      1. demohelloworld
      2. demos
      3. demos_batchtools
      4. script_update_with_sbsupdater
    5. API Content
      1. API Content overview
      2. Substance definitions
        1. Common interfaces
          1. basegraph
          2. package
          3. sbsarobject
          4. sbsobject
        2. compnode
          1. compnode overview
          2. common
          3. compimplementation
          4. paramgraph
        3. context projectmgr
        4. graph
          1. graph overview
          2. function
          3. inputparameters
          4. output
        5. mdl
          1. mdlannotation
          2. mdlcommon
          3. mdldictionaries
          4. mdlenum
          5. mdlgraph
          6. mdllibclasses
          7. mdlmanager
          8. mdlnode
          9. mdlnodeimpl
          10. mdloperand
          11. mdlsbsbridge
        6. modelgraphindex
          1. modelannotationnames
          2. modelgraph
          3. modelgraphgenerator
          4. modelgraphimplementation
          5. modelnodenames
          6. modeloperand
          7. modulegraphindex
          8. moduleannotation
          9. moduleconnection
          10. modulegraph
          11. modulegraphgenerator
          12. modulegraphimplementation
          13. modulegraphlibrary
          14. modulegraphregister
          15. modulenode
          16. modulenodeimplementation
          17. modulenodeinstance
          18. moduleoperand
          19. moduleoutputbridging
          20. moduleparaminput
        7. params
          1. params overview
          2. dynamicvalue
          3. paramnode
        8. projectmgrdoc
        9. sbsarchive
          1. sbsarchive overview
          2. sbsarenum
          3. sbsargraph
          4. sbsargui
          5. sbsarguiwidgets
          6. sbsarmanager
        10. sbscommon
          1. connections
          2. gui
          3. nodes
          4. values
        11. sbspreset
        12. sbsproject
        13. substance
          1. substance overview
          2. content
          3. resource
      3. Libraries
        1. sbsenum
        2. sbslibrary
          1. sbslibrary overview
          2. sbsdictionaries
          3. sbsfilters
          4. sbsfunctions
          5. sbsfxmapnodes
          6. sbslibclasses
          7. sbswidgets
        3. sbsbakerslibrary
          1. sbsbakerslibrary overview
          2. sbsbakersdef
          3. sbsbakersdefaultprops
          4. sbsbakersdictionaries
          5. sbsbakersenum
          6. sbsbakingconverter
          7. sbsbakingconverterparam
          8. sbsbakingparameters
          9. sbsdialogstate
          10. sbsscenedata
        4. Helpers
          1. sbscleaner
          2. sbsexporter
          3. sbsgenerator
          4. sbsparser
          5. sbswriter
          6. qtclasses
            1. qtclasses overview
            2. qtvariantreader
            3. qtvariantwriter
          7. psdparser
          8. sbsimpactmanager
          9. batchtools
          10. autograph
            1. ag_functions
            2. ag_layout
            3. ag_types
          11. info_mesh_parser
          12. sbsbaker_info_handlers
          13. sbsrender_render_handlers
          14. output_handlers
          15. spotcolorinfo_handler
          16. thumbnail
          17. batchtools overview
        5. Execution context
          1. context
          2. functions
        6. API Change log
  5. Samples
    1. Samples overview
    2. Texturing Template Demo
    3. Batch Tools Demo
    4. Variations
    5. Texture Mat
    6. Pixel Processor Ray tracer
  6. Setup and Getting Started
    1. Setup and Getting Started overview
    2. Compatibility
    3. Frequently asked Questions
    4. Known issues
    5. SAT Cookbook
    6. Use Pysbs in different python interpreter (maya, sd, blender...)
  7. Integrations
    1. Substance Maya toolset
      1. Substance Maya Toolset overview
      2. Installing
      3. Launching
      4. Baking
        1. Baking overview
        2. Export parameters
        3. Baker parameters
        4. Mesh setup
        5. Using a template
      5. Changelog
  8. Changelog overview

PySbs batchtools module

The PySbs batchtools module allows you to call the different command line tools like ordinary python commands.

batchtools module batchtools api reference.

The batchtools module wraps subprocess.Popen and makes it possible to use different command options as native arguments in python. The common structure of a batchtool is:

{toolName}_{toolCommand}(an_input_file, bool_flag=True, string_flag="a value", int_flag=1, list_flag=["a value", "other value"], ...) 
 
# I.E 
# a batchtool commandline conversion: 
# sbsbaker ambient-occlusion-from-mesh /a/path/to/a/mesh/foo_low.fbx --output-size 8,8 --highdef-mesh a/path/to/a/mesh/foo_hi.fbx --output-name baked_name 
# PySBS version : 
proc = sbsbaker_ambient_occlusion_from_mesh("/a/path/to/a/mesh/foo_low.fbx", output_size=(8, 8), 
                                            highdef_mesh="/a/path/to/a/mesh/foo_hi.fbx", output_name="baked_name") 
proc.wait() # wait the end of the process

It is important to call .wait() on the returned process handle before using any output data from the command.

ref-to-demobatchtools Examples which demonstrates an automated pipeline using a mesh with udims.

batchtool’s OutputHandlers

For some batchtools it can be an advantage to retrieve information from the output of the process. As instance batchtools.sbsbaker_info output is very useful to retrieve mesh information like udims or color id but the process management and the information parsing may become painful. That’s why SAT introduced some OutputHandlers to handle this for you. An OutputHandler become the result of a bachtools call instead of a Popen object. The OutputHandler digests the process and its output to give an usable object depend of the batchtool.

Example:

# call a sbsbaker_info with the kwarg output_handler=True to get an OutputHandler instead of Popen 
# the OutputHandler will stop the interpreter during the batchtool process exactly like Popen.wait() 
out = batchtools.sbsbaker_info('foo.fbx', output_handler=True) 
print(out) 
# <pysbs.batchtools.output_handlers.SbsBakerInfoOutputHandler object at 0x7f8808fe1c50> 
# to get the result use get_results, an OutputHandler's common method 
results = out.get_results() 
print(results) 
# [<pysbs.batchtools.sbsbaker_info_handlers.SbsBakerInfoEntityStruct object at 0x7f7757881c10>, <pysbs.batchtools.sbsbaker_info_handlers.SbsBakerInfoEntityStruct object at 0x7f7757881e10>] 
# SbsBakerInfoOutputHandler.get_results() return a list of SbsBakerInfoEntityStruct. Follow the doc to get more details of SbsBakerInfoEntityStruct 
# as mush as possible each member type is converted in a python type. 
for entity in results: 
    # some examples of its different members 
    print(entity.label) 
    for mesh in entity.meshes: 
        print(mesh.vertices_number) 
        for uv in mesh.uvs: 
            print(uv.udim_tiles) 
        for subpart in mesh.submeshes: 
            print(subpart.color) 
# it become easy to retrieve all the udims or uv tiles: 
all_udims = set([udim for entity in results for mesh in entity.meshes for uv in mesh.uvs for udim in uv.udim_tiles]) 
 
# an other OutputHandler common method is dump() to write the output in a stream IO (file) 
with open("dumped_file.ext", 'w') as f: 
    out.dump(f)

More details on the different OutputHandlers and it’s associated objects :

SbsRenderOutputHandler output_handlers module

SbsRenderGraphStruct sbsrender_render_handlers module

SbsBakerInfoOutputHandler output_handlers module

SbsBakerInfoEntityStruct sbsbaker_info_handlers module

render animation sequence

As part of batchtools there is also sbsrender_render_animate function that allows you to render an image sequence. sbsrender_render_animate renders an image sequence from an sbsar input using sbsrender. It takes a start frame, an end frame and frames per second. The sbsrender command line tool will be called once for each frame.

By default the $time parameter will be generated for each frame based on start, end and fps. It is also possible to set pass in other sbsrender parameters globally.

To animate other parameters than $time sbsrender_render_animate has the animated_parameters argument . This argument allow to pass a list of pairs of parameter names and functions taking frame and fps as parameters allowing you to generate them over the image sequence.

More details about the different arguments on the api reference page batchtools module

Example:

batchtools.sbsrender_render_animate("explosion.sbsar", 
                                    start=0, 
                                    end=50, 
                                    fps=24, 
                                    output_path="{inputPath}/animate_outputs", 
                                    output_name="animate_frame_####", 
                                    input_graph_output="output", 
                                    animated_parameters=[ 
                                        ("input", lambda frame, fps: frame / fps)], 
                                    multi_proc=4)

This example renders 51 frames with a frame rate of 24. Note that the output_name value has a sequence padding looking like ### to specify the frame name in the filename. In this example the animated_parameters is used to tweak the input parameter over time using a lambda function taking the two arguments frame and fps

command_only option

Sometimes it could be great to only query the command line without execute it. As instance all the batchtools commands could be “starting” on the user local machine but not executed instead all the commands are written in a file that will be executed later by a renderfarm. Simple example:

from pysbs import batchtools 
cmds = [] 
cmds.append(batchtools.sbscooker("foo.sbs", output_path="/output", command_only=True)) 
cmds.append(batchtools.sbsrender_render("/output/foo.sbsar", output_path="/output", command_only=True)) 
with open("/output/batchcommands.txt", "w") as f: 
    f.writelines('n'.join(cmds))

Generate thumbnails

Get help faster and easier

New user?