diff --git a/openpype/hosts/aftereffects/api/extension.zxp b/openpype/hosts/aftereffects/api/extension.zxp index 35b0c0fc42..389d74505d 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 2480089825..668cb3fc24 100644 --- a/openpype/hosts/aftereffects/api/extension/CSXS/manifest.xml +++ b/openpype/hosts/aftereffects/api/extension/CSXS/manifest.xml @@ -1,5 +1,5 @@ - diff --git a/openpype/hosts/aftereffects/api/extension/js/main.js b/openpype/hosts/aftereffects/api/extension/js/main.js index 7736a07a5e..2105ea82dc 100644 --- a/openpype/hosts/aftereffects/api/extension/js/main.js +++ b/openpype/hosts/aftereffects/api/extension/js/main.js @@ -301,6 +301,15 @@ function main(websocket_url){ return get_extension_version(); }); + RPC.addRoute('AfterEffects.get_app_version', function (data) { + log.warn('Server called client route "get_app_version":', data); + return runEvalScript("getAppVersion()") + .then(function(result){ + log.warn("get_app_version: " + result); + return result; + }); + }); + RPC.addRoute('AfterEffects.close', function (data) { log.warn('Server called client route "close":', data); return runEvalScript("close()"); diff --git a/openpype/hosts/aftereffects/api/extension/jsx/hostscript.jsx b/openpype/hosts/aftereffects/api/extension/jsx/hostscript.jsx index d3b5700920..8f82c9709d 100644 --- a/openpype/hosts/aftereffects/api/extension/jsx/hostscript.jsx +++ b/openpype/hosts/aftereffects/api/extension/jsx/hostscript.jsx @@ -438,7 +438,10 @@ function getAudioUrlForComp(comp_id){ for (i = 1; i <= item.numLayers; ++i){ var layer = item.layers[i]; if (layer instanceof AVLayer){ - return layer.source.file.fsName.toString(); + if (layer.hasAudio){ + source_url = layer.source.file.fsName.toString() + return _prepareSingleValue(source_url); + } } } @@ -715,6 +718,10 @@ function close(){ app.quit(); } +function getAppVersion(){ + return _prepareSingleValue(app.version); +} + function _prepareSingleValue(value){ return JSON.stringify({"result": value}) } diff --git a/openpype/hosts/aftereffects/api/ws_stub.py b/openpype/hosts/aftereffects/api/ws_stub.py index 48f31f1f4e..5a0600e92e 100644 --- a/openpype/hosts/aftereffects/api/ws_stub.py +++ b/openpype/hosts/aftereffects/api/ws_stub.py @@ -537,6 +537,13 @@ class AfterEffectsServerStub(): return self._handle_return(res) + def get_app_version(self): + """Returns version number of installed application (17.5...).""" + res = self.websocketserver.call(self.client.call( + 'AfterEffects.get_app_version')) + + return self._handle_return(res) + def close(self): res = self.websocketserver.call(self.client.call('AfterEffects.close')) diff --git a/openpype/hosts/aftereffects/plugins/publish/collect_render.py b/openpype/hosts/aftereffects/plugins/publish/collect_render.py index 3c26312b38..2a4b773681 100644 --- a/openpype/hosts/aftereffects/plugins/publish/collect_render.py +++ b/openpype/hosts/aftereffects/plugins/publish/collect_render.py @@ -20,6 +20,7 @@ class AERenderInstance(RenderInstance): fps = attr.ib(default=None) projectEntity = attr.ib(default=None) stagingDir = attr.ib(default=None) + app_version = attr.ib(default=None) class CollectAERender(abstract_collect_render.AbstractCollectRender): @@ -41,6 +42,9 @@ class CollectAERender(abstract_collect_render.AbstractCollectRender): def get_instances(self, context): instances = [] + app_version = self.stub.get_app_version() + app_version = app_version[0:4] + current_file = context.data["currentFile"] version = context.data["version"] asset_entity = context.data["assetEntity"] @@ -105,7 +109,8 @@ class CollectAERender(abstract_collect_render.AbstractCollectRender): frameEnd=frameEnd, frameStep=1, toBeRenderedOn='deadline', - fps=fps + fps=fps, + app_version=app_version ) comp = compositions_by_id.get(int(item_id)) diff --git a/openpype/modules/default_modules/deadline/plugins/publish/submit_aftereffects_deadline.py b/openpype/modules/default_modules/deadline/plugins/publish/submit_aftereffects_deadline.py index a43e38ff94..1fff55500e 100644 --- a/openpype/modules/default_modules/deadline/plugins/publish/submit_aftereffects_deadline.py +++ b/openpype/modules/default_modules/deadline/plugins/publish/submit_aftereffects_deadline.py @@ -1,11 +1,14 @@ -from openpype.lib import abstract_submit_deadline -from openpype.lib.abstract_submit_deadline import DeadlineJobInfo -import pyblish.api import os import attr import getpass +import pyblish.api + from avalon import api +from openpype.lib import abstract_submit_deadline +from openpype.lib.abstract_submit_deadline import DeadlineJobInfo +from openpype.lib import env_value_to_bool + @attr.s class DeadlinePluginInfo(): @@ -29,7 +32,13 @@ class AfterEffectsSubmitDeadline(abstract_submit_deadline.AbstractSubmitDeadline families = ["render.farm"] # cannot be "render' as that is integrated use_published = True + priority = 50 chunk_size = 1000000 + primary_pool = None + secondary_pool = None + group = None + department = None + multiprocess = True def get_job_info(self): dln_job_info = DeadlineJobInfo(Plugin="AfterEffects") @@ -49,6 +58,11 @@ class AfterEffectsSubmitDeadline(abstract_submit_deadline.AbstractSubmitDeadline int(round(self._instance.data["frameEnd"]))) dln_job_info.Frames = frame_range + dln_job_info.Priority = self.priority + dln_job_info.Pool = self.primary_pool + dln_job_info.SecondaryPool = self.secondary_pool + dln_job_info.Group = self.group + dln_job_info.Department = self.department dln_job_info.ChunkSize = self.chunk_size dln_job_info.OutputFilename = \ os.path.basename(self._instance.data["expectedFiles"][0]) @@ -105,9 +119,13 @@ class AfterEffectsSubmitDeadline(abstract_submit_deadline.AbstractSubmitDeadline '{}.{}.{}'.format(arr[0], hashed, arr[2])) - deadline_plugin_info.MultiProcess = True deadline_plugin_info.Comp = self._instance.data["comp_name"] - deadline_plugin_info.Version = "17.5" + deadline_plugin_info.Version = self._instance.data["app_version"] + # must be here because of DL AE plugin + # added override of multiprocess by env var, if shouldn't be used for + # some app variant use MULTIPROCESS:false in Settings, default is True + env_multi = env_value_to_bool("MULTIPROCESS", default=True) + deadline_plugin_info.MultiProcess = env_multi and self.multiprocess deadline_plugin_info.SceneFile = self.scene_path deadline_plugin_info.Output = render_path.replace("\\", "/") diff --git a/openpype/settings/defaults/project_settings/aftereffects.json b/openpype/settings/defaults/project_settings/aftereffects.json index 698b3b35a9..6a9a399069 100644 --- a/openpype/settings/defaults/project_settings/aftereffects.json +++ b/openpype/settings/defaults/project_settings/aftereffects.json @@ -10,13 +10,6 @@ "skip_timelines_check": [ ".*" ] - }, - "AfterEffectsSubmitDeadline": { - "use_published": true, - "priority": 50, - "primary_pool": "", - "secondary_pool": "", - "chunk_size": 1000000 } }, "workfile_builder": { diff --git a/openpype/settings/defaults/project_settings/deadline.json b/openpype/settings/defaults/project_settings/deadline.json index 6d7f926eae..7aff6d0b30 100644 --- a/openpype/settings/defaults/project_settings/deadline.json +++ b/openpype/settings/defaults/project_settings/deadline.json @@ -93,7 +93,8 @@ "primary_pool": "", "secondary_pool": "", "group": "", - "department": "" + "department": "", + "multiprocess": true } } } \ No newline at end of file diff --git a/openpype/settings/defaults/system_settings/applications.json b/openpype/settings/defaults/system_settings/applications.json index 8b53f96810..912e2d9924 100644 --- a/openpype/settings/defaults/system_settings/applications.json +++ b/openpype/settings/defaults/system_settings/applications.json @@ -1186,7 +1186,9 @@ "darwin": [], "linux": [] }, - "environment": {} + "environment": { + "MULTIPROCESS": "No" + } } } }, diff --git a/openpype/settings/entities/schemas/projects_schema/schema_project_aftereffects.json b/openpype/settings/entities/schemas/projects_schema/schema_project_aftereffects.json index 8024de6d45..4c4cd225ab 100644 --- a/openpype/settings/entities/schemas/projects_schema/schema_project_aftereffects.json +++ b/openpype/settings/entities/schemas/projects_schema/schema_project_aftereffects.json @@ -50,39 +50,6 @@ "label": "Skip Timeline Check for Tasks" } ] - }, - { - "type": "dict", - "collapsible": true, - "key": "AfterEffectsSubmitDeadline", - "label": "AfterEffects Submit to Deadline", - "children": [ - { - "type": "boolean", - "key": "use_published", - "label": "Use Published scene" - }, - { - "type": "number", - "key": "priority", - "label": "Priority" - }, - { - "type": "text", - "key": "primary_pool", - "label": "Primary Pool" - }, - { - "type": "text", - "key": "secondary_pool", - "label": "Secondary Pool" - }, - { - "type": "number", - "key": "chunk_size", - "label": "Frames Per Task" - } - ] } ] }, diff --git a/openpype/settings/entities/schemas/projects_schema/schema_project_deadline.json b/openpype/settings/entities/schemas/projects_schema/schema_project_deadline.json index 320c80a519..788b1d8575 100644 --- a/openpype/settings/entities/schemas/projects_schema/schema_project_deadline.json +++ b/openpype/settings/entities/schemas/projects_schema/schema_project_deadline.json @@ -367,6 +367,11 @@ "type": "text", "key": "department", "label": "Department" + }, + { + "type": "boolean", + "key": "multiprocess", + "label": "Multiprocess" } ] },