File size: 3,628 Bytes
afdb110
 
 
 
 
 
a4b32da
afdb110
 
 
 
b6dc501
7d71710
b6dc501
afdb110
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b6dc501
afdb110
 
 
 
b6dc501
7d71710
7b853d0
afdb110
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b6dc501
 
 
afdb110
 
a4b32da
 
afdb110
 
 
 
b6dc501
 
afdb110
b257e01
 
 
 
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
import requests
import json
import os
from PIL import Image
import io, time


class OtherModel():
    def __init__(self, model_name, model_type):
        self.model_name = model_name
        self.model_type = model_type
        self.image_url = "https://www.xdai.online/mj/submit/imagine"
        self.key = os.environ.get('MIDJOURNEY_KEY')
        self.get_image_url = "https://www.xdai.online/mj/image/"
        self.repeat_num = 5
    
    def __call__(self, *args, **kwargs):
        if self.model_type == "text2image":
            assert "prompt" in kwargs, "prompt is required for text2image model"
            if self.model_name == "Midjourney-v6.0":
                data = {
                    "base64Array": [],
                    "notifyHook": "",
                    "prompt": "{} --v 6.0".format(kwargs["prompt"]),
                    "state": "",
                    "botType": "MID_JOURNEY",
                }
            elif self.model_name == "Midjourney-v5.0":
                data = {
                    "base64Array": [],
                    "notifyHook": "",
                    "prompt": "{} --v 5.0".format(kwargs["prompt"]),
                    "state": "",
                    "botType": "MID_JOURNEY",
                }
            else:
                raise NotImplementedError
            
            headers = {
                "Authorization": "Bearer {}".format(self.key),
                "Content-Type": "application/json"
            }
            while 1:
                response = requests.post(self.image_url, data=json.dumps(data), headers=headers)
                if response.status_code == 200:
                    print("Submit success!")
                    response_json = json.loads(response.content.decode('utf-8'))
                    img_id = response_json["result"]
                    result_url = self.get_image_url + img_id
                    print(result_url)
                    self.repeat_num = 800
                    while 1:
                        time.sleep(1)
                        img_response = requests.get(result_url)
                        if img_response.status_code == 200:
                            result = Image.open(io.BytesIO(img_response.content))
                            width, height = result.size  
                            new_width = width // 2  
                            new_height = height // 2  
                            result = result.crop((0, 0, new_width, new_height))  
                            self.repeat_num = 5
                            return result
                        else:
                            self.repeat_num = self.repeat_num - 1
                            if self.repeat_num == 0:
                                raise ValueError("Image request failed.")
                            continue
                        
                else:
                    self.repeat_num = self.repeat_num - 1
                    if self.repeat_num == 0:
                        raise ValueError("API request failed.")
                    continue
        if self.model_type == "text2video":
            assert "prompt" in kwargs, "prompt is required for text2video model"

        else:
            raise ValueError("model_type must be text2image")


def load_other_model(model_name, model_type):
    return OtherModel(model_name, model_type)

if __name__ == "__main__":
    import http.client
    import json

    pipe = load_other_model("Midjourney-v6.0", "text2image")
    result = pipe(prompt="An Impressionist illustration depicts a river winding through a meadow ")
    print(result)
    exit()