mirror of
https://github.com/vladmandic/automatic
synced 2026-09-17 08:19:11 +02:00
@@ -8,7 +8,7 @@ import torch
|
||||
from safetensors.torch import load_file
|
||||
import diffusers
|
||||
import transformers
|
||||
from modules import shared, devices
|
||||
from modules import shared, devices, errors
|
||||
|
||||
|
||||
class Recipe:
|
||||
@@ -33,6 +33,11 @@ class Recipe:
|
||||
lora = {
|
||||
}
|
||||
fuse = 1.0
|
||||
|
||||
def __repr__(self):
|
||||
return f'Recipe(name="{self.name}" version="{self.version}" author="{self.author}" desc="{self.desc}" hint="{self.hint}" license="{self.license}" dtype="{self.dtype}" fuse={self.fuse} diffusers={self.diffusers} safetensors={self.safetensors})'
|
||||
|
||||
|
||||
class Test:
|
||||
generate = True
|
||||
prompt = 'astronaut in a diner drinking coffee with burger and french fries on the table'
|
||||
@@ -41,6 +46,8 @@ class Test:
|
||||
height = 1024
|
||||
guidance = 4
|
||||
steps = 20
|
||||
|
||||
|
||||
recipe = Recipe()
|
||||
test = Test()
|
||||
pipeline: diffusers.StableDiffusionXLPipeline = None
|
||||
@@ -262,11 +269,13 @@ def save_model(pipe: diffusers.StableDiffusionXLPipeline):
|
||||
folder = os.path.join(shared.opts.diffusers_dir, f'models--{author}--{recipe.name}')
|
||||
if len(recipe.version) > 0:
|
||||
folder += f'-{recipe.version}'
|
||||
if not recipe.diffusers or recipe.safetensors:
|
||||
if not (recipe.diffusers or recipe.safetensors):
|
||||
shared.log.debug(f'Modules merge: type=sdxl {recipe} skipping save')
|
||||
return
|
||||
try:
|
||||
yield msg('save')
|
||||
yield msg(f'pretrained={folder}')
|
||||
shared.log.info(f'Modules merge save: type=sdxl diffusers="{folder}"')
|
||||
pipe.save_pretrained(folder, safe_serialization=True, push_to_hub=False)
|
||||
with open(os.path.join(folder, 'vae', 'config.json'), 'r', encoding='utf8') as f:
|
||||
vae_config = json.load(f)
|
||||
@@ -283,13 +292,16 @@ def save_model(pipe: diffusers.StableDiffusionXLPipeline):
|
||||
fn = os.path.join(shared.opts.ckpt_dir, fn)
|
||||
if not fn.endswith('.safetensors'):
|
||||
fn += '.safetensors'
|
||||
shared.log.info(f'Modules merge save: type=sdxl safetensors="{fn}"')
|
||||
yield msg(f'safetensors={fn}')
|
||||
from modules.merging import convert_sdxl
|
||||
metadata = convert_sdxl(model_path=folder, checkpoint_path=fn, metadata=get_metadata())
|
||||
metadata = convert_sdxl.convert(model_path=folder, checkpoint_path=fn, metadata=get_metadata())
|
||||
if 'modelspec.thumbnail' in metadata:
|
||||
metadata['modelspec.thumbnail'] = f"{metadata['modelspec.thumbnail'].split(',')[0]}:{len(metadata['modelspec.thumbnail'])}"
|
||||
yield msg(f'metadata={metadata}')
|
||||
except Exception as e:
|
||||
shared.log.error(f'Modules merge save: {e}')
|
||||
errors.display(e, 'merge')
|
||||
yield msg(f'save: {e}')
|
||||
|
||||
|
||||
@@ -298,6 +310,7 @@ def merge():
|
||||
yield from load_base()
|
||||
if pipeline is None:
|
||||
return
|
||||
shared.log.info(f'Modules merge: type=sdxl {recipe}')
|
||||
pipeline = pipeline.to(device=devices.device, dtype=recipe.dtype)
|
||||
yield from load_scheduler(pipeline)
|
||||
yield from load_unet(pipeline)
|
||||
|
||||
@@ -54,6 +54,8 @@ def visible_sampler_names():
|
||||
|
||||
|
||||
def restore_default(model):
|
||||
if model is None:
|
||||
return None
|
||||
if getattr(model, "default_scheduler", None) is not None:
|
||||
model.scheduler = copy.deepcopy(model.default_scheduler)
|
||||
if hasattr(model, "prior_pipe") and hasattr(model.prior_pipe, "scheduler"):
|
||||
@@ -67,6 +69,7 @@ def restore_default(model):
|
||||
shared.log.debug(f'Sampler: "Default" cls={model.scheduler.__class__.__name__} config={config}')
|
||||
return model.scheduler
|
||||
|
||||
|
||||
def create_sampler(name, model):
|
||||
if name is None or name == 'None':
|
||||
return model.scheduler if model is not None else None
|
||||
|
||||
Reference in New Issue
Block a user