Skip to content

submit_aftereffects_deadline

AfterEffectsSubmitDeadline

Bases: AbstractSubmitDeadline

Source code in client/ayon_deadline/plugins/publish/aftereffects/submit_aftereffects_deadline.py
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
class AfterEffectsSubmitDeadline(
    abstract_submit_deadline.AbstractSubmitDeadline
):

    label = "Submit AE to Deadline"
    order = pyblish.api.IntegratorOrder + 0.1
    hosts = ["aftereffects"]
    families = ["render.farm"]  # cannot be "render' as that is integrated
    use_published = True
    targets = ["local"]
    settings_category = "deadline"

    def get_job_info(self, job_info=None):
        job_info.Plugin = "AfterEffects"

        # already collected explicit values for rendered Frames
        if not job_info.Frames:
            # Deadline requires integers in frame range
            frame_range = "{}-{}".format(
                int(round(self._instance.data["frameStart"])),
                int(round(self._instance.data["frameEnd"])))
            job_info.Frames = frame_range

        return job_info

    def get_plugin_info(self):
        deadline_plugin_info = DeadlinePluginInfo()

        render_path = self._instance.data["expectedFiles"][0]

        file_name, frame = list(collect_frames([render_path]).items())[0]
        if frame:
            # Replace frame ('000001') with Deadline's required '[#######]'
            #   expects filename in format:
            #   'project_folder_product_version.FRAME.ext'
            render_dir = os.path.dirname(render_path)
            file_name = os.path.basename(render_path)
            hashed = '[{}]'.format(len(frame) * "#")
            file_name = file_name.replace(frame, hashed)
            render_path = os.path.join(render_dir, file_name)

        deadline_plugin_info.Comp = self._instance.data["comp_name"]
        deadline_plugin_info.Version = self._instance.data["app_version"]
        # must be here because of DL AE plugin
        # added override of multiprocess by env var, if shouldn't be used for
        # some app variant use MULTIPROCESS:false in Settings, default is True
        env_multi = env_value_to_bool("MULTIPROCESS", default=True)
        deadline_plugin_info.MultiProcess = env_multi and self.multiprocess
        deadline_plugin_info.SceneFile = self.scene_path
        deadline_plugin_info.Output = render_path.replace("\\", "/")

        return asdict(deadline_plugin_info)

    def from_published_scene(self, replace_in_path=True):
        """ Do not overwrite expected files.

            Use published is set to True, so rendering will be triggered
            from published scene (in 'publish' folder). Default implementation
            of abstract class renames expected (eg. rendered) files accordingly
            which is not needed here.
        """
        return super().from_published_scene(False)

from_published_scene(replace_in_path=True)

Do not overwrite expected files.

Use published is set to True, so rendering will be triggered from published scene (in 'publish' folder). Default implementation of abstract class renames expected (eg. rendered) files accordingly which is not needed here.

Source code in client/ayon_deadline/plugins/publish/aftereffects/submit_aftereffects_deadline.py
79
80
81
82
83
84
85
86
87
def from_published_scene(self, replace_in_path=True):
    """ Do not overwrite expected files.

        Use published is set to True, so rendering will be triggered
        from published scene (in 'publish' folder). Default implementation
        of abstract class renames expected (eg. rendered) files accordingly
        which is not needed here.
    """
    return super().from_published_scene(False)