Spaces:
Runtime error
Runtime error
import os | |
import enum | |
from modules import sd_models, cache, errors, hashes, shared | |
metadata_tags_order = {"ss_sd_model_name": 1, "ss_resolution": 2, "ss_clip_skip": 3, "ss_num_train_images": 10, "ss_tag_frequency": 20} | |
class SdVersion(enum.Enum): | |
Unknown = 1 | |
SD1 = 2 | |
SD2 = 3 | |
SDXL = 4 | |
# SD3 = 5 | |
Flux = 6 | |
class NetworkOnDisk: | |
def __init__(self, name, filename): | |
self.name = name | |
self.filename = filename | |
self.metadata = {} | |
self.is_safetensors = os.path.splitext(filename)[1].lower() == ".safetensors" | |
def read_metadata(): | |
metadata = sd_models.read_metadata_from_safetensors(filename) | |
return metadata | |
if self.is_safetensors: | |
try: | |
self.metadata = cache.cached_data_for_file('safetensors-metadata', "lora/" + self.name, filename, read_metadata) | |
except Exception as e: | |
errors.display(e, f"reading lora {filename}") | |
if self.metadata: | |
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.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.sd_version = self.detect_version() | |
def detect_version(self): | |
if str(self.metadata.get('modelspec.implementation', '')) == 'https://github.com/black-forest-labs/flux': | |
return SdVersion.Flux | |
elif str(self.metadata.get('modelspec.architecture', '')) == 'flux-1-dev/lora': | |
return SdVersion.Flux | |
elif str(self.metadata.get('modelspec.architecture', '')) == 'stable-diffusion-xl-v1-base/lora': | |
return SdVersion.SDXL | |
elif str(self.metadata.get('ss_base_model_version', '')).startswith('sdxl_'): | |
return SdVersion.SDXL | |
elif str(self.metadata.get('ss_v2', '')) == 'True': | |
return SdVersion.SD2 | |
elif str(self.metadata.get('modelspec.architecture', '')) == 'stable-diffusion-v1/lora': | |
return SdVersion.SD1 | |
return SdVersion.Unknown | |
def set_hash(self, v): | |
self.hash = v | |
self.shorthash = self.hash[0:12] | |
if self.shorthash: | |
import networks | |
networks.available_network_hash_lookup[self.shorthash] = self | |
def read_hash(self): | |
if not self.hash: | |
self.set_hash(hashes.sha256(self.filename, "lora/" + self.name, use_addnet_hash=self.is_safetensors) or '') | |
def get_alias(self): | |
import networks | |
if shared.opts.lora_preferred_name == "Filename" or self.alias.lower() in networks.forbidden_network_aliases: | |
return self.name | |
else: | |
return self.alias | |
class Network: | |
def __init__(self, name, network_on_disk: NetworkOnDisk): | |
self.name = name | |
self.network_on_disk = network_on_disk | |
self.te_multiplier = 1.0 | |
self.unet_multiplier = 1.0 | |
self.dyn_dim = None | |
self.modules = {} | |
self.bundle_embeddings = {} | |
self.mtime = None | |
self.mentioned_name = None | |