Commit 9ed04e75 authored by AUTOMATIC's avatar AUTOMATIC
Browse files

use HTTP request to fetch metadata for Lora cards instead of including it into the main page

parent 724a6371
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -139,3 +139,39 @@ function extraNetworksShowMetadata(text){

    popup(elem);
}

function requestGet(url, data, handler, errorHandler){
    var xhr = new XMLHttpRequest();
    var args = Object.keys(data).map(function(k){ return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) }).join('&')
    xhr.open("GET", url + "?" + args, true);

    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
            if (xhr.status === 200) {
                try {
                    var js = JSON.parse(xhr.responseText);
                    handler(js)
                } catch (error) {
                    console.error(error);
                    errorHandler()
                }
            } else{
                errorHandler()
            }
        }
    };
    var js = JSON.stringify(data);
    xhr.send(js);
}

function extraNetworksRequestMetadata(extraPage, cardName){
    showError = function(){ extraNetworksShowMetadata("there was an error getting metadata"); }

    requestGet("./sd_extra_networks/metadata", {"page": extraPage, "item": cardName}, function(data){
        if(data && data.metadata){
            extraNetworksShowMetadata(data.metadata)
        } else{
            showError()
        }
    }, showError)
}
+35 −12
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ def register_page(page):
    allowed_dirs.update(set(sum([x.allowed_directories_for_previews() for x in extra_pages], [])))


def add_pages_to_demo(app):
def fetch_file(filename: str = ""):
    from starlette.responses import FileResponse

@@ -36,7 +35,24 @@ def add_pages_to_demo(app):
    # would profit from returning 304
    return FileResponse(filename, headers={"Accept-Ranges": "bytes"})


def get_metadata(page: str = "", item: str = ""):
    from starlette.responses import JSONResponse

    page = next(iter([x for x in extra_pages if x.name == page]), None)
    if page is None:
        return JSONResponse({})

    metadata = page.metadata.get(item)
    if metadata is None:
        return JSONResponse({})

    return JSONResponse({"metadata": metadata})


def add_pages_to_demo(app):
    app.add_api_route("/sd_extra_networks/thumb", fetch_file, methods=["GET"])
    app.add_api_route("/sd_extra_networks/metadata", get_metadata, methods=["GET"])


class ExtraNetworksPage:
@@ -45,6 +61,7 @@ class ExtraNetworksPage:
        self.name = title.lower()
        self.card_page = shared.html("extra-networks-card.html")
        self.allow_negative_prompt = False
        self.metadata = {}

    def refresh(self):
        pass
@@ -66,6 +83,8 @@ class ExtraNetworksPage:
        view = shared.opts.extra_networks_default_view
        items_html = ''

        self.metadata = {}

        subdirs = {}
        for parentdir in [os.path.abspath(x) for x in self.allowed_directories_for_previews()]:
            for x in glob.glob(os.path.join(parentdir, '**/*'), recursive=True):
@@ -92,6 +111,10 @@ class ExtraNetworksPage:
""" for subdir in subdirs])

        for item in self.list_items():
            metadata = item.get("metadata")
            if metadata:
                self.metadata[item["name"]] = metadata

            items_html += self.create_html_for_item(item, tabname)

        if items_html == '':
@@ -127,8 +150,7 @@ class ExtraNetworksPage:
        metadata_button = ""
        metadata = item.get("metadata")
        if metadata:
            metadata_onclick = '"' + html.escape(f"""extraNetworksShowMetadata({json.dumps(metadata)}); return false;""") + '"'
            metadata_button = f"<div class='metadata-button' title='Show metadata' onclick={metadata_onclick}></div>"
            metadata_button = f"<div class='metadata-button' title='Show metadata' onclick='extraNetworksRequestMetadata({json.dumps(self.name)}, {json.dumps(item['name'])})'></div>"

        args = {
            "preview_html": "style='background-image: url(\"" + html.escape(preview) + "\")'" if preview else '',
@@ -215,6 +237,7 @@ def create_ui(container, button, tabname):
    with gr.Tabs(elem_id=tabname+"_extra_tabs") as tabs:
        for page in ui.stored_extra_pages:
            with gr.Tab(page.title):

                page_elem = gr.HTML(page.create_html(ui.tabname))
                ui.pages.append(page_elem)

+1 −0
Original line number Diff line number Diff line
@@ -641,6 +641,7 @@ footer {
    text-shadow: 2px 2px 3px black;
    padding: 0.25em;
    font-size: 22pt;
    width: 1.5em;
}
.extra-network-cards .card:hover .metadata-button, .extra-network-thumbs .card:hover .metadata-button{
    display: inline-block;