import gradio as gr import PIL import torch from diffusers import StableDiffusionInstructPix2PixPipeline cartoonization_id = "instruction-tuning-sd/cartoonizer" image_proc_id = "instruction-tuning-sd/low-level-img-proc" title = "Instruction-tuned Stable Diffusion" description = "This Space demonstrates the instruction-tuning on Stable Diffusion. To know more, please check out the [corresponding blog post](https://hf.co/blog/instruction-tuning-sd). Some experimentation tips on the hyperparameters are available from [the original InstructPix2Pix Space](https://huggingface.co/spaces/timbrooks/instruct-pix2pix). You can quickly try out the samples provided at the bottom of this demo." def load_pipeline(id: str): pipeline = StableDiffusionInstructPix2PixPipeline.from_pretrained( id, torch_dtype=torch.float16 ).to("cuda") pipeline.enable_xformers_memory_efficient_attention() pipeline.set_progress_bar_config(disable=True) return pipeline def infer_cartoonization( prompt: str, negative_prompt: str, image: PIL.Image.Image, steps: int, img_cfg: float, text_cfg: float, seed: int, ): pipeline = load_pipeline(cartoonization_id) images = pipeline( prompt, image, negative_prompt=negative_prompt, num_inference_steps=int(steps), image_guidance_scale=img_cfg, guidance_scale=text_cfg, generator=torch.manual_seed(int(seed)), num_images_per_prompt=4 ).images return images def infer_img_proc( prompt: str, negative_prompt: str, image: PIL.Image.Image, steps: int, img_cfg: float, text_cfg: float, seed: int, ): pipeline = load_pipeline(image_proc_id) images = pipeline( prompt, image, negative_prompt=negative_prompt, num_inference_steps=int(steps), image_guidance_scale=img_cfg, guidance_scale=text_cfg, generator=torch.manual_seed(int(seed)), ).images return images examples = [ ["cartoonize this image", "low quality", "examples/mountain.png", 20, 1.5, 7.5, 0], ["derain this image", "low quality", "examples/duck.png", 20, 1.5, 7.5, 0], ] with gr.Blocks(theme="gradio/soft") as demo: gr.Markdown(f"## {title}") gr.Markdown(description) with gr.Tab("Cartoonization"): prompt = gr.Textbox(label="Prompt") neg_prompt = gr.Textbox(label="Negative Prompt") input_image = gr.Image(label="Input Image", type="pil") steps = gr.Slider(minimum=5, maximum=100, step=1, label="Steps") img_cfg = gr.Number(value=1.5, label=f"Image CFG", interactive=True) text_cfg = gr.Number(value=7.5, label=f"Text CFG", interactive=True) seed = gr.Slider(minimum=0, maximum=100000, step=1, label="Seed") car_output_gallery = gr.Gallery().style(grid=[2], height="auto") submit_btn = gr.Button(value="Submit") all_car_inputs = [prompt, neg_prompt, input_image, steps, img_cfg, text_cfg, seed] submit_btn.click( fn=infer_cartoonization, inputs=all_car_inputs, outputs=[car_output_gallery], ) gr.Markdown("### Cartoonization example") gr.Examples( [examples[0]], inputs=all_car_inputs, outputs=car_output_gallery, fn=infer_cartoonization, cache_examples=True, ) with gr.Tab("Low-level image processing"): rompt = gr.Textbox(label="Prompt") neg_prompt = gr.Textbox(label="Negative Prompt") input_image = gr.Image(label="Input Image", type="pil") steps = gr.Slider(minimum=5, maximum=100, step=1) img_cfg = gr.Number(value=1.5, label=f"Image CFG", interactive=True) text_cfg = gr.Number(value=7.5, label=f"Text CFG", interactive=True) seed = gr.Slider(minimum=0, maximum=100000, step=1) img_proc_output_gallery = gr.Gallery().style(grid=[2], height="auto") submit_btn = gr.Button(value="Submit") all_img_proc_inputs = [prompt, neg_prompt, input_image, steps, img_cfg, text_cfg, seed] submit_btn.click( fn=infer_img_proc, inputs=all_img_proc_inputs, outputs=[img_proc_output_gallery], ) gr.Markdown("### Low-level image processing example") gr.Examples( [examples[1]], inputs=all_img_proc_inputs, outputs=img_proc_output_gallery, fn=infer_img_proc, cache_examples=True, ) demo.launch(enable_queue=True)