Image / app3.py
clementrof's picture
Update app3.py
3ba09e2 verified
import gradio as gr
import requests
import time
import requests
import base64
import os
token = os.getenv("runpod_key")
#############################################################
#################################################
def SD_call(prompt, image_prompt, age, weight, w_w, color, hair_color,h_c_w, hair_length, h_l_w,hair_texture, h_t_w,skin_details, eye_colors, e_c_w,NSFW):
positive = "clothes"
negative = "(((naked))), (((nsfw))), porn"
serverless_api_id = 'zcparyadhjnmg7'
# 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"
}
weight = f"{'(' * w_w}{weight} woman{')' * w_w}"
hair_color=f"{'(' * h_c_w}{hair_color} hair{')' * h_c_w}"
hair_length=f"{'(' * h_l_w}{hair_length} hair{')' * h_l_w}"
hair_texture =f"{'(' * h_t_w}{hair_texture} hair{')' * h_t_w}"
eye_colors=f"{'(' * e_c_w}{eye_colors} eyes{')' * e_c_w}"
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"(looking at viewer:1.1), gorgeous, hot, seductive, {age} years old american {color} woman, {weight}, (eye contact:1.1), beautiful face, hyper detailed, best quality, ultra high res, {hair_length}, {hair_color}, {hair_texture},{eye_colors}, {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
}
}
}
# data = {
# "input": {
# "prompt": f"{total_prompt}, {positive}",
# "negative_prompt": f"paintings, sketches, lowres, ((monochrome)), ((grayscale)), bad anatomy, text, error, cropped, signature, watermark, username, blurry, bad feet, poorly drawn face, bad proportions, gross proportions, badhandsv5-neg, {negative}",
# "width": 512,
# "height": 720,
# "guidance_scale": 7.5,
# "num_inference_steps": 30,
# "num_outputs": 1,
# "prompt_strength": 0.8,
# "scheduler": "K-LMS"
# }
# }
# 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
print("1")
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', {}):
print("image")
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, age, weight, w_w, color, hair_color, h_c_w, hair_length, h_l_w,hair_texture, h_t_w,skin_details, eye_colors, e_c_w,NSFW):
image_path = SD_call(prompt, image_prompt, age, weight, w_w, color, hair_color,h_c_w, hair_length, h_l_w,hair_texture, h_t_w,skin_details, eye_colors, e_c_w,NSFW)
if image_path is not None:
return image_path
else:
return None
demo = gr.Interface(
fn=greet,
inputs=[
gr.Textbox(label="Personal prompt", lines=3),
gr.Textbox(label="Girl_prompt", lines=3),
gr.Slider(label="Age", value=22, minimum=18, maximum=75,step=1),
gr.Radio(["skinny", "slim", "athletic", "muscular", "average", "curvy", "chubby", "overweight", "obese"],label="Body Type",type="value"),
gr.Slider(label="Body Type weight", value=1, minimum=1, maximum=4, step=1),
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.Slider(label="Hair Color weight", value=1, minimum=1, maximum=4, step=1),
gr.Radio(["short", "long", "mi-long"],label="Hair length", type="value"),
gr.Slider(label="Hair length weight", value=1, minimum=1, maximum=4, step=1),
gr.Radio(["straight", "curvy", "wavy"],label="Hair texture", type="value"),
gr.Slider(label="Hair texture weight", value=1, minimum=1, maximum=4, step=1),
gr.CheckboxGroup(choices=["((tattoos))", "((birthmark))", "freckles", "((scars))"],label="Skin details", type="value"),
gr.Radio(["brown", "hazel", "green", "blue", "gray", "amber", "black", "red", "violet"],label="Eyes Color", type="value"),
gr.Slider(label="Eyes color weight", value=1, minimum=1, maximum=4, step=1),
gr.Checkbox(label="NSFW", info="πŸ‘€πŸ‘€πŸ‘€")
],
flagging_options=["blurry", "incorrect", "other"],
outputs=[gr.Image(label="Generated Image", type="filepath")],
)
demo.launch(share=True)