Spaces:
Running
on
Zero
Running
on
Zero
import gradio as gr | |
from diffusers import StableDiffusionXLPipeline, DDIMScheduler | |
import torch | |
import sa_handler | |
# init models | |
scheduler = DDIMScheduler(beta_start=0.00085, beta_end=0.012, beta_schedule="scaled_linear", clip_sample=False, | |
set_alpha_to_one=False) | |
pipeline = StableDiffusionXLPipeline.from_pretrained( | |
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, variant="fp16", use_safetensors=True, | |
scheduler=scheduler | |
).to("cuda") | |
# Configure the pipeline for CPU offloading and VAE slicing#pipeline.enable_sequential_cpu_offload() | |
pipeline.enable_model_cpu_offload() | |
pipeline.enable_vae_slicing() | |
# Initialize the style-aligned handler | |
handler = sa_handler.Handler(pipeline) | |
sa_args = sa_handler.StyleAlignedArgs(share_group_norm=False, | |
share_layer_norm=False, | |
share_attention=True, | |
adain_queries=True, | |
adain_keys=True, | |
adain_values=False, | |
) | |
handler.register(sa_args, ) | |
# Define the function to generate style-aligned images | |
def style_aligned_sdxl(initial_prompt1, initial_prompt2, initial_prompt3, initial_prompt4, | |
initial_prompt5, style_prompt, seed): | |
try: | |
# Combine the style prompt with each initial prompt | |
gen = None if seed is None else torch.manual_seed(int(seed)) | |
sets_of_prompts = [prompt + " in the style of " + style_prompt for prompt in [initial_prompt1, initial_prompt2, initial_prompt3, initial_prompt4, initial_prompt5] if prompt] | |
# Generate images using the pipeline | |
images = pipeline(sets_of_prompts, generator=gen).images | |
return images | |
except Exception as e: | |
raise gr.Error(f"Error in generating images: {e}") | |
with gr.Blocks() as demo: | |
gr.HTML('<h1 style="text-align: center;">StyleAligned SDXL</h1>') | |
with gr.Group(): | |
with gr.Column(): | |
with gr.Accordion(label='Enter upto 5 different initial prompts', open=True): | |
with gr.Row(variant='panel'): | |
# Textboxes for initial prompts | |
initial_prompt1 = gr.Textbox(label='Initial prompt 1', value='', show_label=False, container=False, placeholder='a toy train') | |
initial_prompt2 = gr.Textbox(label='Initial prompt 2', value='', show_label=False, container=False, placeholder='a toy airplane') | |
initial_prompt3 = gr.Textbox(label='Initial prompt 3', value='', show_label=False, container=False, placeholder='a toy bicycle') | |
initial_prompt4 = gr.Textbox(label='Initial prompt 4', value='', show_label=False, container=False, placeholder='a toy car') | |
initial_prompt5 = gr.Textbox(label='Initial prompt 5', value='', show_label=False, container=False, placeholder='a toy boat') | |
with gr.Row(): | |
# Textbox for the style prompt | |
style_prompt = gr.Textbox(label="Enter a style prompt", placeholder='macro photo, 3d game asset', scale=3) | |
seed = gr.Number(value=1234, label="Seed", precision=0, step=1, scale=1, | |
info="Enter a seed of a previous run " | |
"or leave empty for a random generation.") | |
# Button to generate images | |
btn = gr.Button("Generate a set of Style-aligned SDXL images",) | |
# Display the generated images | |
output = gr.Gallery(label="Style aligned text-to-image on SDXL ", elem_id="gallery",columns=5, rows=1, | |
object_fit="contain", height="auto",) | |
# Button click event | |
btn.click(fn=style_aligned_sdxl, | |
inputs=[initial_prompt1, initial_prompt2, initial_prompt3, initial_prompt4, initial_prompt5, | |
style_prompt, seed], | |
outputs=output, | |
api_name="style_aligned_sdxl") | |
# Providing Example inputs for the demo | |
gr.Examples(examples=[ | |
["a toy train", "a toy airplane", "a toy bicycle", "a toy car", "a toy boat", "macro photo. 3d game asset."], | |
["a toy train", "a toy airplane", "a toy bicycle", "a toy car", "a toy boat", "BW logo. high contrast."], | |
["a cat", "a dog", "a bear", "a man on a bicycle", "a girl working on laptop", "minimal origami."], | |
["a firewoman", "a Gardner", "a scientist", "a policewoman", "a saxophone player", "made of claymation, stop motion animation."], | |
["a firewoman", "a Gardner", "a scientist", "a policewoman", "a saxophone player", "sketch, character sheet."], | |
], | |
inputs=[initial_prompt1, initial_prompt2, initial_prompt3, initial_prompt4, initial_prompt5, style_prompt], | |
outputs=[output], | |
fn=style_aligned_sdxl) | |
# Launch the Gradio demo | |
demo.launch() |