Skip to content

extract_local_render

ExtractLocalRender

Bases: Extractor

Render RenderQueue locally.

Source code in client/ayon_aftereffects/plugins/publish/extract_local_render.py
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
class ExtractLocalRender(publish.Extractor):
    """Render RenderQueue locally."""

    order = publish.Extractor.order - 0.47
    label = "Extract Local Render"
    hosts = ["aftereffects"]
    families = ["renderLocal", "render.local"]

    def process(self, instance):
        stub = get_stub()
        staging_dir = instance.data["stagingDir"]
        self.log.debug("staging_dir::{}".format(staging_dir))

        # pull file name collected value from Render Queue Output module
        if not instance.data["render_queue_file_paths"]:
            raise ValueError("No file extension set in Render Queue")

        comp_id = instance.data['comp_id']
        stub.render(staging_dir, comp_id)

        representations = []
        for file_name in instance.data["render_queue_file_paths"]:
            _, ext = os.path.splitext(os.path.basename(file_name))
            ext = ext[1:]

            first_file_path = None
            files = []
            for found_file_name in os.listdir(staging_dir):
                if not found_file_name.endswith(ext):
                    continue

                files.append(found_file_name)
                if first_file_path is None:
                    first_file_path = os.path.join(staging_dir,
                                                   found_file_name)

            if not files:
                self.log.info("no files")
                return

            # single file cannot be wrapped in array
            resulting_files = files
            if len(files) == 1:
                resulting_files = files[0]

            repre_data = {
                "frameStart": instance.data["frameStart"],
                "frameEnd": instance.data["frameEnd"],
                "name": ext,
                "ext": ext,
                "files": resulting_files,
                "stagingDir": staging_dir
            }
            first_repre = not representations
            if instance.data["review"] and first_repre:
                repre_data["tags"] = ["review"]
                # TODO return back when Extract from source same as regular
                # thumbnail_path = os.path.join(staging_dir, files[0])
                # instance.data["thumbnailSource"] = thumbnail_path

            representations.append(repre_data)

        instance.data["representations"] = representations