| import comfy.samplers |
| import comfy.sd |
| import comfy.utils |
|
|
| |
|
|
| import model_management |
| import importlib |
|
|
| import folder_paths |
| import torch |
|
|
| import os |
| import sys |
| import json |
| import hashlib |
| import copy |
| import traceback |
|
|
|
|
| from PIL import Image |
| from nodes import common_ksampler |
| from PIL.PngImagePlugin import PngInfo |
| import numpy as np |
|
|
| |
| |
|
|
| import os |
|
|
|
|
| if __name__ == os.path.splitext(os.path.basename(__file__))[0] or __name__ =='__main__': |
| from ConsoleColor import print, console |
| from wildcards import wildcards |
| else: |
| from .ConsoleColor import print, console |
| from .wildcards import wildcards |
| |
| |
|
|
| |
| wildcardsOn=True |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| def encode(clip, text): |
| if wildcardsOn: |
| text=wildcards.run(text) |
| return [[clip.encode(text), {}]] |
| |
| def generate(width, height, batch_size=1): |
| latent = torch.zeros([batch_size, 4, height // 8, width // 8]) |
| return {"samples":latent} |
| |
| |
| def decode(vae, samples): |
| return vae.decode(samples["samples"]) |
| |
| |
| def sample( |
| model, seed, steps, cfg, sampler_name, scheduler, |
| clip, |
| vae, |
| positive, negative, |
| |
| width, height, denoise=1.0, batch_size=1 |
| ): |
|
|
| samples=common_ksampler( |
| model, seed, steps, cfg, sampler_name, scheduler, |
| |
| encode(clip, positive), |
| |
| encode(clip, negative), |
| |
| generate( width, height, batch_size=1), |
| denoise=denoise)[0] |
|
|
| return (decode(vae,samples),) |
| |
| def load_vae(vae_name): |
| vae_path = folder_paths.get_full_path("vae", vae_name) |
| vae = comfy.sd.VAE(ckpt_path=vae_path) |
| return vae |
| |
| class SimpleSampler: |
| @classmethod |
| def INPUT_TYPES(s): |
| return {"required": |
| { |
| "model": ("MODEL",), |
| |
| "clip": ("CLIP", ), |
| "vae": ("VAE", ), |
| "positive": ("STRING", {"multiline": True}), |
| |
| "negative": ("STRING", {"multiline": True}), |
| "width": ("INT", {"default": 512, "min": 64, "max": 4096, "step": 64}), |
| "height": ("INT", {"default": 512, "min": 64, "max": 4096, "step": 64}), |
| "batch_size": ("INT", {"default": 1, "min": 1, "max": 64}), |
| "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), |
| "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), |
| "cfg": ("FLOAT", {"default": 3.0, "min": 0.0, "max": 100.0}), |
| "sampler_name": (comfy.samplers.KSampler.SAMPLERS, ), |
| "scheduler": (comfy.samplers.KSampler.SCHEDULERS, ), |
| |
| "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), |
| }} |
| RETURN_TYPES = ("IMAGE",) |
| |
| FUNCTION = "simple" |
|
|
| CATEGORY = "sampling" |
| |
| def simple(self, |
| model, seed, steps, cfg, sampler_name, scheduler, |
| clip, |
| vae, |
| positive, negative, |
| width, height, denoise=1.0, batch_size=1 |
| ): |
|
|
| return sample( |
| model, seed, steps, cfg, sampler_name, scheduler, |
| clip, |
| vae, |
| positive, negative, |
| width, height, denoise, batch_size |
| ) |
|
|
| |
| class SimpleSamplerVAE: |
| @classmethod |
| def INPUT_TYPES(s): |
| return {"required": |
| { |
| "model": ("MODEL",), |
| |
| "clip": ("CLIP", ), |
| |
| "vae_name": (folder_paths.get_filename_list("vae"), ), |
| "positive": ("STRING", {"multiline": True}), |
| |
| "negative": ("STRING", {"multiline": True}), |
| "width": ("INT", {"default": 512, "min": 64, "max": 4096, "step": 64}), |
| "height": ("INT", {"default": 512, "min": 64, "max": 4096, "step": 64}), |
| "batch_size": ("INT", {"default": 1, "min": 1, "max": 64}), |
| "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), |
| "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), |
| "cfg": ("FLOAT", {"default": 3.0, "min": 0.0, "max": 100.0}), |
| "sampler_name": (comfy.samplers.KSampler.SAMPLERS, ), |
| "scheduler": (comfy.samplers.KSampler.SCHEDULERS, ), |
| |
| "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), |
| }} |
| RETURN_TYPES = ("IMAGE",) |
| |
| FUNCTION = "simple" |
|
|
| CATEGORY = "sampling" |
| |
| def simple(self, |
| model, seed, steps, cfg, sampler_name, scheduler, |
| clip, |
| vae_name, |
| positive, negative, |
| width, height, denoise=1.0, batch_size=1 |
| ): |
|
|
| return sample( |
| model, seed, steps, cfg, sampler_name, scheduler, |
| clip, |
| load_vae(vae_name), |
| positive, negative, |
| width, height, denoise, batch_size |
| ) |
|
|
|
|