mirror of
https://github.com/vladmandic/automatic
synced 2026-09-19 01:04:32 +02:00
edit built-in styles
Signed-off-by: Vladimir Mandic <mandic00@live.com>
This commit is contained in:
+4
-3
@@ -1,8 +1,8 @@
|
||||
# Change Log for SD.Next
|
||||
|
||||
## Update for 2025-04-02
|
||||
## Update for 2025-04-03
|
||||
|
||||
### Highlights for 2025-04-02
|
||||
### Highlights for 2025-04-03
|
||||
|
||||
Time for another major release with ~120 commits and [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) that spans several pages!
|
||||
|
||||
@@ -20,7 +20,7 @@ Models...And support for new models: **CogView-4**, **SANA 1.5**,
|
||||
|
||||
[ReadMe](https://github.com/vladmandic/automatic/blob/master/README.md) | [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) | [Docs](https://vladmandic.github.io/sdnext-docs/) | [WiKi](https://github.com/vladmandic/automatic/wiki) | [Discord](https://discord.com/invite/sd-next-federal-batch-inspectors-1101998836328697867)
|
||||
|
||||
### Details for 2025-04-02
|
||||
### Details for 2025-04-03
|
||||
|
||||
- **Video tab**
|
||||
- see [Video Wiki](https://github.com/vladmandic/sdnext/wiki/Video) for details!
|
||||
@@ -178,6 +178,7 @@ Models...And support for new models: **CogView-4**, **SANA 1.5**,
|
||||
- fix token counter error style with modernui
|
||||
- fix sampler metadata when using default sampler
|
||||
- fix paste incorrect float to int cast
|
||||
- do not allow edit of built-in styles
|
||||
- improve lora compatibility with balanced offload
|
||||
|
||||
## Update for 2025-02-28
|
||||
|
||||
@@ -175,9 +175,9 @@ class ExtraNetworksPage:
|
||||
img = None
|
||||
try:
|
||||
img = Image.open(f)
|
||||
except Exception:
|
||||
except Exception as e:
|
||||
img = None
|
||||
shared.log.warning(f'Extra network removing invalid image: {f}')
|
||||
shared.log.warning(f'Network removing invalid: image={f} {e}')
|
||||
try:
|
||||
if img is None:
|
||||
img = None
|
||||
@@ -189,9 +189,9 @@ class ExtraNetworksPage:
|
||||
img.close()
|
||||
created += 1
|
||||
except Exception as e:
|
||||
shared.log.warning(f'Extra network error creating thumbnail: {f} {e}')
|
||||
shared.log.warning(f'Network create thumbnail={f} {e}')
|
||||
if created > 0:
|
||||
shared.log.info(f"Network thumbnails: {self.name} created={created}")
|
||||
shared.log.info(f'Network thumbnails: {self.name} created={created}')
|
||||
self.missing_thumbs.clear()
|
||||
|
||||
def create_items(self, tabname):
|
||||
@@ -221,7 +221,7 @@ class ExtraNetworksPage:
|
||||
return self.patch(self.html, tabname)
|
||||
self_name_id = self.name.replace(" ", "_")
|
||||
if skip:
|
||||
return f"<div id='{tabname}_{self_name_id}_subdirs' class='extra-network-subdirs'></div><div id='{tabname}_{self_name_id}_cards' class='extra-network-cards'>Extra network page not ready<br>Click refresh to try again</div>"
|
||||
return f"<div id='{tabname}_{self_name_id}_subdirs' class='extra-network-subdirs'></div><div id='{tabname}_{self_name_id}_cards' class='extra-network-cards'>Network page not ready<br>Click refresh to try again</div>"
|
||||
subdirs = {}
|
||||
allowed_folders = [os.path.abspath(x) for x in self.allowed_directories_for_previews() if os.path.exists(x)]
|
||||
for parentdir, dirs in {d: files_cache.walk(d, cached=True, recurse=files_cache.not_hidden) for d in allowed_folders}.items():
|
||||
@@ -239,7 +239,7 @@ class ExtraNetworksPage:
|
||||
if not subdir:
|
||||
continue
|
||||
subdirs[subdir] = 1
|
||||
debug(f"Networks: page='{self.name}' subfolders={list(subdirs)}")
|
||||
debug(f'Networks: page="{self.name}" subfolders={list(subdirs)}')
|
||||
subdirs = OrderedDict(sorted(subdirs.items()))
|
||||
if self.name == 'model' and shared.opts.extra_network_reference_enable:
|
||||
subdirs['Local'] = 1
|
||||
@@ -289,7 +289,7 @@ class ExtraNetworksPage:
|
||||
self.html += ''.join(htmls)
|
||||
self.page_time = time.time()
|
||||
self.html = f"<div id='~tabname_{self_name_id}_subdirs' class='extra-network-subdirs'>{subdirs_html}</div><div id='~tabname_{self_name_id}_cards' class='extra-network-cards'>{self.html}</div>"
|
||||
shared.log.debug(f"Networks: type='{self.name}' items={len(self.items)} subfolders={len(subdirs)} tab={tabname} folders={self.allowed_directories_for_previews()} list={self.list_time:.2f} thumb={self.preview_time:.2f} desc={self.desc_time:.2f} info={self.info_time:.2f} workers={shared.max_workers}")
|
||||
shared.log.debug(f'Networks: type="{self.name}" items={len(self.items)} subfolders={len(subdirs)} tab={tabname} folders={self.allowed_directories_for_previews()} list={self.list_time:.2f} thumb={self.preview_time:.2f} desc={self.desc_time:.2f} info={self.info_time:.2f} workers={shared.max_workers}')
|
||||
if len(self.missing_thumbs) > 0:
|
||||
threading.Thread(target=self.create_thumb).start()
|
||||
return self.patch(self.html, tabname)
|
||||
@@ -677,13 +677,13 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
if ui.gallery is not None:
|
||||
images = list(ui.gallery.temp_files) # gallery cannot be used as input component so looking at most recently registered temp files
|
||||
if len(images) < 1:
|
||||
shared.log.warning(f'Extra network no image: item={ui.last_item.name}')
|
||||
shared.log.warning(f'Network no image: item="{ui.last_item.name}"')
|
||||
return 'html/card-no-preview.png'
|
||||
try:
|
||||
images.sort(key=lambda f: os.path.getmtime(f), reverse=True)
|
||||
image = Image.open(images[0])
|
||||
except Exception as e:
|
||||
shared.log.error(f'Extra network error opening image: item={ui.last_item.name} {e}')
|
||||
shared.log.error(f'Network error opening image: item="{ui.last_item.name}" {e}')
|
||||
return 'html/card-no-preview.png'
|
||||
fn_delete_img(image)
|
||||
if image.width > 512 or image.height > 512:
|
||||
@@ -691,9 +691,9 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
image.thumbnail((512, 512), Image.Resampling.HAMMING)
|
||||
try:
|
||||
image.save(ui.last_item.local_preview, quality=50)
|
||||
shared.log.debug(f'Extra network save image: item={ui.last_item.name} filename="{ui.last_item.local_preview}"')
|
||||
shared.log.debug(f'Networks save image: item="{ui.last_item.name}" filename="{ui.last_item.local_preview}"')
|
||||
except Exception as e:
|
||||
shared.log.error(f'Extra network save image: item={ui.last_item.name} filename="{ui.last_item.local_preview}" {e}')
|
||||
shared.log.error(f'Network save image: item="{ui.last_item.name}" filename="{ui.last_item.local_preview}" {e}')
|
||||
return image
|
||||
|
||||
def fn_delete_img(_image):
|
||||
@@ -702,7 +702,7 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
for file in [f'{fn}{mid}{ext}' for ext in preview_extensions for mid in ['.thumb.', '.preview.', '.']]:
|
||||
if os.path.exists(file):
|
||||
os.remove(file)
|
||||
shared.log.debug(f'Extra network delete image: item={ui.last_item.name} filename="{file}"')
|
||||
shared.log.debug(f'Network delete image: item="{ui.last_item.name}" filename="{file}"')
|
||||
return 'html/card-no-preview.png'
|
||||
|
||||
def fn_save_desc(desc):
|
||||
@@ -714,7 +714,7 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
fn = os.path.splitext(ui.last_item.filename)[0] + '.txt'
|
||||
with open(fn, 'w', encoding='utf-8') as f:
|
||||
f.write(desc)
|
||||
shared.log.debug(f'Extra network save desc: item={ui.last_item.name} filename="{fn}"')
|
||||
shared.log.debug(f'Network save desc: item="{ui.last_item.name}" filename="{fn}"')
|
||||
return desc
|
||||
|
||||
def fn_delete_desc(desc):
|
||||
@@ -722,7 +722,7 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
return desc
|
||||
fn = os.path.splitext(ui.last_item.filename)[0] + '.txt'
|
||||
if os.path.exists(fn):
|
||||
shared.log.debug(f'Extra network delete desc: item={ui.last_item.name} filename="{fn}"')
|
||||
shared.log.debug(f'Network delete desc: item="{ui.last_item.name}" filename="{fn}"')
|
||||
os.remove(fn)
|
||||
return ''
|
||||
return desc
|
||||
@@ -730,7 +730,7 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
def fn_save_info(info):
|
||||
fn = os.path.splitext(ui.last_item.filename)[0] + '.json'
|
||||
shared.writefile(info, fn, silent=True)
|
||||
shared.log.debug(f'Extra network save info: item={ui.last_item.name} filename="{fn}"')
|
||||
shared.log.debug(f'Network save info: item="{ui.last_item.name}" filename="{fn}"')
|
||||
return info
|
||||
|
||||
def fn_delete_info(info):
|
||||
@@ -738,14 +738,14 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
return info
|
||||
fn = os.path.splitext(ui.last_item.filename)[0] + '.json'
|
||||
if os.path.exists(fn):
|
||||
shared.log.debug(f'Extra network delete info: item={ui.last_item.name} filename="{fn}"')
|
||||
shared.log.debug(f'Network delete info: item="{ui.last_item.name}" filename="{fn}"')
|
||||
os.remove(fn)
|
||||
return ''
|
||||
return info
|
||||
|
||||
def fn_save_style(info, description, prompt, negative, extra, wildcards):
|
||||
if not isinstance(info, dict) or isinstance(info, list):
|
||||
shared.log.warning(f'Extra network save style skip: item={ui.last_item.name} not a dict: {type(info)}')
|
||||
shared.log.warning(f'Network save style skip: item="{ui.last_item.name}" not a dict: {type(info)}')
|
||||
return info
|
||||
if ui.last_item is None:
|
||||
return info
|
||||
@@ -753,7 +753,7 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
if hasattr(ui.last_item, 'type') and ui.last_item.type == 'Style':
|
||||
info.update(**{ 'description': description, 'prompt': prompt, 'negative': negative, 'extra': extra, 'wildcards': wildcards })
|
||||
shared.writefile(info, fn, silent=True)
|
||||
shared.log.debug(f'Extra network save style: item={ui.last_item.name} filename="{fn}"')
|
||||
shared.log.debug(f'Network save style: item="{ui.last_item.name}" filename="{fn}"')
|
||||
return info
|
||||
|
||||
def fn_delete_style(info):
|
||||
@@ -761,7 +761,7 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
return info
|
||||
fn = os.path.splitext(ui.last_item.filename)[0] + '.json'
|
||||
if os.path.exists(fn):
|
||||
shared.log.debug(f'Extra network delete style: item={ui.last_item.name} filename="{fn}"')
|
||||
shared.log.debug(f'Network delete style: item="{ui.last_item.name}" filename="{fn}"')
|
||||
os.remove(fn)
|
||||
return {}
|
||||
return info
|
||||
@@ -785,6 +785,10 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
if 'modelVersions' in fullinfo: # sanitize massive objects
|
||||
fullinfo['modelVersions'] = []
|
||||
info = fullinfo
|
||||
if isinstance(info, list):
|
||||
item.filename = None
|
||||
shared.log.warning('Network: show details not supported for compound item')
|
||||
info = None
|
||||
"""
|
||||
if prompt is not None:
|
||||
item.prompt = prompt
|
||||
@@ -812,7 +816,7 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
model = ''
|
||||
style = ''
|
||||
note = ''
|
||||
if not os.path.exists(item.filename):
|
||||
if item.filename is not None and not os.path.exists(item.filename):
|
||||
note = f'<br>Target filename: {item.filename}'
|
||||
if page.title == 'Model':
|
||||
merge = len(list(meta.get('sd_merge_models', {})))
|
||||
@@ -904,7 +908,7 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
page.refresh_time = 0
|
||||
page.refresh()
|
||||
page.create_page(ui.tabname)
|
||||
shared.log.debug(f"Networks: refresh page='{page.title}' items={len(page.items)} tab={ui.tabname}")
|
||||
shared.log.debug(f'Networks: refresh page="{page.title}" items={len(page.items)} tab={ui.tabname}')
|
||||
pages.append(page.html)
|
||||
ui.search.update(title)
|
||||
return pages
|
||||
@@ -918,7 +922,7 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
page.card = card_full if page.view == 'gallery' else card_list
|
||||
page.html = ''
|
||||
page.create_page(ui.tabname)
|
||||
shared.log.debug(f"Networks: refresh page='{page.title}' items={len(page.items)} tab={ui.tabname} view={page.view}")
|
||||
shared.log.debug(f'Networks: refresh page="{page.title}" items={len(page.items)} tab={ui.tabname} view={page.view}')
|
||||
pages.append(page.html)
|
||||
ui.search.update(title)
|
||||
return pages
|
||||
@@ -973,9 +977,9 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
}
|
||||
shared.writefile(item, fn, silent=True)
|
||||
if len(prompt) > 0:
|
||||
shared.log.debug(f"Network quick save style: item={name} filename='{fn}' unparsed={shared.opts.extra_networks_unparsed}")
|
||||
shared.log.debug(f'Network quick save style: item="{name}" filename="{fn}" unparsed={shared.opts.extra_networks_unparsed}')
|
||||
else:
|
||||
shared.log.warning(f"Network quick save model: item={name} filename='{fn}' prompt is empty")
|
||||
shared.log.warning(f'Network quick save model: item="{name}" filename="{fn}" prompt is empty')
|
||||
|
||||
def ui_sort_cards(sort_order):
|
||||
if shared.opts.extra_networks_sort != sort_order:
|
||||
|
||||
Reference in New Issue
Block a user