Commit 89f9faa6 authored by AUTOMATIC's avatar AUTOMATIC
Browse files

Merge branch 'release_candidate'

parents b08500ce dbd13dee
Loading
Loading
Loading
Loading
+13 −0
Original line number Original line Diff line number Diff line
## 1.2.1

### Features:
 * add an option to always refer to lora by filenames

### Bug Fixes:
 * never refer to lora by an alias if multiple loras have same alias or the alias is called none
 * fix upscalers disappearing after the user reloads UI
 * allow bf16 in safe unpickler (resolves problems with loading some loras)
 * allow web UI to be ran fully offline
 * fix localizations not working
 * fix error for loras: 'LatentDiffusion' object has no attribute 'lora_layer_mapping'

## 1.2.0
## 1.2.0


### Features:
### Features:
+10 −0
Original line number Original line Diff line number Diff line
@@ -133,6 +133,10 @@ def load_lora(name, filename):


    sd = sd_models.read_state_dict(filename)
    sd = sd_models.read_state_dict(filename)


    # this should not be needed but is here as an emergency fix for an unknown error people are experiencing in 1.2.0
    if not hasattr(shared.sd_model, 'lora_layer_mapping'):
        assign_lora_names_to_compvis_modules(shared.sd_model)

    keys_failed_to_match = {}
    keys_failed_to_match = {}
    is_sd2 = 'model_transformer_resblocks' in shared.sd_model.lora_layer_mapping
    is_sd2 = 'model_transformer_resblocks' in shared.sd_model.lora_layer_mapping


@@ -393,6 +397,8 @@ def lora_MultiheadAttention_load_state_dict(self, *args, **kwargs):
def list_available_loras():
def list_available_loras():
    available_loras.clear()
    available_loras.clear()
    available_lora_aliases.clear()
    available_lora_aliases.clear()
    forbidden_lora_aliases.clear()
    forbidden_lora_aliases.update({"none": 1})


    os.makedirs(shared.cmd_opts.lora_dir, exist_ok=True)
    os.makedirs(shared.cmd_opts.lora_dir, exist_ok=True)


@@ -406,6 +412,9 @@ def list_available_loras():


        available_loras[name] = entry
        available_loras[name] = entry


        if entry.alias in available_lora_aliases:
            forbidden_lora_aliases[entry.alias.lower()] = 1

        available_lora_aliases[name] = entry
        available_lora_aliases[name] = entry
        available_lora_aliases[entry.alias] = entry
        available_lora_aliases[entry.alias] = entry


@@ -445,6 +454,7 @@ def infotext_pasted(infotext, params):


available_loras = {}
available_loras = {}
available_lora_aliases = {}
available_lora_aliases = {}
forbidden_lora_aliases = {}
loaded_loras = []
loaded_loras = []


list_available_loras()
list_available_loras()
+1 −0
Original line number Original line Diff line number Diff line
@@ -54,6 +54,7 @@ script_callbacks.on_infotext_pasted(lora.infotext_pasted)


shared.options_templates.update(shared.options_section(('extra_networks', "Extra Networks"), {
shared.options_templates.update(shared.options_section(('extra_networks', "Extra Networks"), {
    "sd_lora": shared.OptionInfo("None", "Add Lora to prompt", gr.Dropdown, lambda: {"choices": ["None"] + [x for x in lora.available_loras]}, refresh=lora.list_available_loras),
    "sd_lora": shared.OptionInfo("None", "Add Lora to prompt", gr.Dropdown, lambda: {"choices": ["None"] + [x for x in lora.available_loras]}, refresh=lora.list_available_loras),
    "lora_preferred_name": shared.OptionInfo("Alias from file", "When adding to prompt, refer to lora by", gr.Radio, {"choices": ["Alias from file", "Filename"]}),
}))
}))




+7 −1
Original line number Original line Diff line number Diff line
@@ -15,13 +15,19 @@ class ExtraNetworksPageLora(ui_extra_networks.ExtraNetworksPage):
    def list_items(self):
    def list_items(self):
        for name, lora_on_disk in lora.available_loras.items():
        for name, lora_on_disk in lora.available_loras.items():
            path, ext = os.path.splitext(lora_on_disk.filename)
            path, ext = os.path.splitext(lora_on_disk.filename)

            if shared.opts.lora_preferred_name == "Filename" or lora_on_disk.alias.lower() in lora.forbidden_lora_aliases:
                alias = name
            else:
                alias = lora_on_disk.alias

            yield {
            yield {
                "name": name,
                "name": name,
                "filename": path,
                "filename": path,
                "preview": self.find_preview(path),
                "preview": self.find_preview(path),
                "description": self.find_description(path),
                "description": self.find_description(path),
                "search_term": self.search_terms_from_path(lora_on_disk.filename),
                "search_term": self.search_terms_from_path(lora_on_disk.filename),
                "prompt": json.dumps(f"<lora:{lora_on_disk.alias}:") + " + opts.extra_networks_default_multiplier + " + json.dumps(">"),
                "prompt": json.dumps(f"<lora:{alias}:") + " + opts.extra_networks_default_multiplier + " + json.dumps(">"),
                "local_preview": f"{path}.{shared.opts.samples_format}",
                "local_preview": f"{path}.{shared.opts.samples_format}",
                "metadata": json.dumps(lora_on_disk.metadata, indent=4) if lora_on_disk.metadata else None,
                "metadata": json.dumps(lora_on_disk.metadata, indent=4) if lora_on_disk.metadata else None,
            }
            }
+33 −27
Original line number Original line Diff line number Diff line
@@ -109,18 +109,23 @@ function processNode(node){
}
}


function dumpTranslations(){
function dumpTranslations(){
    if(!hasLocalization()) {
        // If we don't have any localization,
        // we will not have traversed the app to find
        // original_lines, so do that now.
        processNode(gradioApp());
    }
    var dumped = {}
    var dumped = {}
    if (localization.rtl) {
    if (localization.rtl) {
        dumped.rtl = true
        dumped.rtl = true;
    }
    }


    Object.keys(original_lines).forEach(function(text){
    for (const text in original_lines) {
        if(dumped[text] !== undefined)  return
        if(dumped[text] !== undefined) continue;

        dumped[text] = localization[text] || text;
        dumped[text] = localization[text] || text
    }
    })


    return dumped
    return dumped;
}
}


function download_localization() {
function download_localization() {
@@ -137,7 +142,11 @@ function download_localization() {
    document.body.removeChild(element);
    document.body.removeChild(element);
}
}


if(hasLocalization()) {
document.addEventListener("DOMContentLoaded", function () {
    if (!hasLocalization()) {
        return;
    }

    onUiUpdate(function (m) {
    onUiUpdate(function (m) {
        m.forEach(function (mutation) {
        m.forEach(function (mutation) {
            mutation.addedNodes.forEach(function (node) {
            mutation.addedNodes.forEach(function (node) {
@@ -146,8 +155,6 @@ if(hasLocalization()) {
        });
        });
    })
    })



    document.addEventListener("DOMContentLoaded", function () {
    processNode(gradioApp())
    processNode(gradioApp())


    if (localization.rtl) {  // if the language is from right to left,
    if (localization.rtl) {  // if the language is from right to left,
@@ -168,4 +175,3 @@ if(hasLocalization()) {
        })).observe(gradioApp(), { childList: true });
        })).observe(gradioApp(), { childList: true });
    }
    }
})
})
}
Loading