def process(self, context, plugin): import pyblish_aftereffects # Get the errored instances failed = [] for result in context.data["results"]: if (result["error"] is not None and result["instance"] is not None and result["instance"] not in failed): failed.append(result["instance"]) # Apply pyblish.logic to get the instances for the plug-in instances = api.instances_by_plugin(failed, plugin) for instance in instances: cmd = "app.project.renderQueue.item({0}).outputModule(1)" cmd += ".setSettings({1})" data = '{{"Output File Info":{{"Full Flat Path":"{0}"}}}}' class_object = ValidateOutputPath() path = class_object.get_expected_path(instance) pyblish_aftereffects.send( cmd.format(instance.data["index"], data.format(path)))
def process(self, instance): import os import subprocess import re import pyblish_aftereffects # ensureing project on disk is updated pyblish_aftereffects.send("app.project.save()") # ensuring overwritting is enabled cmd = 'app.project.renderQueue.item({0}).setSettings' cmd += '({{"Skip Existing Files":true}})' pyblish_aftereffects.send(cmd.format(instance.data["index"])) # ensure output directory exists path = os.path.dirname(instance.data["output"]) if not os.path.exists(path): os.makedirs(path) # launch aerender and execute rendering cmd = 'return BridgeTalk.getAppPath("aftereffects")' app_path = pyblish_aftereffects.send(cmd) render_exe = os.path.join(os.path.dirname(app_path), "aerender.exe") args = [render_exe, "-comp", instance.data["name"], "-project", instance.context.data["currentFile"]] result = subprocess.check_output(args) assert "ERROR:" not in result, result # adding output files to instance pattern = os.path.basename(instance.data["output"]) pattern = pattern.replace(".[####].", r"\.[0-9]{4,}\.") self.log.debug("Pattern generated: " + pattern) files = [] current_dir = os.path.dirname(instance.data["output"]) for f in os.listdir(current_dir): if re.match(pattern, f): files.append(os.path.join(current_dir, f)) instance.data["outputFiles"] = files self.log.debug("Extracted files: " + str(files)) path = instance.data["output"].replace("[####]", "%04d") instance.data["outputPath"] = path self.log.debug("Output path: " + path)
def process(self, context, plugin): # expected path data = pipeline_schema.get_data() data["extension"] = "aep" version = 1 if context.has_data("version"): version = context.data("version") data["version"] = version file_path = pipeline_schema.get_path("task_work", data) if not os.path.exists(os.path.dirname(file_path)): os.makedirs(os.path.dirname(file_path)) cmd = "app.project.save(File(\"{0}\"))".format(file_path) pyblish_aftereffects.send(cmd)
def process(self, context): import traceback import pyblish_aftereffects try: path = pyblish_aftereffects.send("return app.project.file.fsName") context.data["currentFile"] = path.replace("\\", "/") except: self.log.warning(traceback.format_exc())
def process(self, context, plugin): import os import pipeline_schema import pyblish_aftereffects # expected path data = pipeline_schema.get_data() data["extension"] = "aep" version = 1 if context.has_data("version"): version = context.data("version") data["version"] = version file_path = pipeline_schema.get_path("task_work", data) if not os.path.exists(os.path.dirname(file_path)): os.makedirs(os.path.dirname(file_path)) cmd = "app.project.save(File(\"{0}\"))".format(file_path) pyblish_aftereffects.send(cmd)
def process(self, context): import os import pyblish_aftereffects cmd = "return app.project.renderQueue.numItems" itemCount = int(pyblish_aftereffects.send(cmd)) for count in range(1, itemCount + 1): cmd = "return app.project.renderQueue.item({0}).comp.name" name = pyblish_aftereffects.send(cmd.format(count)) cmd = "return app.project.renderQueue.item({0}).outputModule(1)" cmd += ".file.fsName" output = "" try: output = pyblish_aftereffects.send(cmd.format(count)) except: pass ext = os.path.splitext(output)[1] # hardcoding frame padding to 4 for now, as output path # validation is rigid on padding frame_padding = 4 instance = context.create_instance(name) instance.data["family"] = "img.farm" + ext instance.data["families"] = ["img.farm.*", "img.*", "deadline"] instance.data["output"] = output instance.data["index"] = count instance.data["framePadding"] = frame_padding instance = context.create_instance(name) instance.data["family"] = "img.local" + ext instance.data["families"] = ["img.local.*", "img.*"] instance.data["publish"] = False instance.data["output"] = output instance.data["index"] = count instance.data["framePadding"] = frame_padding
def process(self, instance): import os from distutils.version import StrictVersion import pyblish_aftereffects job_data = {} plugin_data = {} if "deadlineData" in instance.data: job_data = instance.data["deadlineData"]["job"].copy() plugin_data = instance.data["deadlineData"]["plugin"].copy() # setting plugin data plugin_data["SceneFile"] = instance.context.data["currentFile"] plugin_data["Comp"] = instance.data["name"] app_version = pyblish_aftereffects.send("return app.version") app_major_version = "12.0" if StrictVersion(app_version.split("x")[0]) >= StrictVersion("13.0"): app_major_version = "13.0" if StrictVersion(app_version.split("x")[0]) >= StrictVersion("13.5"): app_major_version = "13.5" plugin_data["Version"] = app_major_version # setting job data job_data["Plugin"] = "AfterEffects" index = instance.data["index"] cmd = "return app.project.renderQueue.item({0}).comp.frameDuration" frame_duration = pyblish_aftereffects.send(cmd.format(index)) frame_duration = float(frame_duration) cmd = "return app.project.renderQueue.item({0}).timeSpanStart" time_start = float(pyblish_aftereffects.send(cmd.format(index))) first_frame = time_start * (1 / frame_duration) cmd = "return app.project.renderQueue.item({0}).timeSpanDuration" time_duration = float(pyblish_aftereffects.send(cmd.format(index))) last_frame = (time_duration * (1 / frame_duration)) - 1 job_data["Frames"] = "{0}-{1}".format(int(first_frame), int(last_frame)) name = os.path.basename(instance.context.data["currentFile"]) name = os.path.splitext(name)[0] job_data["Name"] = name + " - " + instance.data["name"] output = instance.data["output"].replace("[", "").replace("]", "") job_data["OutputFilename0"] = output # ensure output directory exists if not os.path.exists(os.path.dirname(output)): os.makedirs(os.path.dirname(output)) job_data["Pool"] = "medium" group = "aftereffects_{0}".format(app_major_version.replace(".", "_")) job_data["Group"] = group job_data["LimitGroups"] = "aftereffects" job_data["ChunkSize"] = "100" # setting data data = {"job": job_data, "plugin": plugin_data} instance.data["deadlineData"] = data # ensure scene is saved before submitting to the farm cmd = "app.project.save()" pyblish_aftereffects.send(cmd)