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 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 instance.data or context.data. In some cases were pieces of code refactored a little e.g. fps getter in maya.
Documentation: API docs reborn - yet again #4419
Feature
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
or
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:
-
Wrong imports
Invalid import are usually wrong relative imports (too deep) or circular imports. -
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 -
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 README.md
. 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
- Run
/docs/make.bat html
- Read the red errors/warnings - fix it in the code
- Run
/docs/make.bat html
again until there are not red lines - Edit rst files and add some meaningfull content there
Note
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.
Warning
You need to add new dependencies to use it. Runcreate_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: 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.
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.
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 start.py
with ayon_start.py
(added tray start script to tools). Added constant AYON_SERVER_ENABLED
to openpype/__init__.py
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.
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 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.
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: 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 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 instance.data
.
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.py
Reference: #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.
Refactored code
Loader: Remove `context` argument from Loader.__init__() #4602
Remove the previously required context
argument.
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 Gaffer Integration by BigRoy · Pull Request #4267 · ynput/OpenPype · GitHub 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…