File size: 4,425 Bytes
2de3774
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import modules.async_worker as worker
from PIL import Image
import shared

from comfy.samplers import KSampler


# Copy this file, add suitable code and add logic to modules/pipelines.py to select it


class pipeline:
    pipeline_type = ["hashbang"]

    model_hash = ""

    def parse_gen_data(self, gen_data):
        gen_data["original_image_number"] = gen_data["image_number"]
        gen_data["image_number"] = 1
        gen_data["show_preview"] = False
        return gen_data

    def load_base_model(self, name):
        # We don't need a model
        self.model_hash = name
        return

    def load_keywords(self, lora):
        return ""

    def load_loras(self, loras):
        return

    def refresh_controlnet(self, name=None):
        return

    def clean_prompt_cond_caches(self):
        return

    def process(
        self,
        gen_data=None,
        callback=None,
    ):
        worker.add_result(
            gen_data["task_id"],
            "preview",
            (-1, f"Working ...", "html/generate_video.jpeg")
        )

        image = Image.open("html/logo.png")

        # Get command
        lines = gen_data["prompt"].splitlines()
        cmd = lines[0][2:].strip()
        data = "\n".join(lines[1:])

        match cmd:
            case "echo":
                # Simple test
                print(data)

            case "help":
                print("TODO...")

            case "add performance":
                new_perf = shared.performance_settings.default_settings
                new_perf['name'] = "Oops! Forgot to add a name." # Have a default name
                for line in lines[1:]:
                    kv = line.split(":")
                    if len(kv) < 2:
                        image = Image.open("html/error.png")
                        print(f"ERROR: Can't find key and value on line: {line}")
                        break
                    k = kv[0].lower()

                    # Some helpful translations
                    if k in ['steps']:
                        k = 'custom_steps'
                    if k in ['sampler']:
                        k = 'sampler_name'
                    if k in ['clip-skip', 'clip skip', 'clipskip']:
                        k = 'clip_skip'

                    if k in ['custom_steps', 'clip_skip']: # Handle ints
                        v = int(kv[1])
                    elif k in ['cfg']: # Handle floats
                        v = float(kv[1])
                    elif k in ['sampler_name', 'scheduler', 'name']: # Handle strings
                        v = kv[1].strip()
                        if (k == 'sampler_name' and v not in KSampler.SAMPLERS):
                            image = Image.open("html/error.png")
                            print(f"ERROR: Unknown sampler: {v}")
                            print(f"Known Samplers: {KSampler.SAMPLERS}")
                            break
                        if (k == 'scheduler' and v not in KSampler.SCHEDULERS):
                            image = Image.open("html/error.png")
                            print(f"ERROR: Unknown scheduler: {v}")
                            print(f"Known Schedulers: {KSampler.SCHEDULERS}")
                            break
                    else:
                        image = Image.open("html/error.png")
                        print(f"ERROR: Unknown key: {k}")
                        break
                    new_perf[k] = v
                    perf_options = shared.performance_settings.load_performance()
                    opts = {
                        "custom_steps": new_perf['custom_steps'],
                        "cfg": new_perf['cfg'],
                        "sampler_name": new_perf['sampler_name'],
                        "scheduler": new_perf['scheduler'],
                        "clip_skip": new_perf['clip_skip'],
                    }
                    perf_options[new_perf['name']] = opts

                shared.performance_settings.save_performance(perf_options)
                print(f"#!: Saved performance: {new_perf['name']}: {opts}")
                shared.update_cfg()

            case _:
                print(f"ERROR: Unknown command #!{cmd}")
                image = Image.open("html/error.png")

        # Return finished image to preview
        if callback is not None:
            callback(gen_data["steps"], 0, 0, gen_data["steps"], image)

        return []