Commit d07cb46f authored by yfszzx's avatar yfszzx
Browse files

inspiration pull request

parent 604620a7
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -28,3 +28,4 @@ notification.mp3
/SwinIR
/textual_inversion
.vscode
/inspiration
 No newline at end of file
+0 −1
Original line number Diff line number Diff line
@@ -116,7 +116,6 @@ function showGalleryImage() {
                e.dataset.modded = true;
                if(e && e.parentElement.tagName == 'DIV'){
                    e.style.cursor='pointer'
                    e.style.userSelect='none'
                    e.addEventListener('click', function (evt) {
                        if(!opts.js_modal_lightbox) return;
                        modalZoomSet(gradioApp().getElementById('modalImage'), opts.js_modal_lightbox_initially_zoomed)
+42 −0
Original line number Diff line number Diff line
function public_image_index_in_gallery(item, gallery){
    var index;
    var i = 0;
    gallery.querySelectorAll("img").forEach(function(e){
        if (e == item)
            index = i;
        i += 1;
    });
    return index;
}

function inspiration_selected(name, types, name_list){
    var btn = gradioApp().getElementById("inspiration_select_button")
    return [gradioApp().getElementById("inspiration_select_button").getAttribute("img-index"), types];
}    
var inspiration_image_click = function(){
    var index =  public_image_index_in_gallery(this, gradioApp().getElementById("inspiration_gallery"));
    var btn = gradioApp().getElementById("inspiration_select_button")
    btn.setAttribute("img-index", index)
    setTimeout(function(btn){btn.click();}, 10, btn)
}

document.addEventListener("DOMContentLoaded", function() {
    var mutationObserver = new MutationObserver(function(m){
        var gallery = gradioApp().getElementById("inspiration_gallery")
        if (gallery) {
            var node = gallery.querySelector(".absolute.backdrop-blur.h-full")
            if (node) {
                node.style.display = "None"; //parentNode.removeChild(node) 
            }
            
            gallery.querySelectorAll('img').forEach(function(e){    
                e.onclick = inspiration_image_click
        }) 

        }


    });
    mutationObserver.observe( gradioApp(), { childList:true, subtree:true });

});

modules/inspiration.py

0 → 100644
+122 −0
Original line number Diff line number Diff line
import os
import random
import gradio 
inspiration_path = "inspiration"
inspiration_system_path = os.path.join(inspiration_path, "system")
def read_name_list(file):
    if not os.path.exists(file):
        return []
    f = open(file, "r")
    ret = []
    line = f.readline()
    while len(line) > 0:
        line = line.rstrip("\n")
        ret.append(line)
    print(ret)
    return ret

def save_name_list(file, name): 
    print(file)
    f = open(file, "a")
    f.write(name + "\n")

def get_inspiration_images(source, types):   
    path = os.path.join(inspiration_path , types) 
    if source == "Favorites":
        names = read_name_list(os.path.join(inspiration_system_path, types + "_faverites.txt"))
        names = random.sample(names, 25)
    elif source == "Abandoned":
        names = read_name_list(os.path.join(inspiration_system_path, types + "_abondened.txt"))
        names = random.sample(names, 25)
    elif source == "Exclude abandoned":
        abondened = read_name_list(os.path.join(inspiration_system_path, types + "_abondened.txt"))        
        all_names = os.listdir(path)
        names = []
        while len(names) < 25:
            name = random.choice(all_names)
            if name not in abondened:
                names.append(name)
    else:
        names = random.sample(os.listdir(path), 25)
    names = random.sample(names, 25)
    image_list = []
    for a in names:
        image_path = os.path.join(path, a)
        images = os.listdir(image_path)        
        image_list.append(os.path.join(image_path, random.choice(images)))
    return image_list, names

def select_click(index, types, name_list):
    name = name_list[int(index)]
    path = os.path.join(inspiration_path, types, name)
    images = os.listdir(path)
    return name, [os.path.join(path, x) for x in images]

def give_up_click(name, types):
    file = os.path.join(inspiration_system_path, types + "_abandoned.txt")
    name_list = read_name_list(file)
    if name not in name_list:
        save_name_list(file, name)
   
def collect_click(name, types):
    file = os.path.join(inspiration_system_path, types + "_faverites.txt")
    print(file)
    name_list = read_name_list(file)
    print(name_list)
    if name not in name_list:
        save_name_list(file, name)

def moveout_click(name, types):
    file = os.path.join(inspiration_system_path, types + "_faverites.txt")
    name_list = read_name_list(file)
    if name not in name_list:
        save_name_list(file, name)

def source_change(source):
    if source == "Abandoned" or source == "Favorites":
        return gradio.Button.update(visible=True, value=f"Move out {source}")
    else:
        return gradio.Button.update(visible=False)

def ui(gr, opts):     
    with gr.Blocks(analytics_enabled=False) as inspiration:
        flag = os.path.exists(inspiration_path)        
        if flag:
            types = os.listdir(inspiration_path)
            types = [x for x in types if x != "system"]
            flag = len(types) > 0
        if not flag:
            os.mkdir(inspiration_path)
            gr.HTML("""
                <div align='center' width="50%>You need get "inspiration" images first. You can create these images by run "Create inspiration images" script in txt2img page, or download zip file from here and unzip these file under fold "inpiration".</div>"
                """)           
            return inspiration
        if not os.path.exists(inspiration_system_path):
            os.mkdir(inspiration_system_path)
        gallery, names = get_inspiration_images("Exclude abandoned", types[0])   
        with gr.Row():
            with gr.Column(scale=2):                
                inspiration_gallery = gr.Gallery(gallery, show_label=False, elem_id="inspiration_gallery").style(grid=5, height='auto')
            with gr.Column(scale=1):
                types = gr.Dropdown(choices=types, value=types[0], label="Type", visible=len(types) > 1)
                with gr.Row():                    
                    source = gr.Dropdown(choices=["All", "Favorites", "Exclude abandoned", "Abandoned"], value="Exclude abandoned", label="Source")
                    get_inspiration = gr.Button("Get inspiration")
                name = gr.Textbox(show_label=False, interactive=False)
                with gr.Row(): 
                    send_to_txt2img = gr.Button('to txt2img')
                    send_to_img2img = gr.Button('to img2img')
                style_gallery = gr.Gallery(show_label=False, elem_id="inspiration_style_gallery").style(grid=2, height='auto')                          
               
                collect = gr.Button('Collect')     
                give_up = gr.Button("Don't show any more")
                moveout = gr.Button("Move out", visible=False)
        with gr.Row():
            select_button = gr.Button('set button', elem_id="inspiration_select_button")
            name_list = gr.State(names)
        source.change(source_change, inputs=[source], outputs=[moveout])
        get_inspiration.click(get_inspiration_images, inputs=[source, types], outputs=[inspiration_gallery, name_list])
        select_button.click(select_click, _js="inspiration_selected", inputs=[name, types, name_list], outputs=[name, style_gallery])
        give_up.click(give_up_click, inputs=[name, types], outputs=None)
        collect.click(collect_click, inputs=[name, types], outputs=None)
    return inspiration
+1 −0
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@ parser.add_argument('--vae-path', type=str, help='Path to Variational Autoencode
parser.add_argument("--disable-safe-unpickle", action='store_true', help="disable checking pytorch models for malicious code", default=False)
parser.add_argument("--api", action='store_true', help="use api=True to launch the api with the webui")
parser.add_argument("--nowebui", action='store_true', help="use api=True to launch the api instead of the webui")
parser.add_argument("--ui-debug-mode", action='store_true', help="Don't load model to quickly launch UI")

cmd_opts = parser.parse_args()
restricted_opts = [
Loading