stablediffusion / app.py
shlok123's picture
Upload 16 files
a0d1656 verified
import gradio as gr
import torch
from PIL import Image
import model_loader
import pipeline
from transformers import CLIPTokenizer
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Using device: {DEVICE}")
# Load tokenizer and model
model_file = "./data/v1-5-pruned-emaonly.ckpt"
tokenizer = CLIPTokenizer("./data/vocab.json", merges_file="./data/merges.txt")
models = model_loader.preload_models_from_standard_weights(model_file, DEVICE)
def generate_image(prompt, uncond_prompt, cfg_scale, sampler, num_steps, seed, image, strength, width, height):
input_image = Image.open(image) if image else None
output_image = pipeline.generate(
prompt=prompt,
uncond_prompt=uncond_prompt,
input_image=input_image,
strength=strength,
do_cfg=True,
cfg_scale=cfg_scale,
sampler_name=sampler,
n_inference_steps=num_steps,
seed=int(seed) if seed else None,
models=models,
device=DEVICE,
idle_device="cpu",
tokenizer=tokenizer,
)
return Image.fromarray(output_image)
with gr.Blocks() as demo:
gr.Markdown("# Text-to-Image Gradio Interface")
prompt = gr.Textbox(label="Prompt", value="Astronaut in a jungle, cold color palette, muted colors, detailed, 8k")
generate_btn = gr.Button("Run")
output_image = gr.Image(label="Generated Image")
with gr.Accordion("Advanced Settings", open=False):
seed = gr.Number(value=42, label="Seed", interactive=True)
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
cfg_scale = gr.Slider(1, 14, value=8, step=0.5, label="CFG Scale")
sampler = gr.Dropdown(["ddpm", "ddim", "plms"], value="ddpm", label="Sampler")
num_steps = gr.Slider(1, 100, value=50, step=1, label="Number of inference steps")
image = gr.File(label="Upload Image (Optional)")
strength = gr.Slider(0, 1, value=0.75, step=0.05, label="Strength (for Image-to-Image)")
generate_btn.click(
generate_image,
inputs=[prompt, gr.Textbox(value="", visible=False), cfg_scale, sampler, num_steps, seed, image, strength],
outputs=output_image
)
demo.launch()