OpenPype 3.16.0

OpenPype 3.16.0 release notes

We have a new minor release. To upgrade from any version lower than 3.16 you will need to deploy a new executable for your artists as there are some python depedency changes in this version.

Please bear in mind that this is not yet considered production stable, we’ll mark it as such after more validation.

AYON server compatibility

3.16.0 is the first release that can be used with AYON server instead of the old OpenPype mongo backend. There is still a lot of work to be done, but the main structural bits towards transition to AYON on the desktop side are now all in place.

New publisher GUI in MAYA

We’ve finally merged all the great work by @BigRoy who helped us convert maya integration to use the new publisher GUI. It was a tremendous amount of work and now opens up a lot of possibilities to improve maya workflows with the new publisher capabilities.

Full changelog:

:new: New features

General: Reduce usage of legacy io #4723

Replace usages of legacy_io with getter methods or reuse already available information. Create plugins using CreateContext are using context from CreateContext object. Loaders are usign getter function from context tools. Publish plugin are using information or In some cases were pieces of code refactored a little e.g. fps getter in maya.

Documentation: API docs reborn - yet again #4419


Add functional base for API Documentation using Sphinx and AutoAPI.

After unsuccessful #2512, #834 and #210 this is yet another try. But this time without ambition to solve the whole issue. This is making Shinx script to work and nothing else. Any changes and improvements in API docs should be made in subsequent PRs.

How to use it

You can run:

cd .\docs
make.bat html


cd ./docs
make html

This will go over our code and generate .rst files in /docs/source/autoapi and from those it will generate full html documentation in /docs/build/html.

During the build you’ll see tons of red errors that are pointing to our issues:

  1. Wrong imports
    Invalid import are usually wrong relative imports (too deep) or circular imports.

  2. Invalid doc-strings
    Doc-strings to be processed into documentation needs to follow some syntax - this can be checked by running
    pydocstyle that is already included with OpenPype

  3. Invalid markdown/rst files
    md/rst files can be included inside rst files using .. include:: directive. But they have to be properly formatted.

Editing rst templates

Everything starts with /docs/source/index.rst - this file should be properly edited, Right now it just includes readme.rst that in turn include and parse main This is entrypoint to API documentation. All templates generated by AutoAPI are in /docs/source/autoapi. They should be eventually commited to repository and edited too.

Steps for enhancing API documentation

  1. Run /docs/make.bat html
  2. Read the red errors/warnings - fix it in the code
  3. Run /docs/make.bat html again until there are not red lines
  4. Edit rst files and add some meaningfull content there

This can (should) be merged as is without doc-string fixes in the code or changes in templates. All additional improvements on API documentation should be made in new PRs.

You need to add new dependencies to use it. Run create_venv.

Connected to #2490

Global: custom location for OP local versions #4673

This provides configurable location to unzip Openpype version zips. By default, it was hardcoded to artist’s app data folder, which might be problematic/slow with roaming profiles.Location must be accessible by user running OP Tray with write permissions (so Program Files might be problematic)

AYON: Update settings conversion #4837

Updated conversion script of AYON settings to v3 settings. PR is related to changes in addons repository Update settings from v3 by iLLiCiTiT · Pull Request #6 · ynput/ayon-addons-settings · GitHub . Changed how the conversion happens → conversion output does not start with openpype defaults but as empty dictionary.

AYON: Implement integrate links publish plugin #4842

Implemented entity links get/create functions. Added new integrator which replaces v3 integrator for links.

General: Version attributes integration #4991

Implemented unified integrate plugin to update version attributes after all integrations for AYON. The goal is to be able update attribute values in a unified way to a version when all addon integrators are done, so e.g. ftrack can add ftrack id to matching version in AYON server etc.The can be stored under "versionAttributes" key.

AYON: Staging versions can be used #4992

Added ability to use staging versions in AYON mode.

AYON: Preparation for products #5038

Prepare ayon settings conversion script for product settings conversion.

Loader: Hide inactive versions in UI #5101

Added support for active argument to hide versions with active set to False in Loader UI when in AYON mode.

General: CLI addon command #5109

Added addon alias for module in OpenPype cli commands.

AYON: OpenPype as server addon #5199

OpenPype repository can be converted to AYON addon for distribution. Addon has defined dependencies that are required to use it and are not in base ayon-launcher (desktop application).

General: Runtime dependencies #5206

Defined runtime dependencies in pyproject toml. Moved python ocio and otio modules there.

AYON: Bundle distribution #5209

Since AYON server 0.3.0 are addon versions defined by bundles which affects how addons, dependency packages and installers are handled. Only source of truth, about any version of anything that should be used, is server bundle.

Feature/blender handle q application #5264

This edit is to change the way the QApplication is run for Blender. It calls in the singleton (QApplication) during the register. This is made so that other Qt applications and addons are able to run on Blender. In its current implementation, if a QApplication is already running, all functionality of OpenPype becomes unavailable.

:rocket: Enhancements

Maya: Refactor to new publisher #4388 Refactor Maya to use the new publisher with new creators.
General: Connect to AYON server (base) #3924

Initial implementation of being able use AYON server in current OpenPype client. Added ability to connect to AYON server and use base queries.

AYON mode has it’s own executable (and start script). To start in AYON mode just replace with (added tray start script to tools). Added constant AYON_SERVER_ENABLED to openpype/ to know if ayon mode is enabled. In that case Mongo is not used at all and any attempts will cause crashes.I had to modify ~/openpype/client content to be able do this switch. Mongo implementation was moved to mongo subfolder and use “star imports” in files from where current imports are used. Logic of any tool or query in code was not changed at all. Since functions were based on mongo queries they don’t use full potential of AYON server abilities.ATM implementation has login UI, distribution of files from server and replacement of mongo queries. For queries is used ayon_api module. Which is in live development so the versions may change from day to day.

Enhancement kitsu note with exceptions #4537

Adding a setting to choose some exceptions to IntegrateKitsuNote task status changes.

General: Environment variable for default OCIO configs #4670

Define environment variable which lead to root of builtin ocio configs to be able change the root without changing settings. For the path in settings was used "{OPENPYPE_ROOT}/vendor/bin/ocioconfig/OpenColorIOConfig" which disallow to change the root somewhere else. That will be needed in AYON where configs won’t be part of desktop application but downloaded from server.

AYON: Editorial hierarchy creation #4699

Implemented extract hierarchy to AYON plugin which created entities in AYON using ayon api.

AYON: Vendorize ayon api #4753

Vendorize ayon api into openpype vendor directory. The reason is that ayon-python-api is in live development and will fix/add features often in next few weeks/months, and because update of dependency requires new release → new build, we want to avoid the need of doing that as it would affect OpenPype development.

General: Update PySide 6 for MacOs #4764

New version of PySide6 does not have issues with settings UI. It is still breaking UI stylesheets so it is not changed for other plaforms but it is enhancement from previous state.

General: Removed unused cli commands #4902

Removed texturecopy and launch cli commands from cli commands.

AYON: Linux & MacOS launch script #4970

Added shell script to launch tray in AYON mode.

General: Qt scale enhancement #5059

Set ‘QT_SCALE_FACTOR_ROUNDING_POLICY’ scale factor rounding policy of QApplication to PassThrough so the scaling can be ‘float’ number and not just ‘int’ (150% → 1.5 scale).

CI: WPS linting instead of Hound (rebase) 2 #5115

Because Hound currently used to lint the code on GH ships with really old flake8 support, it fails miserably on any newer Python syntax. This PR is adding WPS linter to GitHub workflows that should step in.

Max: OP parameters only displays what is attached to the container #5229

The OP parameter in 3dsmax only displays what is currently attached to the container while deleting while you can see the items which is not added when you are adding to the container.

Testing: improving logging during testing #5271

Unit testing logging was crashing on more then one nested layers of inherited loggers.

Nuke: removing deprecated settings in baking #5275

Removing deprecated settings for baking with reformat. This option was only for single reformat node and it had been substituted with multiple reposition nodes.

:bug: Bug fixes

AYON: General fixes and updates #4975

Few smaller fixes related to AYON connection. Some of fixes were taken from this PR.

Start script: Change returncode on validate or list versions #4515

Change exit code from 1 to 0 when versions are printed or when version is validated.

Return code 1 is indicating error but there didn’t happen any error.

AYON: Change login UI works #4754

Fixed change of login UI. Logic change UI did show up, new login was successful, but after restart was used the previous login. This change fix the issue.

AYON: General issues #4763

Vendorized ayon_api from PR broke OpenPype launch, because ayon_api is not available. Moved ayon_api from ayon specific subforlder to common python vendor in OpenPype, and removed login in ayon start script (which was invalid anyway). Also made fixed compatibility with PySide6 by using qtpy instead of Qt and changing code which is not PySide6 compatible.

AYON: Small fixes #4841

Bugsfixes and enhancements related to AYON logic. Define BUILTIN_OCIO_ROOT environment variable so OCIO configs are working. Use constants from ayon api instead of hardcoding them in codebase. Change process name from “openpype” to “ayon”. Don’t execute login dialog when application is not yet running but use open method instead. Fixed missing modules settings which were not taken from openpype defaults. Updated ayon api to 0.1.17.

Bugfix - Update gazu to 0.9.3 #4845

This updates Gazu to 0.9.3 to make sure Gazu works with Kitsu and Zou 0.16.x+

Igniter: fix error reports in silent mode #4909

Some errors in silent mode commands in Igniter were suppressed and not visible for example in Deadline log.

General: Remove ayon api from poetry lock #4964

Remove AYON python api from pyproject.toml and poetry.lock again.

Ftrack: Fix AYON settings conversion #4967

Fix conversion of ftrack settings in AYON mode.

AYON: ISO date format conversion issues #4981

Function datetime.fromisoformat was replaced with arrow.get to be used instead.

AYON: Missing files on representations #4989

Fix integration of files into representation in server database.

General: Fix Python 2 vendor for arrow #4993

Moved remaining dependencies for arrow from ftrack to python 2 vendor.

General: Fix new load plugins for next minor relase #5000

Fix access to fname attribute which is not available on load plugin anymore.

General: Fix mongo secure connection #5031

Fix ssl and tls keys checks in mongo uri query string.

AYON: Fix site sync settings #5069

Fixed settings for AYON variant of sync server.

General: Replace deprecated keyword argument in PyMongo #5080

Use argument tlsCAFile instead of ssl_ca_certs to avoid deprecation warnings.

Igniter: QApplication is created #5081

Function _get_qt_app actually creates new QApplication if was not created yet.

General: Lower unidecode version #5090

Use older version of Unidecode module to support Python 2.

General: Lower cryptography to 39.0.0 #5099

Lower cryptography to 39.0.0 to avoid breaking of DCCs like Maya and Nuke.

AYON: Global environments key fix #5118

Seems that when converting ayon settings to OP settings the environments setting is put under the environments key in general however when populating the environment the environment key gets picked up, which does not contain the environment variables from the core/environments setting

Add collector to tray publisher for getting frame range data #5152

Add collector to tray publisher to get frame range data. User can choose to enable this collector if they need this in the publisher.Resolve #5136

Unreal: get current project settings not using unreal project name #5170

There was a bug where Unreal project name was used to query project settings. But Unreal project name can differ from the “real” one because of naming convention rules set by Unreal. This is fixing it by asking for current project settings.

Substance Painter: Fix Collect Texture Set Images unable to copy.deepcopy due to QMenu #5238

Fix copy.deepcopy of

Ayon: server returns different key #5251

Package returned from server has filename instead of name.

Substance Painter: Fix default color management settings #5259

The default settings for color management for Substance Painter were invalid, it was set to override the global config by default but specified no valid config paths of its own - and thus errored that the paths were not correct.This sets the defaults correctly to match other hosts.I quickly checked - this seems to be the only host with the wrong default settings

Nuke: fixing container data if windows path in value #5267

Windows path in container data are reformatted. Previously it was reported that Nuke was rising utf8 0xc0 error if backward slashes were in data values.

Houdini: fix typo error in collect arnold rop #5281

Fixing a typo error in collect_arnold_rop.pyReference: #5280

Slack - enhanced logging and protection against failure #5287

Covered issues found in production on customer site. SlackAPI exception doesn’t need to have ‘error’, covered uncaught exception.

Maya: Removed unnecessary import of pyblish.cli #5292

This import resulted in adding additional logging handler which lead to duplication of logs in hosts with plugins containing is_in_tests method. Import is unnecessary for testing functionality.

:twisted_rightwards_arrows: Refactored code

Loader: Remove `context` argument from Loader.__init__() #4602

Remove the previously required context argument.

Global: Remove legacy integrator #4786

Remove the legacy integrator.

:page_with_curl: Documentation

Next Minor Release #5291

Merged pull requests

Start script: Fix possible issues with destination drive path #4478

Drive paths for windows are fixing possibly missing slash at the end of destination path.

Windows subst command require to have destination path with slash if it’s a drive (it should be G:\ not G:).

Global: Move PyOpenColorIO to vendor/python #4946

So that DCCs don’t conflict with their own.

See for the issue with Gaffer.

I’m not sure if this is the correct approach, but I assume PySide/Shiboken is under vendor/python for this reason as well…

RuntimeError with Click on deadline publish #5065
1 Like