docs-bot / pages /textimage.py
Huzaifa367's picture
Update pages/textimage.py
8eb9d7a verified
raw
history blame
3.04 kB
import streamlit as st
import torch
import numpy as np
from PIL import Image
import random
import uuid
from diffusers import PixArtAlphaPipeline
# Check for CUDA availability
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
# Load the PixArtAlphaPipeline
if torch.cuda.is_available():
pipe = PixArtAlphaPipeline.from_pretrained(
"PixArt-alpha/PixArt-LCM-XL-2-1024-MS",
torch_dtype=torch.float16,
use_safetensors=True,
)
pipe.to(device)
st.write("Model loaded successfully!")
else:
st.error("This demo requires GPU support, which is not available on this system.")
# Constants
MAX_SEED = np.iinfo(np.int32).max
# Function to save image and return the path
def save_image(img):
unique_name = str(uuid.uuid4()) + ".png"
img.save(unique_name)
return unique_name
# Main function for image generation
def generate_image(prompt, style, use_negative_prompt, negative_prompt, seed, width, height, inference_steps):
generator = torch.Generator().manual_seed(seed)
# Apply the selected style
if style == "(No style)":
prompt_text = prompt
else:
prompt_text, _ = apply_style(style, prompt, negative_prompt)
# Generate the image
images = pipe(
prompt=prompt_text,
negative_prompt=None,
width=width,
height=height,
guidance_scale=0,
num_inference_steps=inference_steps,
generator=generator,
num_images_per_prompt=1,
use_resolution_binning=True,
output_type="pil",
).images
# Save the image and display
if images:
img_path = save_image(images[0])
img = Image.open(img_path)
st.image(img, caption="Generated Image", use_column_width=True)
st.success("Image generated successfully!")
else:
st.error("Failed to generate image. Please try again.")
# Helper function to apply selected style
def apply_style(style_name, positive, negative):
# Define styles dictionary (similar to your Gradio code)
styles = {
"(No style)": (positive, ""),
"Cinematic": ("cinematic still " + positive, "anime, cartoon, ..."),
"Realistic": ("Photorealistic " + positive, "drawing, painting, ..."),
# Add other styles here...
}
return styles.get(style_name, styles["(No style)"])
# Streamlit UI
st.title("Instant Image Generator")
prompt = st.text_input("Prompt", "Enter your prompt")
style_names = ["(No style)", "Cinematic", "Realistic"] # Add other styles here...
style = st.selectbox("Image Style", style_names)
use_negative_prompt = st.checkbox("Use negative prompt")
negative_prompt = st.text_input("Negative prompt", "")
seed = st.slider("Seed", 0, MAX_SEED, 0)
width = st.slider("Width", 256, 4192, 1024, step=32)
height = st.slider("Height", 256, 4192, 1024, step=32)
inference_steps = st.slider("Steps", 4, 20, 4)
if st.button("Generate Image"):
generate_image(prompt, style, use_negative_prompt, negative_prompt, seed, width, height, inference_steps)