Monster-SD / app.py
gvij's picture
Update app.py
3ca3b14
raw
history blame contribute delete
No virus
4.31 kB
import random
import gradio as gr
import requests
from concurrent.futures import ThreadPoolExecutor
from MonsterAPIClient import MClient
from typing import Tuple
client = MClient()
def generate_model_output(model: str, input_text: str, neg_prompt: str, samples: int, steps: int,
aspect_ratio: str, guidance_scale: float, random_seed: str) -> str:
"""
Generate output from a specific model.
Parameters:
model (str): The name of the model.
input_text (str): Your input text prompt.
neg_prompt (str): Negative text prompt.
samples (int): No. of images to be generated.
steps (int): Sampling steps per image.
aspect_ratio (str): Aspect ratio of the generated image.
guidance_scale (float): Prompt guidance scale.
random_seed (str): Random number used to initialize the image generation.
Returns:
str: The generated output text or image URL.
"""
try:
response = client.get_response(model, {
"prompt": input_text,
"negprompt": neg_prompt,
"samples": samples,
"steps": steps,
"aspect_ratio": aspect_ratio,
"guidance_scale": guidance_scale,
"seed": random_seed,
})
output = client.wait_and_get_result(response['process_id'])
if 'output' in output:
return output['output']
else:
return "No output available."
except Exception as e:
return f"Error occurred: {str(e)}"
def generate_output(input_text: str, neg_prompt: str, samples: int, steps: int,
aspect_ratio: str, guidance_scale: float, random_seed: str):
with ThreadPoolExecutor() as executor:
# Schedule the function calls asynchronously
future_sdxl_base = executor.submit(generate_model_output, 'sdxl-base', input_text, neg_prompt, samples, steps,
aspect_ratio, guidance_scale, random_seed)
future_txt2img = executor.submit(generate_model_output, 'txt2img', input_text, neg_prompt, samples, steps,
aspect_ratio, guidance_scale, random_seed)
# Get the results from the completed futures
sdxl_base_output = future_sdxl_base.result()
txt2img_output = future_txt2img.result()
return [sdxl_base_output, txt2img_output]
# Function to stitch
input_components = [
gr.inputs.Textbox(label="Input Prompt"),
gr.inputs.Textbox(label="Negative Prompt"),
gr.inputs.Slider(label="No. of Images to Generate", minimum=1, maximum=2, default=1, step = 1),
gr.inputs.Slider(label="Sampling Steps per Image", minimum=30, maximum=40, default=30, step = 1),
gr.inputs.Dropdown(label="Aspect Ratio", choices=["square", "landscape", "portrait"], default="square"),
gr.inputs.Slider(label="Prompt Guidance Scale", minimum=0.1, maximum=20.0, default=7.5),
gr.inputs.Textbox(label="Random Seed", default=random.randint(0, 1000000)),
]
output_component_sdxl_base = gr.Gallery(label="Stable Diffusion XL Output", type="pil", container = True)
output_component_txt2img = gr.Gallery(label="Stable Diffusion V1.5 Output", type="pil", container = True)
interface = gr.Interface(
fn=generate_output,
inputs=input_components,
outputs=[output_component_sdxl_base, output_component_txt2img],
live=False,
capture_session=True,
title="Stable Diffusion Evaluation [Beta] powered by MonsterAPI",
description="""This HuggingFace Space lets you compare Stable-Diffusion V1.5 vs SDXL image quality. These models are hosted on [MonsterAPI](https://monsterapi.ai/?utm_source=sdxl-evaluation&utm_medium=referral) - An AI infrastructure platform for accessing LLMs via low-cost APIs and [no-code LLM finetuning](https://docs.monsterapi.ai/fine-tune-a-large-language-model-llm). MonsterAPI is powered by our low cost and highly scalable GPU computing platform - [Q Blocks](https://www.qblocks.cloud?utm_source=sdxl-evaluation&utm_medium=referral). Checkout our [SDXL API documentation](https://documenter.getpostman.com/view/13759598/2s8ZDVZ3Yi#37336bc8-7a4b-41fe-b253-6a6f7ba63c82) to get started.""",
css="body {background-color: black}"
)
# Launch the Gradio app
interface.launch()