|
|
|
|
|
import gradio as gr |
|
|
import numpy as np |
|
|
from PIL import Image |
|
|
import time |
|
|
|
|
|
|
|
|
def generate_image(text, scheduler, sampling_steps): |
|
|
|
|
|
|
|
|
rng = np.random.default_rng() |
|
|
image = rng.random(size=(600, 600, 3)) |
|
|
|
|
|
|
|
|
if scheduler == "Euler a": |
|
|
image = np.clip(image * (1 + sampling_steps / 100), 0, 1) |
|
|
elif scheduler == "DPM++ 2M Karras": |
|
|
image = np.clip(image * (1 + sampling_steps / 50), 0, 1) |
|
|
elif scheduler == "Euler": |
|
|
image = np.clip(image * (1 + sampling_steps / 20), 0, 1) |
|
|
|
|
|
|
|
|
timestamp = int(time.time() * 1000) |
|
|
filename = f"image_{timestamp}.webp" |
|
|
|
|
|
|
|
|
image_pil = Image.fromarray((image * 255).astype(np.uint8)) |
|
|
image_pil.save(filename, format="WEBP") |
|
|
|
|
|
return filename |
|
|
|
|
|
|
|
|
with gr.Blocks() as demo: |
|
|
with gr.Row(): |
|
|
text_input = gr.Textbox(label="Input Text") |
|
|
scheduler_dropdown = gr.Dropdown(choices=["Euler a", "DPM++ 2M Karras", "Euler"], value="Euler a", label="Scheduler") |
|
|
sampling_steps_slider = gr.Slider(1, 100, value=50, step=1, label="Sampling Steps") |
|
|
|
|
|
with gr.Row(): |
|
|
generate_button = gr.Button("Generate Image") |
|
|
output_image = gr.Image(label="Generated Image") |
|
|
|
|
|
|
|
|
generate_button.click( |
|
|
fn=generate_image, |
|
|
inputs=[text_input, scheduler_dropdown, sampling_steps_slider], |
|
|
outputs=output_image |
|
|
) |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
gr.load("models/stabilityai/stable-diffusion-3.5-large").launch() |
|
|
demo.launch(show_error=True) |
|
|
|
|
|
|
|
|
|