User Guide Cancel

Dependencies management | 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

Dependencies management

Dependencies management

The API provides features for managing dependencies in a Substance document.

Exporting a package with its dependencies

The module sbsexporter helps exporting a package with its dependencies and resources in a self-contained

directory or zip in the same way as Substance Designer can do.

The sample function demos.demoExportWithDependencies() demonstrates this feature and using the SBSExporter.export() function.

To launch the demo use this command line in the folder demos/:

python demos.py -fct: demoExportWithDependencies -args: "../sample/argsDemoExportWithDependencies.xml"

The scripts will generate the folder sample/ExportSBS/ with two exports of the TerrainMultiFractal substance, one zipped and the other one in a folder.

The following code exports a package into a self-contained directory:

from pysbs import substance, sbscleaner, sbsexporter 
 
# Parse the document to export 
sbsDoc = substance.SBSDocument(aContext, aFileAbsPath) 
sbsDoc.parseDoc() 
 
# You may want to clean up the Substance before exporting it 
# This will remove all isolated nodes, useless parameters, unused dependencies from the Substance 
sbscleaner.cleanSubstance(sbsDoc)   # User can pick whatever he wants to clean, see signature of sbscleaner.cleanSubstance() 
sbsDoc.writeDoc() 
 
# Create an exporter 
aExporter = sbsexporter.SBSExporter() 
 
# Export the package into an archived self-contained package, in the folder aDestFolderAbsPath 
# The resources and dependencies of this package will be included in the archive, including the ones referred by the alias sbs:// 
aResultingArchive = aExporter.export(aSBSDocument = sbsDoc, aExportFolder = aDestFolderAbsPath, 
                                     aBuildArchive = True, aAliasesToExport = ['sbs']) 
 
# Same as before, without archiving the resulting folder 
aResultingPath = aExporter.export(aSBSDocument = sbsDoc, aExportFolder = aDestFolderAbsPath, 
                                  aAliasesToExport = ['sbs'])

Impact propagation

This API allows to get all the Substances with a dependency on another Substance within a particular tree and

moving Substances from one folder to another making sure any relative paths are correctly updated.

Use the module sbsimpactmanager for propagating changes.

from pysbs import context, sbsimpactmanager 
 
aContext = context.Context() 
aSBSFile = 'myAbsPath/ToSubstance.sbs'  # The Substance to look for 
aTreePath = 'myAbsPath/ToTree/'         # The folder tree to browse 
 
# Getting all the Substances referencing another Substance 
IM = sbsimpactmanager.SBSImpactManager() 
referencingSBS = IM.getAllSubstancesWithDependencyOn(aContext, substancePath=aSBSFile, withinTree=aTreePath) 
 
# Updating all references of a Substance that has been moved to another path 
# This process can be interactive or not 
aNewPath = 'myNewAbsPath/ToSubstance.sbs' 
updatedSBS = IM.declareSBSMoved(aContext, oldPath=aSBSFile, newPath=aNewPath, withinTree=aTreePath, interactiveMode=True)

Get all substance dependencies recursively

This API allows you to get a list of all the substance dependencies from a substance file or a directory (can be a tree directory). For each dependency found a status is given like if the file exist or if there is a warning like a wrong substance version. Use the module sbsimpactmanager, more details in docstring

from pysbs import context, sbsimpactmanager 
 
# init an impactmanager instance with a context 
im = sbsimpactmanager.SBSImpactManager(context.Context()) 
 
# get a dependencies tree of a sbs file 
result_tree = im.getSBSTreeDependencies("/tmp/a/file.sbs", escapeDefaultSbs=True, escapeMismatchVersion=False, checkMissingFile=True) 
# same for a directory tree 
# result_tree = im.getSBSTreeDependenciesForAllSubstanceInTree("/tmp/a/substance/directory", escapeDefaultSbs=True, escapeMismatchVersion=False, checkMissingFile=True) 
 
# get missing dependencies 
missing_files = im.missingFiles 
 
# get mismatch version dependencies 
mismatch_files = im.mismatchVersionFiles 
 
# reset impact manager 
im.reset()

Dependency path resolution method

Since 2019.1, Designer has two different dependency path storage methods.
  • The old one which is the default behaviour, is relative storage. Directory that are not subdirectories of the package.sbs will be replaced by a dotdot symbol (dotdot or ../ in a path resolution mean “parent directory” or “go up one directory”).
  • The second method is a absolute storage. Dependencies that are not subdirectories of the package they will be written as absolute paths.

This option is handled by the Preferences > Project > General > Dependencies Path > …absolute paths parameter of the sbsprj file.

This choice can be configured from the ProjectMgr. If you instantiate a ProjectMgr with a sbsprj file or if you parse it (with .parseADoc) it will be used in the pysbs execution context. You can retrieve this option or tweak the value using the following functions:

# Get dependency path storage method 
aEnumDepsMethod = aProjectMgr.getDependenciesPathStorageMethod() 
# Set dependency path storage method 
aProjectMgr = context.ProjectMgr(aSbsPrjFilePath=sbsPrj) 
aProjectMgr.setDependenciesPathStorageMethod(sbsproject.SBSPRJDependenciesPathStorageMethods.ABSOLUTE) 
# or 
aProjectMgr.setDependenciesPathStorageMethod(sbsproject.SBSPRJDependenciesPathStorageMethods.RELATIVE)

Project Manager How To contains more information about the sbs project manager.

Get help faster and easier

New user?