Added normal simple sampler, updated lora finding again
This commit is contained in:
@@ -78,10 +78,8 @@ class LoadLoraCharacterNode:
|
||||
# Extract just the filenames for comparison
|
||||
lora_filenames = [path.split('\\')[-1] for path in lora_paths]
|
||||
|
||||
# Assume character_name is a string containing the character's name.
|
||||
character_name_parts = character_name.lower().split()
|
||||
|
||||
# Assume lora_filenames is a list of filenames to search through.
|
||||
character_name_lower = character_name.lower()
|
||||
character_name_parts = character_name_lower.split()
|
||||
closest_match = None
|
||||
lowest_distance = float('inf')
|
||||
|
||||
@@ -89,10 +87,15 @@ class LoadLoraCharacterNode:
|
||||
# Convert filename to lowercase for case-insensitive comparison.
|
||||
filename_lower = filename.lower()
|
||||
|
||||
# Check if any part of the character name is in the filename.
|
||||
if any(part in filename_lower for part in character_name_parts):
|
||||
# Calculate the levenshtein distance for a closer match.
|
||||
total_distance = sum(self.levenshtein_distance(part, filename_lower) for part in character_name_parts)
|
||||
# Calculate the Levenshtein distance for the full character name as one of the metrics.
|
||||
full_name_distance = self.levenshtein_distance(character_name_lower, filename_lower)
|
||||
|
||||
# Calculate the sum of distances for each part of the character name.
|
||||
parts_distance = sum(self.levenshtein_distance(part, filename_lower) for part in character_name_parts)
|
||||
|
||||
# Use the minimum of full name distance and parts distance as the total distance.
|
||||
total_distance = min(full_name_distance, parts_distance)
|
||||
print_sn0w("Distance: " + str(total_distance) + " Lora: " + filename)
|
||||
|
||||
if total_distance < lowest_distance:
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
from nodes import KSamplerAdvanced, VAEDecode, VAEEncode, EmptyLatentImage, ImageScaleBy, CLIPTextEncode
|
||||
from comfy_extras.nodes_upscale_model import ImageUpscaleWithModel
|
||||
import comfy.samplers
|
||||
|
||||
class SimpleSamplerNode:
|
||||
@classmethod
|
||||
def INPUT_TYPES(s):
|
||||
return {"required":
|
||||
{"model": ("MODEL",),
|
||||
"clip": ("CLIP", ),
|
||||
"vae": ("VAE", ),
|
||||
"add_noise": (["enable", "disable"], ),
|
||||
"noise_seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
|
||||
"steps": ("INT", {"default": 20, "min": 1, "max": 10000}),
|
||||
"cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step":0.1, "round": 0.01}),
|
||||
"width": ("INT", {"default": 0, "min": 0}),
|
||||
"height": ("INT", {"default": 0, "min": 0}),
|
||||
"sampler_name": (comfy.samplers.KSampler.SAMPLERS, ),
|
||||
"scheduler": (comfy.samplers.KSampler.SCHEDULERS, ),
|
||||
"positive": ("STRING", {"default": ""}),
|
||||
"negative": ("STRING", {"default": ""}),
|
||||
"start_at_step": ("INT", {"default": 0, "min": 0, "max": 10000}),
|
||||
"end_at_step": ("INT", {"default": 10000, "min": 0, "max": 10000}),
|
||||
"return_with_leftover_noise": (["disable", "enable"], ),
|
||||
"hires": ("BOOLEAN", {"default": False},),
|
||||
"upscale_model": ("UPSCALE_MODEL",),
|
||||
"hires_steps": ("INT", {"default": 5, "min": 1, "max": 20}),
|
||||
}
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("IMAGE", "CONDITIONING", "CONDITIONING")
|
||||
RETURN_NAMES = ("IMAGE", "POSITIVE", "NEGATIVE")
|
||||
FUNCTION = "sample"
|
||||
|
||||
CATEGORY = "sampling"
|
||||
|
||||
def sample(self, model, clip, vae, add_noise, noise_seed, steps, cfg, width, height, sampler_name, scheduler, positive, negative, start_at_step, end_at_step, return_with_leftover_noise, hires, upscale_model, hires_steps):
|
||||
k_sampler_node = KSamplerAdvanced()
|
||||
vae_decode = VAEDecode()
|
||||
vae_encode = VAEEncode()
|
||||
text_encode = CLIPTextEncode()
|
||||
upscaler = ImageUpscaleWithModel()
|
||||
scale_image = ImageScaleBy()
|
||||
|
||||
latent_image = EmptyLatentImage().generate(width, height)[0]
|
||||
|
||||
positive_prompt = text_encode.encode(clip, positive)[0]
|
||||
negative_prompt = text_encode.encode(clip, negative)[0]
|
||||
|
||||
# Sampling
|
||||
samples = k_sampler_node.sample(model, add_noise, noise_seed, steps, cfg, sampler_name, scheduler, positive_prompt, negative_prompt, latent_image, start_at_step, end_at_step, return_with_leftover_noise)[0]
|
||||
|
||||
if (hires):
|
||||
# Decode the samples
|
||||
image = vae_decode.decode(vae, samples)[0]
|
||||
|
||||
total_hires_steps = 25 - hires_steps
|
||||
|
||||
upscaled_image = upscaler.upscale(upscale_model, image)[0]
|
||||
upscaled_image = scale_image.upscale(upscaled_image, "nearest-exact", 0.5)[0]
|
||||
upscaled_latent = vae_encode.encode(vae, upscaled_image)[0]
|
||||
upscaled_samples = k_sampler_node.sample(model, add_noise, noise_seed, 25, cfg, sampler_name, scheduler, positive_prompt, negative_prompt, upscaled_latent, total_hires_steps, 1000, return_with_leftover_noise)[0]
|
||||
image = vae_decode.decode(vae, upscaled_samples)
|
||||
else:
|
||||
image = vae_decode.decode(vae, samples)
|
||||
|
||||
return (image[0], positive_prompt, negative_prompt)
|
||||
Reference in New Issue
Block a user