From 6a485fc88756a4df573c2c1d093f44555e8eddb6 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Wed, 12 May 2021 15:53:11 +0200 Subject: [PATCH] Hiero: improving instace pre-collector so it is creating audio instances --- .../plugins/publish/precollect_instances.py | 62 +++++++++++++++++-- 1 file changed, 57 insertions(+), 5 deletions(-) diff --git a/openpype/hosts/hiero/plugins/publish/precollect_instances.py b/openpype/hosts/hiero/plugins/publish/precollect_instances.py index 4cb6011a10..8cccdec99a 100644 --- a/openpype/hosts/hiero/plugins/publish/precollect_instances.py +++ b/openpype/hosts/hiero/plugins/publish/precollect_instances.py @@ -24,7 +24,7 @@ class PrecollectInstances(pyblish.api.ContextPlugin): for track_item in selected_timeline_items: - data = dict() + data = {} clip_name = track_item.name() # get openpype tag data @@ -43,6 +43,11 @@ class PrecollectInstances(pyblish.api.ContextPlugin): tag_data["handleEnd"] = min( tag_data["handleEnd"], int(track_item.handleOutLength())) + # add audio to families + with_audio = False + if tag_data.pop("audio"): + with_audio = True + # add tag data to instance data data.update({ k: v for k, v in tag_data.items() @@ -57,10 +62,6 @@ class PrecollectInstances(pyblish.api.ContextPlugin): families = [str(f) for f in tag_data["families"]] families.insert(0, str(family)) - # add audio to families - if tag_data["audio"]: - families.append("audio") - # form label label = asset if asset != clip_name: @@ -98,6 +99,17 @@ class PrecollectInstances(pyblish.api.ContextPlugin): self.log.debug( "_ instance.data: {}".format(pformat(instance.data))) + if not with_audio: + return + + # create audio subset instance + self.create_audio_instance(context, **data) + + # add audioReview attribute to plate instance data + # if reviewTrack is on + if tag_data.get("reviewTrack") is not None: + instance.data["reviewAudio"] = True + def get_resolution_to_data(self, data, context): assert data.get("otioClip"), "Missing `otioClip` data" @@ -163,6 +175,46 @@ class PrecollectInstances(pyblish.api.ContextPlugin): self.log.debug( "_ instance.data: {}".format(pformat(instance.data))) + def create_audio_instance(self, context, **data): + master_layer = data.get("heroTrack") + + if not master_layer: + return + + asset = data.get("asset") + item = data.get("item") + clip_name = item.name() + + asset = data["asset"] + subset = "audioMain" + + # insert family into families + family = "audio" + + # form label + label = asset + if asset != clip_name: + label += " ({}) ".format(clip_name) + label += " {}".format(subset) + label += " [{}]".format(family) + + data.update({ + "name": "{}_{}".format(asset, subset), + "label": label, + "subset": subset, + "asset": asset, + "family": family, + "families": ["clip"] + }) + # remove review track attr if any + data.pop("reviewTrack") + + # create instance + instance = context.create_instance(**data) + self.log.info("Creating instance: {}".format(instance)) + self.log.debug( + "_ instance.data: {}".format(pformat(instance.data))) + def get_otio_clip_instance_data(self, otio_timeline, track_item): """ Return otio objects for timeline, track and clip