script.js 3.6 KB
Newer Older
1
function gradioApp(){
2
    return document.getElementsByTagName('gradio-app')[0].shadowRoot;
3 4
}

A
AUTOMATIC 已提交
5 6
global_progressbar = null

A
AUTOMATIC 已提交
7 8 9
uiUpdateCallbacks = []
function onUiUpdate(callback){
    uiUpdateCallbacks.push(callback)
D
DepFA 已提交
10 11
}

A
AUTOMATIC 已提交
12
function uiUpdate(root){
A
AUTOMATIC 已提交
13 14 15 16 17
	progressbar = root.getElementById('progressbar')
	if(progressbar!= null && progressbar != global_progressbar){
	    global_progressbar = progressbar

        var mutationObserver = new MutationObserver(function(m){
A
AUTOMATIC 已提交
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
            txt2img_preview = gradioApp().getElementById('txt2img_preview')
            txt2img_gallery = gradioApp().getElementById('txt2img_gallery')

            img2img_preview = gradioApp().getElementById('img2img_preview')
            img2img_gallery = gradioApp().getElementById('img2img_gallery')

            if(txt2img_preview != null && txt2img_gallery != null){
                txt2img_preview.style.width = txt2img_gallery.clientWidth + "px"
                txt2img_preview.style.height = txt2img_gallery.clientHeight + "px"
            }

            if(img2img_preview != null && img2img_gallery != null){
                img2img_preview.style.width = img2img_gallery.clientWidth + "px"
                img2img_preview.style.height = img2img_gallery.clientHeight + "px"
            }
D
DepFA 已提交
33
		
A
AUTOMATIC 已提交
34 35 36 37 38
            window.setTimeout(requestProgress, 500)
        });
        mutationObserver.observe( progressbar, { childList:true, subtree:true })
	}

A
AUTOMATIC 已提交
39 40 41 42

	uiUpdateCallbacks.forEach(function(x){
	    x()
	})
43 44 45 46
}

document.addEventListener("DOMContentLoaded", function() {
    var mutationObserver = new MutationObserver(function(m){
A
AUTOMATIC 已提交
47
        uiUpdate(gradioApp());
48
    });
49
    mutationObserver.observe( gradioApp(), { childList:true, subtree:true })
50
});
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

function selected_gallery_index(){
    var gr = gradioApp()
    var buttons = gradioApp().querySelectorAll(".gallery-item")
    var button = gr.querySelector(".gallery-item.\\!ring-2")

    var result = -1
    buttons.forEach(function(v, i){ if(v==button) { result = i } })

    return result
}

function extract_image_from_gallery(gallery){
    if(gallery.length == 1){
        return gallery[0]
    }

    index = selected_gallery_index()

    if (index < 0 || index >= gallery.length){
A
AUTOMATIC 已提交
71
        return [null]
72 73 74
    }

    return gallery[index];
S
Seki 已提交
75 76 77 78 79 80 81 82 83 84
}

function extract_image_from_gallery_img2img(gallery){
    gradioApp().querySelectorAll('button')[1].click();
    return extract_image_from_gallery(gallery);
}

function extract_image_from_gallery_extras(gallery){
    gradioApp().querySelectorAll('button')[2].click();
    return extract_image_from_gallery(gallery);
85
}
A
AUTOMATIC 已提交
86 87 88 89 90 91 92 93 94 95 96 97

function requestProgress(){
    btn = gradioApp().getElementById("check_progress");
    if(btn==null) return;

    btn.click();
}

function submit(){
    window.setTimeout(requestProgress, 500)

    res = []
98
    for(var i=0;i<arguments.length;i++){
A
AUTOMATIC 已提交
99 100
        res.push(arguments[i])
    }
101 102 103 104 105 106 107 108 109

    // As it is currently, txt2img and img2img send back the previous output args (txt2img_gallery, generation_info, html_info) whenever you generate a new image.
    // This can lead to uploading a huge gallery of previously generated images, which leads to an unnecessary delay between submitting and beginning to generate.
    // I don't know why gradio is seding outputs along with inputs, but we can prevent sending the image gallery here, which seems to be an issue for some.
    // If gradio at some point stops sending outputs, this may break something
    if(Array.isArray(res[res.length - 3])){
        res[res.length - 3] = null
    }

A
AUTOMATIC 已提交
110
    return res
111
}
112

113 114 115
function ask_for_style_name(_, prompt_text, negative_prompt_text) {
    name_ = prompt('Style name:')
    return name_ === null ? [null, null, null]: [name_, prompt_text, negative_prompt_text]
A
AUTOMATIC 已提交
116
}