diff --git a/openpype/plugins/publish/collect_frame_range_data.py b/openpype/plugins/publish/collect_frame_range_data.py index ff773d4c59..211870fa9d 100644 --- a/openpype/plugins/publish/collect_frame_range_data.py +++ b/openpype/plugins/publish/collect_frame_range_data.py @@ -1,4 +1,5 @@ import pyblish.api +import clique class CollectFrameRangeData(pyblish.api.InstancePlugin): @@ -11,15 +12,50 @@ class CollectFrameRangeData(pyblish.api.InstancePlugin): "vdbcache", "online", "render"] hosts = ["traypublisher"] + img_extensions = ["exr", "dpx", "jpg", "jpeg", "png", "tiff", "tga", + "gif", "svg"] + video_extensions = ["avi", "mov", "mp4"] def process(self, instance): + repres = instance.data.get("representations") + asset_data = None asset_doc = instance.data.get("assetEntity") if not asset_doc: self.log.debug("Instance has no asset entity set." - " Skipping collecting frame range data.") + " Skipping collecting frame range data.") return + if repres: + first_repre = repres[0] + ext = first_repre["ext"].replace(".", "") + if not ext or ext.lower() not in self.img_extensions: + self.log.warning(f"Cannot find file extension " + " in representation data") + return + if ext in self.video_extensions: + self.log.info("Collecting frame range data" + " not supported for video extensions") + return + + files = first_repre["files"] + repres_file = clique.assemble( + files, minimum_items=1)[0][0] + repres_frames = [frames for frames in repres_file.indexes] + last_frame = len(repres_frames) - 1 + entity_data = asset_doc["data"] + asset_data = { + "fps": entity_data["fps"], + "frameStart": repres_frames[0], + "frameEnd": repres_frames[last_frame], + "handleStart": entity_data["handleStart"], + "handleEnd": entity_data["handleEnd"] + } + + else: + self.log.info("No representation data.. " + "\nUse Asset Entity data instead") + + asset_data = asset_doc["data"] - asset_data = asset_doc["data"] key_sets = [] for key in ( "fps", @@ -32,5 +68,5 @@ class CollectFrameRangeData(pyblish.api.InstancePlugin): instance.data[key] = asset_data[key] key_sets.append(key) - self.log.debug(f"Anatomy frame range data {key_sets} " + self.log.debug(f"Frame range data {key_sets} " "has been collected from asset entity.")