txt2img / app.py
hostin's picture
Changing default values
2ec2579 verified
# @title 📸 Image Generation (multimodel + Gradio Web Interface)
from diffusers import DiffusionPipeline, StableDiffusionPipeline
import torch
from gradio.components import Gallery
from PIL import Image
from IPython.display import display
import os
from datetime import datetime
import gradio as gr
# Function to generate and display images
def generate_and_display_images(model_selection, scenery, style, height, width, num_images=2, n_steps=50, high_noise_frac=0.5, guidance_scale=2.6, negative_prompt="", seed=None):
if seed is None or seed == '':
seed = torch.randint(low=0, high=2**32, size=(1,)).item()
else:
try:
seed = int(seed)
except ValueError:
return "Invalid seed value. Seed must be an integer."
torch.manual_seed(seed)
# Check if CUDA is available and set the appropriate dtype
if torch.cuda.is_available():
device = "cuda"
dtype = torch.float16
else:
device = "cpu"
dtype = torch.float32
prompt = f"Scenery: {scenery}; Style: {style}"
generated_images = []
if model_selection == "dreamlike-art/dreamlike-photoreal-2.0":
model = StableDiffusionPipeline.from_pretrained(model_selection, torch_dtype=dtype).to(device)
for _ in range(num_images):
image = model(prompt=prompt, num_inference_steps=n_steps, guidance_scale=guidance_scale, negative_prompt=negative_prompt, height=height, width=width).images[0]
generated_images.append(image)
else:
base = DiffusionPipeline.from_pretrained(model_selection, torch_dtype=dtype, use_auth_token=True).to(device)
for _ in range(num_images):
if "refiner" in model_selection:
image_latent = base(prompt=prompt, num_inference_steps=n_steps, denoising_end=high_noise_frac, output_type="latent").images
image = image_latent[0] # Placeholder for actual refiner step
else:
image = base(prompt=prompt, num_inference_steps=n_steps, guidance_scale=guidance_scale, negative_prompt=negative_prompt, height=height, width=width).images[0]
generated_images.append(image)
# Save images and return file paths for Gradio display
file_paths = []
for i, image in enumerate(generated_images):
timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
filename = f"{seed}_{timestamp}_{i}.jpg"
image.save(filename)
file_paths.append(filename)
return file_paths
# Define Gradio interface
iface = gr.Interface(
fn=generate_and_display_images,
inputs=[
gr.components.Dropdown(value="dreamlike-art/dreamlike-photoreal-2.0", choices=["stabilityai/sdxl-turbo", "stabilityai/stable-diffusion-xl-base-1.0", "runwayml/stable-diffusion-v1-5", "dreamlike-art/dreamlike-photoreal-2.0", "Kardbord/stable-diffusion-v1-5-unsafe"], label="Model Selection"),
gr.components.Textbox(label="Scenery", placeholder="Describe the scenery you want in the image"),
gr.components.Textbox(label="Style", placeholder="Describe the style of the image (e.g., photorealistic, liminal, dark)"),
gr.components.Slider(minimum=1, maximum=2048, step=1, value=1024, label="Height"),
gr.components.Slider(minimum=1, maximum=2048, step=1, value=576, label="Width"),
gr.components.Number(value=1, label="Number of Images"),
gr.components.Slider(minimum=0, maximum=60, step=1, value=20, label="Number of Inference Steps"),
gr.components.Slider(minimum=0.0, maximum=1.0, step=0.01, value=0.16, label="High Noise Fraction"),
gr.components.Slider(minimum=0.0, maximum=10.0, step=0.1, value=8, label="Guidance Scale"),
gr.components.Textbox(value="", label="Negative Prompt"),
gr.components.Textbox(value=None, label="Seed (Optional)")
],
outputs=Gallery(label="Generated Images"),
examples=[["dreamlike-art/dreamlike-photoreal-2.0", "scenery : melting flesh", "style : (((photorealistic))), liminal, cryptic, cinematic, highly detailed, sharp focus, dark, creepy, weirdcore", 1024, 576, 10, 30, 0.16, 8, "2D || naked || Low Quality || text logos || watermarks || signatures || out of frame || jpeg artifacts || ugly || poorly drawn || extra limbs || extra hands || extra feet || backwards limbs || extra fingers || extra toes || unrealistic, incorrect, bad anatomy || cut off body pieces || strange body positions || impossible body positioning || Mismatched eyes || cross eyed || crooked face || crooked lips || unclear || undefined || mutations || deformities || off center || poor_composition || duplicate faces, blurry, blurred, unclear, deformed anatomy, deformed face, crazy eyes, bad hands, deformed body", None]],
title="Image Generation Tool",
description="Generate images using various diffusion models."
)
# Launch the interface
iface.launch(share=True, debug=True)