import os import random import torch import numpy as np from comfy.sd import load_checkpoint_guess_config from nodes import VAEDecode, KSamplerAdvanced, EmptyLatentImage, SaveImage, CLIPTextEncode from modules.path import modelfile_path xl_base_filename = os.path.join(modelfile_path, 'sd_xl_base_1.0.safetensors') xl_refiner_filename = os.path.join(modelfile_path, 'sd_xl_refiner_1.0.safetensors') xl_base, xl_base_clip, xl_base_vae, xl_base_clipvision = load_checkpoint_guess_config(xl_base_filename) del xl_base_clipvision opCLIPTextEncode = CLIPTextEncode() opEmptyLatentImage = EmptyLatentImage() opKSamplerAdvanced = KSamplerAdvanced() opVAEDecode = VAEDecode() with torch.no_grad(): positive_conditions = opCLIPTextEncode.encode(clip=xl_base_clip, text='a handsome man in forest')[0] negative_conditions = opCLIPTextEncode.encode(clip=xl_base_clip, text='bad, ugly')[0] initial_latent_image = opEmptyLatentImage.generate(width=1024, height=1024, batch_size=1)[0] samples = opKSamplerAdvanced.sample( add_noise="enable", noise_seed=random.randint(1, 2 ** 64), steps=25, cfg=9, sampler_name="euler", scheduler="normal", start_at_step=0, end_at_step=25, return_with_leftover_noise="enable", model=xl_base, positive=positive_conditions, negative=negative_conditions, latent_image=initial_latent_image, )[0] vae_decoded = opVAEDecode.decode(samples=samples, vae=xl_base_vae)[0] for image in vae_decoded: i = 255. * image.cpu().numpy() img = np.clip(i, 0, 255).astype(np.uint8) import cv2 cv2.imwrite('a.png', img[:, :, ::-1])