Spaces:
Running
on
Zero
Running
on
Zero
File size: 5,713 Bytes
3d91128 d8ca99b 49825df 1b23e89 7bef48f 1b23e89 36f5062 74c2aa0 36f5062 1b23e89 74c2aa0 49825df 3d91128 1b23e89 8a3216f 3752ce0 1b23e89 fcae3d8 1b23e89 3d91128 74c2aa0 8a3216f 74c2aa0 960c701 c119f33 bfdcbb9 72f5d23 960c701 b77bbcf 960c701 74c2aa0 d8ca99b 0684317 1b23e89 8e3317d 0684317 1b23e89 8e3317d 0684317 1b23e89 c119f33 8e3317d 0684317 1b23e89 2edf8a1 b77bbcf 1b23e89 7dd41a0 91f11fc 3752ce0 7dd41a0 91f11fc 2743d6e 1b23e89 74c2aa0 b77bbcf 5753d99 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
import spaces
import gradio as gr
from diffusers import AutoPipelineForText2Image, AutoPipelineForImage2Image, AutoPipelineForInpainting, AutoencoderKL
from diffusers.utils import load_image
import torch
from PIL import ImageOps
vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)
text_pipeline = AutoPipelineForText2Image.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", vae=vae, torch_dtype=torch.float16, variant="fp16", use_safetensors=True).to("cuda")
text_pipeline.load_ip_adapter("h94/IP-Adapter", subfolder="sdxl_models", weight_name="ip-adapter_sdxl.bin")
text_pipeline.set_ip_adapter_scale(0.6)
image_pipeline = AutoPipelineForImage2Image.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", vae=vae, torch_dtype=torch.float16, variant="fp16", use_safetensors=True).to("cuda")
image_pipeline.load_ip_adapter("h94/IP-Adapter", subfolder="sdxl_models", weight_name="ip-adapter_sdxl.bin")
image_pipeline.set_ip_adapter_scale(0.6)
inpaint_pipeline = AutoPipelineForInpainting.from_pretrained("diffusers/stable-diffusion-xl-1.0-inpainting-0.1", vae=vae, torch_dtype=torch.float16, variant="fp16", use_safetensors=True).to("cuda")
inpaint_pipeline.load_ip_adapter("h94/IP-Adapter", subfolder="sdxl_models", weight_name="ip-adapter_sdxl.bin")
inpaint_pipeline.set_ip_adapter_scale(0.6)
@spaces.GPU(enable_queue=True)
def text_to_image(ip, prompt, neg_prompt, width, height, ip_scale, strength, guidance, steps):
text_pipeline.to("cuda")
ip.thumbnail((1024, 1024))
text_pipeline.set_ip_adapter_scale(ip_scale)
images = text_pipeline(
prompt=prompt,
ip_adapter_image=ip,
negative_prompt=neg_prompt,
width=width,
height=height,
strength=strength,
guidance_scale=guidance,
num_inference_steps=steps,
).images
return images[0]
@spaces.GPU(enable_queue=True)
def image_to_image(ip, image, prompt, neg_prompt, width, height, ip_scale, strength, guidance, steps):
image_pipeline.to("cuda")
ip.thumbnail((1024, 1024))
image.thumbnail((1024, 1024))
image_pipeline.set_ip_adapter_scale(ip_scale)
images = image_pipeline(
prompt=prompt,
image=image,
ip_adapter_image=ip,
negative_prompt=neg_prompt,
width=width,
height=height,
strength=strength,
guidance_scale=guidance,
num_inference_steps=steps,
).images
return images[0]
@spaces.GPU(enable_queue=True)
def inpaint(ip, image_editor, prompt, neg_prompt, width, height, ip_scale, strength, guidance, steps):
inpaint_pipeline.to("cuda")
print(image_editor)
image = image_editor['background'].convert('RGB')
mask = image_editor['composite'].convert('RGB')
mask = ImageOps.invert(mask)
ip.thumbnail((1024, 1024))
image.thumbnail((1024, 1024))
mask.thumbnail((1024, 1024))
inpaint_pipeline.set_ip_adapter_scale(ip_scale)
images = inpaint_pipeline(
prompt=prompt,
image=image,
mask_image=mask,
ip_adapter_image=ip,
negative_prompt=neg_prompt,
width=width,
height=height,
strength=strength,
guidance_scale=guidance,
num_inference_steps=steps,
).images
return images[0], image, mask
with gr.Blocks() as demo:
gr.Markdown("""
# IP-Adapter Playground
by [Tony Assi](https://www.tonyassi.com/)
""")
with gr.Row():
with gr.Tab("Text-to-Image"):
text_ip = gr.Image(label='IP-Adapter Image', type='pil')
text_prompt = gr.Textbox(label='Prompt')
text_button = gr.Button("Generate")
with gr.Tab("Image-to-Image"):
image_ip = gr.Image(label='IP-Adapter Image', type='pil')
image_image = gr.Image(label='Image', type='pil')
image_prompt = gr.Textbox(label='Prompt')
image_button = gr.Button("Generate")
with gr.Tab("Inpainting"):
inpaint_ip = gr.Image(label='IP-Adapter Image', type='pil')
inpaint_editor = gr.ImageMask(type='pil')
inpaint_prompt = gr.Textbox(label='Prompt')
inpaint_button = gr.Button("Generate")
output_image = gr.Image(label='Result')
output1_image = gr.Image(label='Result')
output2_image = gr.Image(label='Result')
with gr.Accordion("Advanced Settings", open=False):
neg_prompt = gr.Textbox(label='Negative Prompt', value='ugly, deformed, nsfw')
width_slider = gr.Slider(256, 1024, value=1024, step=8, label="Width")
height_slider = gr.Slider(256, 1024, value=1024, step=8, label="Height")
ip_scale_slider = gr.Slider(0.0, 1.0, value=0.6, label="IP-Adapter Scale")
strength_slider = gr.Slider(0.0, 1.0, value=0.7, label="Strength")
guidance_slider = gr.Slider(1.0, 15.0, value=7.5, label="Guidance")
steps_slider = gr.Slider(50, 100, value=75, step=1, label="Steps")
text_button.click(text_to_image, inputs=[text_ip, text_prompt, neg_prompt, width_slider, height_slider, ip_scale_slider, strength_slider, guidance_slider, steps_slider], outputs=output_image)
image_button.click(image_to_image, inputs=[image_ip, image_image, image_prompt, neg_prompt, width_slider, height_slider, ip_scale_slider, strength_slider, guidance_slider, steps_slider], outputs=output_image)
inpaint_button.click(inpaint, inputs=[inpaint_ip, inpaint_editor, inpaint_prompt, neg_prompt, width_slider, height_slider, ip_scale_slider, strength_slider, guidance_slider, steps_slider], outputs=[output_image,output1_image,output2_image])
demo.launch() |