mirror of
https://github.com/vladmandic/automatic
synced 2026-09-20 01:31:13 +02:00
Merge pull request #4776 from awsr/extra-network-update
Minor Extra Networks cleanup and update
This commit is contained in:
@@ -8,7 +8,6 @@ import html
|
||||
import base64
|
||||
import urllib.parse
|
||||
import threading
|
||||
from typing import TYPE_CHECKING
|
||||
from types import SimpleNamespace
|
||||
from pathlib import Path
|
||||
from html.parser import HTMLParser
|
||||
@@ -134,7 +133,7 @@ class DateTimeEncoder(json.JSONEncoder):
|
||||
|
||||
|
||||
class ExtraNetworksPage:
|
||||
def __init__(self, title):
|
||||
def __init__(self, title: str):
|
||||
self.title = title
|
||||
self.name = title.lower()
|
||||
self.allow_negative_prompt = False
|
||||
@@ -198,7 +197,7 @@ class ExtraNetworksPage:
|
||||
errors.display(e, 'Network version')
|
||||
return all_versions[0]
|
||||
|
||||
def link_preview(self, filename):
|
||||
def link_preview(self, filename: str):
|
||||
quoted_filename = urllib.parse.quote(filename.replace('\\', '/'))
|
||||
mtime = os.path.getmtime(filename) if os.path.exists(filename) else 0
|
||||
preview = f"{shared.opts.subpath}/sdapi/v1/network/thumb?filename={quoted_filename}&mtime={mtime}"
|
||||
@@ -256,7 +255,7 @@ class ExtraNetworksPage:
|
||||
log.info(f'Network thumbnails: type={self.name} created={created}')
|
||||
self.missing_thumbs.clear()
|
||||
|
||||
def create_items(self, tabname):
|
||||
def create_items(self, tabname: str):
|
||||
if self.refresh_time is not None and self.refresh_time > refresh_time: # cached results
|
||||
return
|
||||
t0 = time.time()
|
||||
@@ -276,7 +275,7 @@ class ExtraNetworksPage:
|
||||
debug(f'EN create-items: page={self.name} items={len(self.items)} time={t1-t0:.2f}')
|
||||
self.list_time += t1-t0
|
||||
|
||||
def create_page(self, tabname, skip = False):
|
||||
def create_page(self, tabname: str, skip = False):
|
||||
debug(f'EN create-page: {self.name}')
|
||||
if self.page_time > refresh_time and len(self.html) > 0: # cached page
|
||||
return self.patch(self.html, tabname)
|
||||
@@ -388,7 +387,7 @@ class ExtraNetworksPage:
|
||||
def allowed_directories_for_previews(self):
|
||||
return []
|
||||
|
||||
def create_html(self, item, tabname):
|
||||
def create_html(self, item, tabname: str):
|
||||
def random_bright_color():
|
||||
r = random.randint(100, 255)
|
||||
g = random.randint(100, 255)
|
||||
@@ -429,7 +428,7 @@ class ExtraNetworksPage:
|
||||
errors.display(e, 'Networks')
|
||||
return ""
|
||||
|
||||
def find_preview_file(self, path):
|
||||
def find_preview_file(self, path: str | None):
|
||||
if path is None:
|
||||
return 'html/missing.png'
|
||||
if os.path.join('models', 'Reference') in path:
|
||||
@@ -450,7 +449,7 @@ class ExtraNetworksPage:
|
||||
return file
|
||||
return 'html/missing.png'
|
||||
|
||||
def find_preview(self, filename):
|
||||
def find_preview(self, filename: str):
|
||||
t0 = time.time()
|
||||
preview_file = self.find_preview_file(filename)
|
||||
self.preview_time += time.time() - t0
|
||||
@@ -503,7 +502,7 @@ class ExtraNetworksPage:
|
||||
debug(f'EN missing-preview: {item["name"]}')
|
||||
self.preview_time += time.time() - t0
|
||||
|
||||
def find_description(self, path, info=None):
|
||||
def find_description(self, path: str | None, info=None):
|
||||
t0 = time.time()
|
||||
class HTMLFilter(HTMLParser):
|
||||
text = ""
|
||||
@@ -535,7 +534,7 @@ class ExtraNetworksPage:
|
||||
self.desc_time += t1-t0
|
||||
return f.text
|
||||
|
||||
def find_info(self, path):
|
||||
def find_info(self, path: str | None):
|
||||
data = {}
|
||||
if shared.cmd_opts.no_metadata:
|
||||
return data
|
||||
@@ -594,7 +593,7 @@ def register_pages():
|
||||
register_page(ExtraNetworksPageTextualInversion())
|
||||
|
||||
|
||||
def get_pages(title=None):
|
||||
def get_pages(title: str | None = None):
|
||||
visible = shared.opts.extra_networks
|
||||
pages: list[ExtraNetworksPage] = []
|
||||
if 'All' in visible or visible == []: # default en sort order
|
||||
@@ -646,7 +645,7 @@ class ExtraNetworksUi:
|
||||
self.state: gr.State = None
|
||||
|
||||
|
||||
def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
def create_ui(container, button_parent: gr.Button, tabname: str, skip_indexing = False):
|
||||
if 'networks' in shared.opts.ui_disabled:
|
||||
return None
|
||||
debug(f'EN create-ui: {tabname}')
|
||||
@@ -881,25 +880,19 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
from modules import images
|
||||
page, item = get_item(state, params)
|
||||
is_style = (page is not None) and (page.title == 'Style')
|
||||
is_valid = (item is not None) and hasattr(item, 'name') and hasattr(item, 'filename')
|
||||
is_valid = False
|
||||
|
||||
if is_valid:
|
||||
if TYPE_CHECKING:
|
||||
assert item is not None # Part of the definition of "is_valid"
|
||||
if (item is not None) and hasattr(item, 'name') and hasattr(item, 'filename'):
|
||||
is_valid = True
|
||||
stat_size, stat_mtime = modelstats.stat(item.filename)
|
||||
if hasattr(item, 'size') and item.size > 0:
|
||||
stat_size = item.size
|
||||
if hasattr(item, 'mtime') and item.mtime is not None:
|
||||
stat_mtime = item.mtime
|
||||
desc = item.description
|
||||
fullinfo = shared.readfile(os.path.splitext(item.filename)[0] + '.json', silent=True, as_type="dict")
|
||||
if 'modelVersions' in fullinfo: # sanitize massive objects
|
||||
fullinfo['modelVersions'] = []
|
||||
info = fullinfo
|
||||
if isinstance(info, list):
|
||||
item.filename = None
|
||||
log.warning('Network: show details not supported for compound item')
|
||||
info = None
|
||||
info = shared.readfile(os.path.splitext(item.filename)[0] + '.json', silent=True, as_type="dict")
|
||||
if 'modelVersions' in info: # sanitize massive objects
|
||||
info['modelVersions'] = []
|
||||
if prompt is not None and len(prompt) > 0:
|
||||
item.prompt = prompt
|
||||
if negative is not None and len(negative) > 0:
|
||||
@@ -974,10 +967,12 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
'''
|
||||
if item.name.startswith('Diffusers'):
|
||||
url = item.name.replace('Diffusers/', '')
|
||||
url = f'<a href="https://huggingface.co/{url}" target="_blank">https://huggingface.co/models/{url}</a>' if url is not None else 'N/A'
|
||||
url = f'<a href="https://huggingface.co/{url}" target="_blank">https://huggingface.co/models/{url}</a>'
|
||||
else:
|
||||
url = info.get('id', None) if info is not None else None
|
||||
url = f'<a href="https://civitai.com/models/{url}" target="_blank">civitai.com/models/{url}</a>' if url is not None else 'N/A'
|
||||
info_id = info.get('id', None)
|
||||
nsfw = info.get('nsfw', False) if info_id is not None else False
|
||||
tld = "red" if nsfw else "com"
|
||||
url = f'<a href="https://civitai.{tld}/models/{info_id}" target="_blank">civitai.{tld}/models/{info_id}</a>' if info_id is not None else 'N/A'
|
||||
text = f'''
|
||||
<h2 style="border-bottom: 1px solid var(--button-primary-border-color); margin: 0em 0px 1em 0 !important">{item.name}</h2>
|
||||
<table style="width: 100%; line-height: 1.5em;"><tbody>
|
||||
|
||||
Reference in New Issue
Block a user