Exemple #1
0
    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)
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #6
0
    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
Exemple #7
0
    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)