Spaces:
Sleeping
Sleeping
File size: 6,432 Bytes
2b799f2 74c4534 2b799f2 74c4534 2b799f2 74c4534 2b799f2 74c4534 2b799f2 74c4534 2b799f2 74c4534 2b799f2 74c4534 2b799f2 74c4534 2b799f2 74c4534 2b799f2 74c4534 2b799f2 74c4534 2b799f2 74c4534 2b799f2 74c4534 2b799f2 |
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 152 153 154 155 156 157 158 159 160 161 162 |
"""
{
"inputs": {
"prompt": "A text prompt to generate the image from.",
"image_prompts": [
{
"cn_img": "Base64 encoded image data for the first image prompt.",
"cn_stop": "ControlNet stop value for the first image prompt.",
"cn_weight": "ControlNet weight value for the first image prompt.",
"cn_type": "Type of the first image prompt."
},
{
"cn_img": "Base64 encoded image data for the second image prompt.",
"cn_stop": "ControlNet stop value for the second image prompt.",
"cn_weight": "ControlNet weight value for the second image prompt.",
"cn_type": "Type of the second image prompt."
},
{
"cn_img": "Base64 encoded image data for the third image prompt.",
"cn_stop": "ControlNet stop value for the third image prompt.",
"cn_weight": "ControlNet weight value for the third image prompt.",
"cn_type": "Type of the third image prompt."
},
{
"cn_img": "Base64 encoded image data for the fourth image prompt.",
"cn_stop": "ControlNet stop value for the fourth image prompt.",
"cn_weight": "ControlNet weight value for the fourth image prompt.",
"cn_type": "Type of the fourth image prompt."
}
],
"async_process": "Boolean to indicate if the process should be asynchronous."
},
"outputs": {
"job_id": "The ID of the job submitted for image generation.",
"job_stage": "The current stage of the job (e.g., RUNNING, SUCCESS, FAILED).",
"final_image_url": "The URL of the final generated image.",
"step_preview": "Base64 encoded step preview image data."
}
}
"""
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
import json
import base64
import time
import gradio as gr
from PIL import Image
import os
host = "http://18.119.36.46:8888"
# 📂 Get the directory where the script is located
script_dir = os.path.dirname(os.path.abspath(__file__))
def image_prompt(prompt, image1, image2, image3, image4):
source1 = open(image1, "rb").read()
source2 = open(image2, "rb").read()
source3 = open(image3, "rb").read()
source4 = open(image4, "rb").read()
params = {
"prompt": prompt,
"image_prompts": [
{
"cn_img": base64.b64encode(source1).decode('utf-8'),
"cn_stop": 1,
"cn_weight": 1,
"cn_type": "ImagePrompt"
},{
"cn_img": base64.b64encode(source2).decode('utf-8'),
"cn_stop": 1,
"cn_weight": 1,
"cn_type": "ImagePrompt"
},{
"cn_img": base64.b64encode(source3).decode('utf-8'),
"cn_stop": 1,
"cn_weight": 1,
"cn_type": "ImagePrompt"
},{
"cn_img": base64.b64encode(source4).decode('utf-8'),
"cn_stop": 1,
"cn_weight": 1,
"cn_type": "ImagePrompt"
}
],
"async_process": True
}
session = requests.Session()
retries = Retry(total=5, backoff_factor=1, status_forcelist=[502, 503, 504])
session.mount('http://', HTTPAdapter(max_retries=retries))
response = session.post(
url=f"{host}/v2/generation/text-to-image-with-ip",
data=json.dumps(params),
headers={"Content-Type": "application/json"},
timeout=10 # Increase timeout as needed
)
result = response.json()
job_id = result.get('job_id')
if job_id:
while True:
query_url = f"http://18.119.36.46:8888/v1/generation/query-job?job_id={job_id}&require_step_preview=true"
response = session.get(query_url, timeout=10) # Increase timeout as needed
job_data = response.json()
job_stage = job_data.get("job_stage")
if job_stage == "SUCCESS":
final_image_url = job_data.get("job_result")[0].get("url")
if final_image_url:
final_image_url = final_image_url.replace("127.0.0.1", "18.119.36.46")
image_response = session.get(final_image_url, timeout=10) # Increase timeout as needed
with open("output.png", "wb") as f:
f.write(image_response.content)
return "output.png", "Job completed successfully."
else:
return None, "Final image URL not found in the job data."
elif job_stage == "RUNNING":
step_preview_base64 = job_data.get("job_step_preview")
if step_preview_base64:
with open("output.png", "wb") as f:
f.write(base64.b64decode(step_preview_base64))
time.sleep(5)
elif job_stage == "FAILED":
return None, "Job failed."
else:
return None, "Job ID not found."
def create_status_image():
if os.path.exists("output.png"):
return "output.png"
else:
return None
def gradio_app():
with gr.Blocks() as demo:
prompt = gr.Textbox(label="Prompt", placeholder="Enter your text prompt here")
with gr.Row():
image1 = gr.Image(label="Image Prompt 1", type="filepath")
image2 = gr.Image(label="Image Prompt 2", type="filepath")
image3 = gr.Image(label="Image Prompt 3", type="filepath")
image4 = gr.Image(label="Image Prompt 4", type="filepath")
output_image = gr.Image(label="Generated Image")
status = gr.Textbox(label="Status")
generate_button = gr.Button("Generate Image")
generate_button.click(image_prompt, inputs=[prompt, image1, image2, image3, image4], outputs=[output_image, status])
# 🖼️ Display the status image
status_image = gr.Image(label="Queue Status", interactive=False)
# ⏲️ Update the image every 5 seconds
demo.load(create_status_image, every=5, outputs=status_image)
demo.launch()
if __name__ == "__main__":
gradio_app() |