diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index fe86a8400b..54a4ee6ac0 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -35,6 +35,19 @@ body:
label: Version
description: What version are you running? Look to OpenPype Tray
options:
+ - 3.15.9-nightly.1
+ - 3.15.8
+ - 3.15.8-nightly.3
+ - 3.15.8-nightly.2
+ - 3.15.8-nightly.1
+ - 3.15.7
+ - 3.15.7-nightly.3
+ - 3.15.7-nightly.2
+ - 3.15.7-nightly.1
+ - 3.15.6
+ - 3.15.6-nightly.3
+ - 3.15.6-nightly.2
+ - 3.15.6-nightly.1
- 3.15.5
- 3.15.5-nightly.2
- 3.15.5-nightly.1
@@ -122,19 +135,6 @@ body:
- 3.14.2-nightly.5
- 3.14.2-nightly.4
- 3.14.2-nightly.3
- - 3.14.2-nightly.2
- - 3.14.2-nightly.1
- - 3.14.1
- - 3.14.1-nightly.4
- - 3.14.1-nightly.3
- - 3.14.1-nightly.2
- - 3.14.1-nightly.1
- - 3.14.0
- - 3.14.0-nightly.1
- - 3.13.1-nightly.3
- - 3.13.1-nightly.2
- - 3.13.1-nightly.1
- - 3.13.0
validations:
required: true
- type: dropdown
diff --git a/.github/workflows/update_bug_report.yml b/.github/workflows/update_bug_report.yml
index 7a1bfb7bfd..1e5da414bb 100644
--- a/.github/workflows/update_bug_report.yml
+++ b/.github/workflows/update_bug_report.yml
@@ -18,10 +18,16 @@ jobs:
uses: ynput/gha-populate-form-version@main
with:
github_token: ${{ secrets.YNPUT_BOT_TOKEN }}
- github_user: ${{ secrets.CI_USER }}
- github_email: ${{ secrets.CI_EMAIL }}
registry: github
dropdown: _version
limit_to: 100
form: .github/ISSUE_TEMPLATE/bug_report.yml
commit_message: 'chore(): update bug report / version'
+ dry_run: no-push
+
+ - name: Push to protected develop branch
+ uses: CasperWA/push-protected@v2.10.0
+ with:
+ token: ${{ secrets.YNPUT_BOT_TOKEN }}
+ branch: develop
+ unprotect_reviews: true
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 18e7cd7bf2..50f52f65a3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -112,3 +112,9 @@ tools/run_eventserver.*
tools/dev_*
.github_changelog_generator
+
+
+# Addons
+########
+/openpype/addons/*
+!/openpype/addons/README.md
diff --git a/.gitmodules b/.gitmodules
index fe93791c4e..4de92471f7 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -4,4 +4,7 @@
[submodule "tools/modules/powershell/PSWriteColor"]
path = tools/modules/powershell/PSWriteColor
- url = https://github.com/EvotecIT/PSWriteColor.git
\ No newline at end of file
+ url = https://github.com/EvotecIT/PSWriteColor.git
+[submodule "openpype/hosts/unreal/integration"]
+ path = openpype/hosts/unreal/integration
+ url = https://github.com/ynput/ayon-unreal-plugin.git
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 16deaaa4fd..a33904735b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,849 @@
# Changelog
+## [3.15.8](https://github.com/ynput/OpenPype/tree/3.15.8)
+
+
+[Full Changelog](https://github.com/ynput/OpenPype/compare/3.15.7...3.15.8)
+
+### **🆕 New features**
+
+
+
+Publisher: Show instances in report page #4915
+
+Show publish instances in report page. Also added basic log view with logs grouped by instance. Validation error detail now have 2 colums, one with erro details second with logs. Crashed state shows fast access to report action buttons. Success will show only logs. Publish frame is shrunked automatically on publish stop.
+
+
+___
+
+
+
+
+
+Fusion - Loader plugins updates #4920
+
+Update to some Fusion loader plugins:The sequence loader can now load footage from the image and online family.The FBX loader can now import all formats Fusions FBX node can read.You can now import the content of another workfile into your current comp with the workfile loader.
+
+
+___
+
+
+
+
+
+Fusion: deadline farm rendering #4955
+
+Enabling Fusion for deadline farm rendering.
+
+
+___
+
+
+
+
+
+AfterEffects: set frame range and resolution #4983
+
+Frame information (frame start, duration, fps) and resolution (width and height) is applied to selected composition from Asset Management System (Ftrack or DB) automatically when published instance is created.It is also possible explicitly propagate both values from DB to selected composition by newly added menu buttons.
+
+
+___
+
+
+
+
+
+Publish: Enhance automated publish plugin settings #4986
+
+Added plugins option to define settings category where to look for settings of a plugin and added public helper functions to apply settings `get_plugin_settings` and `apply_plugin_settings_automatically`.
+
+
+___
+
+
+
+### **🚀 Enhancements**
+
+
+
+Load Rig References - Change Rig to Animation in Animation instance #4877
+
+We are using the template builder to build an animation scene. All the rig placeholders are imported correctly, but the automatically created animation instances retain the rig family in their names and subsets. In our example, we need animationMain instead of rigMain, because this name will be used in the following steps like lighting.Here is the result we need. I checked, and it's not a template builder problem, because even if I load a rig as a reference, the result is the same. For me, since we are in the animation instance, it makes more sense to have animation instead of rig in the name. The naming is just fine if we use create from the Openpype menu.
+
+
+___
+
+
+
+
+
+Enhancement: Resolve prelaunch code refactoring and update defaults #4916
+
+The main reason of this PR is wrong default settings in `openpype/settings/defaults/system_settings/applications.json` for Resolve host. The `bin` folder should not be a part of the macos and Linux `RESOLVE_PYTHON3_PATH` variable.The rest of this PR is some code cleanups for Resolve prelaunch hook to simplify further development.Also added a .gitignore for vscode workspace files.
+
+
+___
+
+
+
+
+
+Unreal: 🚚 move Unreal plugin to separate repository #4980
+
+To support Epic Marketplace have to move AYON Unreal integration plugins to separate repository. This is replacing current files with git submodule, so the change should be functionally without impact.New repository lives here: https://github.com/ynput/ayon-unreal-plugin
+
+
+___
+
+
+
+
+
+General: Lib code cleanup #5003
+
+Small cleanup in lib files in openpype.
+
+
+___
+
+
+
+
+
+Allow to open with djv by extension instead of representation name #5004
+
+Filter open in djv action by extension instead of representation.
+
+
+___
+
+
+
+
+
+DJV open action `extensions` as `set` #5005
+
+Change `extensions` attribute to `set`.
+
+
+___
+
+
+
+
+
+Nuke: extract thumbnail with multiple reposition nodes #5011
+
+Added support for multiple reposition nodes.
+
+
+___
+
+
+
+
+
+Enhancement: Improve logging levels and messages for artist facing publish reports #5018
+
+Tweak the logging levels and messages to try and only show those logs that an artist should see and could understand. Move anything that's slightly more involved into a "debug" message instead.
+
+
+___
+
+
+
+### **🐛 Bug fixes**
+
+
+
+Bugfix/frame variable fix #4978
+
+Renamed variables to match OpenPype terminology to reduce confusion and add consistency.
+___
+
+
+
+
+
+Global: plugins cleanup plugin will leave beauty rendered files #4790
+
+Attempt to mark more files to be cleaned up explicitly in intermediate `renders` folder in work area for farm jobs.
+
+
+___
+
+
+
+
+
+Fix: Download last workfile doesn't work if not already downloaded #4942
+
+Some optimization condition is messing with the feature: if the published workfile is not already downloaded, it won't download it...
+
+
+___
+
+
+
+
+
+Unreal: Fix transform when loading layout to match existing assets #4972
+
+Fixed transform when loading layout to match existing assets.
+
+
+___
+
+
+
+
+
+fix the bug of fbx loaders in Max #4977
+
+bug fix of fbx loaders for not being able to parent to the CON instances while importing cameras(and models) which is published from other DCCs such as Maya.
+
+
+___
+
+
+
+
+
+AfterEffects: allow returning stub with not saved workfile #4984
+
+Allows to use Workfile app to Save first empty workfile.
+
+
+___
+
+
+
+
+
+Blender: Fix Alembic loading #4985
+
+Fixed problem occurring when trying to load an Alembic model in Blender.
+
+
+___
+
+
+
+
+
+Unreal: Addon Py2 compatibility #4994
+
+Fixed Python 2 compatibility of unreal addon.
+
+
+___
+
+
+
+
+
+Nuke: fixed missing files key in representation #4999
+
+Issue with missing keys once rendering target set to existing frames is fixed. Instance has to be evaluated in validation for missing files.
+
+
+___
+
+
+
+
+
+Unreal: Fix the frame range when loading camera #5002
+
+The keyframes of the camera, when loaded, were not using the correct frame range.
+
+
+___
+
+
+
+
+
+Fusion: fixing frame range targeting #5013
+
+Frame range targeting at Rendering instances is now following configured options.
+
+
+___
+
+
+
+
+
+Deadline: fix selection from multiple webservices #5015
+
+Multiple different DL webservice could be configured. First they must by configured in System Settings., then they could be configured per project in `project_settings/deadline/deadline_servers`.Only single webservice could be a target of publish though.
+
+
+___
+
+
+
+### **Merged pull requests**
+
+
+
+3dsmax: Refactored publish plugins to use proper implementation of pymxs #4988
+
+
+___
+
+
+
+
+
+
+## [3.15.7](https://github.com/ynput/OpenPype/tree/3.15.7)
+
+
+[Full Changelog](https://github.com/ynput/OpenPype/compare/3.15.6...3.15.7)
+
+### **🆕 New features**
+
+
+
+Addons directory #4893
+
+This adds a directory for Addons, for easier distribution of studio specific code.
+
+
+___
+
+
+
+
+
+Kitsu - Add "image", "online" and "plate" to review families #4923
+
+This PR adds "image", "online" and "plate" to the review families so they also can be uploaded to Kitsu.It also adds the `Add review to Kitsu` tag to the default png review. Without it the user would manually need to add it for single image uploads to Kitsu and might confuse users (it confused me first for a while as movies did work).
+
+
+___
+
+
+
+
+
+Feature/remove and load inv action #4930
+
+Added the ability to remove and load a container, as a way to reset it.This can be useful in cases where a container breaks in a way that can be fixed by removing it, then reloading it.Also added the ability to add `InventoryAction` plugins by placing them in `openpype/plugins/inventory`.
+
+
+___
+
+
+
+### **🚀 Enhancements**
+
+
+
+Load Rig References - Change Rig to Animation in Animation instance #4877
+
+We are using the template builder to build an animation scene. All the rig placeholders are imported correctly, but the automatically created animation instances retain the rig family in their names and subsets. In our example, we need animationMain instead of rigMain, because this name will be used in the following steps like lighting.Here is the result we need. I checked, and it's not a template builder problem, because even if I load a rig as a reference, the result is the same. For me, since we are in the animation instance, it makes more sense to have animation instead of rig in the name. The naming is just fine if we use create from the Openpype menu.
+
+
+___
+
+
+
+
+
+Maya template builder - preserve all references when importing a template #4797
+
+When building a template with Maya template builder, we import the template and also the references inside the template file. This causes some problems:
+- We cannot use the references to version assets imported by the template.
+- When we import the file, the internal reference files are also imported. As a side effect, Maya complains about a reference that no longer exists.`// Error: file: /xxx/maya/2023.3/linux/scripts/AETemplates/AEtransformRelated.mel line 58: Reference node 'turntable_mayaSceneMain_01_RN' is not associated with a reference file.`
+
+
+___
+
+
+
+
+
+Unreal: Renaming the integration plugin to Ayon. #4646
+
+Renamed the .h, and .cpp files to Ayon. Also renamed the classes to with the Ayon keyword.
+
+
+___
+
+
+
+
+
+3dsMax: render dialogue needs to be closed #4729
+
+Make sure the render setup dialog is in a closed state for the update of resolution and other render settings
+
+
+___
+
+
+
+
+
+Maya Template Builder - Remove default cameras from renderable cameras #4815
+
+When we build an asset workfile with build workfile from template inside Maya, we load our turntable camera. But then we end up with 2 renderables camera : **persp** the one imported from the template.We need to remove the **persp** camera (or any other default camera) from renderable cameras when building the work file.
+
+
+___
+
+
+
+
+
+Validators for Frame Range in Max #4914
+
+Switch Render Frame Range Type to 3 for specific ranges (initial setup for the range type is 4)Reset Frame Range will also set the frame range for render settingsRender Collector won't take the frame range from context data but take the range directly from render settingAdd validators for render frame range type and frame range respectively with repair action
+
+
+___
+
+
+
+
+
+Fusion: Saver creator settings #4943
+
+Adding Saver creator settings and enhanced rendering path with template.
+
+
+___
+
+
+
+
+
+General: Project Anatomy on creators #4962
+
+Anatomy object of current project is available on `CreateContext` and create plugins.
+
+
+___
+
+
+
+### **🐛 Bug fixes**
+
+
+
+Maya: Validate shader name - OP-5903 #4971
+
+Running the plugin would error with:
+```
+// TypeError: 'str' object cannot be interpreted as an integer
+```Fixed and added setting `active`.
+
+
+___
+
+
+
+
+
+Houdini: Fix slow Houdini launch due to shelves generation #4829
+
+Shelf generation during Houdini startup would add an insane amount of delay for the Houdini UI to launch correctly. By deferring the shelf generation this takes away the 5+ minutes of delay for the Houdini UI to launch.
+
+
+___
+
+
+
+
+
+Fusion - Fixed "optional validation" #4912
+
+Added OptionalPyblishPluginMixin and is_active checks for all publish tools that should be optional
+
+
+___
+
+
+
+
+
+Bug: add missing `pyblish.util` import #4937
+
+remote publishing was missing import of `remote_publish`. This is adding it back.
+
+
+___
+
+
+
+
+
+Unreal: Fix missing 'object_path' property #4938
+
+Epic removed the `object_path` property from `AssetData`. This PR fixes usages of that property.Fixes #4936
+
+
+___
+
+
+
+
+
+Remove obsolete global validator #4939
+
+Removing `Validate Sequence Frames` validator from global plugins as it wasn't handling correctly many things and was by mistake enabled, breaking functionality on Deadline.
+
+
+___
+
+
+
+
+
+General: fix build_workfile get_linked_assets missing project_name arg #4940
+
+Linked assets collection don't work within `build_workfile` because `get_linked_assets` function call has a missing `project_name`argument.
+- Added the `project_name` arg to the `get_linked_assets` function call.
+
+
+___
+
+
+
+
+
+General: fix Scene Inventory switch version error dialog missing parent arg on init #4941
+
+QuickFix for the switch version error dialog to set inventory widget as parent.
+
+
+___
+
+
+
+
+
+Unreal: Fix camera frame range #4956
+
+Fix the frame range of the level sequence for the Camera in Unreal.
+
+
+___
+
+
+
+
+
+Unreal: Fix missing parameter when updating Alembic StaticMesh #4957
+
+Fix an error when updating an Alembic StaticMesh in Unreal, due to a missing parameter in a function call.
+
+
+___
+
+
+
+
+
+Unreal: Fix render extraction #4963
+
+Fix a problem with the extraction of renders in Unreal.
+
+
+___
+
+
+
+
+
+Unreal: Remove Python 3.8 syntax from addon #4965
+
+Removed Python 3.8 syntax from addon.
+
+
+___
+
+
+
+
+
+Ftrack: Fix editorial task creation #4966
+
+Fix key assignment on instance data during editorial publishing in ftrack hierarchy integration.
+
+
+___
+
+
+
+### **Merged pull requests**
+
+
+
+Add "shortcut" to Scripts Menu Definition #4927
+
+Add the possibility to associate a shorcut for an entry in the script menu definition with the key "shortcut"
+
+
+___
+
+
+
+
+
+
+## [3.15.6](https://github.com/ynput/OpenPype/tree/3.15.6)
+
+
+[Full Changelog](https://github.com/ynput/OpenPype/compare/3.15.5...3.15.6)
+
+### **🆕 New features**
+
+
+
+Substance Painter Integration #4283
+
+This implements a part of #4205 by implementing a Substance Painter integration
+
+Status:
+- [x] Implement Host
+- [x] start substance with last workfile using `AddLastWorkfileToLaunchArgs` prelaunch hook
+- [x] Implement Qt tools
+- [x] Implement loaders
+- [x] Implemented a Set project mesh loader (this is relatively special case because a Project will always have exactly one mesh - a Substance Painter project cannot exist without a mesh).
+- [x] Implement project open callback
+- [x] On project open it notifies the user if the loaded model is outdated
+- [x] Implement publishing logic
+- [x] Workfile publishing
+- [x] Export Texture Sets
+- [x] Support OCIO using #4195 (draft brach is set up - see comment)
+- [ ] Likely needs more testing on the OCIO front
+- [x] Validate all outputs of the Export template are exported/generated
+- [x] Allow validation to be optional **(issue: there's no API method to detect what maps will be exported without doing an actual export to disk)**
+- [x] Support extracting/integration if not all outputs are generated
+- [x] Support multiple materials/texture sets per instance
+- [ ] Add validator that can enforce only a single texture set output if studio prefers that.
+- [ ] Implement Export File Format (extensions) override in Creator
+- [ ] Add settings so Admin can choose which extensions are available.
+
+
+___
+
+
+
+
+
+Data Exchange: Geometry in 3dsMax #4555
+
+Introduces and updates a creator, extractors and loaders for model family
+
+Introduces new creator, extractors and loaders for model family while adding model families into the existing max scene loader and extractor
+- [x] creators
+- [x] adding model family into max scene loader and extractor
+- [x] fbx loader
+- [x] fbx extractor
+- [x] usd loader
+- [x] usd extractor
+- [x] validator for model family
+- [x] obj loader(update function)
+- [x] fix the update function of the loader as #4675
+- [x] Add documentation
+
+
+___
+
+
+
+
+
+AfterEffects: add review flag to each instance #4884
+
+Adds `mark_for_review` flag to the Creator to allow artists to disable review if necessary.Exposed this flag in Settings, by default set to True (eg. same behavior as previously).
+
+
+___
+
+
+
+### **🚀 Enhancements**
+
+
+
+Houdini: Fix Validate Output Node (VDB) #4819
+
+- Removes plug-in that was a duplicate of this plug-in.
+- Optimize logging of many prims slightly
+- Fix error reporting like https://github.com/ynput/OpenPype/pull/4818 did
+
+
+___
+
+
+
+
+
+Houdini: Add null node as output indicator when using TAB search #4834
+
+
+___
+
+
+
+
+
+Houdini: Don't error in collect review if camera is not set correctly #4874
+
+Do not raise an error in collector when invalid path is set as camera path. Allow camera path to not be set correctly in review instance until validation so it's nicely shown in a validation report.
+
+
+___
+
+
+
+
+
+Project packager: Backup and restore can store only database #4879
+
+Pack project functionality have option to zip only project database without project files. Unpack project can skip project copy if the folder is not found.Added helper functions to `openpype.client.mongo` that can be also used for tests as replacement of mongo dump.
+
+
+___
+
+
+
+
+
+Houdini: ExtractOpenGL for Review instance not optional #4881
+
+Don't make ExtractOpenGL optional for review instance optional.
+
+
+___
+
+
+
+
+
+Publisher: Small style changes #4894
+
+Small changes in styles and form of publisher UI.
+
+
+___
+
+
+
+
+
+Houdini: Workfile icon in new publisher #4898
+
+Fix icon for the workfile instance in new publisher
+
+
+___
+
+
+
+
+
+Fusion: Simplify creator icons code #4899
+
+Simplify code for setting the icons for the Fusion creators
+
+
+___
+
+
+
+
+
+Enhancement: Fix PySide 6.5 support for loader #4900
+
+Fixes PySide 6.5 support in Loader.
+
+
+___
+
+
+
+### **🐛 Bug fixes**
+
+
+
+Maya: Validate Attributes #4917
+
+This plugin was broken due to bad fetching of data and wrong repair action.
+
+
+___
+
+
+
+
+
+Fix: Locally copied version of last published workfile is not incremented #4722
+
+### Fix 1
+When copied, the local workfile version keeps the published version number, when it must be +1 to follow OP's naming convention.
+
+### Fix 2
+Local workfile version's name is built from anatomy. This avoids to get workfiles with their publish template naming.
+
+### Fix 3
+In the case a subset has at least two tasks with published workfiles, for example `Modeling` and `Rigging`, launching `Rigging` was getting the first one with the `next` and trying to find representations, therefore `workfileModeling` and trying to match the current `task_name` (`Rigging`) with the `representation["context"]["task"]["name"]` of a Modeling representation, which was ending up to a `workfile_representation` to `None`, and exiting the process.
+
+Trying to find the `task_name` in the `subset['name']` fixes it.
+
+### Fix 4
+Fetch input dependencies of workfile.
+
+Replacing https://github.com/ynput/OpenPype/pull/4102 for changes to bring this home.
+___
+
+
+
+
+
+Maya: soft-fail when pan/zoom locked on camera when playblasting #4929
+
+When pan/zoom enabled attribute on camera is locked, playblasting with pan/zoom fails because it is trying to restore it. This is fixing it by skipping over with warning.
+
+
+___
+
+
+
+### **Merged pull requests**
+
+
+
+Maya Load References - Add Display Handle Setting #4904
+
+When we load a reference in Maya using OpenPype loader, display handle is checked by default and prevent us to select easily the object in the viewport. I understand that some productions like to keep this option, so I propose to add display handle to the reference loader settings.
+
+
+___
+
+
+
+
+
+Photoshop: add autocreators for review and flat image #4871
+
+Review and flatten image (produced when no instance of `image` family was created) were created somehow magically. This PRintroduces two new auto creators which allow artists to disable review or flatten image.For all `image` instances `Review` flag was added to provide functionality to create separate review per `image` instance. Previously was possible only to have separate instance of `review` family.Review is not enabled on `image` family by default. (Eg. follows original behavior)Review auto creator is enabled by default as it was before.Flatten image creator must be set in Settings in `project_settings/photoshop/create/AutoImageCreator`.
+
+
+___
+
+
+
+
+
+
## [3.15.5](https://github.com/ynput/OpenPype/tree/3.15.5)
diff --git a/inno_setup.iss b/inno_setup.iss
index 3adde52a8b..418bedbd4d 100644
--- a/inno_setup.iss
+++ b/inno_setup.iss
@@ -14,10 +14,10 @@ AppId={{B9E9DF6A-5BDA-42DD-9F35-C09D564C4D93}
AppName={#MyAppName}
AppVersion={#AppVer}
AppVerName={#MyAppName} version {#AppVer}
-AppPublisher=Orbi Tools s.r.o
-AppPublisherURL=http://pype.club
-AppSupportURL=http://pype.club
-AppUpdatesURL=http://pype.club
+AppPublisher=Ynput s.r.o
+AppPublisherURL=https://ynput.io
+AppSupportURL=https://ynput.io
+AppUpdatesURL=https://ynput.io
DefaultDirName={autopf}\{#MyAppName}\{#AppVer}
UsePreviousAppDir=no
DisableProgramGroupPage=yes
diff --git a/openpype/addons/README.md b/openpype/addons/README.md
new file mode 100644
index 0000000000..92b8b8c07c
--- /dev/null
+++ b/openpype/addons/README.md
@@ -0,0 +1,3 @@
+This directory is for storing external addons that needs to be included in the pipeline when distributed.
+
+The directory is ignored by Git, but included in the zip and installation files.
diff --git a/openpype/hooks/pre_add_last_workfile_arg.py b/openpype/hooks/pre_add_last_workfile_arg.py
index 2a35db869a..c54acbc203 100644
--- a/openpype/hooks/pre_add_last_workfile_arg.py
+++ b/openpype/hooks/pre_add_last_workfile_arg.py
@@ -25,6 +25,7 @@ class AddLastWorkfileToLaunchArgs(PreLaunchHook):
"blender",
"photoshop",
"tvpaint",
+ "substancepainter",
"aftereffects"
]
diff --git a/openpype/hooks/pre_host_set_ocio.py b/openpype/hooks/pre_host_set_ocio.py
new file mode 100644
index 0000000000..3620d88db6
--- /dev/null
+++ b/openpype/hooks/pre_host_set_ocio.py
@@ -0,0 +1,37 @@
+from openpype.lib import PreLaunchHook
+
+from openpype.pipeline.colorspace import get_imageio_config
+from openpype.pipeline.template_data import get_template_data
+
+
+class PreLaunchHostSetOCIO(PreLaunchHook):
+ """Set OCIO environment for the host"""
+
+ order = 0
+ app_groups = ["substancepainter"]
+
+ def execute(self):
+ """Hook entry method."""
+
+ anatomy_data = get_template_data(
+ project_doc=self.data["project_doc"],
+ asset_doc=self.data["asset_doc"],
+ task_name=self.data["task_name"],
+ host_name=self.host_name,
+ system_settings=self.data["system_settings"]
+ )
+
+ ocio_config = get_imageio_config(
+ project_name=self.data["project_doc"]["name"],
+ host_name=self.host_name,
+ project_settings=self.data["project_settings"],
+ anatomy_data=anatomy_data,
+ anatomy=self.data["anatomy"]
+ )
+
+ if ocio_config:
+ ocio_path = ocio_config["path"]
+ self.log.info(f"Setting OCIO config path: {ocio_path}")
+ self.launch_context.env["OCIO"] = ocio_path
+ else:
+ self.log.debug("OCIO not set or enabled")
diff --git a/openpype/hosts/aftereffects/api/__init__.py b/openpype/hosts/aftereffects/api/__init__.py
index a7137ba8fb..28062cc35d 100644
--- a/openpype/hosts/aftereffects/api/__init__.py
+++ b/openpype/hosts/aftereffects/api/__init__.py
@@ -4,9 +4,8 @@ Anything that isn't defined here is INTERNAL and unreliable for external use.
"""
-from .launch_logic import (
+from .ws_stub import (
get_stub,
- stub,
)
from .pipeline import (
@@ -18,7 +17,8 @@ from .pipeline import (
from .lib import (
maintained_selection,
get_extension_manifest_path,
- get_asset_settings
+ get_asset_settings,
+ set_settings
)
from .plugin import (
@@ -27,9 +27,8 @@ from .plugin import (
__all__ = [
- # launch_logic
+ # ws_stub
"get_stub",
- "stub",
# pipeline
"ls",
@@ -39,6 +38,7 @@ __all__ = [
"maintained_selection",
"get_extension_manifest_path",
"get_asset_settings",
+ "set_settings",
# plugin
"AfterEffectsLoader"
diff --git a/openpype/hosts/aftereffects/api/extension.zxp b/openpype/hosts/aftereffects/api/extension.zxp
index b436f0ca0b..50fda416f8 100644
Binary files a/openpype/hosts/aftereffects/api/extension.zxp and b/openpype/hosts/aftereffects/api/extension.zxp differ
diff --git a/openpype/hosts/aftereffects/api/extension/CSXS/manifest.xml b/openpype/hosts/aftereffects/api/extension/CSXS/manifest.xml
index f96e80c503..9f65720ef0 100644
--- a/openpype/hosts/aftereffects/api/extension/CSXS/manifest.xml
+++ b/openpype/hosts/aftereffects/api/extension/CSXS/manifest.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/openpype/hosts/aftereffects/api/extension/index.html b/openpype/hosts/aftereffects/api/extension/index.html
index 52a7c4964f..291965559f 100644
--- a/openpype/hosts/aftereffects/api/extension/index.html
+++ b/openpype/hosts/aftereffects/api/extension/index.html
@@ -2,7 +2,7 @@
-
+
@@ -25,11 +25,11 @@
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
-
-
+
+
+
-
-
-
+
+
+
+
+
+
-
-
+
+
-
+
@@ -107,6 +143,6 @@
-
+
-
\ No newline at end of file
+