| |
| |
| 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], |
| queue=False) |
| 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, |
| queue=False) |
| 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 |
|
|