File size: 6,116 Bytes
6a20884
 
 
 
 
6d8c23b
6a20884
 
 
 
 
 
 
 
 
 
 
6d8c23b
953f4c0
2083734
953f4c0
6a20884
 
 
 
 
 
 
 
 
 
6d8c23b
2083734
 
953f4c0
6d8c23b
 
 
 
 
 
 
 
 
 
 
 
6a20884
 
 
 
 
 
 
 
 
 
 
 
 
 
6d8c23b
 
6a20884
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6d8c23b
 
 
6a20884
 
 
 
 
6d8c23b
 
 
6a20884
6d8c23b
 
 
 
 
 
953f4c0
6a20884
 
 
 
 
 
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import gradio as gr
import requests
import time
import requests
import base64




token = '5UAYO8UWHNQKT3UUS9H8V360L76MD72DRIUY9QC2'


    

##############################################################
#################################################

def SD_call(prompt, image_prompt, weight, age, color, hair_color,hair_length,hair_texture,skin_details,eye_colors,NSFW):

    positive = "clothes"
    negative = "naked, nsfw, porn"
    serverless_api_id = '3g77weiulabzuk'
    # Define the URL you want to send the request to
    url = f"https://api.runpod.ai/v2/{serverless_api_id}/runsync"

    # Define your custom headers
    headers = {
        "Authorization": f"Bearer {token}",
        "Accept": "application/json",
        "Content-Type": "application/json"
    }

    if NSFW == True:
        positive = "naked, nsfw"
        negative = "clothes"

    if prompt.strip():
        total_prompt = prompt
    
    else:
        color = ", ".join(color)
        skin_details = ", ".join(skin_details)
        total_prompt = f"masterpiece, best quality, 8k, (looking at viewer:1.1), gorgeous, hot, seductive, {age} years old american {color} woman, {weight} kilos woman, (eye contact:1.1), beautiful face, hyper detailed, best quality, ultra high res, {hair_length} {hair_color} {hair_texture} hair,{eye_colors} eyes, {skin_details} photorealistic, high resolution, detailed, raw photo, 1girl,{image_prompt}, amateur cellphone photography. f8.0, samsung galaxy, noise, jpeg artefacts, poor lighting, low light, underexposed, high contrast "

    
    # Define your data (this could also be a JSON payload)
    print("SD_processing")
    data = {
        "input": {
            "api": {
                "method": "POST",
                "endpoint": "/sdapi/v1/txt2img"
            },
            "payload": {
                "override_settings": {
                    "sd_model_checkpoint": "CyberRealistic",
                    "sd_vae": ""
                },
                "override_settings_restore_afterwards": True,
                "refiner_checkpoint": "",
                "refiner_switch_at": 0.8,
                "prompt": f"{total_prompt}, {positive}",
                "negative_prompt": f"EasyNegative, fat, paintings, sketches, lowres, ((monochrome)), ((grayscale)), bad anatomy, text, error, cropped, signature, watermark, username, blurry, bad feet, poorly drawn face, bad proportions, gross proportions, ng_deepnegative_v1_75t, badhandsv5-neg, {negative}",
                "seed": -1,
                "batch_size": 1,
                "steps": 30,
                "cfg_scale": 7,
                "width": 520,
                "height": 520,
                "sampler_name": "DPM++ SDE Karras",
                "sampler_index": "DPM++ SDE Karras",
                "restore_faces": False
            }
        }
    }




    # Send the POST request with headers and data
    response = requests.post(url, headers=headers, json=data)

    # Check the response
    if response.status_code == 200:
        response_data = response.json()
        msg_id = response_data['id']
        print("Message ID:", msg_id)

        # Poll the status until it's not 'IN_QUEUE'
        while response_data['status'] == 'IN_QUEUE':
            time.sleep(5)  # Wait for 5 seconds before checking again
            response = requests.get(f"{url}/{msg_id}", headers=headers)
            
            try:
                response_data = response.json()
            except Exception as e:
                print("Error decoding JSON:", e)
                print("Response content:", response.text)
                break  # Exit the loop on JSON decoding error

        # Check if the response contains images
        if 'images' in response_data.get('output', {}):
            base64_image = response_data['output']['images'][0]
            image_bytes = base64.b64decode(base64_image)
            
            # Save the image to a file
            image_path = f"output_image_{msg_id}.png"
            with open(image_path, "wb") as img_file:
                img_file.write(image_bytes)

            print(f"Image downloaded successfully: {image_path}")
            
            return image_path

        else:
            return "No images found in the response."
            
    else:
        # Print error message
        return f"Error: {response.status_code} - {response.text}"
                        




def greet(prompt, image_prompt, weight, age, color, hair_color,hair_length,hair_texture,skin_details,eye_colors,NSFW):
    image_path = SD_call(prompt, image_prompt, weight, age, color, hair_color,hair_length,hair_texture,skin_details,eye_colors,NSFW)
    return "Image generated successfully", image_path


demo = gr.Interface(
    fn=greet,
    inputs=[
        gr.Textbox(label="Personal prompt", lines=3),
        gr.Textbox(label="Girl_prompt", lines=3),
        gr.Slider(label="Weight", value=55, minimum=40, maximum=150),
        gr.Slider(label="Age", value=22, minimum=18, maximum=75),
        gr.CheckboxGroup(choices=["asian", "white", "black", "latina", "middle eastern","indigenous", "Mixed"],label="Color",type="value"),
        gr.Radio(["black", "brown", "brunette", "dark brown", "light brown", "blonde", "dirty blonde", "platinum blonde", "red", "auburn", "ginger", "strawberry blonde", "gray", "silver", "white", "blue", "green", "purple", "pink", "rainbow", "multicolored"],label="Hair Color",type="value"),
        gr.Radio(["short", "long", "mi-long"],label="Hair length", type="value"),
        gr.Radio(["straight", "curvy", "wavy"],label="Hair texture", type="value"),
        gr.CheckboxGroup(choices=["((tattoos))", "((birthmark))", "freckles", "((scars))"],label="Skin details", type="value"),
        gr.Radio(["short", "hazel", "green", "blue", "gray", "amber", "black", "red", "violet"],label="Eye Color", type="value"),
        gr.Checkbox(label="NSFW", info="πŸ‘€πŸ‘€πŸ‘€")
    ],
    flagging_options=["blurry", "incorrect", "other"],
    outputs=[gr.Textbox(label="Answer", lines=3), gr.Image(label="Generated Image", type="filepath")],
)

demo.launch(share=True)