From b39a2c2128ce5ce74d7231b1ee42e89b2e220082 Mon Sep 17 00:00:00 2001 From: BlafKing Date: Wed, 27 Mar 2024 02:07:58 +0100 Subject: [PATCH] Update to v3.5.1 (Temp-fix) --- README.md | 9 ++++++ javascript/civitai-html.js | 51 +++++++++++++---------------- scripts/civitai_api.py | 30 ++++++++++------- scripts/civitai_download.py | 2 +- scripts/civitai_file_manage.py | 40 +++++++++++++++++------ scripts/civitai_gui.py | 59 +++++++++++++++++++++++++++++++--- style.css | 19 +++++++---- 7 files changed, 148 insertions(+), 62 deletions(-) diff --git a/README.md b/README.md index 22491a5..ae6a76f 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,15 @@ https://github.com/BlafKing/sd-civitai-browser-plus/assets/9644716/44c5c7a0-4854 # Changelog 📋 + +

v3.5.1

+ +* Temp fix: Quick fix for the new NSFW system + - NSFW models may be returned when NSFW is disabled, this is an issue with the public CivitAI API. + - Search results currently do not get influenced by the NSFW setting, also an issue with the API. +* Bug fix: Better automatic coloring for white theme + +---

v3.5.0

* Bug fix: Extension now works again with the latest CivitAI API version! diff --git a/javascript/civitai-html.js b/javascript/civitai-html.js index a1fb903..0d86657 100644 --- a/javascript/civitai-html.js +++ b/javascript/civitai-html.js @@ -42,20 +42,22 @@ function updateCardSize(width, height) { // Toggles NSFW display function toggleNSFWContent(hideAndBlur) { - const sheet = document.styleSheets[0]; + const nsfwCards = document.querySelectorAll('.civcardnsfw'); + nsfwCards.forEach(card => { + card.style.display = hideAndBlur ? 'block' : 'none'; + }) - const toggleRule = (selector, rules) => addOrUpdateRule(sheet, selector, rules); - - toggleRule('.civcardnsfw', hideAndBlur ? 'display: block;' : 'display: none;'); - toggleRule('.civnsfw img', hideAndBlur ? 'filter: none;' : 'filter: blur(10px);'); + const nsfwImages = document.querySelectorAll('.civnsfw img'); + nsfwImages.forEach(img => { + img.style.filter = hideAndBlur ? 'none' : 'blur(10px)'; + }); const dateSections = document.querySelectorAll('.date-section'); - dateSections.forEach((section) => { + dateSections.forEach(section => { const cards = section.querySelectorAll('.civmodelcard'); const nsfwCards = section.querySelectorAll('.civmodelcard.civcardnsfw'); section.style.display = !hideAndBlur && cards.length === nsfwCards.length ? 'none' : 'block'; }); - } // Updates site with css insertions @@ -239,6 +241,10 @@ function updateSVGIcons() { const filterIconUrl = isDark ? "https://gistcdn.githack.com/BlafKing/a20124cedafad23d4eecc1367ec22896/raw/04a4dae0771353377747dadf57c91d55bf841bed/filter-light.svg" : "https://gistcdn.githack.com/BlafKing/686c3438f5d0d13e7e47135f25445ef3/raw/46477777faac7209d001829a171462d9a2ff1467/filter-dark.svg"; const searchIconUrl = isDark ? "https://gistcdn.githack.com/BlafKing/3f95619089bac3b4fd5470a986e1b3bb/raw/ebaa9cceee3436711eb560a7a65e151f1d651c6a/search-light.svg" : "https://gistcdn.githack.com/BlafKing/57573592d5857e102a4bfde852f62639/raw/aa213e9e82d705651603507e26545eb0ffe60c90/search-dark.svg"; + if (isDark) { + + } + const element = document.querySelector("#filterBox, #filterBoxL"); const childDiv = element?.querySelector("div:nth-child(3)"); @@ -334,12 +340,13 @@ function updateBackToTopVisibility(entries) { } // Create the accordion dropdown inside the settings tab -function createAccordion(containerDiv, subfolders, name) { +function createAccordion(containerDiv, subfolders, name, id_name) { if (containerDiv == null || subfolders.length == 0) { return; } var accordionContainer = document.createElement('div'); - accordionContainer.id = 'settings-accordion'; + accordionContainer.id = id_name; + accordionContainer.className = 'settings-accordion'; var toggleButton = document.createElement('button'); toggleButton.id = 'accordionToggle'; toggleButton.innerHTML = name + '
â–¼
'; @@ -435,11 +442,7 @@ function addOnClickToButtons() { buttonIds.forEach(buttonId => { let button = document.getElementById(buttonId); if (button) { - const originalOnclick = button.onclick; - button.onclick = null; - button.addEventListener('click', (event) => { - if(originalOnclick) originalOnclick.call(button, event); createCivitAICardButtons(button); }); } @@ -449,11 +452,7 @@ function addOnClickToButtons() { if (tab) { const buttons = tab.querySelectorAll('div > button:not(:first-child)'); buttons.forEach(button => { - const originalOnclick = button.onclick; - button.onclick = null; - button.addEventListener('click', (event) => { - if(originalOnclick) originalOnclick.call(button, event); createCivitAICardButtons(button); }); }); @@ -931,29 +930,23 @@ function onPageLoad() { let subfolderDiv = document.querySelector("#settings_civitai_browser_plus > div > div"); let downloadDiv = document.querySelector("#settings_civitai_browser_download > div > div"); - let upscalerDiv = document.querySelector("#settings_civitai_browser_plus > div > div > #settings-accordion > div"); - let downloadDivSub = document.querySelector("#settings_civitai_browser_download > div > div > #settings-accordion > div"); + let upscalerDiv = document.querySelector("#settings_civitai_browser_plus > div > div > #default-sub-accordion > div"); + let downloadDivSub = document.querySelector("#settings_civitai_browser_download > div > div > #default-sub-accordion > div"); let settingsDiv = document.querySelector("#settings_civitai_browser > div > div"); if (subfolderDiv || downloadDiv) { let div = subfolderDiv || downloadDiv; let subfolders = div.querySelectorAll("[id$='subfolder']"); - createAccordion(div, subfolders, "Default sub folders"); - } + createAccordion(div, subfolders, "Default sub folders", 'default-sub-accordion'); - if (upscalerDiv || downloadDivSub) { - let div = upscalerDiv || downloadDivSub; - let upscalers = div.querySelectorAll("[id$='upscale_subfolder']"); - createAccordion(div, upscalers, "Upscalers"); + subfolders = div.querySelectorAll("[id^='setting_insert_sub']"); + createAccordion(div, subfolders, "Insert sub folder options", 'insert-sub-accordion'); } if (subfolderDiv || settingsDiv) { let div = subfolderDiv || settingsDiv; - let subfolders = div.querySelectorAll("[id^='setting_insert_sub']"); - createAccordion(div, subfolders, "Insert sub folder options"); - let proxy = div.querySelectorAll("[id$='proxy']"); - createAccordion(div, proxy, "Proxy options"); + createAccordion(div, proxy, "Proxy options", 'proxy-accordion'); } let toggle4L = document.getElementById('toggle4L'); diff --git a/scripts/civitai_api.py b/scripts/civitai_api.py index 3074aca..e34eeaf 100644 --- a/scripts/civitai_api.py +++ b/scripts/civitai_api.py @@ -16,7 +16,7 @@ from modules.images import read_info_from_image from modules.shared import cmd_opts, opts from modules.paths import models_path, extensions_dir, data_path from html import escape -from scripts.civitai_global import print +from scripts.civitai_global import print, debug_print import scripts.civitai_global as gl import scripts.civitai_download as _download try: @@ -214,15 +214,18 @@ def model_list_html(json_data): date = item['modelVersions'][0]['publishedAt'].split('T')[0] except: date = "Not Found" - + + nsfw = item.get("nsfw") + debug_print(f"{item['name']} NSFW is: {nsfw}") + if nsfw: + nsfw = "civcardnsfw" + if gl.sortNewest: if date not in sorted_models: sorted_models[date] = [] if any(item['modelVersions']): if len(item['modelVersions'][0]['images']) > 0: - if item["modelVersions"][0]["images"][0]['nsfw'] not in ["None", "Soft"]: - nsfw = "civcardnsfw" media_type = item["modelVersions"][0]["images"][0]["type"] image = item["modelVersions"][0]["images"][0]["url"] if media_type == "video": @@ -283,7 +286,9 @@ def create_api_url(content_type=None, sort_type=None, period_type=None, use_sear base_url = "https://civitai.com/api/v1/models" if isNext is not None: - return gl.json_data['metadata']['nextPage' if isNext else 'prevPage'] + api_url = gl.json_data['metadata']['nextPage' if isNext else 'prevPage'] + debug_print(api_url) + return api_url params = {'limit': tile_count, 'sort': sort_type, 'period': period_type.replace(" ", "") if period_type else None} @@ -291,7 +296,7 @@ def create_api_url(content_type=None, sort_type=None, period_type=None, use_sear params["types"] = content_type if use_search_term != "None" and search_term: - search_term = search_term.replace("\\", "\\\\") + search_term = search_term.replace("\\", "\\\\").lower() if "civitai.com" in search_term: model_number = re.search(r'models/(\d+)', search_term).group(1) params = {'ids': model_number} @@ -318,9 +323,10 @@ def create_api_url(content_type=None, sort_type=None, period_type=None, use_sear query_parts.append((key, value)) query_string = urllib.parse.urlencode(query_parts, doseq=True, quote_via=urllib.parse.quote) - full_url = f"{base_url}?{query_string}" + api_url = f"{base_url}?{query_string}" - return full_url + debug_print(api_url) + return api_url def convert_LORA_LoCon(content_type): use_LORA = getattr(opts, "use_LORA", False) @@ -687,12 +693,12 @@ def update_model_info(model_string=None, model_version=None, only_html=False, in if from_preview: index = f"preview_{index}" - nsfw = 'class="model-block"' - if pic['nsfw'] not in ["None", "Soft"]: - nsfw = 'class="civnsfw model-block"' + class_name = 'class="model-block"' + if pic.get('nsfwLevel') >= 4: + class_name = 'class="civnsfw model-block"' img_html += f''' -
+