diff --git a/CHANGELOG.md b/CHANGELOG.md index 129db54a1..335258472 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Change Log for SD.Next +## TODO for Dev merge + +BLOCKERS: +- pending docs + +OPTIONAL: +- pending `diffusers==0.26.0` +- animatediff `enable_free_init` [pr](https://github.com/huggingface/diffusers/pull/6315) +- pipeline `diffusers_sag_scale` [pr](https://github.com/huggingface/diffusers/issues/6443) +- wuerstchen v3 [pr](https://github.com/huggingface/diffusers/pull/6487) +- adetailer [fix](https://github.com/Bing-su/adetailer/issues/466) +- rebasin [issue](https://github.com/vladmandic/automatic/issues/2608) +- control api +- photomaker api +- interrogate api +- remb api +- masking api +- preprocess api + ## Update for 2023-01-17 Another big release, highlights being: diff --git a/javascript/extraNetworks.js b/javascript/extraNetworks.js index e4bd301cc..6fee12230 100644 --- a/javascript/extraNetworks.js +++ b/javascript/extraNetworks.js @@ -132,7 +132,6 @@ async function filterExtraNetworksForTab(searchTerm) { elem.style.display = ''; }); } else { - // Do not account for case or whitespace searchTerm = searchTerm.toLowerCase().trim(); @@ -148,7 +147,7 @@ async function filterExtraNetworksForTab(searchTerm) { cards.forEach((elem) => { // Construct the search text, which is the concatenation of all data elements with a prefix to make it unique // This combined text allows to exclude search terms for example by using negative lookahead - if (re.test(`filename: ${elem.dataset.filename}|name: ${elem.dataset.name}|title: ${elem.dataset.title}|tags: ${elem.dataset.tags}`)) { + if (re.test(`${elem.dataset.filename}|${elem.dataset.name}|${elem.dataset.tags}`)) { elem.style.display = ''; found += 1; } else { @@ -160,38 +159,31 @@ async function filterExtraNetworksForTab(searchTerm) { // Keywords are separated by |, and keywords that should be excluded are prefixed with - const searchList = searchTerm.split('|').filter((s) => s !== '' && !s.startsWith('-')).map((s) => s.trim()); const excludeList = searchTerm.split('|').filter((s) => s !== '' && s.trim().startsWith('-')).map((s) => s.trim().substring(1).trim()); - - // In addition, both the searchList, and exclude List can be separated by &, which means that all keywords in the searchList must be present, and none of the excludeList + // In addition, both the searchList, and exclude List can be separated by &, which means that all keywords in the searchList must be present, and none of the excludeList // So we construct an array of arrays, which we will then use to filter the cards - const searchListAll = searchList.map((s) => s.split('&').map((s) => s.trim())); - const excludeListAll = excludeList.map((s) => s.split('&').map((s) => s.trim())); + const searchListAll = searchList.map((s) => s.split('&').map((t) => t.trim())); + const excludeListAll = excludeList.map((s) => s.split('&').map((t) => t.trim())); cards.forEach((elem) => { let text = ''; - if (elem.dataset.filename) text += `${elem.dataset.filename} `; - if (elem.dataset.name) text += `${elem.dataset.name} `; - if (elem.dataset.title) text += `${elem.dataset.title} `; - if (elem.dataset.tags) text += `${elem.dataset.tags} `; + if (elem.dataset.filename) text += `filename:${elem.dataset.filename} `; + if (elem.dataset.name) text += `name:${elem.dataset.name} `; + if (elem.dataset.tags) text += `tags:${elem.dataset.tags} `; text = text.toLowerCase().replace('models--', 'diffusers').replaceAll('\\', '/'); - if ( // In searchListAll we have a list of lists, in the sublist, every keyword must be present // In the top level list, at least one sublist must be present - searchListAll.some((searchList) => searchList.every((searchTerm) => text.includes(searchTerm))) - && // In excludeListAll we have a list of lists, in the sublist, the keywords may not appear together // In the top level list, none of the sublists must be present - !excludeListAll.some((excludeList) => excludeList.every((excludeTerm) => text.includes(excludeTerm))) + searchListAll.some((sl) => sl.every((st) => text.includes(st))) && !excludeListAll.some((el) => el.every((et) => text.includes(et))) ) { elem.style.display = ''; found += 1; } else { elem.style.display = 'none'; } - }); } - } } const t1 = performance.now(); diff --git a/requirements.txt b/requirements.txt index 4c0390e73..82e394c51 100644 --- a/requirements.txt +++ b/requirements.txt @@ -54,10 +54,10 @@ requests==2.31.0 tqdm==4.66.1 accelerate==0.26.1 opencv-contrib-python-headless==4.8.1.78 -diffusers==0.25.0 +diffusers==0.25.1 einops==0.4.1 gradio==3.43.2 -huggingface_hub==0.20.1 +huggingface_hub==0.20.2 numexpr==2.8.4 numpy==1.26.2 numba==0.58.1 diff --git a/scripts/animatediff.py b/scripts/animatediff.py index 78ee0e9fc..d4eaca536 100644 --- a/scripts/animatediff.py +++ b/scripts/animatediff.py @@ -171,6 +171,8 @@ class Script(scripts.Script): shared.sd_model.load_lora_weights(lora, adapter_name=lora) shared.sd_model.set_adapters([lora], adapter_weights=[strength]) p.extra_generation_params['AnimateDiff Lora'] = f'{lora}:{strength}' + if hasattr(shared.sd_model, 'enable_free_init'): + shared.sd_model.enable_free_init(num_iters=3, use_fast_sampling=False, method="butterworth", order=4, spatial_stop_frequency=0.25, temporal_stop_frequency=0.25) p.extra_generation_params['AnimateDiff'] = loaded_adapter p.do_not_save_grid = True if 'animatediff' not in p.ops: