Files
automatic/modules/ui_extra_networks_wildcards.py
T
CalamitousFelicitousness e2c856459c feat(autocomplete): aliases, extra-networks, translations, baseline fixes
- tag aliases (optional 4-tuple) and translations (companion file)
- lora and wildcard triggers; embeddings fold into tag-mode results
- new GET /sdapi/v1/wildcards endpoint
- LRU cap, IME safety, multi-textarea safety, modifier-key pass-through
- manifest-retry and config-bridge hardening
- tags-fetch: alias/translation harvesters with authenticated rate limits
2026-04-24 21:55:27 +01:00

66 lines
2.3 KiB
Python

import os
import json
from modules import shared, ui_extra_networks, modelstats, files_cache
from modules.logger import log
wildcards_list = []
def list_wildcard_names() -> list[str]:
"""Enumerate wildcard basenames (relative path, `.txt` stripped). Shared with the autocomplete API."""
wildcards_dir = shared.opts.wildcards_dir
if not wildcards_dir or not os.path.isdir(wildcards_dir):
return []
files = files_cache.list_files(wildcards_dir, ext_filter=[".txt"], recursive=True)
names = []
for filename in files:
relname = os.path.relpath(filename, wildcards_dir)
names.append(os.path.splitext(relname)[0])
names.sort()
return names
class ExtraNetworksPageWildcards(ui_extra_networks.ExtraNetworksPage):
def __init__(self):
super().__init__('Wildcards')
def parents(self, file):
folder = os.path.dirname(file)
if folder != os.path.abspath(shared.opts.wildcards_dir) and folder not in wildcards_list:
wildcards_list.append(folder)
self.parents(folder)
def refresh(self):
wildcards_list.clear()
files = files_cache.list_files(shared.opts.wildcards_dir, ext_filter=[".txt"], recursive=True)
for file in files:
wildcards_list.append(file)
self.parents(file)
def list_items(self):
self.refresh()
for filename in wildcards_list:
relname = os.path.relpath(filename, shared.opts.wildcards_dir)
name = os.path.splitext(relname)[0]
size, mtime = modelstats.stat(filename)
try:
record = {
"type": 'Wildcard',
"name": name,
"filename": filename,
"preview": self.find_preview(filename),
"local_preview": f"{os.path.splitext(filename)[0]}.{shared.opts.samples_format}",
"prompt": json.dumps(f" __{name}__"),
"mtime": mtime,
"size": size,
"description": '',
"info": {},
}
yield record
except Exception as e:
log.debug(f'Networks error: type=wildcard file="{filename}" {e}')
def allowed_directories_for_previews(self):
return [v for v in [shared.opts.wildcards_dir] if v is not None]