Generate the file list using metadata instead of files in render folder

This solves the problem with the preview file generated from a previous render is still in the render folder
This commit is contained in:
Jacob Danell 2023-02-01 19:41:00 +01:00 committed by Jakub Ježek
parent 7692ff252f
commit 9eadff95ed

View file

@ -1,5 +1,5 @@
import os
from pprint import pformat
import copy
import pyblish.api
from openpype.hosts.fusion.api import comp_lock_and_undo_chunk
@ -19,10 +19,43 @@ class Fusionlocal(pyblish.api.InstancePlugin):
families = ["render.local"]
def process(self, instance):
# This plug-in runs only once and thus assumes all instances
# currently will render the same frame range
context = instance.context
self.render_once(context)
frame_start = context.data["frameStartHandle"]
frame_end = context.data["frameEndHandle"]
path = instance.data["path"]
output_dir = instance.data["outputDir"]
basename = os.path.basename(path)
head, ext = os.path.splitext(basename)
files = [
f"{head}{frame}{ext}" for frame in range(frame_start, frame_end+1)
]
repre = {
'name': ext[1:],
'ext': ext[1:],
'frameStart': "%0{}d".format(len(str(frame_end))) % frame_start,
'files': files,
"stagingDir": output_dir,
}
if "representations" not in instance.data:
instance.data["representations"] = []
instance.data["representations"].append(repre)
# review representation
repre_preview = repre.copy()
repre_preview["name"] = repre_preview["ext"] = "mp4"
repre_preview["tags"] = ["review", "preview", "ftrackreview", "delete"]
instance.data["representations"].append(repre_preview)
def render_once(self, context):
"""Render context comp only once, even with more render instances"""
key = "__hasRun{}".format(self.__class__.__name__)
if context.data.get(key, False):
return
@ -32,10 +65,6 @@ class Fusionlocal(pyblish.api.InstancePlugin):
current_comp = context.data["currentComp"]
frame_start = context.data["frameStartHandle"]
frame_end = context.data["frameEndHandle"]
path = instance.data["path"]
output_dir = instance.data["outputDir"]
ext = os.path.splitext(os.path.basename(path))[-1]
self.log.info("Starting render")
self.log.info("Start frame: {}".format(frame_start))
@ -48,26 +77,5 @@ class Fusionlocal(pyblish.api.InstancePlugin):
"Wait": True
})
if "representations" not in instance.data:
instance.data["representations"] = []
collected_frames = os.listdir(output_dir)
repre = {
'name': ext[1:],
'ext': ext[1:],
'frameStart': "%0{}d".format(len(str(frame_end))) % frame_start,
'files': collected_frames,
"stagingDir": output_dir,
}
instance.data["representations"].append(repre)
# review representation
repre_preview = repre.copy()
repre_preview["name"] = repre_preview["ext"] = "mp4"
repre_preview["tags"] = ["review", "preview", "ftrackreview", "delete"]
instance.data["representations"].append(repre_preview)
self.log.debug(f"_ instance.data: {pformat(instance.data)}")
if not result:
raise RuntimeError("Comp render failed")