Merge pull request #8366 from akx/extra-net-descs
Extra network description files
This commit is contained in:
commit
c239b3d7a8
7 changed files with 45 additions and 34 deletions
|
@ -15,18 +15,11 @@ 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)
|
||||||
previews = [path + ".png", path + ".preview.png"]
|
|
||||||
|
|
||||||
preview = None
|
|
||||||
for file in previews:
|
|
||||||
if os.path.isfile(file):
|
|
||||||
preview = self.link_preview(file)
|
|
||||||
break
|
|
||||||
|
|
||||||
yield {
|
yield {
|
||||||
"name": name,
|
"name": name,
|
||||||
"filename": path,
|
"filename": path,
|
||||||
"preview": preview,
|
"preview": self._find_preview(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:{name}:") + " + opts.extra_networks_default_multiplier + " + json.dumps(">"),
|
"prompt": json.dumps(f"<lora:{name}:") + " + opts.extra_networks_default_multiplier + " + json.dumps(">"),
|
||||||
"local_preview": path + ".png",
|
"local_preview": path + ".png",
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
<span style="display:none" class='search_term'>{search_term}</span>
|
<span style="display:none" class='search_term'>{search_term}</span>
|
||||||
</div>
|
</div>
|
||||||
<span class='name'>{name}</span>
|
<span class='name'>{name}</span>
|
||||||
|
<span class='description'>{description}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
import glob
|
import glob
|
||||||
import os.path
|
import os.path
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
from functools import lru_cache
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
from modules import shared
|
from modules import shared
|
||||||
import gradio as gr
|
import gradio as gr
|
||||||
|
@ -130,6 +132,7 @@ class ExtraNetworksPage:
|
||||||
"tabname": json.dumps(tabname),
|
"tabname": json.dumps(tabname),
|
||||||
"local_preview": json.dumps(item["local_preview"]),
|
"local_preview": json.dumps(item["local_preview"]),
|
||||||
"name": item["name"],
|
"name": item["name"],
|
||||||
|
"description": (item.get("description") or ""),
|
||||||
"card_clicked": onclick,
|
"card_clicked": onclick,
|
||||||
"save_card_preview": '"' + html.escape(f"""return saveCardPreview(event, {json.dumps(tabname)}, {json.dumps(item["local_preview"])})""") + '"',
|
"save_card_preview": '"' + html.escape(f"""return saveCardPreview(event, {json.dumps(tabname)}, {json.dumps(item["local_preview"])})""") + '"',
|
||||||
"search_term": item.get("search_term", ""),
|
"search_term": item.get("search_term", ""),
|
||||||
|
@ -137,6 +140,28 @@ class ExtraNetworksPage:
|
||||||
|
|
||||||
return self.card_page.format(**args)
|
return self.card_page.format(**args)
|
||||||
|
|
||||||
|
def _find_preview(self, path: str) -> Optional[str]:
|
||||||
|
"""
|
||||||
|
Find a preview PNG for a given path (without extension) and call link_preview on it.
|
||||||
|
"""
|
||||||
|
for file in [path + ".png", path + ".preview.png"]:
|
||||||
|
if os.path.isfile(file):
|
||||||
|
return self.link_preview(file)
|
||||||
|
return None
|
||||||
|
|
||||||
|
@lru_cache(maxsize=512)
|
||||||
|
def _find_description(self, path: str) -> Optional[str]:
|
||||||
|
"""
|
||||||
|
Find and read a description file for a given path (without extension).
|
||||||
|
"""
|
||||||
|
for file in [f"{path}.txt", f"{path}.description.txt"]:
|
||||||
|
try:
|
||||||
|
with open(file, "r", encoding="utf-8", errors="replace") as f:
|
||||||
|
return f.read()
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def intialize():
|
def intialize():
|
||||||
extra_pages.clear()
|
extra_pages.clear()
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import html
|
import html
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import urllib.parse
|
|
||||||
|
|
||||||
from modules import shared, ui_extra_networks, sd_models
|
from modules import shared, ui_extra_networks, sd_models
|
||||||
|
|
||||||
|
@ -17,18 +16,11 @@ class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage):
|
||||||
checkpoint: sd_models.CheckpointInfo
|
checkpoint: sd_models.CheckpointInfo
|
||||||
for name, checkpoint in sd_models.checkpoints_list.items():
|
for name, checkpoint in sd_models.checkpoints_list.items():
|
||||||
path, ext = os.path.splitext(checkpoint.filename)
|
path, ext = os.path.splitext(checkpoint.filename)
|
||||||
previews = [path + ".png", path + ".preview.png"]
|
|
||||||
|
|
||||||
preview = None
|
|
||||||
for file in previews:
|
|
||||||
if os.path.isfile(file):
|
|
||||||
preview = self.link_preview(file)
|
|
||||||
break
|
|
||||||
|
|
||||||
yield {
|
yield {
|
||||||
"name": checkpoint.name_for_extra,
|
"name": checkpoint.name_for_extra,
|
||||||
"filename": path,
|
"filename": path,
|
||||||
"preview": preview,
|
"preview": self._find_preview(path),
|
||||||
|
"description": self._find_description(path),
|
||||||
"search_term": self.search_terms_from_path(checkpoint.filename) + " " + (checkpoint.sha256 or ""),
|
"search_term": self.search_terms_from_path(checkpoint.filename) + " " + (checkpoint.sha256 or ""),
|
||||||
"onclick": '"' + html.escape(f"""return selectCheckpoint({json.dumps(name)})""") + '"',
|
"onclick": '"' + html.escape(f"""return selectCheckpoint({json.dumps(name)})""") + '"',
|
||||||
"local_preview": path + ".png",
|
"local_preview": path + ".png",
|
||||||
|
|
|
@ -14,18 +14,12 @@ class ExtraNetworksPageHypernetworks(ui_extra_networks.ExtraNetworksPage):
|
||||||
def list_items(self):
|
def list_items(self):
|
||||||
for name, path in shared.hypernetworks.items():
|
for name, path in shared.hypernetworks.items():
|
||||||
path, ext = os.path.splitext(path)
|
path, ext = os.path.splitext(path)
|
||||||
previews = [path + ".png", path + ".preview.png"]
|
|
||||||
|
|
||||||
preview = None
|
|
||||||
for file in previews:
|
|
||||||
if os.path.isfile(file):
|
|
||||||
preview = self.link_preview(file)
|
|
||||||
break
|
|
||||||
|
|
||||||
yield {
|
yield {
|
||||||
"name": name,
|
"name": name,
|
||||||
"filename": path,
|
"filename": path,
|
||||||
"preview": preview,
|
"preview": self._find_preview(path),
|
||||||
|
"description": self._find_description(path),
|
||||||
"search_term": self.search_terms_from_path(path),
|
"search_term": self.search_terms_from_path(path),
|
||||||
"prompt": json.dumps(f"<hypernet:{name}:") + " + opts.extra_networks_default_multiplier + " + json.dumps(">"),
|
"prompt": json.dumps(f"<hypernet:{name}:") + " + opts.extra_networks_default_multiplier + " + json.dumps(">"),
|
||||||
"local_preview": path + ".png",
|
"local_preview": path + ".png",
|
||||||
|
|
|
@ -15,16 +15,11 @@ class ExtraNetworksPageTextualInversion(ui_extra_networks.ExtraNetworksPage):
|
||||||
def list_items(self):
|
def list_items(self):
|
||||||
for embedding in sd_hijack.model_hijack.embedding_db.word_embeddings.values():
|
for embedding in sd_hijack.model_hijack.embedding_db.word_embeddings.values():
|
||||||
path, ext = os.path.splitext(embedding.filename)
|
path, ext = os.path.splitext(embedding.filename)
|
||||||
preview_file = path + ".preview.png"
|
|
||||||
|
|
||||||
preview = None
|
|
||||||
if os.path.isfile(preview_file):
|
|
||||||
preview = self.link_preview(preview_file)
|
|
||||||
|
|
||||||
yield {
|
yield {
|
||||||
"name": embedding.name,
|
"name": embedding.name,
|
||||||
"filename": embedding.filename,
|
"filename": embedding.filename,
|
||||||
"preview": preview,
|
"preview": self._find_preview(path),
|
||||||
|
"description": self._find_description(path),
|
||||||
"search_term": self.search_terms_from_path(embedding.filename),
|
"search_term": self.search_terms_from_path(embedding.filename),
|
||||||
"prompt": json.dumps(embedding.name),
|
"prompt": json.dumps(embedding.name),
|
||||||
"local_preview": path + ".preview.png",
|
"local_preview": path + ".preview.png",
|
||||||
|
|
11
style.css
11
style.css
|
@ -939,6 +939,17 @@ footer {
|
||||||
line-break: anywhere;
|
line-break: anywhere;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.extra-network-cards .card .actions .description {
|
||||||
|
display: block;
|
||||||
|
max-height: 3em;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.extra-network-cards .card .actions .description:hover {
|
||||||
|
max-height: none;
|
||||||
|
}
|
||||||
|
|
||||||
.extra-network-cards .card .actions:hover .additional{
|
.extra-network-cards .card .actions:hover .additional{
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue