Spaces:
Runtime error
Runtime error
import datetime | |
import random | |
import time | |
from pathlib import Path | |
from contextlib import contextmanager | |
from typing import Optional | |
from urllib.parse import urlparse | |
from shared import path_manager, shared_cache | |
import json | |
def get_wildcard_files(): | |
directories = ["wildcards", "wildcards_official"] | |
files = [] | |
for directory in directories: | |
for file in Path(directory).rglob("*.txt"): | |
name = file.stem | |
if name not in files: | |
files.append(name) | |
onebutton = [ | |
"onebuttonprompt", | |
"onebuttonsubject", | |
"onebuttonhumanoid", | |
"onebuttonmale", | |
"onebuttonfemale", | |
"onebuttonanimal", | |
"onebuttonobject", | |
"onebuttonlandscape", | |
"onebuttonconcept", | |
"onebuttonartist", | |
"onebutton1girl", | |
"onebutton1boy", | |
"onebuttonfurry", | |
] | |
both = files + onebutton | |
return both | |
def generate_temp_filename(folder="./outputs/", extension="png"): | |
current_time = datetime.datetime.now() | |
date_string = current_time.strftime("%Y-%m-%d") | |
time_string = current_time.strftime("%Y-%m-%d_%H-%M-%S") | |
random_number = random.randint(1000, 9999) | |
filename = f"{time_string}_{random_number}.{extension}" | |
result = Path(folder) / date_string / filename | |
return result.absolute() | |
def load_keywords(lora): | |
filename = Path( | |
path_manager.model_paths["cache_path"] / "loras" / Path(lora).name | |
).with_suffix(".txt") | |
try: | |
with open(filename, "r") as file: | |
data = file.read() | |
return data | |
except FileNotFoundError: | |
return " " | |
def _get_model_hashes(cache_path, not_found=None): | |
hashes = { | |
"AutoV1": "", | |
"AutoV2": "", | |
"SHA256": "", | |
"CRC32": "", | |
"BLAKE3": "", | |
"AutoV3": "" | |
} | |
filename = cache_path.with_suffix(".json") | |
if Path(filename).is_file(): | |
try: | |
with open(filename) as f: | |
data = json.load(f) | |
except: | |
print(f"ERROR: model {cache_path} is missing json-file") | |
data = {} | |
if "files" not in data: | |
data = {"files": [{"hashes": {}}]} | |
hashes.update(data['files'][0]['hashes']) | |
return hashes | |
else: | |
if not_found: | |
return not_found | |
else: | |
return hashes | |
def get_checkpoint_hashes(model): | |
return _get_model_hashes( | |
Path(path_manager.model_paths["cache_path"] / "checkpoints" / Path(model).name) | |
) | |
def get_lora_hashes(model): | |
return _get_model_hashes( | |
Path(path_manager.model_paths["cache_path"] / "loras" / Path(model).name) | |
) | |
def _get_model_thumbnail(cache_path, not_found="html/warning.png"): | |
if cache_path in shared_cache: | |
return shared_cache[cache_path] | |
suffixes = [".jpeg", ".jpg", ".png", ".gif"] | |
for suffix in suffixes: | |
filename = cache_path.with_suffix(suffix) | |
if Path(filename).is_file(): | |
shared_cache[cache_path] = str(filename) | |
return str(filename) | |
else: | |
return not_found | |
def get_model_thumbnail(model): | |
res = _get_model_thumbnail( | |
Path(path_manager.model_paths["cache_path"] / "checkpoints" / Path(model).name), | |
not_found=None | |
) | |
if res is not None: | |
return res | |
res = _get_model_thumbnail( | |
Path(path_manager.model_paths["cache_path"] / "loras" / Path(model).name), | |
not_found=None | |
) | |
if res is not None: | |
return str(res) | |
else: | |
return "html/warning.png" | |
def get_checkpoint_thumbnail(model): | |
if Path(model).suffix == ".merge": | |
not_found="html/merge.jpeg" | |
else: | |
not_found="html/warning.jpeg" | |
return _get_model_thumbnail( | |
Path(path_manager.model_paths["cache_path"] / "checkpoints" / Path(model).name), | |
not_found=not_found | |
) | |
def get_lora_thumbnail(model): | |
return _get_model_thumbnail( | |
Path(path_manager.model_paths["cache_path"] / "loras" / Path(model).name) | |
) | |
def get_model_path(model, folders): | |
for folder in folders: | |
filename = Path(folder) / model | |
if filename.exists(): | |
return filename | |
return None | |
def get_checkpoint_path(model, folders=None): | |
if folders is None: | |
folders = [path_manager_model_paths["modelfile_path"]] | |
return get_model_path(model, folders) | |
def get_lora_path(model, folders=None): | |
if folders is None: | |
folders = [path_manager_model_paths["lorafile_path"]] | |
return get_model_path(model, folders) | |
def url_to_filename(url): | |
import string | |
keep = "-_.() %s%s" % (string.ascii_letters, string.digits) | |
url = url.replace(' ','_') | |
url = ''.join(c for c in url if c in keep) | |
return url | |
def load_file_from_url( | |
url: str, | |
*, | |
model_dir: str, | |
progress: bool = True, | |
file_name: Optional[str] = None, | |
) -> str: | |
"""Download a file from `url` into `model_dir`, using the file present if possible. | |
Returns the path to the downloaded file. | |
""" | |
Path(model_dir).mkdir(parents=True, exist_ok=True) | |
if not file_name: | |
parts = urlparse(url) | |
file_name = Path(parts.path).stem | |
for file in Path(model_dir).glob("**/*"): | |
if file.name == file_name: | |
cached_file = file | |
return str(cached_file) | |
cached_file = Path(model_dir) / file_name | |
if not cached_file.exists(): | |
print(f'Downloading: "{url}" to {cached_file}\n') | |
from torch.hub import download_url_to_file | |
download_url_to_file(url, cached_file, progress=progress) | |
return str(cached_file) | |
class TimeIt: | |
def __init__(self, text=""): | |
self.text = text | |
def __enter__(self): | |
self.start = time.time() | |
return self | |
def __exit__(self, *args): | |
self.end = time.time() | |
self.interval = self.end - self.start | |
print(f"\033[91mTime taken: {self.interval:0.2f} seconds {self.text}\033[0m") | |
def remove_empty_str(items, default=None): | |
items = [x for x in items if x != ""] | |
if len(items) == 0 and default is not None: | |
return [default] | |
return items | |