| 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]) |
|
|