diff --git a/pype/plugins/global/publish/extract_burnin.py b/pype/plugins/global/publish/extract_burnin.py index bdff8fe452..5be5060590 100644 --- a/pype/plugins/global/publish/extract_burnin.py +++ b/pype/plugins/global/publish/extract_burnin.py @@ -27,7 +27,7 @@ class ExtractBurnin(pype.api.Extractor): "hiero", "premiere", "standalonepublisher", - "harmony" + "harmony", "fusion" ] optional = True diff --git a/pype/plugins/global/publish/submit_publish_job.py b/pype/plugins/global/publish/submit_publish_job.py index 097761cf4e..444ad28b6c 100644 --- a/pype/plugins/global/publish/submit_publish_job.py +++ b/pype/plugins/global/publish/submit_publish_job.py @@ -151,6 +151,7 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin): deadline_pool_secondary = "" deadline_group = "" deadline_chunk_size = 1 + deadline_priority = None # regex for finding frame number in string R_FRAME_NUMBER = re.compile(r'.+\.(?P[0-9]+)\..+') @@ -902,7 +903,11 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin): render_job["Props"]["User"] = context.data.get( "deadlineUser", getpass.getuser()) # Priority is now not handled at all - render_job["Props"]["Pri"] = instance.data.get("priority") + + if self.deadline_priority: + render_job["Props"]["Pri"] = self.deadline_priority + else: + render_job["Props"]["Pri"] = instance.data.get("priority") render_job["Props"]["Env"] = { "FTRACK_API_USER": os.environ.get("FTRACK_API_USER"), @@ -1033,8 +1038,8 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin): anatomy_filled = anatomy.format(template_data) - if "folder" in anatomy.templates["publish"]: - publish_folder = anatomy_filled["publish"]["folder"] + if "folder" in anatomy.templates["render"]: + publish_folder = anatomy_filled["render"]["folder"] else: # solve deprecated situation when `folder` key is not underneath # `publish` anatomy @@ -1044,7 +1049,7 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin): " key underneath `publish` (in global of for project `{}`)." ).format(project_name)) - file_path = anatomy_filled["publish"]["path"] + file_path = anatomy_filled["render"]["path"] # Directory publish_folder = os.path.dirname(file_path) diff --git a/pype/plugins/harmony/publish/extract_render.py b/pype/plugins/harmony/publish/extract_render.py index 7fb8ae79d2..c5744d43e2 100644 --- a/pype/plugins/harmony/publish/extract_render.py +++ b/pype/plugins/harmony/publish/extract_render.py @@ -90,7 +90,7 @@ class ExtractRender(pyblish.api.InstancePlugin): thumbnail_path = os.path.join(path, "thumbnail.png") ffmpeg_path = pype.lib.get_ffmpeg_tool_path("ffmpeg") args = [ - "\"{}\"".format(ffmpeg_path), "-y", + "{}".format(ffmpeg_path), "-y", "-i", os.path.join(path, list(collections[0])[0]), "-vf", "scale=300:-1", "-vframes", "1", diff --git a/pype/plugins/maya/publish/collect_ftrack_family.py b/pype/plugins/maya/publish/collect_ftrack_family.py index c8896a5c9c..b2b66b1875 100644 --- a/pype/plugins/maya/publish/collect_ftrack_family.py +++ b/pype/plugins/maya/publish/collect_ftrack_family.py @@ -20,7 +20,8 @@ class CollectFtrackFamilies(pyblish.api.InstancePlugin): "model", "animation", "look", - "rig" + "rig", + "camera" ] def process(self, instance): diff --git a/pype/plugins/maya/publish/collect_remove_marked.py b/pype/plugins/maya/publish/collect_remove_marked.py index c842fe4ed0..a45c8e45a7 100644 --- a/pype/plugins/maya/publish/collect_remove_marked.py +++ b/pype/plugins/maya/publish/collect_remove_marked.py @@ -18,7 +18,12 @@ class CollectRemoveMarked(pyblish.api.ContextPlugin): def process(self, context): + self.log.debug(context) # make ftrack publishable + instances_to_remove = [] for instance in context: if instance.data.get('remove'): - context.remove(instance) + instances_to_remove.append(instance) + + for instance in instances_to_remove: + context.remove(instance) diff --git a/pype/plugins/maya/publish/collect_render.py b/pype/plugins/maya/publish/collect_render.py index 2848a55152..3dde3b1592 100644 --- a/pype/plugins/maya/publish/collect_render.py +++ b/pype/plugins/maya/publish/collect_render.py @@ -254,6 +254,10 @@ class CollectMayaRender(pyblish.api.ContextPlugin): if self.sync_workfile_version: data["version"] = context.data["version"] + for instance in context: + if instance.data['family'] == "workfile": + instance.data["version"] = context.data["version"] + # Apply each user defined attribute as data for attr in cmds.listAttr(layer, userDefined=True) or list(): try: diff --git a/pype/plugins/maya/publish/collect_review.py b/pype/plugins/maya/publish/collect_review.py index 886e3b82dd..60183341f9 100644 --- a/pype/plugins/maya/publish/collect_review.py +++ b/pype/plugins/maya/publish/collect_review.py @@ -43,33 +43,38 @@ class CollectReview(pyblish.api.InstancePlugin): i = 0 for inst in instance.context: - self.log.debug('processing {}'.format(inst)) - self.log.debug('processing2 {}'.format(instance.context[i])) + self.log.debug('filtering {}'.format(inst)) data = instance.context[i].data - if inst.name == reviewable_subset[0]: - if data.get('families'): - data['families'].append('review') - else: - data['families'] = ['review'] - self.log.debug('adding review family to {}'.format(reviewable_subset)) - data['review_camera'] = camera - # data["publish"] = False - data['frameStartFtrack'] = instance.data["frameStartHandle"] - data['frameEndFtrack'] = instance.data["frameEndHandle"] - data['frameStartHandle'] = instance.data["frameStartHandle"] - data['frameEndHandle'] = instance.data["frameEndHandle"] - data["frameStart"] = instance.data["frameStart"] - data["frameEnd"] = instance.data["frameEnd"] - data['handles'] = instance.data.get('handles', None) - data['step'] = instance.data['step'] - data['fps'] = instance.data['fps'] - data["isolate"] = instance.data["isolate"] - cmds.setAttr(str(instance) + '.active', 1) - self.log.debug('data {}'.format(instance.context[i].data)) - instance.context[i].data.update(data) - instance.data['remove'] = True - i += 1 + if inst.name != reviewable_subset[0]: + self.log.debug('subset name does not match {}'.format( + reviewable_subset[0])) + i += 1 + continue + + if data.get('families'): + data['families'].append('review') + else: + data['families'] = ['review'] + self.log.debug('adding review family to {}'.format( + reviewable_subset)) + data['review_camera'] = camera + # data["publish"] = False + data['frameStartFtrack'] = instance.data["frameStartHandle"] + data['frameEndFtrack'] = instance.data["frameEndHandle"] + data['frameStartHandle'] = instance.data["frameStartHandle"] + data['frameEndHandle'] = instance.data["frameEndHandle"] + data["frameStart"] = instance.data["frameStart"] + data["frameEnd"] = instance.data["frameEnd"] + data['handles'] = instance.data.get('handles', None) + data['step'] = instance.data['step'] + data['fps'] = instance.data['fps'] + data["isolate"] = instance.data["isolate"] + cmds.setAttr(str(instance) + '.active', 1) + self.log.debug('data {}'.format(instance.context[i].data)) + instance.context[i].data.update(data) + instance.data['remove'] = True + self.log.debug('isntance data {}'.format(instance.data)) else: if self.legacy: instance.data['subset'] = task + 'Review' @@ -82,8 +87,10 @@ class CollectReview(pyblish.api.InstancePlugin): instance.data['subset'] = subset instance.data['review_camera'] = camera - instance.data['frameStartFtrack'] = instance.data["frameStartHandle"] - instance.data['frameEndFtrack'] = instance.data["frameEndHandle"] + instance.data['frameStartFtrack'] = \ + instance.data["frameStartHandle"] + instance.data['frameEndFtrack'] = \ + instance.data["frameEndHandle"] # make ftrack publishable instance.data["families"] = ['ftrack'] diff --git a/pype/plugins/maya/publish/extract_camera_alembic.py b/pype/plugins/maya/publish/extract_camera_alembic.py index c61ec5e19e..c0538338dc 100644 --- a/pype/plugins/maya/publish/extract_camera_alembic.py +++ b/pype/plugins/maya/publish/extract_camera_alembic.py @@ -26,7 +26,15 @@ class ExtractCameraAlembic(pype.api.Extractor): # get settings framerange = [instance.data.get("frameStart", 1), instance.data.get("frameEnd", 1)] - handles = instance.data.get("handles", 0) + handle_start = instance.data.get("handleStart", 0) + handle_end = instance.data.get("handleEnd", 0) + + # TODO: deprecated attribute "handles" + + if handle_start is None: + handle_start = instance.data.get("handles", 0) + handle_end = instance.data.get("handles", 0) + step = instance.data.get("step", 1.0) bake_to_worldspace = instance.data("bakeToWorldSpace", True) @@ -55,8 +63,10 @@ class ExtractCameraAlembic(pype.api.Extractor): job_str = ' -selection -dataFormat "ogawa" ' job_str += ' -attrPrefix cb' - job_str += ' -frameRange {0} {1} '.format(framerange[0] - handles, - framerange[1] + handles) + job_str += ' -frameRange {0} {1} '.format(framerange[0] + - handle_start, + framerange[1] + + handle_end) job_str += ' -step {0} '.format(step) if bake_to_worldspace: diff --git a/pype/plugins/maya/publish/extract_camera_mayaScene.py b/pype/plugins/maya/publish/extract_camera_mayaScene.py index 65c5ef5840..8fce48badf 100644 --- a/pype/plugins/maya/publish/extract_camera_mayaScene.py +++ b/pype/plugins/maya/publish/extract_camera_mayaScene.py @@ -118,7 +118,18 @@ class ExtractCameraMayaScene(pype.api.Extractor): framerange = [instance.data.get("frameStart", 1), instance.data.get("frameEnd", 1)] - handles = instance.data.get("handles", 0) + handle_start = instance.data.get("handleStart", 0) + handle_end = instance.data.get("handleEnd", 0) + + # TODO: deprecated attribute "handles" + + if handle_start is None: + handle_start = instance.data.get("handles", 0) + handle_end = instance.data.get("handles", 0) + + range_with_handles = [framerange[0] - handle_start, + framerange[1] + handle_end] + step = instance.data.get("step", 1.0) bake_to_worldspace = instance.data("bakeToWorldSpace", True) @@ -132,9 +143,6 @@ class ExtractCameraMayaScene(pype.api.Extractor): cameras = cmds.ls(members, leaf=True, shapes=True, long=True, dag=True, type="camera") - range_with_handles = [framerange[0] - handles, - framerange[1] + handles] - # validate required settings assert len(cameras) == 1, "Single camera must be found in extraction" assert isinstance(step, float), "Step must be a float value" diff --git a/pype/plugins/nuke/load/load_sequence.py b/pype/plugins/nuke/load/load_sequence.py index 44b9cb4a34..411aec6ad6 100644 --- a/pype/plugins/nuke/load/load_sequence.py +++ b/pype/plugins/nuke/load/load_sequence.py @@ -41,7 +41,7 @@ def preserve_trim(node): "{}".format(script_start)) -def loader_shift(node, frame, relative=True): +def loader_shift(node, frame, relative=False): """Shift global in time by i preserving duration This moves the loader by i frames preserving global duration. When relative @@ -61,11 +61,12 @@ def loader_shift(node, frame, relative=True): script_start = nuke.root()["first_frame"].value() if relative: + node['frame_mode'].setValue("start at") + node['frame'].setValue(str(script_start)) + else: node['frame_mode'].setValue("start at") node['frame'].setValue(str(frame)) - return int(script_start) - class LoadSequence(api.Loader): """Load image sequence into Nuke""" @@ -73,10 +74,10 @@ class LoadSequence(api.Loader): families = ["render2d", "source", "plate", "render", "prerender", "review"] representations = ["exr", "dpx", "jpg", "jpeg", "png"] - label = "Load sequence" - order = -10 - icon = "code-fork" - color = "orange" + label = "Load Image Sequence" + order = -20 + icon = "file-video-o" + color = "white" def load(self, context, name, namespace, data): from avalon.nuke import ( diff --git a/pype/plugins/photoshop/load/load_image.py b/pype/plugins/photoshop/load/load_image.py index 301e60fbb1..44cc96c96f 100644 --- a/pype/plugins/photoshop/load/load_image.py +++ b/pype/plugins/photoshop/load/load_image.py @@ -11,7 +11,7 @@ class ImageLoader(api.Loader): Stores the imported asset in a container named after the asset. """ - families = ["image"] + families = ["image", "render"] representations = ["*"] def load(self, context, name=None, namespace=None, data=None): diff --git a/pype/version.py b/pype/version.py index 8f57b15e91..4de2b4e35d 100644 --- a/pype/version.py +++ b/pype/version.py @@ -1 +1 @@ -__version__ = "2.13.4" +__version__ = "2.13.6"