# This file is adapted from https://github.com/lllyasviel/ControlNet/blob/f4748e3630d8141d7765e2bd9b1e348f47847707/gradio_scribble2image_interactive.py # The original license file is LICENSE.ControlNet in this repo. import gradio as gr import numpy as np def create_canvas(w, h): return np.zeros(shape=(h, w, 3), dtype=np.uint8) + 255 def create_demo(process, max_images=12): with gr.Blocks() as demo: with gr.Row(): gr.Markdown( '## Control Stable Diffusion with Interactive Scribbles') with gr.Row(): with gr.Column(): canvas_width = gr.Slider(label='Canvas Width', minimum=256, maximum=1024, value=512, step=1) canvas_height = gr.Slider(label='Canvas Height', minimum=256, maximum=1024, value=512, step=1) create_button = gr.Button(label='Start', value='Open drawing canvas!') input_image = gr.Image(source='upload', type='numpy', tool='sketch') gr.Markdown( value= 'Do not forget to change your brush width to make it thinner. (Gradio do not allow developers to set brush width so you need to do it manually.) ' 'Just click on the small pencil icon in the upper right corner of the above block.' ) create_button.click(fn=create_canvas, inputs=[canvas_width, canvas_height], outputs=[input_image]) prompt = gr.Textbox(label='Prompt') run_button = gr.Button(label='Run') with gr.Accordion('Advanced options', open=False): num_samples = gr.Slider(label='Images', minimum=1, maximum=max_images, value=1, step=1) image_resolution = gr.Slider(label='Image Resolution', minimum=256, maximum=768, value=512, step=256) ddim_steps = gr.Slider(label='Steps', minimum=1, maximum=100, value=20, step=1) scale = gr.Slider(label='Guidance Scale', minimum=0.1, maximum=30.0, value=9.0, step=0.1) seed = gr.Slider(label='Seed', minimum=-1, maximum=2147483647, step=1, randomize=True) eta = gr.Number(label='eta (DDIM)', value=0.0) a_prompt = gr.Textbox( label='Added Prompt', value='best quality, extremely detailed') n_prompt = gr.Textbox( label='Negative Prompt', value= 'longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality' ) with gr.Column(): result_gallery = gr.Gallery(label='Output', show_label=False, elem_id='gallery').style( grid=2, height='auto') ips = [ input_image, prompt, a_prompt, n_prompt, num_samples, image_resolution, ddim_steps, scale, seed, eta ] run_button.click(fn=process, inputs=ips, outputs=[result_gallery]) return demo