Spaces:
Runtime error
Runtime error
| 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) |