Spaces:
Runtime error
Runtime error
import gradio as gr | |
import aiohttp | |
import asyncio | |
import random | |
import io | |
from PIL import Image | |
import os | |
from concurrent.futures import ThreadPoolExecutor | |
markdown_link = "For more generations, visit [Imagine Art](https://www.imagine.art/)." | |
TOKEN = os.getenv("TOKEN") | |
URL = os.getenv("URL") | |
if not URL: | |
raise ValueError("URL environment variable is not set.") | |
async def async_generation_request(request_data, is_user_premium): | |
seed = request_data.get("seed", random.randint(1, 10000000)) | |
headers = { | |
"bearer": TOKEN, | |
"Style-Id": request_data["model_id"] | |
} | |
if is_user_premium: | |
headers["Premium"] = "True" | |
for key, value in headers.items(): | |
if value is None: | |
raise ValueError(f"Header value is missing for key: {key}") | |
async with aiohttp.ClientSession() as session: | |
for i in range(3): | |
data = aiohttp.FormData() | |
data.add_field('prompt', request_data["prompt"], content_type='multipart/form-data') | |
data.add_field('style_id', request_data["model_id"]) | |
data.add_field('seed', str(seed)) | |
data.add_field('aspect_ratio', request_data["aspect_ratio"]) | |
data.add_field('negative_prompt', request_data["negative_prompt"]) | |
data.add_field('cfg', str(request_data["cfg_scale"])) | |
async with session.post(URL, data=data, headers=headers) as response: | |
if response.status == 200: | |
return await response.read() | |
print(f"Failed API Call: {response.status} >>> {await response.text()}") | |
return None | |
def run_async_in_thread(func, *args): | |
with ThreadPoolExecutor() as executor: | |
return executor.submit(asyncio.run, func(*args)).result() | |
def gradio_generation_request(prompt, aspect_ratio, negative_prompt, cfg_scale): | |
request_data = { | |
"prompt": prompt, | |
"model_id": "32", | |
"aspect_ratio": aspect_ratio, | |
"negative_prompt": negative_prompt, | |
"cfg_scale": cfg_scale, | |
"seed": random.randint(1, 10000000) | |
} | |
output = run_async_in_thread(async_generation_request, request_data, True) | |
if output: | |
return Image.open(io.BytesIO(output)) | |
else: | |
return None | |
interface = gr.Interface( | |
fn=gradio_generation_request, | |
inputs=[ | |
gr.Textbox(label="Prompt"), | |
gr.Textbox(label="Aspect Ratio"), | |
gr.Textbox(label="Negative Prompt"), | |
gr.Slider(minimum=1, maximum=15, value=7.5, label="CFG Scale") | |
], | |
outputs="image", | |
title='IMAGINE V4.1 GENERATION', | |
description=markdown_link | |
) | |
interface.launch() |