import os
import numpy as np
import cv2
import gradio as gr
import modules.scripts as scripts
from modules import script_callbacks
from basicsr.utils.download_util import load_file_from_url
maps_path = os.path.join(scripts.basedir(), "maps");
types = list(os.walk(maps_path))[0][1]
class Script(scripts.Script):
def __init__(self) -> None:
super().__init__()
def title(self):
return "Depth Library"
def show(self, is_img2img):
return scripts.AlwaysVisible
def ui(self, is_img2img):
return ()
def on_ui_tabs():
png_input_area = gr.Image(label="Selected")
with gr.Blocks(analytics_enabled=False) as depth_lib:
with gr.Row():
with gr.Column():
width = gr.Slider(label="width", minimum=64, maximum=2048, value=512, step=64, interactive=True)
height = gr.Slider(label="height", minimum=64, maximum=2048, value=512, step=64, interactive=True)
base = gr.Slider(label="Base Depth", minimum=0, maximum=255, value=0, step=1, interactive=True)
with gr.Row():
add = gr.Button(value="Add", variant="primary")
remove = gr.Button(value="Remove selected")
reset_btn = gr.Button(value="Reset")
with gr.Row():
bg_input = gr.Button(value="Add background image")
bg_remove = gr.Button(value="Remove background image")
with gr.Row():
with gr.Column(scale=3):
for t in types:
with gr.Tab(t.capitalize()):
dataset = gr.Examples(examples=os.path.join(maps_path, t), inputs=[png_input_area],examples_per_page=24,label="Depth Maps", elem_id="examples")
with gr.Column(scale=1):
png_input_area.render()
opacity = gr.Slider(label="Opacity", minimum=0.01, maximum=1, value=1, step=0.01, interactive=True)
with gr.Column():
# gradioooooo...
canvas = gr.HTML('')
with gr.Row():
png_output = gr.Button(value="Save PNG")
send_output = gr.Button(value="Send to ControlNet")
width.change(None, [width, height], None, _js="(w, h) => {depth_resizeCanvas(w, h)}")
height.change(None, [width, height], None, _js="(w, h) => {depth_resizeCanvas(w, h)}")
base.change(None, [base], None, _js="(base) => {depth_setBrightness(base)}")
opacity.change(None, [opacity], None, _js="(op) => {depth_setOpacity(op)}")
png_output.click(None, [], None, _js="depth_savePNG")
bg_input.click(None, [], None, _js="depth_addBackground")
bg_remove.click(None, [], None, _js="depth_removeBackground")
add.click(None, [png_input_area], None, _js="(path) => {depth_addImg(path)}")
remove.click(None, [], None, _js="depth_removeSelection")
send_output.click(None, [], None, _js="depth_sendImage")
reset_btn.click(None, [], None, _js="depth_resetCanvas")
return [(depth_lib, "Depth Library", "depth_lib")]
script_callbacks.on_ui_tabs(on_ui_tabs)