Diffusers_demo_for_assistant / diffusers_demo.py
olgamoskvyak's picture
Upload folder using huggingface_hub
0bfa5c3 verified
Raw History Blame Contribute Delete
3.56 kB
import gradio as gr
from PIL import Image
from loguru import logger
import torch
from diffusers import AutoPipelineForImage2Image
from diffusers import AutoPipelineForText2Image
# Init pipelines
pipe_t2i = AutoPipelineForText2Image.from_pretrained("stabilityai/sdxl-turbo", torch_dtype=torch.float16, variant="fp16")
pipe_t2i.to("cuda")
pipe_i2i = AutoPipelineForImage2Image.from_pretrained("stabilityai/sdxl-turbo", torch_dtype=torch.float16, variant="fp16")
pipe_i2i.to("cuda")
def generate_image(text_input, prev_image, strength):
if prev_image:
logger.info(f"iterating for prompt: {text_input} with strength {strength}")
image = pipe_i2i(
prompt=text_input,
num_inference_steps=4,
guidance_scale=0.0,
strength=strength,
image=prev_image
).images[0]
else:
logger.info(f"generating for prompt: {text_input}")
image = pipe_t2i(text_input, num_inference_steps=4, guidance_scale=0.0).images[0]
return image
# Create left block (Chatbot)
with gr.Blocks() as demo:
with gr.Row() as row:
with gr.Column():
# create left block (Text input)
chatbot = gr.Chatbot(label="History")
msg = gr.Textbox(label="Input prompt and press Enter")
strength_slider = gr.Slider(minimum=0, maximum=1, value=0.75, label="Creativity of image iterations")
regen = gr.Button("Regenerate for the last prompt")
clear = gr.Button("Clear")
def respond(message, chat_history, gen_image, strength_slider, prev_gen_image):
user_input = [chat_history[i][0] for i in range(len(chat_history))]
user_input.append(message)
bot_message = "Generating image for: " + " ".join(user_input)
chat_history.append((message, bot_message))
if gen_image:
prev_gen_image = gen_image
else:
prev_gen_image = None
gen_image = generate_image(" ".join(user_input), gen_image, strength_slider)
return "", chat_history, gen_image, prev_gen_image
def regenerate(message, chat_history, gen_image, strength_slider):
# Regenerate with the previous image
user_input = [chat_history[i][0] for i in range(len(chat_history))]
# user_input.append(message)
bot_message = "Regenerating image for: " + " ".join(user_input)
chat_history.append((message, bot_message))
gen_image = generate_image(" ".join(user_input), gen_image, strength_slider)
return "", chat_history, gen_image
with gr.Column():
# Create right block (Image Generator)
image_generator = gr.Image(label="Generated image", type="pil", interactive=False, show_download_button=True)
# use this to keep track of previous image generation but don't display it
image_generator_prev = gr.Image(label="Previous image", type="pil", interactive=False)
msg.submit(respond, [msg, chatbot, image_generator, strength_slider, image_generator_prev], [msg, chatbot, image_generator, image_generator_prev])
regen.click(regenerate, [msg, chatbot, image_generator_prev, strength_slider], [msg, chatbot, image_generator])
clear.click(lambda: [None, None, None, 0.75], None, [chatbot, image_generator, image_generator_prev, strength_slider], queue=False)
# Launch the Gradio app
demo.launch(share=True)