mirror of https://github.com/vladmandic/automatic
en add tags
parent
0a083c2423
commit
19d176ea3d
|
|
@ -17,7 +17,6 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork):
|
|||
multipliers = []
|
||||
for params in params_list:
|
||||
assert len(params.items) > 0
|
||||
|
||||
names.append(params.items[0])
|
||||
multipliers.append(float(params.items[1]) if len(params.items) > 1 else 1.0)
|
||||
|
||||
|
|
@ -29,15 +28,11 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork):
|
|||
shorthash = item.lora_on_disk.shorthash
|
||||
if not shorthash:
|
||||
continue
|
||||
|
||||
alias = item.mentioned_name
|
||||
if not alias:
|
||||
continue
|
||||
|
||||
alias = alias.replace(":", "").replace(",", "")
|
||||
|
||||
lora_hashes.append(f"{alias}: {shorthash}")
|
||||
|
||||
if lora_hashes:
|
||||
p.extra_generation_params["Lora hashes"] = ", ".join(lora_hashes)
|
||||
|
||||
|
|
|
|||
|
|
@ -87,24 +87,17 @@ class LoraOnDisk:
|
|||
m = {}
|
||||
for k, v in sorted(self.metadata.items(), key=lambda x: metadata_tags_order.get(x[0], 999)):
|
||||
m[k] = v
|
||||
|
||||
self.metadata = m
|
||||
|
||||
self.ssmd_cover_images = self.metadata.pop('ssmd_cover_images', None) # those are cover images and they are too big to display in UI as text
|
||||
self.alias = self.metadata.get('ss_output_name', self.name)
|
||||
|
||||
self.hash = None
|
||||
self.shorthash = None
|
||||
self.set_hash(
|
||||
self.metadata.get('sshs_model_hash') or
|
||||
hashes.sha256_from_cache(self.filename, "lora/" + self.name, use_addnet_hash=self.is_safetensors) or
|
||||
''
|
||||
)
|
||||
self.set_hash(self.metadata.get('sshs_model_hash') or (hashes.sha256_from_cache(self.filename, "lora/" + self.name, use_addnet_hash=self.is_safetensors)) or '')
|
||||
|
||||
def set_hash(self, v):
|
||||
self.hash = v
|
||||
self.shorthash = self.hash[0:12]
|
||||
|
||||
if self.shorthash:
|
||||
available_lora_hash_lookup[self.shorthash] = self
|
||||
|
||||
|
|
|
|||
|
|
@ -16,19 +16,26 @@ class ExtraNetworksPageLora(ui_extra_networks.ExtraNetworksPage):
|
|||
for name, lora_on_disk in lora.available_loras.items():
|
||||
path, _ext = os.path.splitext(lora_on_disk.filename)
|
||||
alias = lora_on_disk.get_alias()
|
||||
prompt = (json.dumps(f"<lora:{alias}") + " + " + json.dumps(f':{shared.opts.extra_networks_default_multiplier}') + " + " + json.dumps(">"))
|
||||
metadata = json.dumps(lora_on_disk.metadata, indent=4) if lora_on_disk.metadata else None
|
||||
possible_tags = lora_on_disk.metadata.get('ss_tag_frequency', {}) if lora_on_disk.metadata is not None else {}
|
||||
tags = {}
|
||||
for tag in possible_tags.keys():
|
||||
if '_' not in tag:
|
||||
tag = f'0_{tag}'
|
||||
words = tag.split('_')
|
||||
tags[' '.join(words[1:])] = words[0]
|
||||
# shared.log.debug(f'Lora: {path}: name={name} alias={alias} tags={tags}')
|
||||
yield {
|
||||
"name": name,
|
||||
"filename": path,
|
||||
"preview": self.find_preview(path),
|
||||
"description": self.find_description(path),
|
||||
"search_term": self.search_terms_from_path(lora_on_disk.filename),
|
||||
"prompt": (
|
||||
json.dumps(f"<lora:{alias}")
|
||||
+ " + " + json.dumps(f':{shared.opts.extra_networks_default_multiplier}')
|
||||
+ " + " + json.dumps(">")
|
||||
),
|
||||
"prompt": prompt,
|
||||
"local_preview": f"{path}.{shared.opts.samples_format}",
|
||||
"metadata": json.dumps(lora_on_disk.metadata, indent=4) if lora_on_disk.metadata else None,
|
||||
"metadata": metadata,
|
||||
"tags": tags,
|
||||
}
|
||||
|
||||
def allowed_directories_for_previews(self):
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 3348d524d544a6ed1700a99e0afcb6aef4b26cda
|
||||
Subproject commit f42ada4007399376417bdb92b7979515bcc33b31
|
||||
18
installer.py
18
installer.py
|
|
@ -483,17 +483,12 @@ def run_extension_installer(folder):
|
|||
log.error(f'Exception running extension installer: {e}')
|
||||
|
||||
# get list of all enabled extensions
|
||||
def list_extensions(folder, quiet=False):
|
||||
def list_extensions_folder(folder, quiet=False):
|
||||
name = os.path.basename(folder)
|
||||
disabled_extensions_all = opts.get('disable_all_extensions', 'none')
|
||||
if disabled_extensions_all != 'none':
|
||||
if not quiet:
|
||||
log.info(f'Disabled {name}: {disabled_extensions_all}')
|
||||
return []
|
||||
disabled_extensions = opts.get('disabled_extensions', [])
|
||||
if len(disabled_extensions) > 0:
|
||||
if not quiet:
|
||||
log.info(f'Disabled {name}: {disabled_extensions}')
|
||||
enabled_extensions = [x for x in os.listdir(folder) if x not in disabled_extensions and not x.startswith('.')]
|
||||
if not quiet:
|
||||
log.info(f'Enabled {name}: {enabled_extensions}')
|
||||
|
|
@ -515,7 +510,7 @@ def install_extensions():
|
|||
for folder in extension_folders:
|
||||
if not os.path.isdir(folder):
|
||||
continue
|
||||
extensions = list_extensions(folder, quiet=True)
|
||||
extensions = list_extensions_folder(folder, quiet=True)
|
||||
log.debug(f'Extensions all: {extensions}')
|
||||
for ext in extensions:
|
||||
if ext in extensions_enabled:
|
||||
|
|
@ -623,15 +618,18 @@ def set_environment():
|
|||
|
||||
|
||||
def check_extensions():
|
||||
if args.quick:
|
||||
return 0
|
||||
newest_all = os.path.getmtime('requirements.txt')
|
||||
from modules.paths_internal import extensions_builtin_dir, extensions_dir
|
||||
extension_folders = [extensions_builtin_dir] if args.safe else [extensions_builtin_dir, extensions_dir]
|
||||
disabled_extensions_all = opts.get('disable_all_extensions', 'none')
|
||||
if disabled_extensions_all != 'none':
|
||||
log.info(f'Disabled extensions: {disabled_extensions_all}')
|
||||
else:
|
||||
log.info(f'Disabled extensions: {opts.get("disabled_extensions", [])}')
|
||||
for folder in extension_folders:
|
||||
if not os.path.isdir(folder):
|
||||
continue
|
||||
extensions = list_extensions(folder)
|
||||
extensions = list_extensions_folder(folder)
|
||||
for ext in extensions:
|
||||
newest = 0
|
||||
extension_dir = os.path.join(folder, ext)
|
||||
|
|
|
|||
|
|
@ -234,6 +234,16 @@ function readCardMetadata(event, extraPage, cardName) {
|
|||
event.preventDefault();
|
||||
}
|
||||
|
||||
function readCardTags(event, extraPage, cardTags) {
|
||||
if ((cardTags || []).length === 0) return;
|
||||
const textarea = activePromptTextarea[getENActiveTab()];
|
||||
const textToAdd = cardTags.join(' ');
|
||||
if (!tryToRemoveExtraNetworkFromPrompt(textarea, textToAdd)) textarea.value = textarea.value + opts.extra_networks_add_text_separator + textToAdd;
|
||||
updateInput(textarea);
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
function readCardInformation(event, extraPage, cardName) {
|
||||
requestGet('./sd_extra_networks/info', { page: extraPage, item: cardName }, (data) => {
|
||||
if (data?.info && (typeof (data?.info) === 'string')) {
|
||||
|
|
|
|||
|
|
@ -331,43 +331,12 @@ div#extras_scale_to_tab div.form{
|
|||
.livePreview { position: absolute; z-index: 300; background-color: transparent; width: -webkit-fill-available; }
|
||||
.livePreview img { position: absolute; object-fit: contain; width: 100%; height: 100%; }
|
||||
.dark .livePreview { background-color: rgb(17 24 39 / var(--tw-bg-opacity)); }
|
||||
.popup-metadata { color: black; background: white; display: inline-block; padding: 1em; white-space: pre-wrap; font-size: 0.8em; opacity: 80%; }
|
||||
|
||||
.global-popup{
|
||||
display: flex;
|
||||
position: fixed;
|
||||
z-index: 10001;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
background-color: rgba(20, 20, 20, 0.95);
|
||||
}
|
||||
|
||||
|
||||
.global-popup-close:before {
|
||||
content: "×";
|
||||
}
|
||||
|
||||
.global-popup-close{
|
||||
position: fixed;
|
||||
right: 0.25em;
|
||||
top: 0;
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
font-size: 32pt;
|
||||
}
|
||||
|
||||
.global-popup-inner{
|
||||
display: inline-block;
|
||||
margin: auto;
|
||||
padding: 2em;
|
||||
}
|
||||
|
||||
.ui-defaults-none{
|
||||
color: #aaa !important;
|
||||
}
|
||||
.popup-metadata { color: white; background: #0000; display: inline-block; white-space: pre-wrap; font-size: 0.75em; }
|
||||
.global-popup{ display: flex; position: fixed; z-index: 10001; left: 0; top: 0; width: 100%; height: 100%; overflow: auto; background-color: rgba(20, 20, 20, 0.95);}
|
||||
.global-popup-close:before { content: "×"; }
|
||||
.global-popup-close{ position: fixed; right: 0.5em; top: 0; cursor: pointer; color: white; font-size: 32pt; }
|
||||
.global-popup-inner{ display: inline-block; margin: auto; padding: 2em; }
|
||||
.ui-defaults-none{ color: #aaa !important; }
|
||||
|
||||
/* fullpage image viewer */
|
||||
|
||||
|
|
@ -495,7 +464,7 @@ table.settings-value-table td{
|
|||
.extra-networks .description { flex: 3; }
|
||||
.extra-networks .tab-nav > button { margin-right: 0; height: 24px; padding: 2px 4px 2px 4px; }
|
||||
.extra-networks-tab { padding: 0 !important; }
|
||||
.extra-network-subdirs { background: var(--input-background-fill); overflow-x: hidden; overflow-y: auto; min-width: 120px; }
|
||||
.extra-network-subdirs { background: var(--input-background-fill); overflow-x: hidden; overflow-y: auto; min-width: 120px; padding-top: 0.5em; }
|
||||
.extra-networks-page { display: flex }
|
||||
.extra-networks .custom-button { width: 120px; width: 100%; background: none; justify-content: left; text-align: left; padding: 2px 8px 2px 16px; text-indent: -8px; box-shadow: none; line-break: auto; }
|
||||
.extra-networks .custom-button:hover { background: var(--button-primary-background-fill) }
|
||||
|
|
@ -504,7 +473,7 @@ table.settings-value-table td{
|
|||
.extra-network-cards .card .overlay { position: absolute; bottom: 0; padding: 0.2em; z-index: 10; width: 100%; background: none; }
|
||||
.extra-network-cards .card:hover .overlay { background: rgba(0, 0, 0, 0.40); }
|
||||
.extra-network-cards .card .overlay .name { font-size: 1.2em; font-weight: bold; line-break: anywhere; text-shadow: 1px 1px black; color: white; }
|
||||
.extra-network-cards .card .overlay .actions { font-size: 1.8em; display: none; text-align-last: justify; cursor: pointer; word-spacing: -6px; }
|
||||
.extra-network-cards .card .overlay .actions { font-size: 2.2em; display: none; text-align-last: justify; cursor: pointer; word-spacing: -6px; font-variant: unicase; letter-spacing: 4px; }
|
||||
.extra-network-cards .card:hover .overlay .actions { display: block; }
|
||||
.extra-network-cards .card .overlay .description { line-break: anywhere; display: none; color: white; }
|
||||
.extra-network-cards .card:hover .overlay .description { display: block; }
|
||||
|
|
|
|||
|
|
@ -169,6 +169,7 @@ if __name__ == "__main__":
|
|||
if installer.check_timestamp():
|
||||
installer.log.info('No changes detected: Quick launch active')
|
||||
installer.install_requirements()
|
||||
installer.check_extensions()
|
||||
else:
|
||||
installer.install_requirements()
|
||||
installer.install_packages()
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit b3776a3ab9a61e8aaa9ea71f3b2073b0f2135c4b
|
||||
Subproject commit c8a662d61271a14968bc6e5ff6ce4461a3488772
|
||||
|
|
@ -250,7 +250,7 @@ def refresh_extensions_list(search_text, sort_column):
|
|||
with open(os.path.join(paths.script_path, "html", "extensions.json"), "w", encoding="utf-8") as outfile:
|
||||
json_object = json.dumps(extensions_list, indent=2)
|
||||
outfile.write(json_object)
|
||||
shared.log.debug(f'Updated extensions list: {len(extensions_list)} {extensions_index} {outfile}')
|
||||
shared.log.debug(f'Updated extensions list: {len(extensions_list)} {extensions_index}')
|
||||
except Exception as e:
|
||||
shared.log.warning(f'Updated extensions list failed: {extensions_index} {e}')
|
||||
update_extension_list()
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ class ExtraNetworksPage:
|
|||
self.items = []
|
||||
self.missing_thumbs = []
|
||||
self.card = '''
|
||||
<div class='card' onclick={card_click}>
|
||||
<div class='card' onclick={card_click} title='{title}'>
|
||||
<div class='overlay'>
|
||||
<span style="display:none" class='search_term'>{search_term}</span>
|
||||
<div class='name'>{name}</div>
|
||||
|
|
@ -81,6 +81,7 @@ class ExtraNetworksPage:
|
|||
<span title="Save current description" onclick={card_save_desc}>🛅</span>
|
||||
<span title="Read metadata" onclick={card_read_meta}>📘</span>
|
||||
<span title="Read info" onclick={card_read_info}>ℹ️</span>
|
||||
<span title="Read tags" onclick={card_read_tags}>#️</span>
|
||||
</div>
|
||||
</div>
|
||||
<img class='preview' src='{preview}' style='width: {width}px; height: {height}px; object-fit: {fit}' loading='{loading}'></img>
|
||||
|
|
@ -203,9 +204,8 @@ class ExtraNetworksPage:
|
|||
return []
|
||||
|
||||
def create_html_for_item(self, item, tabname):
|
||||
preview = item.get("preview", None)
|
||||
args = {
|
||||
"preview": html.escape(preview),
|
||||
"preview": html.escape(item.get("preview", None)),
|
||||
"width": shared.opts.extra_networks_card_size,
|
||||
"height": shared.opts.extra_networks_card_size if shared.opts.extra_networks_card_square else 'auto',
|
||||
"fit": shared.opts.extra_networks_card_fit,
|
||||
|
|
@ -221,8 +221,14 @@ class ExtraNetworksPage:
|
|||
"card_save_desc": '"' + html.escape(f"""return saveCardDescription(event, {json.dumps(item["local_preview"])})""") + '"',
|
||||
"card_read_meta": '"' + html.escape(f"""return readCardMetadata(event, {json.dumps(self.name)}, {json.dumps(item["name"])})""") + '"',
|
||||
"card_read_info": '"' + html.escape(f"""return readCardInformation(event, {json.dumps(self.name)}, {json.dumps(item["name"])})""") + '"',
|
||||
"card_read_tags": '"' + html.escape(f"""return readCardTags(event, {json.dumps(self.name)}, {json.dumps(list(item.get("tags", {}).keys()))})""") + '"',
|
||||
"card_save_preview": '"' + html.escape(f"""return saveCardPreview(event, {json.dumps(item["local_preview"])})""") + '"',
|
||||
"title": f'Name: {item["name"]}',
|
||||
}
|
||||
if item.get("alias", None) is not None:
|
||||
args['title'] += f'\nAlias: {item["alias"]}'
|
||||
if item.get("tags", None) is not None:
|
||||
args['title'] += f'\nTags: {", ".join(item["tags"].keys())}'
|
||||
self.card.format(**args)
|
||||
return self.card.format(**args)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue