├── LICENSE ├── Nodes ├── GRBLIP2CaptionGenerator.py ├── GRBLIP2TextExpander.py ├── GRColors.py ├── GRCompositions.py ├── GRCounter.py ├── GRDescriptionDB.py ├── GRDetails.py ├── GRFlorence2CaptionGenerator.py ├── GRINTIncrement.py ├── GRImage.py ├── GRImageMultiplier.py ├── GRLora.py ├── GRMask.py ├── GRMaths.py ├── GRMoods.py ├── GRObjects.py ├── GRPanOrZoom.py ├── GRPrompt.py ├── GRPromptGenExtended.py ├── GRScroller.py ├── GRSigmas.py ├── GRStyles.py ├── GRSubjects.py ├── GRTextOverlay.py ├── GRTile.py ├── GRTime_of_day.py ├── GRWeather.py └── __pycache__ │ ├── GRBLIP2CaptionGenerator.cpython-312.pyc │ ├── GRBLIP2TextExpander.cpython-312.pyc │ ├── GRColors.cpython-312.pyc │ ├── GRCompositions.cpython-312.pyc │ ├── GRCounter.cpython-311.pyc │ ├── GRCounter.cpython-312.pyc │ ├── GRDescriptionDB.cpython-312.pyc │ ├── GRDetails.cpython-312.pyc │ ├── GRFlorence2CaptionGenerator.cpython-312.pyc │ ├── GRImage.cpython-311.pyc │ ├── GRImage.cpython-312.pyc │ ├── GRLora.cpython-312.pyc │ ├── GRMask.cpython-311.pyc │ ├── GRMask.cpython-312.pyc │ ├── GRMoods.cpython-312.pyc │ ├── GRObjects.cpython-312.pyc │ ├── GRPanOrZoom.cpython-312.pyc │ ├── GRPrompt.cpython-311.pyc │ ├── GRPrompt.cpython-312.pyc │ ├── GRPromptGenExtended.cpython-312.pyc │ ├── GRScroller.cpython-311.pyc │ ├── GRScroller.cpython-312.pyc │ ├── GRStyles.cpython-312.pyc │ ├── GRSubjects.cpython-312.pyc │ ├── GRTextOverlay.cpython-311.pyc │ ├── GRTextOverlay.cpython-312.pyc │ ├── GRTile.cpython-311.pyc │ ├── GRTile.cpython-312.pyc │ ├── GRTime_of_day.cpython-312.pyc │ ├── GRVideo.cpython-311.pyc │ └── GRWeather.cpython-312.pyc ├── README.md ├── Workflows ├── 0005.json - uLJQF6cH.json ├── 1 VideoToPose - RqCDpTPJ.json ├── 2 posetovideo - 9JCRNutL.json ├── 3 upscaleandswap - ank4Rip5.json ├── AnimateDiffWithDWPose - MPt9WbnU.json ├── ComfyUISupir - pYFTMrPX.json ├── GraftingScribbles.json ├── MaskingWithIPAdapter.json ├── ModelMerging.json ├── PortraitMaster2.3 - q2ni5Hsd.json ├── findthethreedifferences.json ├── grpanorzoom.json ├── reactorfaceswap - bDey55U2.json ├── tagstoimage - ABV9qCic.json └── unknown.json ├── __init__.py ├── pyproject.toml └── requirements.txt /Nodes/GRBLIP2CaptionGenerator.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from transformers import BlipProcessor, BlipForConditionalGeneration 3 | from PIL import Image 4 | import os 5 | import logging 6 | import folder_paths 7 | import comfy.utils 8 | 9 | class GRBLIP2CaptionGenerator: 10 | def __init__(self): 11 | pass 12 | 13 | @classmethod 14 | def INPUT_TYPES(cls): 15 | return { 16 | "required": { 17 | "image": ("IMAGE",), # Accepts an image tensor in [B, H, W, C] format 18 | "max_length": ("INT", {"default": 50, "min": 1, "max": 100, "step": 1}), 19 | "num_beams": ("INT", {"default": 5, "min": 1, "max": 10, "step": 1}), 20 | "temperature": ("FLOAT", {"default": 0.7, "min": 0.1, "max": 1.0, "step": 0.1}), 21 | "top_k": ("INT", {"default": 50, "min": 1, "max": 100, "step": 1}), 22 | } 23 | } 24 | 25 | @classmethod 26 | def IS_CHANGED(cls, **kwargs): 27 | return float("NaN") 28 | 29 | RETURN_TYPES = ("STRING",) 30 | RETURN_NAMES = ("caption",) 31 | FUNCTION = "generate_caption" 32 | 33 | CATEGORY = "GraftingRayman/Image Processing" 34 | 35 | def generate_caption(self, image, max_length, num_beams, temperature, top_k): 36 | """Generate a caption for the given image using BLIP-2.""" 37 | device = torch.device("cuda" if torch.cuda.is_available() else "cpu") 38 | processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-large") 39 | model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-large").to(device) 40 | 41 | # Convert the input tensor to a PIL Image 42 | if isinstance(image, torch.Tensor): 43 | # Ensure the tensor is in the correct shape [B, H, W, C] and normalized to [0, 1] 44 | if image.dim() == 4: # Batch dimension is present 45 | image = image[0] # Take the first image in the batch 46 | image = image.mul(255).byte().cpu().numpy() # Convert to numpy array and scale to [0, 255] 47 | image = Image.fromarray(image) # Convert to PIL Image 48 | 49 | # Process the image and generate the caption 50 | inputs = processor(image, return_tensors="pt").to(device) 51 | with torch.no_grad(): 52 | out = model.generate( 53 | **inputs, 54 | max_length=max_length, 55 | num_beams=num_beams, 56 | temperature=temperature, 57 | top_k=top_k, 58 | ) 59 | caption = processor.decode(out[0], skip_special_tokens=True) 60 | 61 | print(f"Generated caption: {caption}") 62 | return (caption,) 63 | -------------------------------------------------------------------------------- /Nodes/GRBLIP2TextExpander.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from transformers import Blip2Processor, Blip2ForConditionalGeneration 3 | import comfy.model_management as mm 4 | from PIL import Image # Import PIL to create a dummy image 5 | import os 6 | import logging 7 | import folder_paths 8 | import comfy.utils 9 | 10 | class BLIP2TextExpander: 11 | def __init__(self): 12 | pass 13 | 14 | @classmethod 15 | def INPUT_TYPES(cls): 16 | return { 17 | "required": { 18 | "text_input": ("STRING", {"default": "", "multiline": True}), # Input text to be expanded 19 | "max_new_tokens": ("INT", {"default": 50, "min": 1, "max": 100}), # Maximum number of tokens to generate 20 | "num_beams": ("INT", {"default": 5, "min": 1, "max": 10}), # Number of beams for beam search 21 | "do_sample": ("BOOLEAN", {"default": True}), # Whether to use sampling 22 | "temperature": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 2.0}), # Sampling temperature 23 | "top_p": ("FLOAT", {"default": 0.9, "min": 0.1, "max": 1.0}), # Top-p sampling 24 | "seed": ("INT", {"default": 1, "min": 1, "max": 0xffffffffffffffff}), # Seed for reproducibility 25 | } 26 | } 27 | 28 | @classmethod 29 | def IS_CHANGED(cls, **kwargs): 30 | return float("NaN") 31 | 32 | RETURN_TYPES = ("STRING",) 33 | RETURN_NAMES = ("expanded_text",) 34 | FUNCTION = "expand_text" 35 | CATEGORY = "GraftingRayman/Text Processing" 36 | 37 | def load_model(self, device): 38 | """Load the BLIP-2 processor and model.""" 39 | processor = Blip2Processor.from_pretrained("Salesforce/blip2-opt-2.7b") 40 | model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b").to(device) 41 | return processor, model 42 | 43 | def expand_text(self, text_input, max_new_tokens, num_beams, do_sample, temperature, top_p, seed): 44 | """Expand the input text using BLIP-2.""" 45 | device = mm.get_torch_device() 46 | offload_device = mm.unet_offload_device() 47 | 48 | # Load the processor and model 49 | processor, model = self.load_model(device) 50 | 51 | # Set seed for reproducibility 52 | if seed: 53 | torch.manual_seed(seed) 54 | 55 | # Create a dummy white image (224x224 is a common size for vision models) 56 | dummy_image = Image.new('RGB', (224, 224), color=(255, 255, 255)) # White image 57 | 58 | # Prepare the input text and dummy image 59 | inputs = processor(dummy_image, text=text_input, return_tensors="pt").to(device) 60 | 61 | # Extract pixel_values from inputs 62 | pixel_values = inputs["pixel_values"] 63 | 64 | # Generate the expanded text 65 | with torch.no_grad(): 66 | generated_ids = model.generate( 67 | pixel_values=pixel_values, # Pass pixel_values explicitly 68 | input_ids=inputs["input_ids"], 69 | max_new_tokens=max_new_tokens, 70 | num_beams=num_beams, 71 | do_sample=do_sample, 72 | temperature=temperature, 73 | top_p=top_p, 74 | ) 75 | 76 | # Decode the generated text 77 | expanded_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0] 78 | 79 | # Offload the model if needed 80 | model.to(offload_device) 81 | mm.soft_empty_cache() 82 | 83 | print(f"Expanded text: {expanded_text}") 84 | return (expanded_text,) 85 | -------------------------------------------------------------------------------- /Nodes/GRDescriptionDB.py: -------------------------------------------------------------------------------- 1 | from .GRSubjects import subjects 2 | from .GRMoods import moods 3 | from .GRColors import colors 4 | from .GRCompositions import compositions 5 | from .GRDetails import details 6 | from .GRWeather import weather 7 | from .GRTime_of_day import time_of_day 8 | from .GRObjects import objects 9 | from .GRStyles import styles 10 | import random 11 | 12 | class HyperComplexImageDescriptionGenerator: 13 | def __init__(self): 14 | self.subjects = subjects 15 | self.moods = moods 16 | self.colors = colors 17 | self.compositions = compositions 18 | self.details = details 19 | self.weather = weather 20 | self.time_of_day = time_of_day 21 | self.objects = objects 22 | self.styles = styles 23 | 24 | self.types_of_images = ["random"] + sorted([ 25 | "3D Render", "Anime-style", "Black and White", "Cartoon", 26 | "Charcoal Drawing", "Chiaroscuro", "Cinematic", "Claymation", 27 | "Concept Art", "Cubist", "Cyberpunk", "Doodle", "Double Exposure", 28 | "Embossed", "Engraving", "Etching", "Expressionist", "Fantasy", 29 | "Flat Design", "Glitch Art", "Gothic", "Grainy", "Grunge", 30 | "Hand-drawn", "High Contrast", "Holographic", "Hyper-realistic", 31 | "Illustrative", "Impressionistic", "Infrared", "Ink Drawing", 32 | "Isometric", "Low Poly", "Macro", "Metallic", "Minimalist", 33 | "Neon-lit", "Oil Painting", "Old", "Panoramic", "Papercut", 34 | "Pastel Drawing", "Photographic", "Pixel Art", "Pointillism", 35 | "Pop Art", "Realistic", "Renaissance", "Retro-futuristic", 36 | "Sepia", "Sketch", "Soft Focus", "Stained Glass", "Steampunk", 37 | "Stylized", "Surreal", "Synthwave", "Textured Collage", 38 | "Vaporwave", "Vintage", "Watercolor", "Woodcut", "Horror", "Scary", "Jumpy" 39 | ], key=str.casefold) 40 | 41 | def generate_prompt( 42 | self, 43 | seed, 44 | subject_type, 45 | category=None, 46 | replacement=None, 47 | image_type=None, 48 | mood_type=None, 49 | color_type=None, 50 | composition_type=None, 51 | detail_type=None, 52 | weather_type=None, 53 | time_of_day_type=None, 54 | object_type=None, 55 | style_type=None, 56 | subject_only=False, 57 | short_text=None, 58 | ): 59 | random.seed(seed) 60 | 61 | # Randomize image_type if it's "random" 62 | if image_type == "random" or not image_type: 63 | image_type = random.choice(self.types_of_images[1:]) 64 | 65 | # Handle subject_only logic 66 | if subject_only: 67 | if short_text: 68 | return f"This is a {image_type} image. {short_text}" 69 | if subject_type == "random": 70 | subject_type = random.choice(list(self.subjects.keys())) 71 | subject = random.choice(self.subjects[subject_type]) if subject_type in self.subjects else "an undefined scene" 72 | return f"This is a {image_type} image. It captures {subject}." 73 | 74 | # Normal subject selection logic 75 | if subject_type == "random": 76 | subject_type = random.choice(list(self.subjects.keys())) 77 | subject = random.choice(self.subjects[subject_type]) if subject_type in self.subjects else "an undefined scene" 78 | 79 | if category == "subjects" and replacement: 80 | subject = replacement 81 | 82 | # Select attributes dynamically 83 | mood_options = self.moods.get(mood_type, list(self.moods.values())[0]) # Default to first category 84 | mood = None if mood_type == "none" else (replacement if category == "moods" else random.choice(mood_options)) 85 | 86 | color_options = self.colors.get(color_type, list(self.colors.values())[0]) # Default to first category 87 | color = None if color_type == "none" else (replacement if category == "colors" else random.choice(color_options)) 88 | 89 | composition_options = self.compositions.get(composition_type, list(self.compositions.values())[0]) # Default to first category 90 | composition = None if composition_type == "none" else (replacement if category == "compositions" else random.choice(composition_options)) 91 | 92 | detail_options = self.details.get(detail_type, list(self.details.values())[0]) # Default to first category 93 | detail = None if detail_type == "none" else (replacement if category == "details" else random.choice(detail_options)) 94 | 95 | weather_options = self.weather.get(weather_type, list(self.weather.values())[0]) # Default to first category 96 | weather = None if weather_type == "none" else (replacement if category == "weather" else random.choice(weather_options)) 97 | 98 | time_of_day_options = self.time_of_day.get(time_of_day_type, list(self.time_of_day.values())[0]) # Default to first category 99 | time_of_day = None if time_of_day_type == "none" else (replacement if category == "time_of_day" else random.choice(time_of_day_options)) 100 | 101 | object_options = self.objects.get(object_type, list(self.objects.values())[0]) # Default to first category 102 | obj = None if object_type == "none" else (replacement if category == "objects" else random.choice(object_options)) 103 | 104 | style_options = self.styles.get(style_type, list(self.styles.values())[0]) # Default to first category 105 | style = None if style_type == "none" else (replacement if category == "styles" else random.choice(style_options)) 106 | 107 | # Construct the prompt 108 | prompt = f"This is a {image_type} image, It captures {subject}" 109 | if mood: 110 | prompt += f" The mood is {mood}" 111 | if color: 112 | prompt += f" complemented by {color}" 113 | if composition: 114 | prompt += f" The composition features {composition}" 115 | if detail: 116 | prompt += f" enhanced by {detail}" 117 | if weather: 118 | prompt += f" The weather is described as {weather}" 119 | if time_of_day: 120 | prompt += f" and the time of day is {time_of_day}" 121 | if obj: 122 | prompt += f" In the foreground, {obj} stands out, drawing the eye" 123 | if style: 124 | prompt += f" The image is rendered in {style}" 125 | 126 | return prompt.strip() -------------------------------------------------------------------------------- /Nodes/GRINTIncrement.py: -------------------------------------------------------------------------------- 1 | import comfy 2 | import torch 3 | 4 | class GRINTIncrement: 5 | def __init__(self): 6 | self.counter = 0 7 | self.last_seed = None # Track the last seed value 8 | 9 | @classmethod 10 | def INPUT_TYPES(cls): 11 | return { 12 | "required": { 13 | "prefix": ("STRING", {"default": "", "multiline": True}), # Add prefix input (multiline string) 14 | "start_value": ("INT", {"default": 0, "min": 0, "max": 1000000}), 15 | "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), # Seed input 16 | }, 17 | } 18 | 19 | RETURN_TYPES = ("INT", "STRING") # Return both INT and STRING 20 | FUNCTION = "increment" 21 | 22 | CATEGORY = "custom" 23 | 24 | def increment(self, prefix, start_value, seed): 25 | # Check if the seed has changed 26 | if seed != self.last_seed: 27 | self.last_seed = seed # Update the last seed 28 | if self.counter == 0: 29 | self.counter = start_value 30 | else: 31 | self.counter += 1 # Increment the counter 32 | 33 | # Format the counter as prefix/000014/ (prefix + 6-digit number with slashes) 34 | formatted_counter = f"{prefix}/{self.counter:06d}/" 35 | 36 | return (self.counter, formatted_counter) # Return both the integer and the formatted string 37 | 38 | -------------------------------------------------------------------------------- /Nodes/GRImageMultiplier.py: -------------------------------------------------------------------------------- 1 | import torch 2 | 3 | class GRImageMultiplier: 4 | @classmethod 5 | def INPUT_TYPES(cls): 6 | return { 7 | "required": { 8 | "images": ("IMAGE",), 9 | "multiplier": ("INT", { 10 | "default": 1, 11 | "min": 1, 12 | "max": 10000, 13 | "step": 1 14 | }), 15 | "interleave": ("BOOLEAN", {"default": False}), 16 | "random_order": ("BOOLEAN", {"default": False}), 17 | "seed": ("INT", { 18 | "default": 0, 19 | "min": -0x8000000000000000, 20 | "max": 0x7FFFFFFFFFFFFFFF, 21 | "step": 1 22 | }), 23 | }, 24 | } 25 | 26 | RETURN_TYPES = ("IMAGE",) 27 | FUNCTION = "multiply" 28 | CATEGORY = "GraftingRayman/Image" 29 | 30 | def multiply(self, images, multiplier, interleave, random_order, seed): 31 | if random_order: 32 | # Create sequential copies first 33 | multiplied = images.repeat_interleave(multiplier, dim=0) 34 | n = multiplied.size(0) 35 | 36 | # Create generator with seed 37 | generator = torch.Generator(device='cpu') 38 | if seed != 0: 39 | generator.manual_seed(seed) 40 | 41 | # Generate permutation and shuffle 42 | perm = torch.randperm(n, generator=generator) 43 | result = multiplied[perm.to(multiplied.device)] 44 | else: 45 | if interleave: 46 | # Interleaved repetition 47 | result = images.repeat(multiplier, 1, 1, 1) 48 | else: 49 | # Sequential repetition 50 | result = images.repeat_interleave(multiplier, dim=0) 51 | 52 | return (result,) 53 | 54 | -------------------------------------------------------------------------------- /Nodes/GRLora.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import comfy.sd 4 | import comfy.utils 5 | import folder_paths 6 | import random 7 | 8 | sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), "comfy")) 9 | 10 | class GRLora: 11 | def __init__(self): 12 | self.loaded_loras = {} # Cache for loaded LoRAs 13 | 14 | @classmethod 15 | def INPUT_TYPES(s): 16 | loras_root = folder_paths.get_folder_paths("loras")[0] # Get the first loras directory (parent folder) 17 | subfolders = [name for name in os.listdir(loras_root) if os.path.isdir(os.path.join(loras_root, name))] 18 | subfolders.insert(0, "None") # Add "None" to use the root loras directory 19 | 20 | # Recursively find all LoRA files in the parent folder and include their folder names 21 | lora_files = [] 22 | for root, _, files in os.walk(loras_root): 23 | for file in files: 24 | if file.endswith((".safetensors", ".ckpt")): 25 | # Get the relative path from the loras_root 26 | rel_path = os.path.relpath(os.path.join(root, file), loras_root) 27 | lora_files.append(rel_path) 28 | lora_files.insert(0, "None") # Add "None" as the first option 29 | 30 | return { 31 | "required": { 32 | "model": ("MODEL",), 33 | "clip": ("CLIP",), 34 | "subfolder": (subfolders, {"default": "None"}), # Subfolder input for random LoRAs 35 | "num_loras": ("INT", {"default": 1, "min": 1, "max": 10, "step": 1}), # Number of LoRAs to load 36 | "strength": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}), # Strength for random LoRAs 37 | "seed": ("INT", {"default": 0, "min": 0, "max": 0xFFFFFFFFFFFFFFFF}), # Seed for random selection 38 | "enable_style_lora": ("BOOLEAN", {"default": True}), # Boolean to enable/disable all style LoRAs 39 | "style_lora_1": (lora_files, {"default": "None"}), # Dropdown to select the first style LoRA 40 | "style_lora_1_strength": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}), # Weight for the first style LoRA 41 | "style_lora_2": (lora_files, {"default": "None"}), # Dropdown to select the second style LoRA 42 | "style_lora_2_strength": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}), # Weight for the second style LoRA 43 | "style_lora_3": (lora_files, {"default": "None"}), # Dropdown to select the third style LoRA 44 | "style_lora_3_strength": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}), # Weight for the third style LoRA 45 | } 46 | } 47 | 48 | RETURN_TYPES = ("MODEL", "CLIP", "STRING",) 49 | RETURN_NAMES = ("MODEL", "CLIP", "lora_info",) 50 | FUNCTION = "load_lora" 51 | CATEGORY = "GraftingRayman/LoRA" 52 | 53 | def load_lora(self, model, clip, subfolder, num_loras, strength, seed, enable_style_lora, 54 | style_lora_1, style_lora_1_strength, style_lora_2, style_lora_2_strength, 55 | style_lora_3, style_lora_3_strength): 56 | loras_root = folder_paths.get_folder_paths("loras")[0] # Get the first loras directory (parent folder) 57 | lora_info = "" 58 | model_lora, clip_lora = model, clip 59 | 60 | # Handle random LoRA selection (search in the specified subfolder) 61 | random_loras_root = loras_root 62 | if subfolder != "None": 63 | random_loras_root = os.path.join(loras_root, subfolder) # Append the subfolder if specified 64 | 65 | lora_files = [f for f in os.listdir(random_loras_root) if f.endswith((".safetensors", ".ckpt"))] 66 | if lora_files and num_loras > 0: 67 | random.seed(seed) 68 | selected_loras = random.sample(lora_files, min(num_loras, len(lora_files))) 69 | weights = [random.random() for _ in selected_loras] 70 | total_weight = sum(weights) 71 | weights = [w / total_weight for w in weights] # Normalize to sum to 1.0 72 | 73 | # Add random LoRAs to the info string 74 | lora_info += "Random Loras:\n" 75 | for lora_name, weight in zip(selected_loras, weights): 76 | lora_path = os.path.join(random_loras_root, lora_name) 77 | if lora_path in self.loaded_loras: 78 | lora = self.loaded_loras[lora_path] 79 | else: 80 | lora = comfy.utils.load_torch_file(lora_path, safe_load=True) 81 | self.loaded_loras[lora_path] = lora 82 | strength_lora = strength * weight 83 | model_lora, clip_lora = comfy.sd.load_lora_for_models(model_lora, clip_lora, lora, strength_lora, strength_lora) 84 | lora_info += f"{lora_name} {strength_lora:.2f}\n" 85 | 86 | # Handle style LoRAs (if enabled) 87 | if enable_style_lora: 88 | style_loras = [ 89 | (style_lora_1, style_lora_1_strength), 90 | (style_lora_2, style_lora_2_strength), 91 | (style_lora_3, style_lora_3_strength), 92 | ] 93 | # Add style LoRAs to the info string 94 | if lora_info: # Add an empty line if random LoRAs were added 95 | lora_info += "\n" 96 | lora_info += "Style Loras:\n" 97 | for lora_name, lora_weight in style_loras: 98 | if lora_name != "None": 99 | lora_path = os.path.join(loras_root, lora_name) 100 | if lora_path in self.loaded_loras: 101 | lora = self.loaded_loras[lora_path] 102 | else: 103 | lora = comfy.utils.load_torch_file(lora_path, safe_load=True) 104 | self.loaded_loras[lora_path] = lora 105 | model_lora, clip_lora = comfy.sd.load_lora_for_models(model_lora, clip_lora, lora, lora_weight, lora_weight) 106 | lora_info += f"{lora_name} {lora_weight:.2f}\n" 107 | 108 | if not lora_info: 109 | lora_info = "No LoRAs applied." 110 | 111 | return (model_lora, clip_lora, lora_info) -------------------------------------------------------------------------------- /Nodes/GRMaths.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | class GRFloatsNode: 4 | 5 | 6 | @classmethod 7 | def INPUT_TYPES(s): 8 | return { 9 | "required": { 10 | "input_1": ("FLOAT", {"step":0.001}), 11 | "input_2": ("FLOAT", {"step":0.001}), 12 | "input_3": ("FLOAT", {"step":0.001}), 13 | "input_4": ("FLOAT", {"step":0.001}), 14 | "input_5": ("FLOAT", {"step":0.001}), 15 | "input_6": ("FLOAT", {"step":0.001}), 16 | "input_7": ("FLOAT", {"step":0.001}), 17 | } 18 | } 19 | 20 | RETURN_TYPES = ("FLOATS",) 21 | CATEGORY = "GraftingRayman/Maths" 22 | FUNCTION = "grfloats" 23 | 24 | 25 | def grfloats(self, input_1: float, input_2: float, input_3: float, input_4: float, input_5: float, input_6: float, input_7: float): 26 | # The input values are replicated or distributed across 21 blocks 27 | input_list = [input_1, input_2, input_3, input_4, input_5, input_6, input_7] 28 | output_list = [] 29 | 30 | # Strategy 1: Repeating the 7 inputs to fill up 21 blocks 31 | for i in range(21): 32 | output_list.append(input_list[i % 7]) 33 | 34 | # Alternatively, you could interpolate values or apply a custom transformation 35 | 36 | return (output_list,) # Return as a tuple since FLOATS is expected to be a single output 37 | -------------------------------------------------------------------------------- /Nodes/GRMoods.py: -------------------------------------------------------------------------------- 1 | moods = { 2 | "positive": [ 3 | "happy", "excited", "delighted", "ecstatic", "elated", "euphoric", "hopeful", 4 | "joyful", "jubilant", "grateful", "relaxed", "playful", "confident", "loving", 5 | "affectionate", "romantic", "flirtatious", "compassionate", "supportive", 6 | "proud", "triumphant", "relieved" 7 | ], 8 | "negative": [ 9 | "sad", "angry", "anguished", "melancholic", "mournful", "sorrowful", "wistful", 10 | "yearning", "irritable", "resentful", "desperate", "vengeful", "despairing", 11 | "sullen", "shy", "embarrassed", "guilty", "jealous", "frustrated", "ashamed", 12 | "lonely", "overwhelmed", "rejected", "hopeless" 13 | ], 14 | "mixed": [ 15 | "bittersweet", "nostalgic", "melancholy", "conflicted", "ambivalent", 16 | "dreamy", "mischievous", "thoughtful", "reflective", "pensive", 17 | "wistful", "poignant" 18 | ], 19 | "fear": [ 20 | "scared", "terrified", "horrified", "panicked", "apprehensive", 21 | "startled", "frightened", "fearful", "paranoid", "dreadful", 22 | "jittery", "shaken", "traumatized", "disoriented" 23 | ], 24 | "energetic": [ 25 | "energetic", "motivated", "determined", "bold", "daring", "adventurous", 26 | "courageous", "fearless", "spirited" 27 | ], 28 | "low_energy": [ 29 | "tired", "lazy", "sleepy", "chilly", "bored", "detached", "void", 30 | "aloof", "carefree", "humble" 31 | ], 32 | "atmospheres": [ 33 | "mysterious", "romantic", "eerie", "calm", "dark", "foreboding", "haunted", "haunting", 34 | "idyllic", "ominous", "peaceful", "serene", "shadowy", "somber", "tranquil", "sinister", 35 | "hypnotic", "spiritual", "melancholy", "sublime", "surreal", "whimsical", "mystical" 36 | ], 37 | "events": [ 38 | "celebratory", "chaotic", "formal", "festive", "boisterous", "dynamic", "dramatic", 39 | "explorative", "frenetic", "intense", "monumental", "provocative", "quirky", "spirited", 40 | "startling", "unexpected", "uplifting" 41 | ], 42 | "adventures": [ 43 | "adventurous", "bold", "daring", "arduous", "courageous", "fearless", "introspective", 44 | "restless", "tenacious", "wild", "visionary" 45 | ], 46 | "energies": [ 47 | "abstract", "bright", "buoyant", "cheerful", "energetic", "lively", "lighthearted", 48 | "radiant", "vibrant", "vivid", "warm" 49 | ], 50 | "introspections": [ 51 | "aloof", "ambitious", "brooding", "carefree", "compassionate", "contemplative", 52 | "detached", "hopeful", "humble", "poignant", "thoughtful" 53 | ], 54 | "textures": [ 55 | "arduous", "chaotic", "colorful", "gritty", "layered", "melodic", "minimalist", 56 | "opulent", "structured", "tight" 57 | ], 58 | "tones": [ 59 | "bleak", "delicate", "dreamlike", "gentle", "graceful", "lucid", "luminous", 60 | "magical", "mellow", "radiating", "serendipitous", "soothing" 61 | ], 62 | "mysteries": [ 63 | "cryptic", "enigmatic", "elusive", "evocative", "haunting", "mystified", "phantasmic", 64 | "puzzling", "shadowy", "unexpected", "unpredictable", "unsettling" 65 | ], 66 | "forces": [ 67 | "booming", "ferocious", "fiery", "fierce", "harsh", "stormy", "turbulent", "volatile" 68 | ], 69 | } 70 | -------------------------------------------------------------------------------- /Nodes/GRPanOrZoom.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn.functional as F 3 | from typing import Tuple 4 | from tqdm import tqdm 5 | import random 6 | import cv2 7 | import numpy as np 8 | 9 | 10 | class GRPanOrZoom: 11 | def __init__(self): 12 | self.depth_model = None 13 | self.initial_center = None # For weighted-singular mode 14 | 15 | @classmethod 16 | def INPUT_TYPES(cls): 17 | return { 18 | "required": { 19 | "images": ("IMAGE",), 20 | "depth_maps": ("IMAGE",), 21 | "zoom": ("FLOAT", {"default": 1.5, "min": 1.1, "max": 5.0, "step": 0.1}), 22 | "frames_per_transition": ("INT", {"default": 24, "min": 1, "max": 1200, "step": 1}), 23 | "mode": (["pan-left", "pan-right", "pan-up", "pan-down", "zoom-in", "zoom-out"], {"default": "pan-left"}), 24 | "use_depth": ("BOOLEAN", {"default": False}), 25 | "depth_focus_method": (["centroid", "max-point", "adaptive-region", "weighted-average", "smoothed", "weighted-singular"], {"default": "weighted-average"}), 26 | "max_depth": ("FLOAT", {"default": 10.0, "min": 1.0, "max": 100.0, "step": 0.1}), 27 | "parallax_strength": ("FLOAT", {"default": 0.5, "min": 0.1, "max": 1.0, "step": 0.1}), 28 | "device": (["cpu", "cuda"], {"default": "cuda"}), 29 | "randomize": ("BOOLEAN", {"default": False}) 30 | } 31 | } 32 | 33 | RETURN_TYPES = ("IMAGE",) 34 | RETURN_NAMES = ("poz_frames",) 35 | FUNCTION = "apply_pan_or_zoom" 36 | CATEGORY = "GraftingRayman/Video" 37 | 38 | def compute_depth_position(self, depth_map: torch.Tensor, method: str) -> Tuple[int, int]: 39 | """ 40 | Compute the depth-based focus point (x, y) using the specified method. 41 | """ 42 | depth_map_np = depth_map.squeeze().cpu().numpy() 43 | if depth_map_np.ndim > 2: 44 | depth_map_np = depth_map_np[0] 45 | 46 | h, w = depth_map_np.shape 47 | 48 | if method == "centroid": 49 | _, binary_map = cv2.threshold(depth_map_np, depth_map_np.max() * 0.9, 255, cv2.THRESH_BINARY) 50 | binary_map = binary_map.astype(np.uint8) 51 | moments = cv2.moments(binary_map) 52 | if moments["m00"] != 0: 53 | cx = int(moments["m10"] / moments["m00"]) 54 | cy = int(moments["m01"] / moments["m00"]) 55 | else: 56 | cx, cy = w // 2, h // 2 57 | 58 | elif method == "max-point": 59 | max_depth_val, max_depth_idx = torch.max(depth_map.reshape(-1), dim=0) 60 | cy = max_depth_idx // w 61 | cx = max_depth_idx % w 62 | 63 | elif method == "adaptive-region": 64 | _, binary_map = cv2.threshold(depth_map_np, depth_map_np.max() * 0.9, 255, cv2.THRESH_BINARY) 65 | binary_map = binary_map.astype(np.uint8) 66 | x, y, width, height = cv2.boundingRect(binary_map) 67 | cx, cy = x + width // 2, y + height // 2 68 | 69 | elif method in ["weighted-average", "weighted-singular"]: 70 | y_coords, x_coords = np.indices((h, w)) 71 | total_depth = np.sum(depth_map_np) 72 | if total_depth != 0: 73 | cx = int(np.sum(x_coords * depth_map_np) / total_depth) 74 | cy = int(np.sum(y_coords * depth_map_np) / total_depth) 75 | else: 76 | cx, cy = w // 2, h // 2 77 | 78 | if method == "weighted-singular" and self.initial_center is None: 79 | self.initial_center = (cy, cx) 80 | elif method == "weighted-singular": 81 | cy, cx = self.initial_center 82 | 83 | elif method == "smoothed": 84 | smoothed_map = cv2.GaussianBlur(depth_map_np, (15, 15), 0) 85 | min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(smoothed_map) 86 | cx, cy = max_loc 87 | 88 | else: 89 | cx, cy = w // 2, h // 2 90 | 91 | return cy, cx 92 | 93 | def process_frame(self, i: int, image: torch.Tensor, depth_map: torch.Tensor, zoom: float, frames_per_transition: int, mode: str, use_depth: bool, depth_focus_method: str, max_depth: float, parallax_strength: float, device: str) -> torch.Tensor: 94 | """ 95 | Process a single frame for pan/zoom effect. 96 | """ 97 | current_image = image.to(device) 98 | h, w = current_image.shape[1:3] 99 | 100 | # Calculate current zoom level 101 | if mode == "zoom-in": 102 | current_zoom = 1 + (zoom - 1) * (i / frames_per_transition) 103 | elif mode == "zoom-out": 104 | current_zoom = zoom - (zoom - 1) * (i / frames_per_transition) 105 | else: 106 | current_zoom = zoom 107 | 108 | new_h, new_w = int(h * current_zoom), int(w * current_zoom) 109 | 110 | # Calculate crop coordinates 111 | if use_depth: 112 | # Get depth-based center 113 | pan_y, pan_x = self.compute_depth_position(depth_map, depth_focus_method) 114 | 115 | # Adjust pan_x and pan_y for zoomed dimensions 116 | pan_x = int(pan_x * (new_w / w)) 117 | pan_y = int(pan_y * (new_h / h)) 118 | 119 | # Calculate crop coordinates based on depth center 120 | pan_crop_x = max(0, min(new_w - w, pan_x - w // 2)) 121 | pan_crop_y = max(0, min(new_h - h, pan_y - h // 2)) 122 | else: 123 | # Default to center if depth is not used 124 | pan_crop_x = (new_w - w) // 2 125 | pan_crop_y = (new_h - h) // 2 126 | 127 | # Adjust for pan modes 128 | if mode in ["pan-left", "pan-right", "pan-up", "pan-down"]: 129 | pan_step_x = (new_w - w) // frames_per_transition 130 | pan_step_y = (new_h - h) // frames_per_transition 131 | 132 | if mode == "pan-left": 133 | pan_crop_x = new_w - w - i * pan_step_x 134 | elif mode == "pan-right": 135 | pan_crop_x = i * pan_step_x 136 | elif mode == "pan-up": 137 | pan_crop_y = new_h - h - i * pan_step_y 138 | elif mode == "pan-down": 139 | pan_crop_y = i * pan_step_y 140 | 141 | # Apply zoom and crop 142 | zoomed = F.interpolate( 143 | current_image.unsqueeze(0), 144 | size=(new_h, new_w), 145 | mode='bicubic', 146 | align_corners=False 147 | ).squeeze(0) 148 | 149 | frame = zoomed[:, pan_crop_y:pan_crop_y + h, pan_crop_x:pan_crop_x + w] 150 | return frame.cpu() 151 | 152 | def apply_pan_or_zoom(self, images: torch.Tensor, depth_maps: torch.Tensor, zoom: float, frames_per_transition: int, mode: str, use_depth: bool, depth_focus_method: str, max_depth: float, parallax_strength: float, device: str, randomize: bool) -> Tuple[torch.Tensor]: 153 | """ 154 | Apply pan/zoom effect to a batch of images. 155 | """ 156 | if len(images.shape) == 4: 157 | images = images.permute(0, 3, 1, 2).to(device) 158 | depth_maps = depth_maps.permute(0, 3, 1, 2).to(device) 159 | 160 | frames = [] 161 | modes = ["pan-left", "pan-right", "pan-up", "pan-down", "zoom-in", "zoom-out"] 162 | self.initial_center = None 163 | 164 | with tqdm(total=frames_per_transition * len(images), desc="Generating frames", unit="frame") as pbar: 165 | for image, depth_map in zip(images, depth_maps): 166 | current_mode = random.choice(modes) if randomize else mode 167 | for i in range(frames_per_transition): 168 | frame = self.process_frame(i, image, depth_map, zoom, frames_per_transition, current_mode, use_depth, depth_focus_method, max_depth, parallax_strength, device) 169 | frames.append(frame) 170 | pbar.update(1) 171 | 172 | output = torch.stack(frames, dim=0) 173 | output = output.permute(0, 2, 3, 1) 174 | return (output,) 175 | 176 | 177 | # Export the class 178 | __all__ = ['GRPanOrZoom'] 179 | -------------------------------------------------------------------------------- /Nodes/GRPromptGenExtended.py: -------------------------------------------------------------------------------- 1 | from .GRDescriptionDB import HyperComplexImageDescriptionGenerator 2 | import random 3 | 4 | class GRPromptGenExtended: 5 | _categories = [ 6 | "subjects", "moods", "colors", "compositions", "details", 7 | "weather", "time_of_day", "objects", "styles" 8 | ] 9 | _mood_types = ["none","random"] + sorted(["positive", "negative", "mixed", "fear", "energetic", "low_energy", "atmospheres", "events", "adventures", "energies", "introspections", "textures", "tones", "mysteries", "forces"]) 10 | _color_types = ["none","random"] + sorted(["warm", "cool", "neutral", "vivid", "earthy", "pastel", "metallic", "luxurious", "shadowy", "underwater"]) 11 | _composition_types = ["none","random"] + sorted(["underwater", "deep_dark", "symmetry", "flow", "contrast", "perspective", "dynamic", "pattern", "classical", "modern", "experimental", "framing", "light", "juxtaposition", "textual", "radial", "layered", "narrative", "abstract", "rhythmic", "minimalist", "surreal", "geometric", "organic", "horror", "focus"]) 12 | _detail_types = ["none","random"] + sorted(["water", "light", "texture","movement", "atmosphere", "nature", "sound", "macabre","underwater", "deep_dark"]) 13 | _weather_types = ["none","random"] + sorted(["clear", "precipitation", "extreme", "rainy", "sunny", "snowy", "windy", "foggy", "stormy", "cold", "hot", "dramatic", "ethereal", "seasonal", "tropical", "mystical", "oceanic", "desert", "mountainous", "urban", "romantic", "wild", "nocturnal", "frosty", "energetic", "heavy", "ephermeral", "tranquil", "intense", "dull", "radiant", "isolated", "ominous", "hazy", "auroral", "blustery", "meditative", "electrifying", "refreshing", "overbearing", "chaotic", "bleak", "comforting", "distant", "rugged", "transient", "sublime", "oppresive", "exuberant", "idyllic", "subtle", "enveloping", "polar", "romanticized", "calm", "misty", "frightening"]) 14 | _time_of_day_types = ["none","random"] + sorted(["daylight", "evening", "night", "morning", "midday", "afternoon", "dusk", "golden hour", "twilight", "dawn", "midnight", "sunrise", "sunset", "pre-dawn", "early morning", "late morning", "early afternoon", "late evening", "early dusk", "deep night", "early twilight", "early golden hour","noon", "late night", "early midnight", "late midnight", "early sunrise", "late sunrise", "early sunset", "late sunset"]) 15 | _object_types = ["none","random"] + sorted(["natural", "manmade", "futuristic", "signage", "nature", "water", "buildings", "objects", "gathering", "structures", "mechanisms", "decor", "tools", "artifacts", "transportation", "landscape", "lighting", "furniture", "festivities", "flora", "fauna", "mystery", "weather", "relics", "navigation", "craftmanship", "play", "symbols", "storage", "wearables", "seasons", "gardening", "adornment", "abandonment", "celebration", "craft", "heritage", "energy", "industry", "exploration", "agriculture", "storytelling", "coziness", "marine", "fragility", "mobility", "solitude", "trade", "community", "tradition", "balance", "imagination", "connections", "evanescence", "ominous", "underwater"]) 16 | _style_types = ["none","random"] + sorted(["classic", "modern", "digital", "hyper-realistic", "impressionistic", "surreal", "minimalist", "painterly", "dreamlike", "noir", "vintage", "whimsical", "futuristic", "fantasy", "abstract", "retro", "botanical", "urban", "sci-fi", "watercolor", "chiaroscuro", "geometric", "industrial", "pixelated", "celestial", "gothic", "comic", "pop", "steampunk", "collage", "natural", "mythical", "mystical", "textured", "illuminated", "dynamic", "layered", "sculptural", "organic", "fractal", "pastoral", "illustrative", "monochromatic", "fiery", "frozen", "ceramic", "fluid", "dystopian", "ethereal", "mechanical", "atmospheric", "ceremonial", "cultural", "symbolic", "majestic", "serene", "intricate", "dramatic", "playful", "cinematic", "mythological", "cosmic", "rustic", "energetic", "elegant", "fictional", "whirlwind", "mysterious", "eccentric", "sunny", "vivid", "architectural", "enigmatic", "horror"]) 17 | 18 | 19 | _subject_types = ["random"] + sorted([ 20 | "Adventurers", "Aliens", "Alchemists", "Amazons", "Angels", "Animals", "Archaeologists", "Archers", "Artists", "Astronauts", "Athletes", "Aviators", "Bakers", "Barbarians", "Beekeepers", "Bikers", "Birds", "Black Men", "Black Women", "Blacksmiths", "Boxers", "Builders", "Bystanders", "Captains", "Car Enthusiasts", "Celebrities", "Centaurs", "Chefs", "Children", "Chinese Men", "Chinese Women", "Climbers", "Clowns", "Coders", "Comedians", "Cowboys", "Craftsmen", "Crystals", "Couples", "Criminals", "Cyberpunk Characters", "Cyclists", "Dancers", "Demons", "Detectives", "Dinosaurs", "Divers", "Doctors", "Dreamers", "Druids", "Elves", "Engineers", "Explorers", "Fairies", "Family", "Farmers", "Fantasy Creatures", "Farm Animals", "Fencers", "Firefighters", "Fishermen", "Florists", "Fortune Tellers", "Gardeners", "Geologists", "Ghosts", "Giants", "Gladiators", "Globetrotters", "Guards", "Gymnasts", "Healers", "Herbalists", "Historians", "Hot Men", "Old Women", "Hunters", "Indian Men", "Indian Women", "Inventors", "Japanese Men", "Japanese Women", "Jewelers", "Jockeys", "Knights", "Korean Men", "Korean Women", "Latin Men", "Latin Women", "Librarians", "Lifeguards", "Lumberjacks", "Magicians", "Mariners", "Mechanic Bots", "Mechanics", "Men", "Mermaids", "Merchants", "Messengers", "Middle Eastern Men", "Middle Eastern Women", "Miners", "Monarchs", "Monks", "Mountain Climbers", "Musicians", "Mythical Heroes", "Native American Men", "Native American Women", "Navigators", "Ninjas", "Nurses", "Painters", "Pilots", "Pirates", "Plumbers", "Poets", "Politicians", "Princes", "Princesses", "Professors", "Puppeteers", "Rangers", "Rebels", "Robots", "Royalty", "Samurai", "Scientists", "Sculptors", "Sentinels", "Shepherds", "Shoemakers", "Singers", "Sledders", "Sorcerers", "Spies", "Soldiers", "South Asian Men", "South Asian Women", "Steampunk Characters", "Storytellers", "Street Artists", "Street Performers", "Students", "Swimmers", "Tailors", "Teachers", "Thieves", "Time Travelers", "Trainers", "Travelers", "Trolls", "Vampires", "Veterans", "Villains", "Warriors", "Watchmakers", "Werewolves", "Whalers", "White Men", "White Women", "Wizards", "Women", "Women African", "Women Latin", "Witches", "Wrestlers", "Youths", "Zealots", "Zombies", "Motorcycles", "Trucks", "Aircraft", "Cars", "Fighter Jets", "Space", "Spacecraft", "Guns", "Ships", "Tanks", "Food", "Architecture", "Logos", "Designs", "Rooms", "Wallpaper", "Underwater" 21 | ]) 22 | _types_of_images = ["random"] + sorted([ 23 | "3D Render", "Anime-style", "Black and White", "Cartoon", 24 | "Charcoal Drawing", "Chiaroscuro", "Cinematic", "Claymation", 25 | "Concept Art", "Cubist", "Cyberpunk", "Doodle", "Double Exposure", 26 | "Embossed", "Engraving", "Etching", "Expressionist", "Fantasy", 27 | "Flat Design", "Glitch Art", "Gothic", "Grainy", "Grunge", 28 | "Hand-drawn", "High Contrast", "Holographic", "Hyper-realistic", 29 | "Illustrative", "Impressionistic", "Infrared", "Ink Drawing", 30 | "Isometric", "Low Poly", "Macro", "Metallic", "Minimalist", 31 | "Neon-lit", "Oil Painting", "Old", "Panoramic", "Papercut", 32 | "Pastel Drawing", "Photographic", "Pixel Art", "Pointillism", 33 | "Pop Art", "Realistic", "Renaissance", "Retro-futuristic", 34 | "Sepia", "Sketch", "Soft Focus", "Stained Glass", "Steampunk", 35 | "Stylized", "Surreal", "Synthwave", "Textured Collage", 36 | "Vaporwave", "Vintage", "Watercolor", "Woodcut", "Horror", "Scary", "Jumpy" 37 | ], key=str.casefold) 38 | 39 | def __init__(self): 40 | self.prompt_generator = HyperComplexImageDescriptionGenerator() 41 | 42 | @classmethod 43 | def INPUT_TYPES(cls): 44 | string_type = ("STRING", {"multiline": True, "dynamicPrompts": True, "default": ""}) 45 | int_type = ("INT", {"default": random.randint(10**14, 10**15), "min": 10**14, "max": 10**15}) 46 | boolean_type = ("BOOLEAN", {"default": False}) 47 | list_category = (cls._categories, {"default": "subjects"}) 48 | list_mood_type = (cls._mood_types, {"default": "none"}) 49 | list_color_type = (cls._color_types, {"default": "none"}) 50 | list_composition_type = (cls._composition_types, {"default": "none"}) 51 | list_detail_type = (cls._detail_types, {"default": "none"}) 52 | list_weather_type = (cls._weather_types, {"default": "none"}) 53 | list_time_of_day_type = (cls._time_of_day_types, {"default": "none"}) 54 | list_object_type = (cls._object_types, {"default": "none"}) 55 | list_style_type = (cls._style_types, {"default": "none"}) 56 | list_subject_type = (cls._subject_types, {"default": "random"}) 57 | list_type_of_image = (cls._types_of_images, {"default": "random"}) 58 | return {"required": { 59 | "positive": string_type, 60 | "short_text": string_type, 61 | "seed": int_type, 62 | "expand": boolean_type, 63 | "subject_only": boolean_type, 64 | "category": list_category, 65 | "mood_type": list_mood_type, # New input for mood type 66 | "color_type": list_color_type, # New input for color type 67 | "composition_type": list_composition_type, # New input for composition type 68 | "detail_type": list_detail_type, # New input for detail type 69 | "weather_type": list_weather_type, 70 | "time_of_day_type": list_time_of_day_type, 71 | "object_type": list_object_type, 72 | "style_type": list_style_type, 73 | "subject_type": list_subject_type, 74 | "type_of_image": list_type_of_image, 75 | }} 76 | 77 | RETURN_TYPES = ("STRING", "INT") 78 | RETURN_NAMES = ("generated_prompts", "seed") 79 | FUNCTION = "select_prompt" 80 | CATEGORY = "GraftingRayman/Prompt" 81 | 82 | def select_prompt(self, positive, short_text, seed, expand, subject_only, category, mood_type, color_type, composition_type, detail_type, weather_type, time_of_day_type, object_type, style_type, subject_type, type_of_image): 83 | # Correctly pass parameters 84 | generated_prompt = self.prompt_generator.generate_prompt( 85 | seed=seed, 86 | subject_type=subject_type, 87 | category=category, 88 | replacement=short_text if expand else None, 89 | image_type=type_of_image, 90 | mood_type=mood_type if mood_type != "random" else None, 91 | color_type=color_type if color_type != "random" else None, 92 | composition_type=composition_type if composition_type != "random" else None, 93 | detail_type=detail_type if detail_type != "random" else None, 94 | weather_type=weather_type if weather_type != "random" else None, 95 | time_of_day_type=time_of_day_type if time_of_day_type != "random" else None, 96 | object_type=object_type if object_type != "random" else None, 97 | style_type=style_type if style_type != "random" else None, 98 | subject_only=subject_only, 99 | short_text=short_text 100 | ) 101 | if expand: 102 | combined_prompts = f"{generated_prompt}\n{positive}" 103 | else: 104 | combined_prompts = generated_prompt 105 | return (combined_prompts, seed) -------------------------------------------------------------------------------- /Nodes/__pycache__/GRBLIP2CaptionGenerator.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRBLIP2CaptionGenerator.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRBLIP2TextExpander.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRBLIP2TextExpander.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRColors.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRColors.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRCompositions.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRCompositions.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRCounter.cpython-311.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRCounter.cpython-311.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRCounter.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRCounter.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRDescriptionDB.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRDescriptionDB.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRDetails.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRDetails.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRFlorence2CaptionGenerator.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRFlorence2CaptionGenerator.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRImage.cpython-311.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRImage.cpython-311.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRImage.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRImage.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRLora.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRLora.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRMask.cpython-311.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRMask.cpython-311.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRMask.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRMask.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRMoods.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRMoods.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRObjects.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRObjects.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRPanOrZoom.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRPanOrZoom.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRPrompt.cpython-311.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRPrompt.cpython-311.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRPrompt.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRPrompt.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRPromptGenExtended.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRPromptGenExtended.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRScroller.cpython-311.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRScroller.cpython-311.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRScroller.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRScroller.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRStyles.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRStyles.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRSubjects.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRSubjects.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRTextOverlay.cpython-311.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRTextOverlay.cpython-311.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRTextOverlay.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRTextOverlay.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRTile.cpython-311.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRTile.cpython-311.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRTile.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRTile.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRTime_of_day.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRTime_of_day.cpython-312.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRVideo.cpython-311.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRVideo.cpython-311.pyc -------------------------------------------------------------------------------- /Nodes/__pycache__/GRWeather.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraftingRayman/ComfyUI_GraftingRayman/8670884cc5c1fdbeea9e8bb9622beb0ccffec62a/Nodes/__pycache__/GRWeather.cpython-312.pyc -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Welcome to my page. I create nodes that I need to make my life easier, most of the stuff I do is based on Image Generation and Manipulation. If I find something lacking I try to create something that helps me or shortens the time required to complete the task at hand. This is by no means an extensive list, more to follow though. 2 | 3 | If you would like to make a donation to my efforts use the QR code 4 | 5 | ![QR code](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/a65f6614-94d3-46e2-8d4e-f60e98d44d6f) 6 | 7 | 8 | # Installation: 9 | 10 | Install using ComfyUI Manager or manually install in your custom_nodes directory with the following command: 11 | 12 | "git clone https://github.com/GraftingRayman/ComfyUI_GraftingRayman" 13 | 14 | **Make sure to install Clip** 15 | 16 | For comfyui portable run the following command in your comyfui folder 17 | 18 | **".\python_embeded\python.exe -m pip install git+https://github.com/openai/CLIP.git"** 19 | 20 | For system python run the following command 21 | 22 | **"pip install git+https://github.com/openai/CLIP.git"** 23 | 24 | Without this the nodes will fail to be imported 25 | 26 | # Captions 27 | 28 | [GR Florence 2 Caption Generator for Ollama](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#GR-Florence-2-Caption-Generator-for-Ollama) 29 | 30 | # Overlays: 31 | [GR Text Overlay](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-text-overlay) 32 | 33 | [GR Onomatopoeia](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-onomatopoeia) 34 | 35 | # Prompts: 36 | [GR Prompt Selector](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-prompt-selector) 37 | 38 | [GR Prompt Selector Multi](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-prompt-selector-multi) 39 | 40 | [GR Prompt Hub](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-prompt-hub) 41 | 42 | [GR Prompt Generator](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-prompt-generator) 43 | 44 | # Image Utils: 45 | [GR Image Multiplier](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-image-multiplier) 46 | 47 | [GR Image Resizer](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-image-resizer) 48 | 49 | [GR Image Size](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-image-size) 50 | 51 | [GR Stack Image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-stack-image) 52 | 53 | [GR Image Resize Methods](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-image-resize-methods) 54 | 55 | [GR Image Details](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-image-details) 56 | 57 | [GR Image Paste](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-image-paste) 58 | 59 | [GR Image Paste With Mask](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-image-paste-with-mask) 60 | 61 | [GR Background Remover REMBG](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-background-remover-rembg) 62 | 63 | # Mask Utils: 64 | [GR Mask Create](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-mask-create) 65 | 66 | [GR Multi Mask Create](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-multi-mask-create) 67 | 68 | [GR Mask Resize](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-mask-resize) 69 | 70 | [GR Image/Depth Mask](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-image-depth-mask) 71 | 72 | [GR Mask Create Random](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-mask-create-random) 73 | 74 | # Image Tiling 75 | [GR Flip Tile Random Red Ring](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-flip-tile-random-red-ring) 76 | 77 | [GR Flip Tile Random Inverted](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-flip-tile-random-inverted) 78 | 79 | [GR Tile Image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-tile-image) 80 | 81 | [GR Tile and Border Image Random Flip](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-tile-and-border-image-random-flip) 82 | 83 | # Video 84 | 85 | [GR Counter](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-counter) 86 | 87 | [GR Scroller](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-scroller) 88 | 89 | [GR Pan Or Zoom](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/blob/main/README.md#gr-pan-or-zoom) 90 | 91 | 92 | 93 | 94 | If you use these, follow my YouTube channel where I create ComfyUI workflows from scratch 95 | 96 | [![Youtube Badge](https://img.shields.io/badge/Youtube-FF0000?style=for-the-badge&logo=Youtube&logoColor=white&link=https://www.youtube.com/channel/UCK4AxxjpeECN4GKojVMqL5g)](https://www.youtube.com/channel/UCK4AxxjpeECN4GKojVMqL5g) 97 | 98 | Hope this stuff is helpful 99 | 100 | # GR Florence 2 Caption Generator for Ollama 101 | 102 | ![image](https://github.com/user-attachments/assets/0ab41137-ba8a-46d7-8a7f-7ec2700384b5) 103 | 104 | 105 | # GR Prompt Generator 106 | 107 | If like me, your prompts are very bland and can't seem to get the right amount of details in, this node is for you. This node generates the positive prompt for scenes. You can add your own details to be appended to the prompt as well. Short text can be used to describe the image, and this can be then expanded automatically. A vast array of the type of image can be selected, images can also be replicated using the seed. 108 | 109 | ![image](https://github.com/user-attachments/assets/206b6a30-d4ae-4ed8-95e7-e3dce8ffa4fd) 110 | ![image](https://github.com/user-attachments/assets/06af39bc-0214-4b8c-b4fb-d29b001f1198) 111 | ![image](https://github.com/user-attachments/assets/700c45f3-fb84-4842-999f-228ab2aa79e2) 112 | 113 | There is a new Extended version of the Prompt Generator with over 10 Quintillion+ combinations for prompts. You can choose from more than 120 different subjects to generate prompts 114 | 115 | 116 | # GR Pan Or Zoom 117 | Workflow in workflow folder. 118 | 119 | The GR Pan Or Zoom node, takes an image of your choice and using the depth map can zoom or pan the image using 6 different depth focusing methods. 120 | 121 | ![image](https://github.com/user-attachments/assets/5ae49167-c4cb-4a67-bc42-e0b4bc8ce123) 122 | 123 | 124 | With out Depth 125 | 126 | ![AnimateDiff_00136](https://github.com/user-attachments/assets/cf913d65-7c9e-4f2b-8621-7147541df8af) 127 | 128 | With Depth 129 | 130 | ![AnimateDiff_00137](https://github.com/user-attachments/assets/c6353fdc-6f71-45a5-85ef-64e09c38f49e) 131 | 132 | 133 | 134 | # GR Text Overlay 135 | 136 | This node creates a text overlay, this can be single or multi line. Placement includes left, right, center, middle, top, bottom. Justification can be manually set. Lots of default colours selectable from the list. All your system TTF and OTF fonts available dynamically. Line spacing as well as letter spacing can be controlled in steps of 0.01. Text without stroke thickness can be used as a mask. 137 | A second mask includes the stroke thickness 138 | Added a background box that can be used to highlight the text, the edge styles for the box can be selected as well as its opacity 139 | 140 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/4d3f5cfa-bfd7-418b-8f74-40600b3f35d7) 141 | 142 | 143 | # GR Onomatopoeia 144 | 145 | Creates random Onomatopoeia or uses the letters provided. Still a bit buggy, currently placing it left or right does not work correctly. 146 | 147 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/10dc92f6-4941-43ba-b122-e14f79242b9b) 148 | 149 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/3049f65d-9e65-44a2-9120-37e272b601e8) 150 | 151 | 152 | # GR Prompt Selector 153 | 154 | Can choose from 6 prompts 155 | 156 | Always prompt is always on 157 | 158 | Negative prompt included 159 | 160 | ![grpromptselector](https://github.com/GraftingRayman/ComfyUI_GR_PromptSelector/assets/156515434/e74d6aa6-3e5a-4c5a-91c2-3a9a2f65b7b4) 161 | 162 | # GR Prompt Selector Multi 163 | 164 | All the features of Prompt Selector, this time you can use all 6 prompt styles at the same time 165 | 166 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/4fa4d338-68cb-48cf-b470-ae34779abbce) 167 | 168 | # GR Prompt Hub 169 | 170 | This is a simple prompt combiner, will take 6 positives and 6 negatives and combine them 171 | 172 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/e1815752-a20d-4505-b6f0-35bdb6d2b2b6) 173 | 174 | # GR Image Multiplier 175 | 176 | Created this because VHS VideoCombine does not go below 1 for fps, what if we wanted each frame to be 0.5 seconds long, then incorporate this node in between your image output and the vhs video combine input and voila! you have 0.5 if the multiplier is set to 2 in this node. Added interleave and randomize just incase anyone wants it 177 | 178 | ![image](https://github.com/user-attachments/assets/b53e75f2-0aaa-470f-a9da-d9231738eb80) 179 | 180 | 181 | # GR Image Resizer 182 | 183 | Resizes image by height, size, divisible and scale 184 | 185 | Credit to simeonovich 186 | 187 | ![image](https://github.com/user-attachments/assets/b4812b88-be01-44b9-81ed-274550fccd9b) 188 | 189 | 190 | # GR Mask Create 191 | 192 | This node creates a single mask that you can use 193 | 194 | ![image](https://github.com/GraftingRayman/ComfyUI_GR_PromptSelector/assets/156515434/cd82a7d5-1c4e-458c-bdf1-c61b0ec85fad) 195 | 196 | # GR Multi Mask Create 197 | 198 | If you need multiple mask in one node, you can use this. This node creates upto 8 equal size masks. 199 | 200 | ![image](https://github.com/GraftingRayman/ComfyUI_GR_PromptSelector/assets/156515434/0b5f684c-40c7-476b-9048-651638f09f83) 201 | 202 | # GR Mask Resize 203 | 204 | When you need to resize your mask image to fit your latent image 205 | 206 | ![image](https://github.com/GraftingRayman/ComfyUI_GR_PromptSelector/assets/156515434/26bab87d-add3-43f4-81c3-a64e4e326c0a) 207 | 208 | # GR Image Depth Mask 209 | 210 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/2b24166f-79a2-429e-8c12-77abd5be33cb) 211 | 212 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/c17c21a6-a36f-4a68-97c3-4ef5677ddde0) 213 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/7598fac0-a339-42ab-bd04-a72ceb026476) 214 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/f3ad7848-92ad-48fd-8648-7f1fbd32c8de) 215 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/04ad98be-86c1-47ef-a334-eaa2844bd3be) 216 | 217 | # GR Image Size 218 | 219 | A node with preselected image sizes or custom, outputs height and width, can also be used for empty latent image via the latent output 220 | 221 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/20942df2-f33a-451b-a95b-e3772b26801e) 222 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/94d8427b-342c-4cf6-9531-0eb1c1eefc8e) 223 | 224 | Added a dimensions input to the node, this takes the dimensions from the image and passes that for the height/width. 225 | A seed feature has also been added with 15 digit random seeds, this will reduce number of nodes on display 226 | 227 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/56b1fc0d-182d-4ccb-9258-c56ac7308b82) 228 | 229 | # GR Tile Image 230 | 231 | A node to add a border in pixels and tile the image 232 | 233 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/8a2b4ddc-f69b-40db-9c40-5bf5fe9d1d6d) 234 | 235 | # GR Mask Create Random 236 | 237 | Creates a random mask of your chosen size, useful to set a latent noise mask at random 238 | 239 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/285f94bd-8ba7-4be8-828b-c61a9a96d3f1) 240 | 241 | # GR Tile and Border Image Random Flip 242 | 243 | This node takes an image and tiles the image into defined columns and rows, but before outputting it flips one of the tiles randomly 244 | 245 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/88779540-848f-4a37-b5bf-9f0f229e1191) 246 | 247 | # GR Stack Image 248 | 249 | This node takes two images as input and stacks one on top of the other, both images need to be of the same dimensions. Added a new input to select horizontal or vertical stacking. 250 | 251 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/1f86b235-832e-497f-a23c-9865538309dc) 252 | 253 | # GR Image Resize Methods 254 | 255 | This node is a slightly improved Resize node that loads and displays the image (Similar to LoadImage), you can resize the image using different Interpolation methods. 256 | 257 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/c6d495ec-ba6e-4ecb-b34e-7706b3a70724) 258 | 259 | # GR Image Details 260 | 261 | I took the standard Image Preview node and updated it, now you can see the preview with additional details like Filename, File Size, Height, Width, Type of Image etc 262 | You can also save the file with the details with the save node 263 | 264 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/cc597614-e8d0-4bf4-b068-4aace58b06c2) 265 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/ba5079e1-0219-44e2-b424-467d9411b005) 266 | 267 | # GR Flip Tile Random Red Ring 268 | 269 | This node takes an image input and creates a tile of the required size, it then flips a random tile and puts a red ring around it 270 | 271 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/e34b39e4-2618-43a8-82b8-ce77435a02a3) 272 | 273 | If a second image is provided (this iamge needs to be resized before joining to the dimenions of the main tile + 2 x border size, this will then use this second image as the flipped random tile and put a red ring around it 274 | 275 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/ca1db877-f4cc-4203-a80a-885b0bcae6aa) 276 | 277 | For both types, the first output will give you the image with the randomly flipped image, the second output will give you the same image but with the red ring around the flipped tile 278 | 279 | # GR Flip Tile Random Inverted 280 | 281 | This node takes an image, creates a tile of the required size with a randomly flipped tile, the first output shows the full tile with the randomly flipped tile, while the second output shows the randomly flipped tile inverted. 282 | 283 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/5bb0ecfc-5f74-4055-bff2-6821f5ffd7aa) 284 | 285 | # GR Checkered Board 286 | 287 | Creates a checkered board, outputs an image as well as a mask. You can choose from a myriad of colours, borders for individual boxes and the whole board. 288 | 289 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/a7990eb6-cb84-4d2c-928d-62f57546c3a3) 290 | 291 | # GR Image Paste 292 | 293 | This node takes the second image and pastes it over the first. Opacity can be set for the second image. Both images need to be of the same dimensions, this can be resized using GR Image Resize node. 294 | 295 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/06aaa5d4-275c-4abe-b4cc-107f334a124b) 296 | 297 | # GR Image Paste With Mask 298 | 299 | This node, takes a background image (Dimensions of background image are used to rescale the overlay and mask if different), an overlay image and a mask. The overlay image is pasted over the background image with guidance from the mask. The opacity can be manually set along with manual positioning of the overlay image as well as the mask. If you want to see where the mask is being placed you can enable an outline of the mask with configurable outline thickness, colour and opacity along with outline placement. Various blend options are available for the blending of the masked image. 4 Outputs are provied, 1st output sends the overlayed image, 2nd output sends the same overlayed image with the mask inverted, 3rd output sends the outline only and the fourth output sends the dimensions of the background image in text format. 300 | 301 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/d1f7451a-fbe9-4cf9-95b6-17ecf114dc05) 302 | 303 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/b85abee7-abd9-4ddd-8676-03c1d7f49589) 304 | 305 | # GR Counter 306 | 307 | This node creates a countdown or count up timer video, you can choose the font and size you want, also includes an outline feature. The node outputs the frames which can be further processed if required. Video is saved in the location specified in the node which is of type MP4. Can move the timer across the screen or resize the timer from start to finish. 308 | 309 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/99df7bac-2331-41df-97e5-ca34983e3bfc) 310 | 311 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/2a23097f-9db7-463f-af00-b6167beccd08) 312 | 313 | ![AnimateDiff_00063](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/d7fdfee0-6c6f-498c-bb3e-11ab8c8c0d7e) 314 | 315 | # GR Background Remover REMBG 316 | 317 | This node is an updated version of other REMBG nodes, includes all available REMBG models to choose from 318 | 319 | 8 Different models to choose from 320 | 321 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/6fc18a96-86f1-4e19-a89e-e22507fc793f) 322 | 323 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/e9592033-0928-425f-8fd0-2da4c3a539a2) 324 | 325 | Use the general use model for all types of images 326 | 327 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/2f0e6f6d-278c-45a3-aea7-9e6d13671fbd) 328 | 329 | Use the anime model for anime images 330 | 331 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/f6760b21-6910-46b4-95b1-7436c4629fd2) 332 | 333 | # GR Scroller 334 | 335 | A node that creates a scrolling text on a background colour of your choice. You can select the path it saves the video or individual frames. 336 | 337 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/4f1fe40a-f4d1-465c-8c35-00293682b881) 338 | 339 | Lots of different styles to select from 340 | 341 | ![image](https://github.com/GraftingRayman/ComfyUI_GraftingRayman/assets/156515434/d29b328b-3417-462b-8f0c-b945428b48fa) 342 | 343 | -------------------------------------------------------------------------------- /Workflows/0005.json - uLJQF6cH.json: -------------------------------------------------------------------------------- 1 | {"last_node_id": 28, "last_link_id": 38, "nodes": [{"id": 5, "type": "IPAdapterModelLoader", "pos": [780, 406], "size": [358, 66], "flags": {}, "order": 0, "mode": 0, "outputs": [{"name": "IPADAPTER", "type": "IPADAPTER", "links": [2], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "IPAdapterModelLoader"}, "widgets_values": ["ip-adapter-faceid-plusv2_sd15.bin"]}, {"id": 6, "type": "CLIPVisionLoader", "pos": [823, 553], "size": {"0": 315, "1": 58}, "flags": {}, "order": 1, "mode": 0, "outputs": [{"name": "CLIP_VISION", "type": "CLIP_VISION", "links": [3], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "CLIPVisionLoader"}, "widgets_values": ["model.safetensors"]}, {"id": 7, "type": "InsightFaceLoader", "pos": [823, 693], "size": {"0": 315, "1": 58}, "flags": {}, "order": 2, "mode": 0, "outputs": [{"name": "INSIGHTFACE", "type": "INSIGHTFACE", "links": [4], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "InsightFaceLoader"}, "widgets_values": ["CUDA"]}, {"id": 9, "type": "ImageBlend", "pos": [823, 1000], "size": {"0": 315, "1": 102}, "flags": {}, "order": 14, "mode": 0, "inputs": [{"name": "image1", "type": "IMAGE", "link": 5}, {"name": "image2", "type": "IMAGE", "link": 8}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [6], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "ImageBlend"}, "widgets_values": [0.5, "normal"]}, {"id": 19, "type": "VAELoader", "pos": [1638, 80], "size": {"0": 315, "1": 58}, "flags": {}, "order": 3, "mode": 0, "outputs": [{"name": "VAE", "type": "VAE", "links": [19], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "VAELoader"}, "widgets_values": ["vae-ft-mse-840000-ema-pruned.safetensors"]}, {"id": 11, "type": "Image Flip", "pos": [415, 653], "size": {"0": 315, "1": 58}, "flags": {}, "order": 13, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 7}], "outputs": [{"name": "images", "type": "IMAGE", "links": [8, 10], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "Image Flip"}, "widgets_values": ["horizontal"]}, {"id": 13, "type": "PreviewImage", "pos": [928, 80], "size": [210, 246], "flags": {}, "order": 15, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 10}], "properties": {"Node name for S&R": "PreviewImage"}}, {"id": 12, "type": "LoraLoaderModelOnly", "pos": [823, 834], "size": {"0": 315, "1": 82}, "flags": {}, "order": 10, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 21}], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [9], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "LoraLoaderModelOnly"}, "widgets_values": ["ip-adapter-faceid-plusv2_sd15_lora.safetensors", 0.65]}, {"id": 20, "type": "VAEDecode", "pos": [2003, 80], "size": {"0": 210, "1": 46}, "flags": {}, "order": 18, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 17}, {"name": "vae", "type": "VAE", "link": 19}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [23], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "VAEDecode"}}, {"id": 17, "type": "CheckpointLoaderSimple", "pos": [415, 474], "size": {"0": 315, "1": 98}, "flags": {}, "order": 4, "mode": 0, "outputs": [{"name": "MODEL", "type": "MODEL", "links": [21, 26], "shape": 3, "slot_index": 0}, {"name": "CLIP", "type": "CLIP", "links": [13, 14, 27], "shape": 3, "slot_index": 1}, {"name": "VAE", "type": "VAE", "links": [28], "shape": 3, "slot_index": 2}], "properties": {"Node name for S&R": "CheckpointLoaderSimple"}, "widgets_values": ["realisticVisionV51_v51VAE.safetensors"]}, {"id": 15, "type": "CLIPTextEncode", "pos": [1188, 711], "size": {"0": 400, "1": 200}, "flags": {}, "order": 12, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 14}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [12, 31], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "CLIPTextEncode"}, "widgets_values": ["nsfw, adult, nudity, naked, bad quality"]}, {"id": 25, "type": "UltralyticsDetectorProvider", "pos": [2263, 80], "size": {"0": 315, "1": 78}, "flags": {}, "order": 5, "mode": 0, "outputs": [{"name": "BBOX_DETECTOR", "type": "BBOX_DETECTOR", "links": [33], "shape": 3, "slot_index": 0}, {"name": "SEGM_DETECTOR", "type": "SEGM_DETECTOR", "links": null, "shape": 3}], "properties": {"Node name for S&R": "UltralyticsDetectorProvider"}, "widgets_values": ["bbox/face_yolov8m.pt"]}, {"id": 21, "type": "PreviewImage", "pos": [2924.4000244140625, 80], "size": [210, 246], "flags": {}, "order": 20, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 24}], "properties": {"Node name for S&R": "PreviewImage"}}, {"id": 27, "type": "Seed Everywhere", "pos": [1273, 80], "size": {"0": 315, "1": 82}, "flags": {}, "order": 6, "mode": 0, "outputs": [{"name": "INT", "type": "INT", "links": [35, 36], "shape": 3, "slot_index": 0}], "properties": {"group_restricted": false, "color_restricted": false, "Node name for S&R": "Seed Everywhere"}, "widgets_values": [354548406861641, "randomize"]}, {"id": 23, "type": "CR Upscale Image", "pos": [2263, 238], "size": {"0": 315, "1": 222}, "flags": {}, "order": 19, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 23}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [24, 25, 37], "shape": 3, "slot_index": 0}, {"name": "show_help", "type": "STRING", "links": null, "shape": 3}], "properties": {"Node name for S&R": "CR Upscale Image"}, "widgets_values": ["4x-UltraSharp.pth", "rescale", 2, 1024, "lanczos", "true", 8]}, {"id": 14, "type": "CLIPTextEncode", "pos": [1188, 429], "size": {"0": 400, "1": 200}, "flags": {}, "order": 11, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 13}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [11, 32], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "CLIPTextEncode"}, "widgets_values": ["solo policawoman sitting on a bench outside a building, sfw, high quality, diffuse light, highly detailed, photo of, film photograph, ultra photorealistic, "]}, {"id": 18, "type": "EmptyLatentImage", "pos": [1273, 242], "size": {"0": 315, "1": 106}, "flags": {}, "order": 7, "mode": 0, "outputs": [{"name": "LATENT", "type": "LATENT", "links": [15], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "EmptyLatentImage"}, "widgets_values": [512, 512, 1]}, {"id": 8, "type": "LoadImage", "pos": [415, 80], "size": [315, 314], "flags": {}, "order": 8, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [5], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "LoadImage"}, "widgets_values": ["234832_212707695294998_00005_.png", "image"]}, {"id": 24, "type": "FaceDetailer", "pos": [2628, 406], "size": [506.4000244140625, 1052], "flags": {}, "order": 21, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 25}, {"name": "model", "type": "MODEL", "link": 26}, {"name": "clip", "type": "CLIP", "link": 27}, {"name": "vae", "type": "VAE", "link": 28}, {"name": "positive", "type": "CONDITIONING", "link": 32}, {"name": "negative", "type": "CONDITIONING", "link": 31}, {"name": "bbox_detector", "type": "BBOX_DETECTOR", "link": 33}, {"name": "sam_model_opt", "type": "SAM_MODEL", "link": null}, {"name": "segm_detector_opt", "type": "SEGM_DETECTOR", "link": null}, {"name": "detailer_hook", "type": "DETAILER_HOOK", "link": null}, {"name": "seed", "type": "INT", "link": 36, "widget": {"name": "seed"}}], "outputs": [{"name": "image", "type": "IMAGE", "links": [34, 38], "shape": 3, "slot_index": 0}, {"name": "cropped_refined", "type": "IMAGE", "links": null, "shape": 6}, {"name": "cropped_enhanced_alpha", "type": "IMAGE", "links": null, "shape": 6}, {"name": "mask", "type": "MASK", "links": null, "shape": 3}, {"name": "detailer_pipe", "type": "DETAILER_PIPE", "links": null, "shape": 3}, {"name": "cnet_images", "type": "IMAGE", "links": null, "shape": 6}], "properties": {"Node name for S&R": "FaceDetailer"}, "widgets_values": [512, true, 768, 152941780205726, "randomize", 20, 3, "dpmpp_3m_sde_gpu", "karras", 0.5, 5, true, true, 0.5, 10, 3, "center-1", 0, 0.93, 0, 0.7, "False", 10, "", 1]}, {"id": 4, "type": "KSampler", "pos": [1638, 218], "size": [315, 474], "flags": {}, "order": 17, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 1}, {"name": "positive", "type": "CONDITIONING", "link": 11}, {"name": "negative", "type": "CONDITIONING", "link": 12}, {"name": "latent_image", "type": "LATENT", "link": 15}, {"name": "seed", "type": "INT", "link": 35, "widget": {"name": "seed"}}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [17], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "KSampler"}, "widgets_values": [517052863240750, "randomize", 30, 6.5, "dpmpp_2m_sde_gpu", "karras", 0.9]}, {"id": 3, "type": "IPAdapterApplyFaceID", "pos": [1273, 994], "size": {"0": 315, "1": 326}, "flags": {}, "order": 16, "mode": 0, "inputs": [{"name": "ipadapter", "type": "IPADAPTER", "link": 2}, {"name": "clip_vision", "type": "CLIP_VISION", "link": 3}, {"name": "insightface", "type": "INSIGHTFACE", "link": 4}, {"name": "image", "type": "IMAGE", "link": 6}, {"name": "model", "type": "MODEL", "link": 9}, {"name": "attn_mask", "type": "MASK", "link": null}], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [1], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "IPAdapterApplyFaceID"}, "widgets_values": [0.9, 0, "original", 0, 1, false, 1, false]}, {"id": 26, "type": "PreviewImage", "pos": [3789.5444208593763, 80], "size": {"0": 210, "1": 246}, "flags": {}, "order": 22, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 34}], "properties": {"Node name for S&R": "PreviewImage"}}, {"id": 28, "type": "Image Comparer (rgthree)", "pos": {"0": 3184.39990234375, "1": 406, "2": 0, "3": 0, "4": 0, "5": 0, "6": 0, "7": 0, "8": 0, "9": 0}, "size": [815.1443964453138, 631.5913966796877], "flags": {}, "order": 23, "mode": 0, "inputs": [{"name": "image_a", "type": "IMAGE", "link": 37, "dir": 3}, {"name": "image_b", "type": "IMAGE", "link": 38, "dir": 3}], "outputs": [], "properties": {"comparer_mode": "Slide"}, "widgets_values": [["/view?filename=rgthree.compare._temp_pknod_00025_.png&type=temp&subfolder=&rand=0.979371417479149", "/view?filename=rgthree.compare._temp_pknod_00026_.png&type=temp&subfolder=&rand=0.603208426213409"]]}, {"id": 10, "type": "LoadImage", "pos": [50, 80], "size": {"0": 315, "1": 314}, "flags": {}, "order": 9, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [7], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "LoadImage"}, "widgets_values": ["234832_212707695294998_00005_ (1).png", "image"]}], "links": [[1, 3, 0, 4, 0, "MODEL"], [2, 5, 0, 3, 0, "IPADAPTER"], [3, 6, 0, 3, 1, "CLIP_VISION"], [4, 7, 0, 3, 2, "INSIGHTFACE"], [5, 8, 0, 9, 0, "IMAGE"], [6, 9, 0, 3, 3, "IMAGE"], [7, 10, 0, 11, 0, "IMAGE"], [8, 11, 0, 9, 1, "IMAGE"], [9, 12, 0, 3, 4, "MODEL"], [10, 11, 0, 13, 0, "IMAGE"], [11, 14, 0, 4, 1, "CONDITIONING"], [12, 15, 0, 4, 2, "CONDITIONING"], [13, 17, 1, 14, 0, "CLIP"], [14, 17, 1, 15, 0, "CLIP"], [15, 18, 0, 4, 3, "LATENT"], [17, 4, 0, 20, 0, "LATENT"], [19, 19, 0, 20, 1, "VAE"], [21, 17, 0, 12, 0, "MODEL"], [23, 20, 0, 23, 0, "IMAGE"], [24, 23, 0, 21, 0, "IMAGE"], [25, 23, 0, 24, 0, "IMAGE"], [26, 17, 0, 24, 1, "MODEL"], [27, 17, 1, 24, 2, "CLIP"], [28, 17, 2, 24, 3, "VAE"], [31, 15, 0, 24, 5, "CONDITIONING"], [32, 14, 0, 24, 4, "CONDITIONING"], [33, 25, 0, 24, 6, "BBOX_DETECTOR"], [34, 24, 0, 26, 0, "IMAGE"], [35, 27, 0, 4, 4, "INT"], [36, 27, 0, 24, 10, "INT"], [37, 23, 0, 28, 0, "IMAGE"], [38, 24, 0, 28, 1, "IMAGE"]], "groups": [], "config": {}, "extra": {}, "version": 0.4} -------------------------------------------------------------------------------- /Workflows/1 VideoToPose - RqCDpTPJ.json: -------------------------------------------------------------------------------- 1 | {"last_node_id": 12, "last_link_id": 11, "nodes": [{"id": 5, "type": "ImageListToImageBatch", "pos": [1800, 180], "size": {"0": 210, "1": 26}, "flags": {}, "order": 7, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 4}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [5, 6, 10], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "ImageListToImageBatch", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 6, "type": "SaveImageExtended", "pos": [1860, 360], "size": [300, 600], "flags": {}, "order": 9, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 5}, {"name": "positive_text_opt", "type": "STRING", "link": null, "widget": {"name": "positive_text_opt"}}, {"name": "negative_text_opt", "type": "STRING", "link": null, "widget": {"name": "negative_text_opt"}}], "properties": {"Node name for S&R": "SaveImageExtended", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["GraymanShuffle", "resolution", "GraymanShuffle", "resolution", "underscore", "basic, prompt", "disabled", "", "enabled", 3, "last", "disabled", "enabled", "", ""], "color": "#223", "bgcolor": "#335"}, {"id": 7, "type": "VHS_VideoCombine", "pos": [2193, 196], "size": [300, 793.65625], "flags": {}, "order": 10, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 6}, {"name": "audio", "type": "VHS_AUDIO", "link": null}, {"name": "batch_manager", "type": "VHS_BatchManager", "link": null}], "outputs": [{"name": "Filenames", "type": "VHS_FILENAMES", "links": null, "shape": 3}], "properties": {"Node name for S&R": "VHS_VideoCombine", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": {"frame_rate": 30, "loop_count": 0, "filename_prefix": "GraymanShuffle", "format": "video/h264-mp4", "pix_fmt": "yuv420p10le", "crf": 19, "save_metadata": true, "pingpong": false, "save_output": true, "videopreview": {"hidden": false, "paused": false, "params": {"filename": "GraymanShuffle_00001.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4"}}}, "color": "#223", "bgcolor": "#335"}, {"id": 1, "type": "VHS_LoadVideo", "pos": [420, 120], "size": [240, 660], "flags": {}, "order": 0, "mode": 0, "inputs": [{"name": "batch_manager", "type": "VHS_BatchManager", "link": null}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [], "shape": 3, "slot_index": 0}, {"name": "frame_count", "type": "INT", "links": null, "shape": 3}, {"name": "audio", "type": "VHS_AUDIO", "links": null, "shape": 3}], "properties": {"Node name for S&R": "VHS_LoadVideo", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": {"video": "shuffle.mp4", "force_rate": 0, "force_size": "Disabled", "custom_width": 512, "custom_height": 512, "frame_load_cap": 30, "skip_first_frames": 30, "select_every_nth": 1, "choose video to upload": "image", "videopreview": {"hidden": false, "paused": false, "params": {"frame_load_cap": 30, "skip_first_frames": 30, "force_rate": 0, "filename": "shuffle.mp4", "type": "input", "format": "video/mp4", "select_every_nth": 1}}}, "color": "#223", "bgcolor": "#335"}, {"id": 2, "type": "ImpactImageBatchToImageList", "pos": [780, 180], "size": {"0": 210, "1": 26}, "flags": {}, "order": 2, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 11}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [2, 7], "shape": 6, "slot_index": 0}], "properties": {"Node name for S&R": "ImpactImageBatchToImageList", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 8, "type": "PreviewImage", "pos": [1020, 540], "size": [240, 240], "flags": {}, "order": 4, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 7}], "properties": {"Node name for S&R": "PreviewImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 9, "type": "PreviewImage", "pos": [1320, 540], "size": [240, 240], "flags": {}, "order": 6, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 8}], "properties": {"Node name for S&R": "PreviewImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 3, "type": "DWPreprocessor", "pos": [1020, 180], "size": {"0": 315, "1": 198}, "flags": {}, "order": 3, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 2}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [3, 8], "shape": 3, "slot_index": 0}, {"name": "POSE_KEYPOINT", "type": "POSE_KEYPOINT", "links": null, "shape": 3}], "properties": {"Node name for S&R": "DWPreprocessor", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["enable", "enable", "enable", 512, "yolox_l.onnx", "dw-ll_ucoco_384.onnx"], "color": "#223", "bgcolor": "#335"}, {"id": 10, "type": "PreviewImage", "pos": [1629.2573592337044, 513.8334129549065], "size": [240, 240], "flags": {}, "order": 8, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 9}], "properties": {"Node name for S&R": "PreviewImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 4, "type": "Image Remove Background (Alpha)", "pos": [1380, 180], "size": {"0": 315, "1": 106}, "flags": {}, "order": 5, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 3}], "outputs": [{"name": "images", "type": "IMAGE", "links": [4, 9], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "Image Remove Background (Alpha)", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["background", 0, 1], "color": "#223", "bgcolor": "#335"}, {"id": 11, "type": "PreviewImage", "pos": [2063.6305589175645, 71.58044211974709], "size": [240, 240], "flags": {}, "order": 11, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 10, "slot_index": 0}], "properties": {"Node name for S&R": "PreviewImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 12, "type": "LoadImageListFromDir //Inspire", "pos": [360, 900], "size": {"0": 315, "1": 150}, "flags": {}, "order": 1, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [11], "shape": 6, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 6}], "properties": {"Node name for S&R": "LoadImageListFromDir //Inspire", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["", 0, 0, false], "color": "#223", "bgcolor": "#335"}], "links": [[2, 2, 0, 3, 0, "IMAGE"], [3, 3, 0, 4, 0, "IMAGE"], [4, 4, 0, 5, 0, "IMAGE"], [5, 5, 0, 6, 0, "IMAGE"], [6, 5, 0, 7, 0, "IMAGE"], [7, 2, 0, 8, 0, "IMAGE"], [8, 3, 0, 9, 0, "IMAGE"], [9, 4, 0, 10, 0, "IMAGE"], [10, 5, 0, 11, 0, "IMAGE"], [11, 12, 0, 2, 0, "IMAGE"]], "groups": [], "config": {}, "extra": {}, "version": 0.4} -------------------------------------------------------------------------------- /Workflows/2 posetovideo - 9JCRNutL.json: -------------------------------------------------------------------------------- 1 | {"last_node_id": 16, "last_link_id": 17, "nodes": [{"id": 4, "type": "[AnimateAnyone] Load Pose Guider", "pos": [600, 120], "size": [420, 60], "flags": {}, "order": 0, "mode": 0, "outputs": [{"name": "pose_guider", "type": "POSE_GUIDER", "links": [3], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "[AnimateAnyone] Load Pose Guider", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["./pretrained_weights/pose_guider.pth"], "color": "#223", "bgcolor": "#335"}, {"id": 3, "type": "[AnimateAnyone] Pose Guider Encode", "pos": [1320, 240], "size": {"0": 292.20001220703125, "1": 46}, "flags": {}, "order": 11, "mode": 0, "inputs": [{"name": "pose_guider", "type": "POSE_GUIDER", "link": 3}, {"name": "pose_images", "type": "IMAGE", "link": 2}], "outputs": [{"name": "pose_latent", "type": "POSE_LATENT", "links": [4], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "[AnimateAnyone] Pose Guider Encode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 2, "type": "ImageScale", "pos": [900, 300], "size": {"0": 315, "1": 130}, "flags": {}, "order": 8, "mode": 4, "inputs": [{"name": "image", "type": "IMAGE", "link": 1}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [2], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "ImageScale", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["nearest-exact", 512, 768, "disabled"], "color": "#223", "bgcolor": "#335"}, {"id": 6, "type": "LoadImage", "pos": [300, -360], "size": [300, 300], "flags": {}, "order": 1, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [5], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "LoadImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["000-grafting-rayman.png", "image"], "color": "#223", "bgcolor": "#335"}, {"id": 7, "type": "ImageScale", "pos": [829, -292], "size": {"0": 315, "1": 130}, "flags": {}, "order": 7, "mode": 4, "inputs": [{"name": "image", "type": "IMAGE", "link": 5}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [6, 9], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "ImageScale", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["nearest-exact", 512, 768, "disabled"], "color": "#223", "bgcolor": "#335"}, {"id": 10, "type": "VAEEncode", "pos": [1324, -464], "size": {"0": 210, "1": 46}, "flags": {}, "order": 10, "mode": 0, "inputs": [{"name": "pixels", "type": "IMAGE", "link": 9}, {"name": "vae", "type": "VAE", "link": 10}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [11], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "VAEEncode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 8, "type": "CLIPVisionEncode", "pos": [1200, -60], "size": {"0": 380.4000244140625, "1": 46}, "flags": {}, "order": 9, "mode": 0, "inputs": [{"name": "clip_vision", "type": "CLIP_VISION", "link": 8}, {"name": "image", "type": "IMAGE", "link": 6}], "outputs": [{"name": "CLIP_VISION_OUTPUT", "type": "CLIP_VISION_OUTPUT", "links": [7], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "CLIPVisionEncode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 9, "type": "CLIPVisionLoader", "pos": [720, -60], "size": {"0": 315, "1": 58}, "flags": {}, "order": 2, "mode": 0, "outputs": [{"name": "CLIP_VISION", "type": "CLIP_VISION", "links": [8], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "CLIPVisionLoader", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["pytorch_model.bin"], "color": "#223", "bgcolor": "#335"}, {"id": 13, "type": "[AnimateAnyone] Load UNet3D ConditionModel", "pos": [1320, -240], "size": [540, 120], "flags": {}, "order": 3, "mode": 0, "outputs": [{"name": "unet3d", "type": "UNET3D", "links": [13], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "[AnimateAnyone] Load UNet3D ConditionModel", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["./pretrained_weights/stable-diffusion-v1-5/unet/", "./pretrained_weights/denoising_unet.pth", "./pretrained_weights/motion_module.pth"], "color": "#223", "bgcolor": "#335"}, {"id": 12, "type": "[AnimateAnyone] Load UNet2D ConditionModel", "pos": [1560, -420], "size": [360, 120], "flags": {}, "order": 4, "mode": 0, "outputs": [{"name": "unet2d", "type": "UNET2D", "links": [12], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "[AnimateAnyone] Load UNet2D ConditionModel", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["./pretrained_weights/stable-diffusion-v1-5/unet/", "./pretrained_weights/reference_unet.pth"], "color": "#223", "bgcolor": "#335"}, {"id": 5, "type": "[AnimateAnyone] Animate Anyone Sampler", "pos": [1740, 120], "size": {"0": 315, "1": 618}, "flags": {}, "order": 12, "mode": 0, "inputs": [{"name": "reference_unet", "type": "UNET2D", "link": 12}, {"name": "denoising_unet", "type": "UNET3D", "link": 13}, {"name": "ref_image_latent", "type": "LATENT", "link": 11}, {"name": "clip_image_embeds", "type": "CLIP_VISION_OUTPUT", "link": 7}, {"name": "pose_latent", "type": "POSE_LATENT", "link": 4}], "outputs": [{"name": "latent", "type": "LATENT", "links": [14], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "[AnimateAnyone] Animate Anyone Sampler", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [194807152181882, "randomize", 20, 3.5, 1, 24, 1, 4, 1, 1, "DDIM", 0.00085, 0.012, "linear", "v_prediction", "trailing", 1, false, true, false, "200_3723723_cseti_ballerina-spin_w512_h768_r64.safetensors"], "color": "#223", "bgcolor": "#335"}, {"id": 11, "type": "VAELoader", "pos": [720, -660], "size": [420, 60], "flags": {}, "order": 5, "mode": 0, "outputs": [{"name": "VAE", "type": "VAE", "links": [10, 15], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "VAELoader", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["AnimateEveryone\\diffusion_pytorch_model.bin"], "color": "#223", "bgcolor": "#335"}, {"id": 14, "type": "VAEDecode", "pos": [2160, 120], "size": {"0": 210, "1": 46}, "flags": {}, "order": 13, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 14}, {"name": "vae", "type": "VAE", "link": 15}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [16, 17], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "VAEDecode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 15, "type": "VHS_VideoCombine", "pos": [2690.718920898438, 61.61299169921881], "size": [300, 720], "flags": {}, "order": 14, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 16}, {"name": "audio", "type": "VHS_AUDIO", "link": null}, {"name": "batch_manager", "type": "VHS_BatchManager", "link": null}], "outputs": [{"name": "Filenames", "type": "VHS_FILENAMES", "links": null, "shape": 3}], "properties": {"Node name for S&R": "VHS_VideoCombine", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": {"frame_rate": 30, "loop_count": 0, "filename_prefix": "PoseToVideo", "format": "video/h265-mp4", "pix_fmt": "yuv420p10le", "crf": 22, "save_metadata": true, "pingpong": false, "save_output": true, "videopreview": {"hidden": false, "paused": false, "params": {"filename": "PoseToVideo_00002.mp4", "subfolder": "", "type": "output", "format": "video/h265-mp4"}}}, "color": "#223", "bgcolor": "#335"}, {"id": 1, "type": "VHS_LoadVideo", "pos": [540, 240], "size": [240, 660], "flags": {}, "order": 6, "mode": 0, "inputs": [{"name": "batch_manager", "type": "VHS_BatchManager", "link": null}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [1], "shape": 3, "slot_index": 0}, {"name": "frame_count", "type": "INT", "links": null, "shape": 3}, {"name": "audio", "type": "VHS_AUDIO", "links": null, "shape": 3}], "properties": {"Node name for S&R": "VHS_LoadVideo", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": {"video": "shuffle (2).mp4", "force_rate": 0, "force_size": "Disabled", "custom_width": 512, "custom_height": 512, "frame_load_cap": 0, "skip_first_frames": 100, "select_every_nth": 1, "choose video to upload": "image", "videopreview": {"hidden": false, "paused": false, "params": {"frame_load_cap": 0, "skip_first_frames": 100, "force_rate": 0, "filename": "shuffle (2).mp4", "type": "input", "format": "video/mp4", "select_every_nth": 1}}}, "color": "#223", "bgcolor": "#335"}, {"id": 16, "type": "SaveImageExtended", "pos": [2280, 420], "size": [300, 600], "flags": {}, "order": 15, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 17}, {"name": "positive_text_opt", "type": "STRING", "link": null, "widget": {"name": "positive_text_opt"}}, {"name": "negative_text_opt", "type": "STRING", "link": null, "widget": {"name": "negative_text_opt"}}], "properties": {"Node name for S&R": "SaveImageExtended", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["PoseToVideoImages", "steps, cfg", "PoseToVideoImages", "sampler_name, scheduler", "underscore", "basic, prompt", "disabled", "", "enabled", 3, "last", "disabled", "enabled", "", ""], "color": "#223", "bgcolor": "#335"}], "links": [[1, 1, 0, 2, 0, "IMAGE"], [2, 2, 0, 3, 1, "IMAGE"], [3, 4, 0, 3, 0, "POSE_GUIDER"], [4, 3, 0, 5, 4, "POSE_LATENT"], [5, 6, 0, 7, 0, "IMAGE"], [6, 7, 0, 8, 1, "IMAGE"], [7, 8, 0, 5, 3, "CLIP_VISION_OUTPUT"], [8, 9, 0, 8, 0, "CLIP_VISION"], [9, 7, 0, 10, 0, "IMAGE"], [10, 11, 0, 10, 1, "VAE"], [11, 10, 0, 5, 2, "LATENT"], [12, 12, 0, 5, 0, "UNET2D"], [13, 13, 0, 5, 1, "UNET3D"], [14, 5, 0, 14, 0, "LATENT"], [15, 11, 0, 14, 1, "VAE"], [16, 14, 0, 15, 0, "IMAGE"], [17, 14, 0, 16, 0, "IMAGE"]], "groups": [], "config": {}, "extra": {}, "version": 0.4} -------------------------------------------------------------------------------- /Workflows/3 upscaleandswap - ank4Rip5.json: -------------------------------------------------------------------------------- 1 | {"last_node_id": 9, "last_link_id": 11, "nodes": [{"id": 2, "type": "ImageScaleBy", "pos": [780, 300], "size": {"0": 315, "1": 82}, "flags": {}, "order": 2, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 1}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [2], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "ImageScaleBy", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["lanczos", 2], "color": "#223", "bgcolor": "#335"}, {"id": 3, "type": "Image Rembg (Remove Background)", "pos": [1200, 300], "size": {"0": 315, "1": 250}, "flags": {}, "order": 3, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 2}], "outputs": [{"name": "images", "type": "IMAGE", "links": [3], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "Image Rembg (Remove Background)", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [true, "u2net", false, false, false, 240, 10, 10, "none"], "color": "#223", "bgcolor": "#335"}, {"id": 5, "type": "LoadImage", "pos": [1260, 600], "size": [300, 300], "flags": {}, "order": 0, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [4], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "LoadImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["Reuni\u00e3o_com_o_ator_norte-americano_Keanu_Reeves_(46806576944)_(cropped) (3).jpg", "image"], "color": "#223", "bgcolor": "#335"}, {"id": 1, "type": "LoadImageListFromDir //Inspire", "pos": [360, 300], "size": {"0": 315, "1": 150}, "flags": {}, "order": 1, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [1], "shape": 6, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 6}], "properties": {"Node name for S&R": "LoadImageListFromDir //Inspire", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["H:\\ComfyUI\\output\\PoseToVideo2", 0, 2, false], "color": "#223", "bgcolor": "#335"}, {"id": 7, "type": "VHS_VideoCombine", "pos": [2460, 120], "size": [300, 300], "flags": {}, "order": 7, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 11}, {"name": "audio", "type": "VHS_AUDIO", "link": null}, {"name": "batch_manager", "type": "VHS_BatchManager", "link": null}], "outputs": [{"name": "Filenames", "type": "VHS_FILENAMES", "links": null, "shape": 3}], "properties": {"Node name for S&R": "VHS_VideoCombine", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": {"frame_rate": 30, "loop_count": 0, "filename_prefix": "AnimateDiff", "format": "video/h264-mp4", "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, "pingpong": false, "save_output": true, "videopreview": {"hidden": false, "paused": false, "params": {"filename": "AnimateDiff_00003.gif", "subfolder": "", "type": "output", "format": "image/gif"}}}, "color": "#223", "bgcolor": "#335"}, {"id": 4, "type": "ReActorFaceSwap", "pos": [1678, 339], "size": {"0": 315, "1": 338}, "flags": {}, "order": 4, "mode": 0, "inputs": [{"name": "input_image", "type": "IMAGE", "link": 3}, {"name": "source_image", "type": "IMAGE", "link": 4}, {"name": "face_model", "type": "FACE_MODEL", "link": null}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [5, 10], "shape": 3, "slot_index": 0}, {"name": "FACE_MODEL", "type": "FACE_MODEL", "links": null, "shape": 3}], "properties": {"Node name for S&R": "ReActorFaceSwap", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [true, "inswapper_128.onnx", "retinaface_resnet50", "none", 1, 0.5, "no", "no", "0", "0", 1], "color": "#223", "bgcolor": "#335"}, {"id": 9, "type": "ImageListToImageBatch", "pos": [2195.485546386719, 88.15133770751956], "size": {"0": 210, "1": 26}, "flags": {}, "order": 6, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 10}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [11], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "ImageListToImageBatch", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 6, "type": "SaveImageExtended", "pos": [2040, 600], "size": {"0": 300, "1": 600}, "flags": {}, "order": 5, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 5}, {"name": "positive_text_opt", "type": "STRING", "link": null, "widget": {"name": "positive_text_opt"}}, {"name": "negative_text_opt", "type": "STRING", "link": null, "widget": {"name": "negative_text_opt"}}], "properties": {"Node name for S&R": "SaveImageExtended", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["VideoToUpscaled", "steps, cfg", "VideoToUpscaled", "sampler_name, scheduler", "underscore", "basic, prompt", "disabled", "", "enabled", 3, "last", "disabled", "enabled", "", ""], "color": "#223", "bgcolor": "#335"}], "links": [[1, 1, 0, 2, 0, "IMAGE"], [2, 2, 0, 3, 0, "IMAGE"], [3, 3, 0, 4, 0, "IMAGE"], [4, 5, 0, 4, 1, "IMAGE"], [5, 4, 0, 6, 0, "IMAGE"], [10, 4, 0, 9, 0, "IMAGE"], [11, 9, 0, 7, 0, "IMAGE"]], "groups": [], "config": {}, "extra": {}, "version": 0.4} -------------------------------------------------------------------------------- /Workflows/AnimateDiffWithDWPose - MPt9WbnU.json: -------------------------------------------------------------------------------- 1 | {"last_node_id": 69, "last_link_id": 47, "nodes": [{"id": 13, "type": "ADE_AnimateDiffUniformContextOptions", "pos": [920, -80], "size": {"0": 317.4000244140625, "1": 270}, "flags": {}, "order": 0, "mode": 0, "inputs": [{"name": "prev_context", "type": "CONTEXT_OPTIONS", "link": null}, {"name": "view_opts", "type": "VIEW_OPTS", "link": null}], "outputs": [{"name": "CONTEXT_OPTS", "type": "CONTEXT_OPTIONS", "links": [4], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "ADE_AnimateDiffUniformContextOptions", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [16, 1, 4, "uniform", false, "flat", false, 0, 1], "color": "#223", "bgcolor": "#335"}, {"id": 1, "type": "CheckpointLoaderSimple", "pos": [560, 320], "size": {"0": 315, "1": 98}, "flags": {}, "order": 1, "mode": 0, "outputs": [{"name": "MODEL", "type": "MODEL", "links": [3], "shape": 3, "slot_index": 0}, {"name": "CLIP", "type": "CLIP", "links": [1, 2], "shape": 3, "slot_index": 1}, {"name": "VAE", "type": "VAE", "links": [16], "shape": 3, "slot_index": 2}], "properties": {"Node name for S&R": "CheckpointLoaderSimple", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["cyberrealistic_v41BackToBasics.safetensors"], "color": "#223", "bgcolor": "#335"}, {"id": 12, "type": "ADE_AnimateDiffLoaderWithContext", "pos": [1400, -80], "size": {"0": 315, "1": 230}, "flags": {}, "order": 9, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 3}, {"name": "context_options", "type": "CONTEXT_OPTIONS", "link": 4}, {"name": "motion_lora", "type": "MOTION_LORA", "link": null}, {"name": "ad_settings", "type": "AD_SETTINGS", "link": null}, {"name": "sample_settings", "type": "SAMPLE_SETTINGS", "link": null}, {"name": "ad_keyframes", "type": "AD_KEYFRAMES", "link": null}], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [14], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "ADE_AnimateDiffLoaderWithContext", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["mm_sd_v15_v2.ckpt", "sqrt_linear (AnimateDiff)", 1, true], "color": "#223", "bgcolor": "#335"}, {"id": 19, "type": "ControlNetLoaderAdvanced", "pos": [720, 920], "size": {"0": 367.79998779296875, "1": 58}, "flags": {}, "order": 20, "mode": 0, "inputs": [{"name": "timestep_keyframe", "type": "TIMESTEP_KEYFRAME", "link": 9}], "outputs": [{"name": "CONTROL_NET", "type": "CONTROL_NET", "links": [8], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "ControlNetLoaderAdvanced", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["control_openpose-fp16.safetensors"], "color": "#223", "bgcolor": "#335"}, {"id": 20, "type": "TimestepKeyframe", "pos": [280, 960], "size": {"0": 355.20001220703125, "1": 214}, "flags": {}, "order": 14, "mode": 0, "inputs": [{"name": "prev_timestep_kf", "type": "TIMESTEP_KEYFRAME", "link": null}, {"name": "cn_weights", "type": "CONTROL_NET_WEIGHTS", "link": null}, {"name": "latent_keyframe", "type": "LATENT_KEYFRAME", "link": 10}, {"name": "mask_optional", "type": "MASK", "link": null}], "outputs": [{"name": "TIMESTEP_KF", "type": "TIMESTEP_KEYFRAME", "links": [9], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "TimestepKeyframe", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [0, 1, 0, true, true], "color": "#223", "bgcolor": "#335"}, {"id": 24, "type": "EmptyLatentImage", "pos": [1640, 200], "size": {"0": 315, "1": 106}, "flags": {}, "order": 2, "mode": 0, "outputs": [{"name": "LATENT", "type": "LATENT", "links": [13], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "EmptyLatentImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [512, 768, 64], "color": "#223", "bgcolor": "#335"}, {"id": 51, "type": "LoadImage", "pos": [-40, 1240], "size": {"0": 320, "1": 320}, "flags": {}, "order": 3, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [21], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "LoadImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["46100448-muscle-man-bodybuilding-athlete-full-body-portrait (1).jpg", "image"], "color": "#223", "bgcolor": "#335"}, {"id": 52, "type": "PreviewImage", "pos": [1526.2157737792973, 1194.769927451172], "size": [200, 240], "flags": {}, "order": 24, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 22}], "properties": {"Node name for S&R": "PreviewImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 54, "type": "ControlNetLoaderAdvanced", "pos": [683.0024300585934, 1733.3169709488275], "size": {"0": 367.79998779296875, "1": 58}, "flags": {}, "order": 22, "mode": 0, "inputs": [{"name": "timestep_keyframe", "type": "TIMESTEP_KEYFRAME", "link": 25}], "outputs": [{"name": "CONTROL_NET", "type": "CONTROL_NET", "links": [23], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "ControlNetLoaderAdvanced", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["control_openpose-fp16.safetensors"], "color": "#223", "bgcolor": "#335"}, {"id": 55, "type": "TimestepKeyframe", "pos": [243.0024300585934, 1773.3169709488275], "size": {"0": 355.20001220703125, "1": 214}, "flags": {}, "order": 16, "mode": 0, "inputs": [{"name": "prev_timestep_kf", "type": "TIMESTEP_KEYFRAME", "link": null}, {"name": "cn_weights", "type": "CONTROL_NET_WEIGHTS", "link": null}, {"name": "latent_keyframe", "type": "LATENT_KEYFRAME", "link": 26}, {"name": "mask_optional", "type": "MASK", "link": null}], "outputs": [{"name": "TIMESTEP_KF", "type": "TIMESTEP_KEYFRAME", "links": [25], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "TimestepKeyframe", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [0, 1, 0, true, true], "color": "#223", "bgcolor": "#335"}, {"id": 60, "type": "PreviewImage", "pos": [1489.2182038378905, 2008.0868983999994], "size": [200, 240], "flags": {}, "order": 25, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 29}], "properties": {"Node name for S&R": "PreviewImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 23, "type": "KSampler", "pos": [2480, 1320], "size": {"0": 320, "1": 480}, "flags": {}, "order": 30, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 14}, {"name": "positive", "type": "CONDITIONING", "link": 45}, {"name": "negative", "type": "CONDITIONING", "link": 46}, {"name": "latent_image", "type": "LATENT", "link": 13}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [15], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "KSampler", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [378381077546593, "fixed", 20, 8, "euler", "normal", 1], "color": "#223", "bgcolor": "#335"}, {"id": 15, "type": "ControlNetApplyAdvanced", "pos": [1640, 880], "size": {"0": 315, "1": 166}, "flags": {}, "order": 26, "mode": 0, "inputs": [{"name": "positive", "type": "CONDITIONING", "link": 6}, {"name": "negative", "type": "CONDITIONING", "link": 5}, {"name": "control_net", "type": "CONTROL_NET", "link": 8}, {"name": "image", "type": "IMAGE", "link": 19}], "outputs": [{"name": "positive", "type": "CONDITIONING", "links": [31], "shape": 3, "slot_index": 0}, {"name": "negative", "type": "CONDITIONING", "links": [30], "shape": 3, "slot_index": 1}], "properties": {"Node name for S&R": "ControlNetApplyAdvanced", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [1, 0, 1], "color": "#223", "bgcolor": "#335"}, {"id": 30, "type": "DWPreprocessor", "pos": [1040, 1080], "size": {"0": 315, "1": 198}, "flags": {}, "order": 18, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 20}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [19, 22], "shape": 3, "slot_index": 0}, {"name": "POSE_KEYPOINT", "type": "POSE_KEYPOINT", "links": null, "shape": 3}], "properties": {"Node name for S&R": "DWPreprocessor", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["enable", "enable", "enable", 512, "yolox_l.onnx", "dw-ll_ucoco_384.onnx"], "color": "#223", "bgcolor": "#335"}, {"id": 57, "type": "DWPreprocessor", "pos": [1003.0024300585934, 1893.3169709488275], "size": {"0": 315, "1": 198}, "flags": {}, "order": 19, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 27}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [24, 29], "shape": 3, "slot_index": 0}, {"name": "POSE_KEYPOINT", "type": "POSE_KEYPOINT", "links": null, "shape": 3}], "properties": {"Node name for S&R": "DWPreprocessor", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["enable", "enable", "enable", 512, "yolox_l.onnx", "dw-ll_ucoco_384.onnx"], "color": "#223", "bgcolor": "#335"}, {"id": 59, "type": "LoadImage", "pos": [-76.9975699414066, 2053.3169709488275], "size": {"0": 320, "1": 320}, "flags": {}, "order": 4, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [28], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "LoadImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["handsome-muscular-man-in-underwear-posing-on-gray-background-photo (1).jpg", "image"], "color": "#223", "bgcolor": "#335"}, {"id": 2, "type": "CLIPTextEncode", "pos": [1040, 360], "size": {"0": 400, "1": 200}, "flags": {}, "order": 10, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 1}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [5], "shape": 3, "slot_index": 0}], "title": "Negative", "properties": {"Node name for S&R": "CLIPTextEncode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["embedding:EasyNegative, embedding:bad-hands-5, sunglasses"], "color": "#223", "bgcolor": "#335"}, {"id": 3, "type": "CLIPTextEncode", "pos": [1080, 640], "size": {"0": 400, "1": 200}, "flags": {}, "order": 11, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 2}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [6], "shape": 3, "slot_index": 0}], "title": "Positive", "properties": {"Node name for S&R": "CLIPTextEncode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["(((full body))) man walking towards camera, forest, path, bald, combat trousers, black boots, black t-shirt, short sleeve"], "color": "#223", "bgcolor": "#335"}, {"id": 62, "type": "ControlNetLoaderAdvanced", "pos": [603.0335880546876, 2617.422994335938], "size": {"0": 367.79998779296875, "1": 58}, "flags": {}, "order": 23, "mode": 0, "inputs": [{"name": "timestep_keyframe", "type": "TIMESTEP_KEYFRAME", "link": 36}], "outputs": [{"name": "CONTROL_NET", "type": "CONTROL_NET", "links": [34], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "ControlNetLoaderAdvanced", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["control_openpose-fp16.safetensors"], "color": "#223", "bgcolor": "#335"}, {"id": 63, "type": "TimestepKeyframe", "pos": [163.03358805468758, 2657.422994335938], "size": {"0": 355.20001220703125, "1": 214}, "flags": {}, "order": 17, "mode": 0, "inputs": [{"name": "prev_timestep_kf", "type": "TIMESTEP_KEYFRAME", "link": null}, {"name": "cn_weights", "type": "CONTROL_NET_WEIGHTS", "link": null}, {"name": "latent_keyframe", "type": "LATENT_KEYFRAME", "link": 37}, {"name": "mask_optional", "type": "MASK", "link": null}], "outputs": [{"name": "TIMESTEP_KF", "type": "TIMESTEP_KEYFRAME", "links": [36], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "TimestepKeyframe", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [0, 1, 0, true, true], "color": "#223", "bgcolor": "#335"}, {"id": 68, "type": "PreviewImage", "pos": [1409.249361833985, 2892.1929217871098], "size": [200, 240], "flags": {}, "order": 27, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 40}], "properties": {"Node name for S&R": "PreviewImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 22, "type": "LatentKeyframeTiming", "pos": [-80, 960], "size": {"0": 319.20001220703125, "1": 178}, "flags": {}, "order": 5, "mode": 0, "inputs": [{"name": "prev_latent_kf", "type": "LATENT_KEYFRAME", "link": null}], "outputs": [{"name": "LATENT_KF", "type": "LATENT_KEYFRAME", "links": [10], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "LatentKeyframeTiming", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [0, 21, 1, 0.3, "ease-out", false], "color": "#223", "bgcolor": "#335"}, {"id": 67, "type": "LoadImage", "pos": [-156.96641194531242, 2937.422994335938], "size": {"0": 320, "1": 320}, "flags": {}, "order": 6, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [39], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "LoadImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["jarryd__full_length_male_model_pose__reference_3_by_faestock_denps52-fullview (3).jpg", "image"], "color": "#223", "bgcolor": "#335"}, {"id": 28, "type": "VHS_VideoCombine", "pos": [3040, 280], "size": [320, 760], "flags": {}, "order": 32, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 17}, {"name": "audio", "type": "VHS_AUDIO", "link": null}, {"name": "batch_manager", "type": "VHS_BatchManager", "link": null}], "outputs": [{"name": "Filenames", "type": "VHS_FILENAMES", "links": null, "shape": 3}], "properties": {"Node name for S&R": "VHS_VideoCombine", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": {"frame_rate": 16, "loop_count": 0, "filename_prefix": "AnimateDiff", "format": "video/h264-mp4", "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, "pingpong": false, "save_output": true, "videopreview": {"hidden": false, "paused": false, "params": {"filename": "AnimateDiff_00049.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4"}}}, "color": "#223", "bgcolor": "#335"}, {"id": 56, "type": "LatentKeyframeTiming", "pos": [-116.9975699414066, 1773.3169709488275], "size": {"0": 319.20001220703125, "1": 178}, "flags": {}, "order": 7, "mode": 0, "inputs": [{"name": "prev_latent_kf", "type": "LATENT_KEYFRAME", "link": null}], "outputs": [{"name": "LATENT_KF", "type": "LATENT_KEYFRAME", "links": [26], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "LatentKeyframeTiming", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [20, 42, 0.3, 1, "ease-in-out", false], "color": "#223", "bgcolor": "#335"}, {"id": 50, "type": "ImageScale", "pos": [600, 1280], "size": {"0": 315, "1": 130}, "flags": {}, "order": 12, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 21}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [20], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "ImageScale", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["nearest-exact", 512, 768, "center"], "color": "#223", "bgcolor": "#335"}, {"id": 58, "type": "ImageScale", "pos": [563.0024300585934, 2093.3169709488275], "size": {"0": 315, "1": 130}, "flags": {}, "order": 13, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 28}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [27], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "ImageScale", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["nearest-exact", 512, 768, "center"], "color": "#223", "bgcolor": "#335"}, {"id": 66, "type": "ImageScale", "pos": [483.0335880546876, 2977.422994335938], "size": {"0": 315, "1": 130}, "flags": {}, "order": 15, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 39}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [38], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "ImageScale", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["nearest-exact", 512, 768, "center"], "color": "#223", "bgcolor": "#335"}, {"id": 53, "type": "ControlNetApplyAdvanced", "pos": [1760, 1440], "size": {"0": 315, "1": 166}, "flags": {}, "order": 28, "mode": 0, "inputs": [{"name": "positive", "type": "CONDITIONING", "link": 31}, {"name": "negative", "type": "CONDITIONING", "link": 30}, {"name": "control_net", "type": "CONTROL_NET", "link": 23}, {"name": "image", "type": "IMAGE", "link": 24}], "outputs": [{"name": "positive", "type": "CONDITIONING", "links": [42], "shape": 3, "slot_index": 0}, {"name": "negative", "type": "CONDITIONING", "links": [41], "shape": 3, "slot_index": 1}], "properties": {"Node name for S&R": "ControlNetApplyAdvanced", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [1, 0, 1], "color": "#223", "bgcolor": "#335"}, {"id": 61, "type": "ControlNetApplyAdvanced", "pos": [2040, 1840], "size": {"0": 315, "1": 166}, "flags": {}, "order": 29, "mode": 0, "inputs": [{"name": "positive", "type": "CONDITIONING", "link": 42}, {"name": "negative", "type": "CONDITIONING", "link": 41}, {"name": "control_net", "type": "CONTROL_NET", "link": 34}, {"name": "image", "type": "IMAGE", "link": 35}], "outputs": [{"name": "positive", "type": "CONDITIONING", "links": [45], "shape": 3, "slot_index": 0}, {"name": "negative", "type": "CONDITIONING", "links": [46], "shape": 3, "slot_index": 1}], "properties": {"Node name for S&R": "ControlNetApplyAdvanced", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [1, 0, 1], "color": "#223", "bgcolor": "#335"}, {"id": 64, "type": "LatentKeyframeTiming", "pos": [-196.96641194531242, 2657.422994335938], "size": {"0": 319.20001220703125, "1": 178}, "flags": {}, "order": 8, "mode": 0, "inputs": [{"name": "prev_latent_kf", "type": "LATENT_KEYFRAME", "link": null}], "outputs": [{"name": "LATENT_KF", "type": "LATENT_KEYFRAME", "links": [37], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "LatentKeyframeTiming", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [41, 64, 1, 0.3, "ease-in-out", false], "color": "#223", "bgcolor": "#335"}, {"id": 69, "type": "SaveImage", "pos": [2892.0525383838217, -144.6959985149794], "size": [320, 280], "flags": {}, "order": 33, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 47}], "properties": {"ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["ComfyUI"], "color": "#223", "bgcolor": "#335"}, {"id": 25, "type": "VAEDecode", "pos": [2440, 40], "size": {"0": 210, "1": 46}, "flags": {}, "order": 31, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 15}, {"name": "vae", "type": "VAE", "link": 16}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [17, 47], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "VAEDecode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 65, "type": "DWPreprocessor", "pos": [923.0335880546876, 2777.422994335938], "size": {"0": 315, "1": 198}, "flags": {}, "order": 21, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 38}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [35, 40], "shape": 3, "slot_index": 0}, {"name": "POSE_KEYPOINT", "type": "POSE_KEYPOINT", "links": null, "shape": 3}], "properties": {"Node name for S&R": "DWPreprocessor", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["enable", "enable", "enable", 512, "yolox_l.onnx", "dw-ll_ucoco_384.onnx"], "color": "#223", "bgcolor": "#335"}], "links": [[1, 1, 1, 2, 0, "CLIP"], [2, 1, 1, 3, 0, "CLIP"], [3, 1, 0, 12, 0, "MODEL"], [4, 13, 0, 12, 1, "CONTEXT_OPTIONS"], [5, 2, 0, 15, 1, "CONDITIONING"], [6, 3, 0, 15, 0, "CONDITIONING"], [8, 19, 0, 15, 2, "CONTROL_NET"], [9, 20, 0, 19, 0, "TIMESTEP_KEYFRAME"], [10, 22, 0, 20, 2, "LATENT_KEYFRAME"], [13, 24, 0, 23, 3, "LATENT"], [14, 12, 0, 23, 0, "MODEL"], [15, 23, 0, 25, 0, "LATENT"], [16, 1, 2, 25, 1, "VAE"], [17, 25, 0, 28, 0, "IMAGE"], [19, 30, 0, 15, 3, "IMAGE"], [20, 50, 0, 30, 0, "IMAGE"], [21, 51, 0, 50, 0, "IMAGE"], [22, 30, 0, 52, 0, "IMAGE"], [23, 54, 0, 53, 2, "CONTROL_NET"], [24, 57, 0, 53, 3, "IMAGE"], [25, 55, 0, 54, 0, "TIMESTEP_KEYFRAME"], [26, 56, 0, 55, 2, "LATENT_KEYFRAME"], [27, 58, 0, 57, 0, "IMAGE"], [28, 59, 0, 58, 0, "IMAGE"], [29, 57, 0, 60, 0, "IMAGE"], [30, 15, 1, 53, 1, "CONDITIONING"], [31, 15, 0, 53, 0, "CONDITIONING"], [34, 62, 0, 61, 2, "CONTROL_NET"], [35, 65, 0, 61, 3, "IMAGE"], [36, 63, 0, 62, 0, "TIMESTEP_KEYFRAME"], [37, 64, 0, 63, 2, "LATENT_KEYFRAME"], [38, 66, 0, 65, 0, "IMAGE"], [39, 67, 0, 66, 0, "IMAGE"], [40, 65, 0, 68, 0, "IMAGE"], [41, 53, 1, 61, 1, "CONDITIONING"], [42, 53, 0, 61, 0, "CONDITIONING"], [45, 61, 0, 23, 1, "CONDITIONING"], [46, 61, 1, 23, 2, "CONDITIONING"], [47, 25, 0, 69, 0, "IMAGE"]], "groups": [], "config": {}, "extra": {}, "version": 0.4} -------------------------------------------------------------------------------- /Workflows/ComfyUISupir - pYFTMrPX.json: -------------------------------------------------------------------------------- 1 | {"last_node_id": 4, "last_link_id": 4, "nodes": [{"id": 2, "type": "LoadImage", "pos": [600, 0], "size": [300, 300], "flags": {}, "order": 0, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [1, 4], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "LoadImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["AnimateDiff_00052 (5).png", "image"], "color": "#223", "bgcolor": "#335"}, {"id": 3, "type": "PreviewImage", "pos": [1740, 180], "size": [240, 240], "flags": {}, "order": 2, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 2}], "properties": {"Node name for S&R": "PreviewImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 1, "type": "SUPIR_Upscale", "pos": [1140, -60], "size": [400, 634], "flags": {}, "order": 1, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 1}, {"name": "captions", "type": "STRING", "link": null, "widget": {"name": "captions"}}], "outputs": [{"name": "upscaled_image", "type": "IMAGE", "links": [2, 3], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "SUPIR_Upscale", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["SUPIR\\SUPIR-v0F.ckpt", "SDXL\\sd_xl_base_1.0.safetensors", 610508803727472, "randomize", "lanczos", 2, 45, -1, 7.5, "high quality, detailed", "bad quality, blurry, messy", 5, 1.003, 1, 0, 0, "None", true, true, 512, 64, "", "auto", "auto", 1], "color": "#223", "bgcolor": "#335"}, {"id": 4, "type": "Image Comparer (rgthree)", "pos": {"0": 2100, "1": 60, "2": 0, "3": 0, "4": 0, "5": 0, "6": 0, "7": 0, "8": 0, "9": 0}, "size": [900, 480], "flags": {}, "order": 3, "mode": 0, "inputs": [{"name": "image_a", "type": "IMAGE", "link": 4, "dir": 3}, {"name": "image_b", "type": "IMAGE", "link": 3, "dir": 3}], "outputs": [], "properties": {"comparer_mode": "Slide"}, "widgets_values": [["/view?filename=rgthree.compare._temp_mynbi_00001_.png&type=temp&subfolder=&rand=0.3525632100612268", "/view?filename=rgthree.compare._temp_mynbi_00002_.png&type=temp&subfolder=&rand=0.6704004636000305"]]}], "links": [[1, 2, 0, 1, 0, "IMAGE"], [2, 1, 0, 3, 0, "IMAGE"], [3, 1, 0, 4, 1, "IMAGE"], [4, 2, 0, 4, 0, "IMAGE"]], "groups": [], "config": {}, "extra": {}, "version": 0.4} -------------------------------------------------------------------------------- /Workflows/GraftingScribbles.json: -------------------------------------------------------------------------------- 1 | {"last_node_id": 18, "last_link_id": 40, "nodes": [{"id": 16, "type": "IPAdapterModelLoader", "pos": [0, -180], "size": {"0": 315, "1": 58}, "flags": {}, "order": 0, "mode": 0, "outputs": [{"name": "IPADAPTER", "type": "IPADAPTER", "links": [33], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "IPAdapterModelLoader", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["ip-adapter_sdxl_vit-h.bin"], "color": "#223", "bgcolor": "#335"}, {"id": 15, "type": "CLIPVisionLoader", "pos": [0, -60], "size": {"0": 315, "1": 58}, "flags": {}, "order": 1, "mode": 0, "outputs": [{"name": "CLIP_VISION", "type": "CLIP_VISION", "links": [32], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "CLIPVisionLoader", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["CLIP-ViT-H-14-laion2B-s32B-b79K.safetensors"], "color": "#223", "bgcolor": "#335"}, {"id": 1, "type": "CheckpointLoaderSimple", "pos": [0, 60], "size": {"0": 315, "1": 98}, "flags": {}, "order": 2, "mode": 0, "outputs": [{"name": "MODEL", "type": "MODEL", "links": [29], "shape": 3, "slot_index": 0}, {"name": "CLIP", "type": "CLIP", "links": [4], "shape": 3, "slot_index": 1}, {"name": "VAE", "type": "VAE", "links": [7], "shape": 3, "slot_index": 2}], "properties": {"Node name for S&R": "CheckpointLoaderSimple", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["JuggernautXL\\juggernautXL_v9Rdphoto2Lightning.safetensors"], "color": "#223", "bgcolor": "#335"}, {"id": 7, "type": "ControlNetLoader", "pos": [0, 240], "size": {"0": 315, "1": 58}, "flags": {}, "order": 3, "mode": 0, "outputs": [{"name": "CONTROL_NET", "type": "CONTROL_NET", "links": [9], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "ControlNetLoader", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["controlnet-scribble-sdxl-1.0.safetensors"], "color": "#223", "bgcolor": "#335"}, {"id": 3, "type": "GR Prompt Selector", "pos": [360, -180], "size": {"0": 400, "1": 490}, "flags": {}, "order": 8, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 4}], "outputs": [{"name": "positive", "type": "CONDITIONING", "links": [11, 27], "shape": 3, "slot_index": 0}, {"name": "negative", "type": "CONDITIONING", "links": [12, 28], "shape": 3, "slot_index": 1}, {"name": "prompts", "type": "STRING", "links": null, "shape": 3}], "properties": {"Node name for S&R": "GR Prompt Selector", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["a yacht in the water", "", "", "", "", "", ",realistic, highly detailed, 4k, uhd", "nsfw", 1], "color": "#223", "bgcolor": "#335"}, {"id": 13, "type": "IPAdapterAdvanced", "pos": [840, -180], "size": {"0": 315, "1": 278}, "flags": {}, "order": 9, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 29}, {"name": "ipadapter", "type": "IPADAPTER", "link": 33}, {"name": "image", "type": "IMAGE", "link": 31}, {"name": "image_negative", "type": "IMAGE", "link": null}, {"name": "attn_mask", "type": "MASK", "link": null}, {"name": "clip_vision", "type": "CLIP_VISION", "link": 32}], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [30, 34, 35], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "IPAdapterAdvanced", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [0.6, "strong style transfer", "concat", 0, 1, "V only"], "color": "#223", "bgcolor": "#335"}, {"id": 8, "type": "ControlNetApplyAdvanced", "pos": [840, 180], "size": {"0": 315, "1": 166}, "flags": {}, "order": 10, "mode": 0, "inputs": [{"name": "positive", "type": "CONDITIONING", "link": 11}, {"name": "negative", "type": "CONDITIONING", "link": 12}, {"name": "control_net", "type": "CONTROL_NET", "link": 9}, {"name": "image", "type": "IMAGE", "link": 40}], "outputs": [{"name": "positive", "type": "CONDITIONING", "links": [15, 19], "shape": 3, "slot_index": 0}, {"name": "negative", "type": "CONDITIONING", "links": [16, 20], "shape": 3, "slot_index": 1}], "properties": {"Node name for S&R": "ControlNetApplyAdvanced", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [1, 0, 1], "color": "#223", "bgcolor": "#335"}, {"id": 2, "type": "KSampler", "pos": [1260, -180], "size": {"0": 300, "1": 480}, "flags": {}, "order": 11, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 30}, {"name": "positive", "type": "CONDITIONING", "link": 15}, {"name": "negative", "type": "CONDITIONING", "link": 16}, {"name": "latent_image", "type": "LATENT", "link": 5}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [17], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "KSampler", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [1061820553055462, "fixed", 8, 3, "lcm", "normal", 1], "color": "#223", "bgcolor": "#335"}, {"id": 10, "type": "KSampler", "pos": [1620, -180], "size": {"0": 300, "1": 480}, "flags": {}, "order": 12, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 34}, {"name": "positive", "type": "CONDITIONING", "link": 19}, {"name": "negative", "type": "CONDITIONING", "link": 20}, {"name": "latent_image", "type": "LATENT", "link": 17}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [25], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "KSampler", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [896343123186992, "fixed", 8, 3, "lcm", "normal", 0.8], "color": "#223", "bgcolor": "#335"}, {"id": 12, "type": "KSampler", "pos": [1980, -180], "size": {"0": 300, "1": 480}, "flags": {}, "order": 13, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 35}, {"name": "positive", "type": "CONDITIONING", "link": 27}, {"name": "negative", "type": "CONDITIONING", "link": 28}, {"name": "latent_image", "type": "LATENT", "link": 25}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [26], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "KSampler", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [794031616513488, "fixed", 8, 3, "lcm", "normal", 0.6], "color": "#223", "bgcolor": "#335"}, {"id": 5, "type": "VAEDecode", "pos": [2340, -180], "size": {"0": 210, "1": 46}, "flags": {}, "order": 14, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 26}, {"name": "vae", "type": "VAE", "link": 7}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [8, 38], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "VAEDecode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 6, "type": "PreviewImage", "pos": [2640, -180], "size": {"0": 240, "1": 240}, "flags": {}, "order": 15, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 8}], "properties": {"Node name for S&R": "PreviewImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 17, "type": "LoadImage", "pos": [0, 420], "size": [300, 300], "flags": {}, "order": 4, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [37], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "LoadImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["desktop-wallpaper-of-easy-drawings-clip-art-clip-art-on-clipart-library-easy-trace (3).jpg", "image"], "color": "#223", "bgcolor": "#335"}, {"id": 14, "type": "LoadImage", "pos": [360, 420], "size": {"0": 300, "1": 300}, "flags": {}, "order": 5, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [31], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "LoadImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["gemstone-1576233_1280 (1).jpg", "image"], "color": "#223", "bgcolor": "#335"}, {"id": 9, "type": "Canvas_Tab", "pos": [0, 780], "size": {"0": 210, "1": 366}, "flags": {}, "order": 6, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [40], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "Canvas_Tab", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [false, "bingo", "", ""], "color": "#223", "bgcolor": "#335"}, {"id": 4, "type": "GR Image Size", "pos": [840, 480], "size": {"0": 315, "1": 170}, "flags": {}, "order": 7, "mode": 0, "outputs": [{"name": "height", "type": "INT", "links": null, "shape": 3}, {"name": "width", "type": "INT", "links": null, "shape": 3}, {"name": "samples", "type": "LATENT", "links": [5], "shape": 3, "slot_index": 2}], "properties": {"Node name for S&R": "GR Image Size", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [512, 512, "(SDXL) 1024x1024", 1], "color": "#223", "bgcolor": "#335"}, {"id": 18, "type": "Image Comparer (rgthree)", "pos": {"0": 2940, "1": -180, "2": 0, "3": 0, "4": 0, "5": 0, "6": 0, "7": 0, "8": 0, "9": 0}, "size": [660, 540], "flags": {}, "order": 16, "mode": 0, "inputs": [{"name": "image_a", "type": "IMAGE", "link": 37, "dir": 3}, {"name": "image_b", "type": "IMAGE", "link": 38, "dir": 3}], "outputs": [], "properties": {"comparer_mode": "Slide", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [["/view?filename=rgthree.compare._temp_dxcpk_00023_.png&type=temp&subfolder=&rand=0.5665969288457715", "/view?filename=rgthree.compare._temp_dxcpk_00024_.png&type=temp&subfolder=&rand=0.559777481223048"]], "color": "#223", "bgcolor": "#335"}], "links": [[4, 1, 1, 3, 0, "CLIP"], [5, 4, 2, 2, 3, "LATENT"], [7, 1, 2, 5, 1, "VAE"], [8, 5, 0, 6, 0, "IMAGE"], [9, 7, 0, 8, 2, "CONTROL_NET"], [11, 3, 0, 8, 0, "CONDITIONING"], [12, 3, 1, 8, 1, "CONDITIONING"], [15, 8, 0, 2, 1, "CONDITIONING"], [16, 8, 1, 2, 2, "CONDITIONING"], [17, 2, 0, 10, 3, "LATENT"], [19, 8, 0, 10, 1, "CONDITIONING"], [20, 8, 1, 10, 2, "CONDITIONING"], [25, 10, 0, 12, 3, "LATENT"], [26, 12, 0, 5, 0, "LATENT"], [27, 3, 0, 12, 1, "CONDITIONING"], [28, 3, 1, 12, 2, "CONDITIONING"], [29, 1, 0, 13, 0, "MODEL"], [30, 13, 0, 2, 0, "MODEL"], [31, 14, 0, 13, 2, "IMAGE"], [32, 15, 0, 13, 5, "CLIP_VISION"], [33, 16, 0, 13, 1, "IPADAPTER"], [34, 13, 0, 10, 0, "MODEL"], [35, 13, 0, 12, 0, "MODEL"], [37, 17, 0, 18, 0, "IMAGE"], [38, 5, 0, 18, 1, "IMAGE"], [40, 9, 0, 8, 3, "IMAGE"]], "groups": [], "config": {}, "extra": {}, "version": 0.4} 2 | -------------------------------------------------------------------------------- /Workflows/ModelMerging.json: -------------------------------------------------------------------------------- 1 | { 2 | "last_node_id": 17, 3 | "last_link_id": 30, 4 | "nodes": [ 5 | { 6 | "id": 3, 7 | "type": "KSampler", 8 | "pos": [ 9 | 2420.186004638672, 10 | 130 11 | ], 12 | "size": { 13 | "0": 337.6363525390625, 14 | "1": 712.8181762695312 15 | }, 16 | "flags": {}, 17 | "order": 11, 18 | "mode": 0, 19 | "inputs": [ 20 | { 21 | "name": "model", 22 | "type": "MODEL", 23 | "link": 19 24 | }, 25 | { 26 | "name": "positive", 27 | "type": "CONDITIONING", 28 | "link": 4 29 | }, 30 | { 31 | "name": "negative", 32 | "type": "CONDITIONING", 33 | "link": 6 34 | }, 35 | { 36 | "name": "latent_image", 37 | "type": "LATENT", 38 | "link": 2 39 | } 40 | ], 41 | "outputs": [ 42 | { 43 | "name": "LATENT", 44 | "type": "LATENT", 45 | "links": [ 46 | 7 47 | ], 48 | "slot_index": 0 49 | } 50 | ], 51 | "properties": { 52 | "Node name for S&R": "KSampler" 53 | }, 54 | "widgets_values": [ 55 | 454616331707193, 56 | "fixed", 57 | 50, 58 | 6, 59 | "euler", 60 | "normal", 61 | 0.9 62 | ] 63 | }, 64 | { 65 | "id": 6, 66 | "type": "CLIPTextEncode", 67 | "pos": [ 68 | 1894.9079895019531, 69 | 130 70 | ], 71 | "size": { 72 | "0": 422.84503173828125, 73 | "1": 164.31304931640625 74 | }, 75 | "flags": {}, 76 | "order": 9, 77 | "mode": 0, 78 | "inputs": [ 79 | { 80 | "name": "clip", 81 | "type": "CLIP", 82 | "link": 17 83 | } 84 | ], 85 | "outputs": [ 86 | { 87 | "name": "CONDITIONING", 88 | "type": "CONDITIONING", 89 | "links": [ 90 | 4 91 | ], 92 | "slot_index": 0 93 | } 94 | ], 95 | "properties": { 96 | "Node name for S&R": "CLIPTextEncode" 97 | }, 98 | "widgets_values": [ 99 | "american girl sun bathing at the beach, best quality, 1girl, dark brown hair, purple eyes, long hair, detailed eyes, detailed hair, cute, perfect face, detailed face, flowing long hair, backlight, dynamic, realism, hyper realistic, ultra detailed, lifelike, upper body, composition, fully clothed, loose clothing, sfw" 100 | ] 101 | }, 102 | { 103 | "id": 7, 104 | "type": "CLIPTextEncode", 105 | "pos": [ 106 | 1894.9079895019531, 107 | 424.31304931640625 108 | ], 109 | "size": { 110 | "0": 425.27801513671875, 111 | "1": 180.6060791015625 112 | }, 113 | "flags": {}, 114 | "order": 10, 115 | "mode": 0, 116 | "inputs": [ 117 | { 118 | "name": "clip", 119 | "type": "CLIP", 120 | "link": 18 121 | } 122 | ], 123 | "outputs": [ 124 | { 125 | "name": "CONDITIONING", 126 | "type": "CONDITIONING", 127 | "links": [ 128 | 6 129 | ], 130 | "slot_index": 0 131 | } 132 | ], 133 | "properties": { 134 | "Node name for S&R": "CLIPTextEncode" 135 | }, 136 | "widgets_values": [ 137 | "text, watermark, low quality, worst quality, letterboxed, mutated hands and fingers, bad anatomy, wrong anatomy, easynegative, ugly, mutation:1.2, static, dull, boring, bad eyes, empty space, nsfw, msfw, nudity, nude" 138 | ] 139 | }, 140 | { 141 | "id": 5, 142 | "type": "EmptyLatentImage", 143 | "pos": [ 144 | 100, 145 | 130 146 | ], 147 | "size": { 148 | "0": 315, 149 | "1": 106 150 | }, 151 | "flags": {}, 152 | "order": 0, 153 | "mode": 0, 154 | "outputs": [ 155 | { 156 | "name": "LATENT", 157 | "type": "LATENT", 158 | "links": [ 159 | 2 160 | ], 161 | "slot_index": 0 162 | } 163 | ], 164 | "properties": { 165 | "Node name for S&R": "EmptyLatentImage" 166 | }, 167 | "widgets_values": [ 168 | 512, 169 | 512, 170 | 1 171 | ] 172 | }, 173 | { 174 | "id": 12, 175 | "type": "CheckpointSave", 176 | "pos": [ 177 | 1064.9079895019531, 178 | 130 179 | ], 180 | "size": { 181 | "0": 315, 182 | "1": 98 183 | }, 184 | "flags": {}, 185 | "order": 6, 186 | "mode": 0, 187 | "inputs": [ 188 | { 189 | "name": "model", 190 | "type": "MODEL", 191 | "link": 13 192 | }, 193 | { 194 | "name": "clip", 195 | "type": "CLIP", 196 | "link": 14 197 | }, 198 | { 199 | "name": "vae", 200 | "type": "VAE", 201 | "link": 15 202 | } 203 | ], 204 | "properties": { 205 | "Node name for S&R": "CheckpointSave" 206 | }, 207 | "widgets_values": [ 208 | "checkpoints/ComfyUI" 209 | ] 210 | }, 211 | { 212 | "id": 10, 213 | "type": "CheckpointLoaderSimple", 214 | "pos": [ 215 | 100, 216 | 366 217 | ], 218 | "size": [ 219 | 440.3999902343751, 220 | 115.8100049209595 221 | ], 222 | "flags": {}, 223 | "order": 1, 224 | "mode": 0, 225 | "outputs": [ 226 | { 227 | "name": "MODEL", 228 | "type": "MODEL", 229 | "links": [ 230 | 10 231 | ], 232 | "shape": 3, 233 | "slot_index": 0 234 | }, 235 | { 236 | "name": "CLIP", 237 | "type": "CLIP", 238 | "links": null, 239 | "shape": 3 240 | }, 241 | { 242 | "name": "VAE", 243 | "type": "VAE", 244 | "links": null, 245 | "shape": 3 246 | } 247 | ], 248 | "properties": { 249 | "Node name for S&R": "CheckpointLoaderSimple" 250 | }, 251 | "widgets_values": [ 252 | "epicrealism_naturalSinRC1VAE.safetensors" 253 | ] 254 | }, 255 | { 256 | "id": 8, 257 | "type": "VAEDecode", 258 | "pos": [ 259 | 2857.8223571777344, 260 | 130 261 | ], 262 | "size": { 263 | "0": 210, 264 | "1": 46 265 | }, 266 | "flags": {}, 267 | "order": 12, 268 | "mode": 0, 269 | "inputs": [ 270 | { 271 | "name": "samples", 272 | "type": "LATENT", 273 | "link": 7 274 | }, 275 | { 276 | "name": "vae", 277 | "type": "VAE", 278 | "link": 8 279 | } 280 | ], 281 | "outputs": [ 282 | { 283 | "name": "IMAGE", 284 | "type": "IMAGE", 285 | "links": [ 286 | 22 287 | ], 288 | "slot_index": 0 289 | } 290 | ], 291 | "properties": { 292 | "Node name for S&R": "VAEDecode" 293 | } 294 | }, 295 | { 296 | "id": 15, 297 | "type": "ImageUpscaleWithModel", 298 | "pos": [ 299 | 3167.8223571777344, 300 | 130 301 | ], 302 | "size": { 303 | "0": 241.79998779296875, 304 | "1": 46 305 | }, 306 | "flags": {}, 307 | "order": 13, 308 | "mode": 0, 309 | "inputs": [ 310 | { 311 | "name": "upscale_model", 312 | "type": "UPSCALE_MODEL", 313 | "link": 23, 314 | "slot_index": 0 315 | }, 316 | { 317 | "name": "image", 318 | "type": "IMAGE", 319 | "link": 22 320 | } 321 | ], 322 | "outputs": [ 323 | { 324 | "name": "IMAGE", 325 | "type": "IMAGE", 326 | "links": [ 327 | 21 328 | ], 329 | "shape": 3, 330 | "slot_index": 0 331 | } 332 | ], 333 | "properties": { 334 | "Node name for S&R": "ImageUpscaleWithModel" 335 | } 336 | }, 337 | { 338 | "id": 14, 339 | "type": "UpscaleModelLoader", 340 | "pos": [ 341 | 100, 342 | 611.8100049209595 343 | ], 344 | "size": [ 345 | 352.1099999999999, 346 | 71.39000000000004 347 | ], 348 | "flags": {}, 349 | "order": 2, 350 | "mode": 0, 351 | "outputs": [ 352 | { 353 | "name": "UPSCALE_MODEL", 354 | "type": "UPSCALE_MODEL", 355 | "links": [ 356 | 23 357 | ], 358 | "shape": 3, 359 | "slot_index": 0 360 | } 361 | ], 362 | "properties": { 363 | "Node name for S&R": "UpscaleModelLoader" 364 | }, 365 | "widgets_values": [ 366 | "4x_NMKD-Superscale-SP_178000_G.pth" 367 | ] 368 | }, 369 | { 370 | "id": 4, 371 | "type": "CheckpointLoaderSimple", 372 | "pos": [ 373 | 100, 374 | 813.2000049209596 375 | ], 376 | "size": { 377 | "0": 449.9079895019531, 378 | "1": 99.92636108398438 379 | }, 380 | "flags": {}, 381 | "order": 3, 382 | "mode": 0, 383 | "outputs": [ 384 | { 385 | "name": "MODEL", 386 | "type": "MODEL", 387 | "links": [ 388 | 11 389 | ], 390 | "slot_index": 0 391 | }, 392 | { 393 | "name": "CLIP", 394 | "type": "CLIP", 395 | "links": [ 396 | 14, 397 | 26 398 | ], 399 | "slot_index": 1 400 | }, 401 | { 402 | "name": "VAE", 403 | "type": "VAE", 404 | "links": [ 405 | 8, 406 | 15 407 | ], 408 | "slot_index": 2 409 | } 410 | ], 411 | "properties": { 412 | "Node name for S&R": "CheckpointLoaderSimple" 413 | }, 414 | "widgets_values": [ 415 | "sborkaRandom_v10.safetensors" 416 | ] 417 | }, 418 | { 419 | "id": 11, 420 | "type": "ModelMergeSimple", 421 | "pos": [ 422 | 649.9079895019531, 423 | 130 424 | ], 425 | "size": { 426 | "0": 315, 427 | "1": 78 428 | }, 429 | "flags": {}, 430 | "order": 5, 431 | "mode": 0, 432 | "inputs": [ 433 | { 434 | "name": "model1", 435 | "type": "MODEL", 436 | "link": 11 437 | }, 438 | { 439 | "name": "model2", 440 | "type": "MODEL", 441 | "link": 10 442 | } 443 | ], 444 | "outputs": [ 445 | { 446 | "name": "MODEL", 447 | "type": "MODEL", 448 | "links": [ 449 | 13, 450 | 28 451 | ], 452 | "shape": 3, 453 | "slot_index": 0 454 | } 455 | ], 456 | "properties": { 457 | "Node name for S&R": "ModelMergeSimple" 458 | }, 459 | "widgets_values": [ 460 | 0.9 461 | ] 462 | }, 463 | { 464 | "id": 16, 465 | "type": "LoraLoader", 466 | "pos": [ 467 | 1064.9079895019531, 468 | 358 469 | ], 470 | "size": { 471 | "0": 315, 472 | "1": 126 473 | }, 474 | "flags": {}, 475 | "order": 7, 476 | "mode": 0, 477 | "inputs": [ 478 | { 479 | "name": "model", 480 | "type": "MODEL", 481 | "link": 28 482 | }, 483 | { 484 | "name": "clip", 485 | "type": "CLIP", 486 | "link": 26 487 | } 488 | ], 489 | "outputs": [ 490 | { 491 | "name": "MODEL", 492 | "type": "MODEL", 493 | "links": [ 494 | 29 495 | ], 496 | "shape": 3, 497 | "slot_index": 0 498 | }, 499 | { 500 | "name": "CLIP", 501 | "type": "CLIP", 502 | "links": [ 503 | 25 504 | ], 505 | "shape": 3, 506 | "slot_index": 1 507 | } 508 | ], 509 | "properties": { 510 | "Node name for S&R": "LoraLoader" 511 | }, 512 | "widgets_values": [ 513 | "SDXLHighDetail_v5.safetensors", 514 | 0.5, 515 | 0.6 516 | ] 517 | }, 518 | { 519 | "id": 9, 520 | "type": "SaveImage", 521 | "pos": [ 522 | 3509.622344970703, 523 | 130 524 | ], 525 | "size": [ 526 | 507.0909118652344, 527 | 608.0908813476562 528 | ], 529 | "flags": {}, 530 | "order": 14, 531 | "mode": 0, 532 | "inputs": [ 533 | { 534 | "name": "images", 535 | "type": "IMAGE", 536 | "link": 21 537 | }, 538 | { 539 | "name": "filename_prefix", 540 | "type": "STRING", 541 | "link": 30, 542 | "widget": { 543 | "name": "filename_prefix" 544 | } 545 | } 546 | ], 547 | "properties": {}, 548 | "widgets_values": [ 549 | "GraftingLayman-%date:yyyy-MM-dd%/%date:hhmmss%_%KSampler.seed%" 550 | ] 551 | }, 552 | { 553 | "id": 17, 554 | "type": "PrimitiveNode", 555 | "pos": [ 556 | 100, 557 | 1043.126366004944 558 | ], 559 | "size": { 560 | "0": 210, 561 | "1": 58 562 | }, 563 | "flags": {}, 564 | "order": 4, 565 | "mode": 0, 566 | "outputs": [ 567 | { 568 | "name": "STRING", 569 | "type": "STRING", 570 | "links": [ 571 | 30 572 | ], 573 | "slot_index": 0, 574 | "widget": { 575 | "name": "filename_prefix" 576 | } 577 | } 578 | ], 579 | "properties": { 580 | "Run widget replace on values": false 581 | }, 582 | "widgets_values": [ 583 | "GraftingLayman-%date:yyyy-MM-dd%/%date:hhmmss%_%KSampler.seed%" 584 | ] 585 | }, 586 | { 587 | "id": 13, 588 | "type": "LoraLoader", 589 | "pos": [ 590 | 1479.9079895019531, 591 | 130 592 | ], 593 | "size": { 594 | "0": 315, 595 | "1": 126 596 | }, 597 | "flags": {}, 598 | "order": 8, 599 | "mode": 0, 600 | "inputs": [ 601 | { 602 | "name": "model", 603 | "type": "MODEL", 604 | "link": 29, 605 | "slot_index": 0 606 | }, 607 | { 608 | "name": "clip", 609 | "type": "CLIP", 610 | "link": 25 611 | } 612 | ], 613 | "outputs": [ 614 | { 615 | "name": "MODEL", 616 | "type": "MODEL", 617 | "links": [ 618 | 19 619 | ], 620 | "shape": 3, 621 | "slot_index": 0 622 | }, 623 | { 624 | "name": "CLIP", 625 | "type": "CLIP", 626 | "links": [ 627 | 17, 628 | 18 629 | ], 630 | "shape": 3, 631 | "slot_index": 1 632 | } 633 | ], 634 | "properties": { 635 | "Node name for S&R": "LoraLoader" 636 | }, 637 | "widgets_values": [ 638 | "DetailedEyes_V3.safetensors", 639 | 0.99, 640 | 1 641 | ] 642 | } 643 | ], 644 | "links": [ 645 | [ 646 | 2, 647 | 5, 648 | 0, 649 | 3, 650 | 3, 651 | "LATENT" 652 | ], 653 | [ 654 | 4, 655 | 6, 656 | 0, 657 | 3, 658 | 1, 659 | "CONDITIONING" 660 | ], 661 | [ 662 | 6, 663 | 7, 664 | 0, 665 | 3, 666 | 2, 667 | "CONDITIONING" 668 | ], 669 | [ 670 | 7, 671 | 3, 672 | 0, 673 | 8, 674 | 0, 675 | "LATENT" 676 | ], 677 | [ 678 | 8, 679 | 4, 680 | 2, 681 | 8, 682 | 1, 683 | "VAE" 684 | ], 685 | [ 686 | 10, 687 | 10, 688 | 0, 689 | 11, 690 | 1, 691 | "MODEL" 692 | ], 693 | [ 694 | 11, 695 | 4, 696 | 0, 697 | 11, 698 | 0, 699 | "MODEL" 700 | ], 701 | [ 702 | 13, 703 | 11, 704 | 0, 705 | 12, 706 | 0, 707 | "MODEL" 708 | ], 709 | [ 710 | 14, 711 | 4, 712 | 1, 713 | 12, 714 | 1, 715 | "CLIP" 716 | ], 717 | [ 718 | 15, 719 | 4, 720 | 2, 721 | 12, 722 | 2, 723 | "VAE" 724 | ], 725 | [ 726 | 17, 727 | 13, 728 | 1, 729 | 6, 730 | 0, 731 | "CLIP" 732 | ], 733 | [ 734 | 18, 735 | 13, 736 | 1, 737 | 7, 738 | 0, 739 | "CLIP" 740 | ], 741 | [ 742 | 19, 743 | 13, 744 | 0, 745 | 3, 746 | 0, 747 | "MODEL" 748 | ], 749 | [ 750 | 21, 751 | 15, 752 | 0, 753 | 9, 754 | 0, 755 | "IMAGE" 756 | ], 757 | [ 758 | 22, 759 | 8, 760 | 0, 761 | 15, 762 | 1, 763 | "IMAGE" 764 | ], 765 | [ 766 | 23, 767 | 14, 768 | 0, 769 | 15, 770 | 0, 771 | "UPSCALE_MODEL" 772 | ], 773 | [ 774 | 25, 775 | 16, 776 | 1, 777 | 13, 778 | 1, 779 | "CLIP" 780 | ], 781 | [ 782 | 26, 783 | 4, 784 | 1, 785 | 16, 786 | 1, 787 | "CLIP" 788 | ], 789 | [ 790 | 28, 791 | 11, 792 | 0, 793 | 16, 794 | 0, 795 | "MODEL" 796 | ], 797 | [ 798 | 29, 799 | 16, 800 | 0, 801 | 13, 802 | 0, 803 | "MODEL" 804 | ], 805 | [ 806 | 30, 807 | 17, 808 | 0, 809 | 9, 810 | 1, 811 | "STRING" 812 | ] 813 | ], 814 | "groups": [], 815 | "config": {}, 816 | "extra": {}, 817 | "version": 0.4 818 | } -------------------------------------------------------------------------------- /Workflows/PortraitMaster2.3 - q2ni5Hsd.json: -------------------------------------------------------------------------------- 1 | {"last_node_id": 39, "last_link_id": 52, "nodes": [{"id": 14, "type": "ShowText|pysssss", "pos": [1800, 1160], "size": [400, 80], "flags": {}, "order": 31, "mode": 0, "inputs": [{"name": "text", "type": "STRING", "link": 17, "widget": {"name": "text"}}], "outputs": [{"name": "STRING", "type": "STRING", "links": null, "shape": 6}], "properties": {"Node name for S&R": "ShowText|pysssss", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["", "a woman with a red eye and a black nose ring on her head and a red dress on her body"], "color": "#223", "bgcolor": "#335"}, {"id": 6, "type": "VAEDecode", "pos": [2280, 40], "size": {"0": 210, "1": 46}, "flags": {}, "order": 26, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 33}, {"name": "vae", "type": "VAE", "link": 12}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [8, 15, 16], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "VAEDecode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 17, "type": "PrimitiveNode", "pos": [0, 400], "size": [280, 120], "flags": {}, "order": 0, "mode": 0, "outputs": [{"name": "COMBO", "type": "COMBO", "links": [20], "slot_index": 0, "widget": {"name": "nationality_1"}}], "title": "Nationality 1", "properties": {"Run widget replace on values": false}, "widgets_values": ["Gambian", "randomize", ""]}, {"id": 18, "type": "PrimitiveNode", "pos": [0, 560], "size": [280, 120], "flags": {}, "order": 1, "mode": 0, "outputs": [{"name": "COMBO", "type": "COMBO", "links": [21], "slot_index": 0, "widget": {"name": "nationality_2"}}], "title": "Nationality 2", "properties": {"Run widget replace on values": false}, "widgets_values": ["Panamanian", "randomize", ""]}, {"id": 16, "type": "PrimitiveNode", "pos": [0, 240], "size": [280, 120], "flags": {}, "order": 2, "mode": 0, "outputs": [{"name": "COMBO", "type": "COMBO", "links": [19], "slot_index": 0, "widget": {"name": "gender"}}], "title": "Gender", "properties": {"Run widget replace on values": false}, "widgets_values": ["Woman", "fixed", ""]}, {"id": 20, "type": "PrimitiveNode", "pos": [0, 880], "size": [280, 120], "flags": {}, "order": 3, "mode": 0, "outputs": [{"name": "COMBO", "type": "COMBO", "links": [23], "slot_index": 0, "widget": {"name": "model_pose"}}], "title": "Model Pose", "properties": {"Run widget replace on values": false}, "widgets_values": ["High Fashion Pose", "randomize", ""]}, {"id": 15, "type": "PrimitiveNode", "pos": [0, 80], "size": [280, 120], "flags": {}, "order": 4, "mode": 0, "outputs": [{"name": "COMBO", "type": "COMBO", "links": [18], "slot_index": 0, "widget": {"name": "shot"}}], "title": "Shot", "properties": {"Run widget replace on values": false}, "widgets_values": ["Close-up", "randomize", ""]}, {"id": 19, "type": "PrimitiveNode", "pos": [0, 720], "size": [280, 120], "flags": {}, "order": 5, "mode": 0, "outputs": [{"name": "COMBO", "type": "COMBO", "links": [22], "slot_index": 0, "widget": {"name": "body_type"}}], "title": "Body Type", "properties": {"Run widget replace on values": false}, "widgets_values": ["Normal weight", "randomize", ""]}, {"id": 21, "type": "PrimitiveNode", "pos": [0, 1040], "size": [280, 120], "flags": {}, "order": 6, "mode": 0, "outputs": [{"name": "COMBO", "type": "COMBO", "links": [24], "slot_index": 0, "widget": {"name": "eyes_color"}}], "title": "Eye Colour", "properties": {"Run widget replace on values": false}, "widgets_values": ["Gray", "randomize", ""]}, {"id": 22, "type": "PrimitiveNode", "pos": [0, 1200], "size": [280, 120], "flags": {}, "order": 7, "mode": 0, "outputs": [{"name": "COMBO", "type": "COMBO", "links": [25], "slot_index": 0, "widget": {"name": "facial_expression"}}], "title": "Facial Expression", "properties": {"Run widget replace on values": false}, "widgets_values": ["-", "randomize", ""]}, {"id": 23, "type": "PrimitiveNode", "pos": [320, 80], "size": [280, 120], "flags": {}, "order": 8, "mode": 0, "outputs": [{"name": "COMBO", "type": "COMBO", "links": [26], "slot_index": 0, "widget": {"name": "face_shape"}}], "title": "Face Shape", "properties": {"Run widget replace on values": false}, "widgets_values": ["Inverted Triangle", "fixed", ""]}, {"id": 24, "type": "PrimitiveNode", "pos": [320, 240], "size": [280, 120], "flags": {}, "order": 9, "mode": 0, "outputs": [{"name": "COMBO", "type": "COMBO", "links": [27], "slot_index": 0, "widget": {"name": "hair_style"}}], "title": "Hair Style", "properties": {"Run widget replace on values": false}, "widgets_values": ["Textured cut", "randomize", ""]}, {"id": 25, "type": "PrimitiveNode", "pos": [320, 400], "size": [280, 120], "flags": {}, "order": 10, "mode": 0, "outputs": [{"name": "COMBO", "type": "COMBO", "links": [28], "slot_index": 0, "widget": {"name": "hair_color"}}], "title": "Hair Colour", "properties": {"Run widget replace on values": false}, "widgets_values": ["White", "randomize", ""]}, {"id": 26, "type": "PrimitiveNode", "pos": [320, 560], "size": [280, 120], "flags": {}, "order": 11, "mode": 0, "outputs": [{"name": "COMBO", "type": "COMBO", "links": [29], "slot_index": 0, "widget": {"name": "beard"}}], "title": "Beard", "properties": {"Run widget replace on values": false}, "widgets_values": ["-", "fixed", ""]}, {"id": 27, "type": "PrimitiveNode", "pos": [320, 720], "size": [280, 120], "flags": {}, "order": 12, "mode": 0, "outputs": [{"name": "COMBO", "type": "COMBO", "links": [30], "slot_index": 0, "widget": {"name": "light_type"}}], "title": "Light Type", "properties": {"Run widget replace on values": false}, "widgets_values": ["Skylight", "fixed", ""]}, {"id": 2, "type": "CLIPTextEncode", "pos": [1360, -40], "size": [400, 200], "flags": {}, "order": 19, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 10}, {"name": "text", "type": "STRING", "link": 1, "widget": {"name": "text"}}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [3, 36], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "CLIPTextEncode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [""], "color": "#223", "bgcolor": "#335"}, {"id": 28, "type": "PrimitiveNode", "pos": [320, 880], "size": [280, 120], "flags": {}, "order": 13, "mode": 0, "outputs": [{"name": "COMBO", "type": "COMBO", "links": [31], "slot_index": 0, "widget": {"name": "light_direction"}}], "title": "Light Direction", "properties": {"Run widget replace on values": false}, "widgets_values": ["from front", "fixed", ""]}, {"id": 31, "type": "PrimitiveNode", "pos": [320, 1040], "size": [280, 120], "flags": {}, "order": 14, "mode": 0, "outputs": [{"name": "COMBO", "type": "COMBO", "links": [39], "slot_index": 0, "widget": {"name": "photorealism_improvement"}}], "title": "Photorealism", "properties": {"Run widget replace on values": false}, "widgets_values": ["enable", "fixed", ""]}, {"id": 30, "type": "Seed Everywhere", "pos": [560, -120], "size": {"0": 320, "1": 120}, "flags": {}, "order": 15, "mode": 0, "outputs": [{"name": "INT", "type": "INT", "links": [37, 38], "shape": 3, "slot_index": 0}], "properties": {"group_restricted": false, "color_restricted": false, "Node name for S&R": "Seed Everywhere", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [442536742768990, "fixed", "442536742768990"], "color": "#223", "bgcolor": "#335"}, {"id": 1, "type": "PortraitMaster", "pos": [640, 80], "size": [400, 1280], "flags": {}, "order": 18, "mode": 0, "inputs": [{"name": "shot", "type": "COMBO", "link": 18, "widget": {"name": "shot"}}, {"name": "gender", "type": "COMBO", "link": 19, "widget": {"name": "gender"}}, {"name": "nationality_1", "type": "COMBO", "link": 20, "widget": {"name": "nationality_1"}}, {"name": "nationality_2", "type": "COMBO", "link": 21, "widget": {"name": "nationality_2"}}, {"name": "body_type", "type": "COMBO", "link": 22, "widget": {"name": "body_type"}}, {"name": "model_pose", "type": "COMBO", "link": 23, "widget": {"name": "model_pose"}}, {"name": "eyes_color", "type": "COMBO", "link": 24, "widget": {"name": "eyes_color"}}, {"name": "facial_expression", "type": "COMBO", "link": 25, "widget": {"name": "facial_expression"}}, {"name": "face_shape", "type": "COMBO", "link": 26, "widget": {"name": "face_shape"}}, {"name": "hair_style", "type": "COMBO", "link": 27, "widget": {"name": "hair_style"}}, {"name": "hair_color", "type": "COMBO", "link": 28, "widget": {"name": "hair_color"}}, {"name": "beard", "type": "COMBO", "link": 29, "widget": {"name": "beard"}}, {"name": "light_type", "type": "COMBO", "link": 30, "widget": {"name": "light_type"}}, {"name": "light_direction", "type": "COMBO", "link": 31, "widget": {"name": "light_direction"}}, {"name": "photorealism_improvement", "type": "COMBO", "link": 39, "widget": {"name": "photorealism_improvement"}}], "outputs": [{"name": "positive", "type": "STRING", "links": [1, 13], "shape": 3, "slot_index": 0}, {"name": "negative", "type": "STRING", "links": [2, 14], "shape": 3, "slot_index": 1}], "properties": {"Node name for S&R": "PortraitMaster", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["Close-up", 1.2, "Woman", 0, 30, "Gambian", "Panamanian", 0.5, "Normal weight", 0.65, "High Fashion Pose", "Gray", "-", 0.98, "Inverted Triangle", 0.71, 1.05, "Textured cut", "White", 1.06, "-", 1.12, 0.47000000000000003, 0.3, 0.39, 0.45, 0.62, 0.16, 0.59, 0.47000000000000003, 1.2, 0.75, 0.78, 1.1300000000000001, 1.1500000000000001, "Skylight", "from front", 1.1300000000000001, "enable", "raw photo, (realistic:1.5)", "", "", "watermark, text", "-", 1.5, "-", 1.5], "color": "#223", "bgcolor": "#335"}, {"id": 13, "type": "BLIPCaption", "pos": [2440, 560], "size": {"0": 315, "1": 198}, "flags": {}, "order": 29, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 16}, {"name": "blip_model", "type": "BLIP_MODEL", "link": null}], "outputs": [{"name": "caption", "type": "STRING", "links": [17], "shape": 6, "slot_index": 0}], "properties": {"Node name for S&R": "BLIPCaption", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [24, 48, "AUTO", "", "", true], "color": "#223", "bgcolor": "#335"}, {"id": 3, "type": "CLIPTextEncode", "pos": [1160, 80], "size": {"0": 400, "1": 200}, "flags": {}, "order": 21, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 11}, {"name": "text", "type": "STRING", "link": 2, "widget": {"name": "text"}}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [4, 35], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "CLIPTextEncode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [""], "color": "#223", "bgcolor": "#335"}, {"id": 11, "type": "ShowText|pysssss", "pos": [1200, 1080], "size": [520, 160], "flags": {}, "order": 22, "mode": 0, "inputs": [{"name": "text", "type": "STRING", "link": 14, "widget": {"name": "text"}, "slot_index": 0}], "outputs": [{"name": "STRING", "type": "STRING", "links": [40], "shape": 6, "slot_index": 0}], "title": "Show Text \ud83d\udc0d Negative", "properties": {"Node name for S&R": "ShowText|pysssss", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["", "watermark, text, (shinny skin, shiny skin, reflections on the skin, skin reflections:1.35)"], "color": "#223", "bgcolor": "#335"}, {"id": 10, "type": "ShowText|pysssss", "pos": [1200, 840], "size": [520, 200], "flags": {}, "order": 20, "mode": 0, "inputs": [{"name": "text", "type": "STRING", "link": 13, "widget": {"name": "text"}, "slot_index": 0}], "outputs": [{"name": "STRING", "type": "STRING", "links": [42], "shape": 6, "slot_index": 0}], "title": "Show Text \ud83d\udc0d Positive", "properties": {"Node name for S&R": "ShowText|pysssss", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["", "raw photo, (realistic:1.5), (head and shoulders portrait:1.2), ([angolan:south sudanese:0.5] woman 30-years-old:1.5), (overweight, overweight body:0.65), (casual stroll pose:1.5), (red eyes:1.25), (proud, proud expression:0.98), (inverted triangle shape face:0.71), (mohawk hairstyle:1.25), (chestnut hair:1.25), (disheveled:1.06), (natural skin:1.12), (skin details, skin texture:0.47), (skin pores:0.3), (skin imperfections:0.59), (acne, skin with acne:0.47), (skin imperfections:0.45), (tanned skin:1.2), (dimples:0.39), (freckles:0.62), (skin pores:0.16), (eyes details:0.75), (iris details:0.78), (circular iris:1.13), (circular pupil:1.15), (facial asymmetry, face asymmetry:1.05), (skylight from front:1.13), (professional photo, balanced photo, balanced exposure:1.2)"], "color": "#223", "bgcolor": "#335"}, {"id": 12, "type": "WD14Tagger|pysssss", "pos": [1800, 840], "size": [400, 240], "flags": {}, "order": 28, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 15}], "outputs": [{"name": "STRING", "type": "STRING", "links": [43], "shape": 6, "slot_index": 0}], "properties": {"Node name for S&R": "WD14Tagger|pysssss", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["wd-v1-4-moat-tagger-v2", 0.35, 0.85, "", "solo, black_hair, red_eyes, 1boy, jewelry, collarbone, male_focus, earrings, teeth, dark_skin, grey_background, dark-skinned_male, tank_top, realistic, very_dark_skin, dreadlocks"], "color": "#223", "bgcolor": "#335"}, {"id": 36, "type": "StringFunction|pysssss", "pos": [2400, 800], "size": {"0": 440, "1": 320}, "flags": {}, "order": 30, "mode": 0, "inputs": [{"name": "text_a", "type": "STRING", "link": 42, "widget": {"name": "text_a"}}, {"name": "text_b", "type": "STRING", "link": 43, "widget": {"name": "text_b"}}], "outputs": [{"name": "STRING", "type": "STRING", "links": [41], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "StringFunction|pysssss", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["append", "yes", "", "", "", "raw photo, (realistic:1.5), (head and shoulders portrait:1.2), ([angolan:south sudanese:0.5] woman 30-years-old:1.5), (overweight, overweight body:0.65), (casual stroll pose:1.5), (red eyes:1.25), (proud, proud expression:0.98), (inverted triangle shape face:0.71), (mohawk hairstyle:1.25), (chestnut hair:1.25), (disheveled:1.06), (natural skin:1.12), (skin details, skin texture:0.47), (skin pores:0.3), (skin imperfections:0.59), (acne, skin with acne:0.47), (skin imperfections:0.45), (tanned skin:1.2), (dimples:0.39), (freckles:0.62), (skin pores:0.16), (eyes details:0.75), (iris details:0.78), (circular iris:1.13), (circular pupil:1.15), (facial asymmetry, face asymmetry:1.05), (skylight from front:1.13), (professional photo, balanced photo, balanced exposure:1.2), solo, black_hair, red_eyes, 1boy, jewelry, collarbone, male_focus, earrings, teeth, dark_skin, grey_background, dark-skinned_male, tank_top, realistic, very_dark_skin, dreadlocks"], "color": "#223", "bgcolor": "#335"}, {"id": 32, "type": "CLIPTextEncode", "pos": [3000, 800], "size": {"0": 400, "1": 200}, "flags": {}, "order": 32, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 44}, {"name": "text", "type": "STRING", "link": 41, "widget": {"name": "text"}, "slot_index": 1}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [47], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "CLIPTextEncode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [""], "color": "#223", "bgcolor": "#335"}, {"id": 33, "type": "CLIPTextEncode", "pos": [3000, 1120], "size": {"0": 400, "1": 200}, "flags": {}, "order": 24, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 45}, {"name": "text", "type": "STRING", "link": 40, "widget": {"name": "text"}}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [48], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "CLIPTextEncode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [""], "color": "#223", "bgcolor": "#335"}, {"id": 37, "type": "KSampler", "pos": [3480, 880], "size": [320, 480], "flags": {}, "order": 33, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 46}, {"name": "positive", "type": "CONDITIONING", "link": 47}, {"name": "negative", "type": "CONDITIONING", "link": 48}, {"name": "latent_image", "type": "LATENT", "link": 49}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [50], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "KSampler", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [223511591300031, "randomize", 20, 8, "euler", "normal", 1], "color": "#223", "bgcolor": "#335"}, {"id": 38, "type": "VAEDecode", "pos": [3889.2248404923457, 927.766782833704], "size": {"0": 210, "1": 46}, "flags": {}, "order": 34, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 50}, {"name": "vae", "type": "VAE", "link": 51}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [52], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "VAEDecode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 8, "type": "PreviewImage", "pos": [3720, 440], "size": [200, 240], "flags": {}, "order": 27, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 8}], "properties": {"Node name for S&R": "PreviewImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 39, "type": "PreviewImage", "pos": [3960, 440], "size": [200, 240], "flags": {}, "order": 35, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 52}], "properties": {"Node name for S&R": "PreviewImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 9, "type": "CheckpointLoaderSimple", "pos": [960, -240], "size": [520, 120], "flags": {}, "order": 16, "mode": 0, "outputs": [{"name": "MODEL", "type": "MODEL", "links": [9, 34, 46], "shape": 3, "slot_index": 0}, {"name": "CLIP", "type": "CLIP", "links": [10, 11, 44, 45], "shape": 3, "slot_index": 1}, {"name": "VAE", "type": "VAE", "links": [12, 51], "shape": 3, "slot_index": 2}], "properties": {"Node name for S&R": "CheckpointLoaderSimple", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["realismEngineSDXL_v30VAE.safetensors"], "color": "#223", "bgcolor": "#335"}, {"id": 5, "type": "EmptyLatentImage", "pos": [1160, 600], "size": {"0": 315, "1": 106}, "flags": {}, "order": 17, "mode": 0, "outputs": [{"name": "LATENT", "type": "LATENT", "links": [5, 49], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "EmptyLatentImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [512, 512, 1], "color": "#223", "bgcolor": "#335"}, {"id": 4, "type": "KSampler", "pos": [1520, 320], "size": [320, 480], "flags": {}, "order": 23, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 9}, {"name": "positive", "type": "CONDITIONING", "link": 3}, {"name": "negative", "type": "CONDITIONING", "link": 4}, {"name": "latent_image", "type": "LATENT", "link": 5}, {"name": "seed", "type": "INT", "link": 37, "widget": {"name": "seed"}}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [32], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "KSampler", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [292520626834583, "randomize", 20, 3, "euler", "normal", 1], "color": "#223", "bgcolor": "#335"}, {"id": 29, "type": "KSampler", "pos": [1920, 280], "size": [320, 480], "flags": {}, "order": 25, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 34}, {"name": "positive", "type": "CONDITIONING", "link": 36}, {"name": "negative", "type": "CONDITIONING", "link": 35}, {"name": "latent_image", "type": "LATENT", "link": 32}, {"name": "seed", "type": "INT", "link": 38, "widget": {"name": "seed"}}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [33], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "KSampler", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [193182979449646, "randomize", 20, 3, "euler", "normal", 0.1], "color": "#223", "bgcolor": "#335"}], "links": [[1, 1, 0, 2, 1, "STRING"], [2, 1, 1, 3, 1, "STRING"], [3, 2, 0, 4, 1, "CONDITIONING"], [4, 3, 0, 4, 2, "CONDITIONING"], [5, 5, 0, 4, 3, "LATENT"], [8, 6, 0, 8, 0, "IMAGE"], [9, 9, 0, 4, 0, "MODEL"], [10, 9, 1, 2, 0, "CLIP"], [11, 9, 1, 3, 0, "CLIP"], [12, 9, 2, 6, 1, "VAE"], [13, 1, 0, 10, 0, "STRING"], [14, 1, 1, 11, 0, "STRING"], [15, 6, 0, 12, 0, "IMAGE"], [16, 6, 0, 13, 0, "IMAGE"], [17, 13, 0, 14, 0, "STRING"], [18, 15, 0, 1, 0, "COMBO"], [19, 16, 0, 1, 1, "COMBO"], [20, 17, 0, 1, 2, "COMBO"], [21, 18, 0, 1, 3, "COMBO"], [22, 19, 0, 1, 4, "COMBO"], [23, 20, 0, 1, 5, "COMBO"], [24, 21, 0, 1, 6, "COMBO"], [25, 22, 0, 1, 7, "COMBO"], [26, 23, 0, 1, 8, "COMBO"], [27, 24, 0, 1, 9, "COMBO"], [28, 25, 0, 1, 10, "COMBO"], [29, 26, 0, 1, 11, "COMBO"], [30, 27, 0, 1, 12, "COMBO"], [31, 28, 0, 1, 13, "COMBO"], [32, 4, 0, 29, 3, "LATENT"], [33, 29, 0, 6, 0, "LATENT"], [34, 9, 0, 29, 0, "MODEL"], [35, 3, 0, 29, 2, "CONDITIONING"], [36, 2, 0, 29, 1, "CONDITIONING"], [37, 30, 0, 4, 4, "INT"], [38, 30, 0, 29, 4, "INT"], [39, 31, 0, 1, 14, "COMBO"], [40, 11, 0, 33, 1, "STRING"], [41, 36, 0, 32, 1, "STRING"], [42, 10, 0, 36, 0, "STRING"], [43, 12, 0, 36, 1, "STRING"], [44, 9, 1, 32, 0, "CLIP"], [45, 9, 1, 33, 0, "CLIP"], [46, 9, 0, 37, 0, "MODEL"], [47, 32, 0, 37, 1, "CONDITIONING"], [48, 33, 0, 37, 2, "CONDITIONING"], [49, 5, 0, 37, 3, "LATENT"], [50, 37, 0, 38, 0, "LATENT"], [51, 9, 2, 38, 1, "VAE"], [52, 38, 0, 39, 0, "IMAGE"]], "groups": [], "config": {}, "extra": {}, "version": 0.4} -------------------------------------------------------------------------------- /Workflows/findthethreedifferences.json: -------------------------------------------------------------------------------- 1 | {"last_node_id": 152, "last_link_id": 244, "nodes": [{"id": 107, "type": "MaskPreview+", "pos": [1500, 900], "size": [300, 240], "flags": {}, "order": 11, "mode": 0, "inputs": [{"name": "mask", "type": "MASK", "link": 217}], "outputs": [], "properties": {"Node name for S&R": "MaskPreview+"}, "widgets_values": []}, {"id": 83, "type": "SaveImageExtended", "pos": [1500, 180], "size": [300, 660], "flags": {}, "order": 17, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 211}, {"name": "positive_text_opt", "type": "STRING", "link": null, "widget": {"name": "positive_text_opt"}}, {"name": "negative_text_opt", "type": "STRING", "link": null, "widget": {"name": "negative_text_opt"}}], "outputs": [], "properties": {"Node name for S&R": "SaveImageExtended"}, "widgets_values": ["shorts", "steps, cfg", "shorts", "", "underscore", "basic, prompt", "disabled", "", "enabled", 3, "last", "disabled", "enabled", "", ""]}, {"id": 140, "type": "GR Stack Image", "pos": [1500, 0], "size": [300, 120], "flags": {}, "order": 15, "mode": 0, "inputs": [{"name": "image1", "type": "IMAGE", "link": 209}, {"name": "image2", "type": "IMAGE", "link": 210}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [211, 228], "slot_index": 0, "shape": 3}], "properties": {"Node name for S&R": "GR Stack Image"}, "widgets_values": [20, "white", true]}, {"id": 146, "type": "GR Stack Image", "pos": [1860, 0], "size": [300, 120], "flags": {}, "order": 16, "mode": 0, "inputs": [{"name": "image1", "type": "IMAGE", "link": 226}, {"name": "image2", "type": "IMAGE", "link": 227}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [225], "slot_index": 0, "shape": 3}], "properties": {"Node name for S&R": "GR Stack Image"}, "widgets_values": [20, "white", true]}, {"id": 145, "type": "SaveImageExtended", "pos": [1860, 180], "size": [300, 660], "flags": {}, "order": 19, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 225}, {"name": "positive_text_opt", "type": "STRING", "link": null, "widget": {"name": "positive_text_opt"}, "shape": 7}, {"name": "negative_text_opt", "type": "STRING", "link": null, "widget": {"name": "negative_text_opt"}, "shape": 7}], "outputs": [], "properties": {"Node name for S&R": "SaveImageExtended"}, "widgets_values": ["shorts", "steps, cfg", "shorts", "", "underscore", "basic, prompt", "disabled", "", "enabled", 3, "last", "disabled", "enabled", "", ""]}, {"id": 148, "type": "EmptyImage", "pos": [2220, 0], "size": [300, 120], "flags": {}, "order": 0, "mode": 0, "inputs": [], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [229], "slot_index": 0}], "properties": {"Node name for S&R": "EmptyImage"}, "widgets_values": [2060, 1250, 1, 0]}, {"id": 147, "type": "ImagePaste", "pos": [2220, 180], "size": [300, 120], "flags": {}, "order": 18, "mode": 0, "inputs": [{"name": "background_image", "type": "IMAGE", "link": 229}, {"name": "foreground_image", "type": "IMAGE", "link": 228}], "outputs": [{"name": "image", "type": "IMAGE", "links": [234], "slot_index": 0}], "properties": {"Node name for S&R": "ImagePaste"}, "widgets_values": [0, 0]}, {"id": 150, "type": "GR Text Overlay", "pos": [2220, 360], "size": [300, 660], "flags": {}, "order": 20, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 234}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [235], "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null}, {"name": "MASK", "type": "MASK", "links": null}], "properties": {"Node name for S&R": "GR Text Overlay"}, "widgets_values": ["SPOT THE THREE DIFFERENCES", "C:\\Windows\\Fonts\\ACaslonPro-Bold.otf", 115, "bottom", "center", "center", 16, 2, "black", "red", 0, 0, 0, 0, true, 20, 10, "white", "white", 0, "curved", true]}, {"id": 112, "type": "VAEDecode", "pos": [1140, 0], "size": [300, 60], "flags": {"collapsed": false}, "order": 8, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 160}, {"name": "vae", "type": "VAE", "link": 193}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [209, 218], "slot_index": 0}], "properties": {"Node name for S&R": "VAEDecode"}, "widgets_values": []}, {"id": 8, "type": "VAEDecode", "pos": [1140, 120], "size": [300, 60], "flags": {"collapsed": false}, "order": 14, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 156}, {"name": "vae", "type": "VAE", "link": 194}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [210, 227], "slot_index": 0}], "properties": {"Node name for S&R": "VAEDecode"}, "widgets_values": []}, {"id": 142, "type": "PreviewImage", "pos": [1140, 900], "size": [300, 240], "flags": {}, "order": 12, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 214}], "outputs": [], "properties": {"Node name for S&R": "PreviewImage"}, "widgets_values": []}, {"id": 109, "type": "SetLatentNoiseMask", "pos": [780, 540], "size": [300, 60], "flags": {}, "order": 10, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 154}, {"name": "mask", "type": "MASK", "link": 216}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [155], "slot_index": 0, "shape": 3}], "properties": {"Node name for S&R": "SetLatentNoiseMask"}, "widgets_values": []}, {"id": 3, "type": "KSampler", "pos": [780, 0], "size": [300, 480], "flags": {}, "order": 6, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 220}, {"name": "positive", "type": "CONDITIONING", "link": 237}, {"name": "negative", "type": "CONDITIONING", "link": 238}, {"name": "latent_image", "type": "LATENT", "link": 186}, {"name": "seed", "type": "INT", "link": 230, "widget": {"name": "seed"}}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [154, 160], "slot_index": 0}], "properties": {"Node name for S&R": "KSampler"}, "widgets_values": [930303631195968, "increment", 30, 1, "dpmpp_2m", "sgm_uniform", 1]}, {"id": 141, "type": "GR Mask Create Random Multi", "pos": [780, 660], "size": [300, 420], "flags": {"collapsed": false}, "order": 9, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 218, "shape": 7}, {"name": "height", "type": "INT", "link": 212, "widget": {"name": "height"}}, {"name": "width", "type": "INT", "link": 213, "widget": {"name": "width"}}, {"name": "seed", "type": "INT", "link": 233, "widget": {"name": "seed"}}], "outputs": [{"name": "MASK", "type": "MASK", "links": [216, 217], "slot_index": 0, "shape": 3}, {"name": "IMAGE", "type": "IMAGE", "links": [214, 226], "slot_index": 1, "shape": 3}], "properties": {"Node name for S&R": "GR Mask Create Random Multi"}, "widgets_values": [755764289394578, "randomize", 0.08, 3, true, 20, 20, 10, "red", "solid", 5, 10, "circular", false, 256, 256]}, {"id": 152, "type": "ShowText|pysssss", "pos": [420, 840], "size": [300, 180], "flags": {}, "order": 7, "mode": 0, "inputs": [{"name": "text", "type": "STRING", "link": 244, "widget": {"name": "text"}}], "outputs": [{"name": "STRING", "type": "STRING", "links": null, "shape": 6}], "properties": {"Node name for S&R": "ShowText|pysssss"}, "widgets_values": ["", "positive:\ndog, 2d cartoon, city background with tall buildings and with trees lining the streets, sun shining down with a face\n\nnegative:\n"]}, {"id": 143, "type": "UnetLoaderGGUF", "pos": [60, 0], "size": [300, 60], "flags": {}, "order": 1, "mode": 0, "inputs": [], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [219, 220], "slot_index": 0}], "properties": {"Node name for S&R": "UnetLoaderGGUF"}, "widgets_values": ["PixelWaveFLUX\\pixelwave_flux1_dev_Q8_0_03.gguf"]}, {"id": 129, "type": "DualCLIPLoader", "pos": [60, 120], "size": [300, 120], "flags": {}, "order": 2, "mode": 0, "inputs": [], "outputs": [{"name": "CLIP", "type": "CLIP", "links": [236], "slot_index": 0, "shape": 3}], "properties": {"Node name for S&R": "DualCLIPLoader"}, "widgets_values": ["t5xxl_fp8_e4m3fn.safetensors", "clip_l.safetensors", "flux"]}, {"id": 126, "type": "VAELoader", "pos": [60, 300], "size": [300, 60], "flags": {}, "order": 3, "mode": 0, "inputs": [], "outputs": [{"name": "VAE", "type": "VAE", "links": [193, 194], "slot_index": 0, "shape": 3}], "properties": {"Node name for S&R": "VAELoader"}, "widgets_values": ["FLUX1\\ae.safetensors"]}, {"id": 124, "type": "GR Image Size", "pos": [60, 480], "size": [300, 300], "flags": {}, "order": 4, "mode": 0, "inputs": [{"name": "dimensions", "type": "IMAGE", "link": null, "shape": 7}], "outputs": [{"name": "height", "type": "INT", "links": [212], "slot_index": 0, "shape": 3}, {"name": "width", "type": "INT", "links": [213], "slot_index": 1, "shape": 3}, {"name": "batch_size", "type": "INT", "links": null, "shape": 3}, {"name": "samples", "type": "LATENT", "links": [186], "slot_index": 3, "shape": 3}, {"name": "seed", "type": "INT", "links": [230, 233, 243], "slot_index": 4, "shape": 3}, {"name": "empty_image", "type": "IMAGE", "links": null, "shape": 3}], "properties": {"Node name for S&R": "GR Image Size"}, "widgets_values": [952, 952, "(SDXL) 1024x1024", 1, 270558000246545, "fixed", "white"]}, {"id": 151, "type": "GR Prompty", "pos": [420, 0], "size": [300, 780], "flags": {}, "order": 5, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 236}, {"name": "seed", "type": "INT", "link": 243, "widget": {"name": "seed"}}], "outputs": [{"name": "positive", "type": "CONDITIONING", "links": [237, 242], "slot_index": 0}, {"name": "negative", "type": "CONDITIONING", "links": [238, 241], "slot_index": 1}, {"name": "prompts", "type": "STRING", "links": [244], "slot_index": 2}], "properties": {"Node name for S&R": "GR Prompty"}, "widgets_values": ["dog", "cat", "mouse", "elephant", "lion", "tiger", "giraffe", "monkey", "2d cartoon, city background with tall buildings and with trees lining the streets, sun shining down with a face", "", "1", true, false, 676540714017564, "randomize", true, true, true, true, true, true, true, true, true, true]}, {"id": 110, "type": "KSampler", "pos": [1140, 240], "size": [300, 480], "flags": {}, "order": 13, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 219}, {"name": "positive", "type": "CONDITIONING", "link": 242}, {"name": "negative", "type": "CONDITIONING", "link": 241}, {"name": "latent_image", "type": "LATENT", "link": 155}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [156], "slot_index": 0}], "properties": {"Node name for S&R": "KSampler"}, "widgets_values": [319231093360494, "fixed", 20, 1, "dpmpp_2m", "sgm_uniform", 1]}, {"id": 149, "type": "PreviewImage", "pos": [1860, 900], "size": [300, 240], "flags": {}, "order": 21, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 235}], "outputs": [], "properties": {"Node name for S&R": "PreviewImage"}, "widgets_values": []}], "links": [[154, 3, 0, 109, 0, "LATENT"], [155, 109, 0, 110, 3, "LATENT"], [156, 110, 0, 8, 0, "LATENT"], [160, 3, 0, 112, 0, "LATENT"], [186, 124, 3, 3, 3, "LATENT"], [193, 126, 0, 112, 1, "VAE"], [194, 126, 0, 8, 1, "VAE"], [209, 112, 0, 140, 0, "IMAGE"], [210, 8, 0, 140, 1, "IMAGE"], [211, 140, 0, 83, 0, "IMAGE"], [212, 124, 0, 141, 1, "INT"], [213, 124, 1, 141, 2, "INT"], [214, 141, 1, 142, 0, "IMAGE"], [216, 141, 0, 109, 1, "MASK"], [217, 141, 0, 107, 0, "MASK"], [218, 112, 0, 141, 0, "IMAGE"], [219, 143, 0, 110, 0, "MODEL"], [220, 143, 0, 3, 0, "MODEL"], [225, 146, 0, 145, 0, "IMAGE"], [226, 141, 1, 146, 0, "IMAGE"], [227, 8, 0, 146, 1, "IMAGE"], [228, 140, 0, 147, 1, "IMAGE"], [229, 148, 0, 147, 0, "IMAGE"], [230, 124, 4, 3, 4, "INT"], [233, 124, 4, 141, 3, "INT"], [234, 147, 0, 150, 0, "IMAGE"], [235, 150, 0, 149, 0, "IMAGE"], [236, 129, 0, 151, 0, "CLIP"], [237, 151, 0, 3, 1, "CONDITIONING"], [238, 151, 1, 3, 2, "CONDITIONING"], [241, 151, 1, 110, 2, "CONDITIONING"], [242, 151, 0, 110, 1, "CONDITIONING"], [243, 124, 4, 151, 1, "INT"], [244, 151, 2, 152, 0, "STRING"]], "groups": [], "config": {}, "extra": {"ds": {"scale": 0.6934334949441348, "offset": [-41.838363950276346, 134.64299898530678]}, "info": {"name": "workflow", "author": "", "description": "", "version": "1", "created": "2024-10-07T15:33:43.615Z", "modified": "2024-10-07T16:25:31.819Z", "software": "ComfyUI"}, "0246.VERSION": [0, 0, 4]}, "version": 0.4} -------------------------------------------------------------------------------- /Workflows/grpanorzoom.json: -------------------------------------------------------------------------------- 1 | { 2 | "last_node_id": 48, 3 | "last_link_id": 117, 4 | "nodes": [ 5 | { 6 | "id": 26, 7 | "type": "PreviewImage", 8 | "pos": { 9 | "0": 520, 10 | "1": 80 11 | }, 12 | "size": { 13 | "0": 300, 14 | "1": 240 15 | }, 16 | "flags": {}, 17 | "order": 2, 18 | "mode": 0, 19 | "inputs": [ 20 | { 21 | "name": "images", 22 | "type": "IMAGE", 23 | "link": 106 24 | } 25 | ], 26 | "outputs": [], 27 | "properties": { 28 | "Node name for S&R": "PreviewImage" 29 | }, 30 | "widgets_values": [] 31 | }, 32 | { 33 | "id": 6, 34 | "type": "PreviewImage", 35 | "pos": { 36 | "0": 1280, 37 | "1": 80 38 | }, 39 | "size": { 40 | "0": 360, 41 | "1": 360 42 | }, 43 | "flags": {}, 44 | "order": 4, 45 | "mode": 0, 46 | "inputs": [ 47 | { 48 | "name": "images", 49 | "type": "IMAGE", 50 | "link": 101 51 | } 52 | ], 53 | "outputs": [], 54 | "properties": { 55 | "Node name for S&R": "PreviewImage" 56 | }, 57 | "widgets_values": [] 58 | }, 59 | { 60 | "id": 46, 61 | "type": "VHS_VideoCombine", 62 | "pos": { 63 | "0": 1690, 64 | "1": 80 65 | }, 66 | "size": [ 67 | 600, 68 | 720 69 | ], 70 | "flags": {}, 71 | "order": 6, 72 | "mode": 0, 73 | "inputs": [ 74 | { 75 | "name": "images", 76 | "type": "IMAGE", 77 | "link": 117 78 | }, 79 | { 80 | "name": "audio", 81 | "type": "AUDIO", 82 | "link": null, 83 | "shape": 7 84 | }, 85 | { 86 | "name": "meta_batch", 87 | "type": "VHS_BatchManager", 88 | "link": null, 89 | "shape": 7 90 | }, 91 | { 92 | "name": "vae", 93 | "type": "VAE", 94 | "link": null, 95 | "shape": 7 96 | } 97 | ], 98 | "outputs": [ 99 | { 100 | "name": "Filenames", 101 | "type": "VHS_FILENAMES", 102 | "links": null 103 | } 104 | ], 105 | "properties": { 106 | "Node name for S&R": "VHS_VideoCombine" 107 | }, 108 | "widgets_values": { 109 | "frame_rate": 24, 110 | "loop_count": 0, 111 | "filename_prefix": "AnimateDiff", 112 | "format": "video/h264-mp4", 113 | "pix_fmt": "yuv420p", 114 | "crf": 19, 115 | "save_metadata": true, 116 | "pingpong": false, 117 | "save_output": true, 118 | "videopreview": { 119 | "hidden": false, 120 | "paused": false, 121 | "params": { 122 | "filename": "AnimateDiff_00004.mp4", 123 | "subfolder": "", 124 | "type": "output", 125 | "format": "video/h264-mp4", 126 | "frame_rate": 24 127 | }, 128 | "muted": false 129 | } 130 | } 131 | }, 132 | { 133 | "id": 9, 134 | "type": "LeReS-DepthMapPreprocessor", 135 | "pos": { 136 | "0": 870, 137 | "1": 80 138 | }, 139 | "size": { 140 | "0": 360, 141 | "1": 120 142 | }, 143 | "flags": {}, 144 | "order": 3, 145 | "mode": 0, 146 | "inputs": [ 147 | { 148 | "name": "image", 149 | "type": "IMAGE", 150 | "link": 95 151 | } 152 | ], 153 | "outputs": [ 154 | { 155 | "name": "IMAGE", 156 | "type": "IMAGE", 157 | "links": [ 158 | 101, 159 | 114 160 | ], 161 | "slot_index": 0 162 | } 163 | ], 164 | "properties": { 165 | "Node name for S&R": "LeReS-DepthMapPreprocessor" 166 | }, 167 | "widgets_values": [ 168 | 0, 169 | 0, 170 | "enable", 171 | 512 172 | ] 173 | }, 174 | { 175 | "id": 35, 176 | "type": "LoadImagesFromDir //Inspire", 177 | "pos": { 178 | "0": 50, 179 | "1": 80 180 | }, 181 | "size": { 182 | "0": 420, 183 | "1": 180 184 | }, 185 | "flags": {}, 186 | "order": 0, 187 | "mode": 0, 188 | "inputs": [], 189 | "outputs": [ 190 | { 191 | "name": "IMAGE", 192 | "type": "IMAGE", 193 | "links": [ 194 | 69, 195 | 106 196 | ], 197 | "slot_index": 0 198 | }, 199 | { 200 | "name": "MASK", 201 | "type": "MASK", 202 | "links": null 203 | }, 204 | { 205 | "name": "INT", 206 | "type": "INT", 207 | "links": null 208 | } 209 | ], 210 | "properties": { 211 | "Node name for S&R": "LoadImagesFromDir //Inspire" 212 | }, 213 | "widgets_values": [ 214 | "h:\\panning", 215 | 0, 216 | 0, 217 | false 218 | ] 219 | }, 220 | { 221 | "id": 48, 222 | "type": "GR Pan Or Zoom", 223 | "pos": { 224 | "0": 960, 225 | "1": 540 226 | }, 227 | "size": { 228 | "0": 300, 229 | "1": 300 230 | }, 231 | "flags": {}, 232 | "order": 5, 233 | "mode": 0, 234 | "inputs": [ 235 | { 236 | "name": "images", 237 | "type": "IMAGE", 238 | "link": 116 239 | }, 240 | { 241 | "name": "depth_maps", 242 | "type": "IMAGE", 243 | "link": 114 244 | } 245 | ], 246 | "outputs": [ 247 | { 248 | "name": "poz_frames", 249 | "type": "IMAGE", 250 | "links": [ 251 | 117 252 | ], 253 | "slot_index": 0 254 | } 255 | ], 256 | "properties": { 257 | "Node name for S&R": "GR Pan Or Zoom" 258 | }, 259 | "widgets_values": [ 260 | 1.5, 261 | 24, 262 | "pan-left", 263 | true, 264 | "weighted-average", 265 | 10, 266 | 0.5, 267 | "cuda", 268 | true 269 | ] 270 | }, 271 | { 272 | "id": 16, 273 | "type": "GR Image Resize", 274 | "pos": { 275 | "0": 520, 276 | "1": 400 277 | }, 278 | "size": { 279 | "0": 300, 280 | "1": 180 281 | }, 282 | "flags": {}, 283 | "order": 1, 284 | "mode": 0, 285 | "inputs": [ 286 | { 287 | "name": "image", 288 | "type": "IMAGE", 289 | "link": 69 290 | } 291 | ], 292 | "outputs": [ 293 | { 294 | "name": "IMAGE", 295 | "type": "IMAGE", 296 | "links": [ 297 | 95, 298 | 116 299 | ], 300 | "slot_index": 0 301 | } 302 | ], 303 | "properties": { 304 | "Node name for S&R": "GR Image Resize" 305 | }, 306 | "widgets_values": [ 307 | 504, 308 | 350, 309 | true, 310 | 14, 311 | 1 312 | ] 313 | } 314 | ], 315 | "links": [ 316 | [ 317 | 69, 318 | 35, 319 | 0, 320 | 16, 321 | 0, 322 | "IMAGE" 323 | ], 324 | [ 325 | 95, 326 | 16, 327 | 0, 328 | 9, 329 | 0, 330 | "IMAGE" 331 | ], 332 | [ 333 | 101, 334 | 9, 335 | 0, 336 | 6, 337 | 0, 338 | "IMAGE" 339 | ], 340 | [ 341 | 106, 342 | 35, 343 | 0, 344 | 26, 345 | 0, 346 | "IMAGE" 347 | ], 348 | [ 349 | 114, 350 | 9, 351 | 0, 352 | 48, 353 | 1, 354 | "IMAGE" 355 | ], 356 | [ 357 | 116, 358 | 16, 359 | 0, 360 | 48, 361 | 0, 362 | "IMAGE" 363 | ], 364 | [ 365 | 117, 366 | 48, 367 | 0, 368 | 46, 369 | 0, 370 | "IMAGE" 371 | ] 372 | ], 373 | "groups": [], 374 | "config": {}, 375 | "extra": { 376 | "ds": { 377 | "scale": 0.5131581182307067, 378 | "offset": [ 379 | 233.39984299677295, 380 | 525.3643201530748 381 | ] 382 | } 383 | }, 384 | "version": 0.4 385 | } -------------------------------------------------------------------------------- /Workflows/reactorfaceswap - bDey55U2.json: -------------------------------------------------------------------------------- 1 | {"last_node_id": 20, "last_link_id": 22, "nodes": [{"id": 6, "type": "ReActorFaceSwap", "pos": [480, 880], "size": {"0": 315, "1": 338}, "flags": {}, "order": 5, "mode": 0, "inputs": [{"name": "input_image", "type": "IMAGE", "link": 6}, {"name": "source_image", "type": "IMAGE", "link": null}, {"name": "face_model", "type": "FACE_MODEL", "link": 18}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [8], "shape": 3, "slot_index": 0}, {"name": "FACE_MODEL", "type": "FACE_MODEL", "links": [12], "shape": 3, "slot_index": 1}], "properties": {"Node name for S&R": "ReActorFaceSwap", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [true, "inswapper_128.onnx", "retinaface_resnet50", "GFPGANv1.4.pth", 1, 0.5, "no", "no", "0", "0", 1], "color": "#223", "bgcolor": "#335"}, {"id": 7, "type": "LoadImage", "pos": [-40, 920], "size": {"0": 320, "1": 320}, "flags": {}, "order": 0, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [6], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "LoadImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["971460 (2).jpg", "image"], "color": "#223", "bgcolor": "#335"}, {"id": 11, "type": "ReActorFaceSwap", "pos": [1280, 840], "size": {"0": 315, "1": 338}, "flags": {}, "order": 8, "mode": 0, "inputs": [{"name": "input_image", "type": "IMAGE", "link": 13}, {"name": "source_image", "type": "IMAGE", "link": null}, {"name": "face_model", "type": "FACE_MODEL", "link": 12}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [14], "shape": 3, "slot_index": 0}, {"name": "FACE_MODEL", "type": "FACE_MODEL", "links": [15], "shape": 3, "slot_index": 1}], "properties": {"Node name for S&R": "ReActorFaceSwap", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [true, "inswapper_128.onnx", "retinaface_resnet50", "GFPGANv1.4.pth", 1, 0.5, "no", "no", "0", "0", 1], "color": "#223", "bgcolor": "#335"}, {"id": 8, "type": "PreviewImage", "pos": [840, 1000], "size": {"0": 360, "1": 320}, "flags": {}, "order": 7, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 8}], "properties": {"Node name for S&R": "PreviewImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 13, "type": "PreviewImage", "pos": [1680, 960], "size": {"0": 440, "1": 320}, "flags": {}, "order": 9, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 14}], "properties": {"Node name for S&R": "PreviewImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 14, "type": "ReActorFaceSwap", "pos": [2240, 840], "size": {"0": 315, "1": 338}, "flags": {}, "order": 10, "mode": 0, "inputs": [{"name": "input_image", "type": "IMAGE", "link": 17}, {"name": "source_image", "type": "IMAGE", "link": null}, {"name": "face_model", "type": "FACE_MODEL", "link": 15}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [16], "shape": 3, "slot_index": 0}, {"name": "FACE_MODEL", "type": "FACE_MODEL", "links": null, "shape": 3}], "properties": {"Node name for S&R": "ReActorFaceSwap", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [true, "inswapper_128.onnx", "retinaface_resnet50", "GFPGANv1.4.pth", 1, 0.5, "no", "no", "0", "0", 1], "color": "#223", "bgcolor": "#335"}, {"id": 16, "type": "LoadImage", "pos": [1760, 480], "size": {"0": 320, "1": 320}, "flags": {}, "order": 1, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [17], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "LoadImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["models_hypernetworks_LuisapMagicstyle_v1.preview (1).png", "image"], "color": "#223", "bgcolor": "#335"}, {"id": 12, "type": "LoadImage", "pos": [880, 440], "size": {"0": 320, "1": 320}, "flags": {}, "order": 2, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [13], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "LoadImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["models_hypernetworks_LuisapGlitchpixelart_v1.preview.png", "image"], "color": "#223", "bgcolor": "#335"}, {"id": 15, "type": "PreviewImage", "pos": [2600, 880], "size": {"0": 600, "1": 400}, "flags": {}, "order": 11, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 16}], "properties": {"Node name for S&R": "PreviewImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 17, "type": "ReActorLoadFaceModel", "pos": [-720, 920], "size": {"0": 315, "1": 58}, "flags": {}, "order": 3, "mode": 0, "outputs": [{"name": "FACE_MODEL", "type": "FACE_MODEL", "links": [18], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "ReActorLoadFaceModel", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["brunette.safetensors"], "color": "#223", "bgcolor": "#335"}, {"id": 18, "type": "ReActorSaveFaceModel", "pos": [-800, 520], "size": {"0": 315, "1": 102}, "flags": {}, "order": 6, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 22}, {"name": "face_model", "type": "FACE_MODEL", "link": null}], "properties": {"Node name for S&R": "ReActorSaveFaceModel", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [true, "daa"], "color": "#223", "bgcolor": "#335"}, {"id": 19, "type": "LoadImage", "pos": [-1440, 480], "size": {"0": 320, "1": 320}, "flags": {}, "order": 4, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [22], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "LoadImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["models_hypernetworks_LuisapLUPIN3_v1.preview.png", "image"], "color": "#223", "bgcolor": "#335"}], "links": [[6, 7, 0, 6, 0, "IMAGE"], [8, 6, 0, 8, 0, "IMAGE"], [12, 6, 1, 11, 2, "FACE_MODEL"], [13, 12, 0, 11, 0, "IMAGE"], [14, 11, 0, 13, 0, "IMAGE"], [15, 11, 1, 14, 2, "FACE_MODEL"], [16, 14, 0, 15, 0, "IMAGE"], [17, 16, 0, 14, 0, "IMAGE"], [18, 17, 0, 6, 2, "FACE_MODEL"], [22, 19, 0, 18, 0, "IMAGE"]], "groups": [], "config": {}, "extra": {}, "version": 0.4} -------------------------------------------------------------------------------- /Workflows/tagstoimage - ABV9qCic.json: -------------------------------------------------------------------------------- 1 | {"last_node_id": 20, "last_link_id": 20, "nodes": [{"id": 9, "type": "CLIPTextEncode", "pos": [2160, 280], "size": [400, 200], "flags": {}, "order": 8, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 8}, {"name": "text", "type": "STRING", "link": 7, "widget": {"name": "text"}}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [10], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "CLIPTextEncode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [""], "color": "#223", "bgcolor": "#335"}, {"id": 11, "type": "CLIPTextEncode", "pos": [2160, 720], "size": [400, 200], "flags": {}, "order": 3, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 9}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [11], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "CLIPTextEncode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [""], "color": "#223", "bgcolor": "#335"}, {"id": 13, "type": "EmptyLatentImage", "pos": [2240, 560], "size": {"0": 315, "1": 106}, "flags": {}, "order": 0, "mode": 0, "outputs": [{"name": "LATENT", "type": "LATENT", "links": [12], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "EmptyLatentImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [512, 512, 1], "color": "#223", "bgcolor": "#335"}, {"id": 16, "type": "PreviewImage", "pos": [3600, 80], "size": [200, 240], "flags": {}, "order": 12, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 17}], "properties": {"Node name for S&R": "PreviewImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 15, "type": "SaveImage", "pos": [3560, 600], "size": [320, 280], "flags": {}, "order": 11, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 16}], "properties": {"ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["ComfyUI"], "color": "#223", "bgcolor": "#335"}, {"id": 10, "type": "CheckpointLoaderSimple", "pos": [1600, 80], "size": {"0": 315, "1": 98}, "flags": {}, "order": 1, "mode": 0, "outputs": [{"name": "MODEL", "type": "MODEL", "links": [13], "shape": 3, "slot_index": 0}, {"name": "CLIP", "type": "CLIP", "links": [8, 9], "shape": 3, "slot_index": 1}, {"name": "VAE", "type": "VAE", "links": [15], "shape": 3, "slot_index": 2}], "properties": {"Node name for S&R": "CheckpointLoaderSimple", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["realismEngineSDXL_v30VAE.safetensors"], "color": "#223", "bgcolor": "#335"}, {"id": 12, "type": "KSampler", "pos": [2754.876879882812, 368.45264352798443], "size": [320, 480], "flags": {}, "order": 9, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 13}, {"name": "positive", "type": "CONDITIONING", "link": 10}, {"name": "negative", "type": "CONDITIONING", "link": 11}, {"name": "latent_image", "type": "LATENT", "link": 12}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [14], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "KSampler", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [273766175938975, "randomize", 30, 8, "euler", "normal", 1], "color": "#223", "bgcolor": "#335"}, {"id": 8, "type": "StringFunction|pysssss", "pos": [1560, 560], "size": [400, 280], "flags": {}, "order": 7, "mode": 0, "inputs": [{"name": "text_a", "type": "STRING", "link": 5, "widget": {"name": "text_a"}}, {"name": "text_b", "type": "STRING", "link": 6, "widget": {"name": "text_b"}}], "outputs": [{"name": "STRING", "type": "STRING", "links": [7], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "StringFunction|pysssss", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["append", "yes", "", "", "", "a man in uniform looking at the camera with a city in the background, london, england, uk, solo, looking_at_viewer, short_hair, blonde_hair, shirt, 1boy, closed_mouth, jacket, upper_body, male_focus, outdoors, day, blurry, uniform, black_jacket, black_shirt, blurry_background, portrait, realistic, old, police, wrinkled_skin"], "color": "#223", "bgcolor": "#335"}, {"id": 18, "type": "BLIPCaption", "pos": [4000, 120], "size": {"0": 315, "1": 198}, "flags": {}, "order": 13, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 19}, {"name": "blip_model", "type": "BLIP_MODEL", "link": null}], "outputs": [{"name": "caption", "type": "STRING", "links": [18], "shape": 6, "slot_index": 0}], "properties": {"Node name for S&R": "BLIPCaption", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [24, 48, "AUTO", "", "", true], "color": "#223", "bgcolor": "#335"}, {"id": 14, "type": "VAEDecode", "pos": [3286.0669531249996, 390.23264831542946], "size": {"0": 210, "1": 46}, "flags": {}, "order": 10, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 14}, {"name": "vae", "type": "VAE", "link": 15}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [16, 17, 19, 20], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "VAEDecode", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "color": "#223", "bgcolor": "#335"}, {"id": 7, "type": "WD14Tagger|pysssss", "pos": [4000, 840], "size": [400, 240], "flags": {}, "order": 5, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 4}], "outputs": [{"name": "STRING", "type": "STRING", "links": [6], "shape": 6, "slot_index": 0}], "properties": {"Node name for S&R": "WD14Tagger|pysssss", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["wd-v1-4-moat-tagger-v2", 0.35, 0.85, "", "solo, looking_at_viewer, short_hair, blonde_hair, shirt, 1boy, closed_mouth, jacket, upper_body, male_focus, outdoors, day, blurry, uniform, black_jacket, black_shirt, blurry_background, portrait, realistic, old, police, wrinkled_skin"], "color": "#223", "bgcolor": "#335"}, {"id": 5, "type": "BLIPCaption", "pos": [3160, 960], "size": {"0": 315, "1": 198}, "flags": {}, "order": 4, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 2}, {"name": "blip_model", "type": "BLIP_MODEL", "link": null}], "outputs": [{"name": "caption", "type": "STRING", "links": [3], "shape": 6, "slot_index": 0}], "properties": {"Node name for S&R": "BLIPCaption", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": [24, 48, "AUTO", "", "", true], "color": "#223", "bgcolor": "#335"}, {"id": 20, "type": "WD14Tagger|pysssss", "pos": [4480, 840], "size": {"0": 400, "1": 240}, "flags": {}, "order": 14, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 20}], "outputs": [{"name": "STRING", "type": "STRING", "links": [], "shape": 6, "slot_index": 0}], "properties": {"Node name for S&R": "WD14Tagger|pysssss", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["wd-v1-4-moat-tagger-v2", 0.35, 0.85, "", "solo, looking_at_viewer, short_hair, blue_eyes, blonde_hair, shirt, 1boy, closed_mouth, jacket, upper_body, male_focus, outdoors, open_clothes, blurry, open_jacket, black_shirt, depth_of_field, blurry_background, white_jacket, zipper, realistic"], "color": "#223", "bgcolor": "#335"}, {"id": 19, "type": "ShowText|pysssss", "pos": [4040, 560], "size": [360, 160], "flags": {}, "order": 15, "mode": 0, "inputs": [{"name": "text", "type": "STRING", "link": 18, "widget": {"name": "text"}}], "outputs": [{"name": "STRING", "type": "STRING", "links": [], "shape": 6, "slot_index": 0}], "properties": {"Node name for S&R": "ShowText|pysssss", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["", "a man with a police uniform on and a city in the background with a blue sky and white clouds"], "color": "#223", "bgcolor": "#335"}, {"id": 6, "type": "ShowText|pysssss", "pos": [4480, 560], "size": [360, 160], "flags": {}, "order": 6, "mode": 0, "inputs": [{"name": "text", "type": "STRING", "link": 3, "widget": {"name": "text"}}], "outputs": [{"name": "STRING", "type": "STRING", "links": [5], "shape": 6, "slot_index": 0}], "properties": {"Node name for S&R": "ShowText|pysssss", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["", "a man in uniform looking at the camera with a city in the background, london, england, uk"], "color": "#223", "bgcolor": "#335"}, {"id": 4, "type": "LoadImage", "pos": [2200, -280], "size": [320, 320], "flags": {}, "order": 2, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [2, 4], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "LoadImage", "ttNbgOverride": {"color": "#223", "bgcolor": "#335", "groupcolor": "#88A"}}, "widgets_values": ["Daniel_Craig_in_2021.jpg", "image"], "color": "#223", "bgcolor": "#335"}], "links": [[2, 4, 0, 5, 0, "IMAGE"], [3, 5, 0, 6, 0, "STRING"], [4, 4, 0, 7, 0, "IMAGE"], [5, 6, 0, 8, 0, "STRING"], [6, 7, 0, 8, 1, "STRING"], [7, 8, 0, 9, 1, "STRING"], [8, 10, 1, 9, 0, "CLIP"], [9, 10, 1, 11, 0, "CLIP"], [10, 9, 0, 12, 1, "CONDITIONING"], [11, 11, 0, 12, 2, "CONDITIONING"], [12, 13, 0, 12, 3, "LATENT"], [13, 10, 0, 12, 0, "MODEL"], [14, 12, 0, 14, 0, "LATENT"], [15, 10, 2, 14, 1, "VAE"], [16, 14, 0, 15, 0, "IMAGE"], [17, 14, 0, 16, 0, "IMAGE"], [18, 18, 0, 19, 0, "STRING"], [19, 14, 0, 18, 0, "IMAGE"], [20, 14, 0, 20, 0, "IMAGE"]], "groups": [], "config": {}, "extra": {}, "version": 0.4} -------------------------------------------------------------------------------- /Workflows/unknown.json: -------------------------------------------------------------------------------- 1 | import os 2 | import hashlib 3 | import numpy as np 4 | from PIL import Image, ImageOps, ImageSequence 5 | import torch 6 | from torchvision.transforms import ToPILImage, Resize, CenterCrop 7 | import folder_paths 8 | import node_helpers 9 | 10 | class LoadImageAndCrop: 11 | @classmethod 12 | def INPUT_TYPES(cls): 13 | input_dir = folder_paths.get_input_directory() 14 | files = [f for f in os.listdir(input_dir) if os.path.isfile(os.path.join(input_dir, f))] 15 | return { 16 | "required": { 17 | "image": (sorted(files), {"image_upload": True}), 18 | "crop_size_mult": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}), 19 | "bbox_smooth_alpha": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}) 20 | } 21 | } 22 | 23 | RETURN_TYPES = ("IMAGE", "IMAGE", "MASK") 24 | RETURN_NAMES = ("original_image", "cropped_image", "mask") 25 | FUNCTION = "load_image" 26 | 27 | CATEGORY = "image" 28 | 29 | def load_image(self, image, crop_size_mult, bbox_smooth_alpha): 30 | image_path = folder_paths.get_annotated_filepath(image) 31 | img = node_helpers.pillow(Image.open, image_path) 32 | 33 | output_images = [] 34 | output_masks = [] 35 | w, h = None, None 36 | 37 | excluded_formats = ['MPO'] 38 | 39 | for i in ImageSequence.Iterator(img): 40 | i = node_helpers.pillow(ImageOps.exif_transpose, i) 41 | 42 | if i.mode == 'I': 43 | i = i.point(lambda i: i * (1 / 255)) 44 | image = i.convert("RGB") 45 | 46 | if len(output_images) == 0: 47 | w = image.size[0] 48 | h = image.size[1] 49 | 50 | if image.size[0] != w or image.size[1] != h: 51 | continue 52 | 53 | image = np.array(image).astype(np.float32) / 255.0 54 | image = torch.from_numpy(image)[None,] 55 | if 'A' in i.getbands(): 56 | mask = np.array(i.getchannel('A')).astype(np.float32) / 255.0 57 | mask = 1. - torch.from_numpy(mask) 58 | else: 59 | mask = torch.zeros((64, 64), dtype=torch.float32, device="cpu") 60 | output_images.append(image) 61 | output_masks.append(mask.unsqueeze(0)) 62 | 63 | if len(output_images) > 1 and img.format not in excluded_formats: 64 | original_image = torch.cat(output_images, dim=0) 65 | original_mask = torch.cat(output_masks, dim=0) 66 | else: 67 | original_image = output_images[0] 68 | original_mask = output_masks[0] 69 | 70 | # BatchCropFromMask logic 71 | masks = original_mask 72 | 73 | self.max_bbox_width = 0 74 | self.max_bbox_height = 0 75 | 76 | # Calculate the maximum bounding box size across the mask 77 | curr_max_bbox_width = 0 78 | curr_max_bbox_height = 0 79 | for mask in masks: 80 | _mask = ToPILImage()(mask.squeeze()) 81 | non_zero_indices = np.nonzero(np.array(_mask)) 82 | if len(non_zero_indices[0]) > 0 and len(non_zero_indices[1]) > 0: 83 | min_x, max_x = np.min(non_zero_indices[1]), np.max(non_zero_indices[1]) 84 | min_y, max_y = np.min(non_zero_indices[0]), np.max(non_zero_indices[0]) 85 | width = max_x - min_x 86 | height = max_y - min_y 87 | curr_max_bbox_width = max(curr_max_bbox_width, width) 88 | curr_max_bbox_height = max(curr_max_bbox_height, height) 89 | 90 | # Smooth the changes in the bounding box size 91 | self.max_bbox_width = self.smooth_bbox_size(self.max_bbox_width, curr_max_bbox_width, bbox_smooth_alpha) 92 | self.max_bbox_height = self.smooth_bbox_size(self.max_bbox_height, curr_max_bbox_height, bbox_smooth_alpha) 93 | 94 | # Apply the crop size multiplier 95 | self.max_bbox_width = round(self.max_bbox_width * crop_size_mult) 96 | self.max_bbox_height = round(self.max_bbox_height * crop_size_mult) 97 | 98 | # Ensure max_bbox_height is not zero to avoid division by zero 99 | if self.max_bbox_height == 0: 100 | return (original_image, original_image, original_mask) 101 | 102 | bbox_aspect_ratio = self.max_bbox_width / self.max_bbox_height 103 | 104 | # Crop the image based on the mask 105 | for i, (mask, img) in enumerate(zip(masks, original_image)): 106 | _mask = ToPILImage()(mask.squeeze()) 107 | non_zero_indices = np.nonzero(np.array(_mask)) 108 | if len(non_zero_indices[0]) > 0 and len(non_zero_indices[1]) > 0: 109 | min_x, max_x = np.min(non_zero_indices[1]), np.max(non_zero_indices[1]) 110 | min_y, max_y = np.min(non_zero_indices[0]), np.max(non_zero_indices[0]) 111 | 112 | # Calculate center of bounding box 113 | center_x = np.mean(non_zero_indices[1]) 114 | center_y = np.mean(non_zero_indices[0]) 115 | curr_center = (round(center_x), round(center_y)) 116 | 117 | # Initialize prev_center with curr_center 118 | if not hasattr(self, 'prev_center'): 119 | self.prev_center = curr_center 120 | 121 | # Smooth the changes in the center coordinates 122 | if i > 0: 123 | center = self.smooth_center(self.prev_center, curr_center, bbox_smooth_alpha) 124 | else: 125 | center = curr_center 126 | 127 | # Update prev_center for the next frame 128 | self.prev_center = center 129 | 130 | # Create bounding box using max_bbox_width and max_bbox_height 131 | half_box_width = round(self.max_bbox_width / 2) 132 | half_box_height = round(self.max_bbox_height / 2) 133 | min_x = max(0, center[0] - half_box_width) 134 | max_x = min(img.shape[1], center[0] + half_box_width) 135 | min_y = max(0, center[1] - half_box_height) 136 | max_y = min(img.shape[0], center[1] + half_box_height) 137 | 138 | # Crop the image from the bounding box 139 | cropped_img = img[min_y:max_y, min_x:max_x, :] 140 | 141 | # Check if the cropped image has valid dimensions 142 | if cropped_img.shape[0] == 0 or cropped_img.shape[1] == 0: 143 | # Return the original image and mask if the cropped image is invalid 144 | return (original_image, original_image, original_mask) 145 | 146 | # Calculate the new dimensions while maintaining the aspect ratio 147 | new_height = min(cropped_img.shape[0], self.max_bbox_height) 148 | new_width = round(new_height * bbox_aspect_ratio) 149 | 150 | # Resize the image 151 | resize_transform = Resize((new_height, new_width)) 152 | resized_img = resize_transform(cropped_img.permute(2, 0, 1)) 153 | 154 | # Perform the center crop to the desired size 155 | crop_transform = CenterCrop((self.max_bbox_height, self.max_bbox_width)) 156 | cropped_resized_img = crop_transform(resized_img) 157 | 158 | cropped_image = cropped_resized_img.permute(1, 2, 0).unsqueeze(0) 159 | 160 | return (original_image, cropped_image, original_mask) 161 | 162 | # If no valid mask is found, return the original image and mask 163 | return (original_image, original_image, original_mask) 164 | 165 | def smooth_bbox_size(self, prev_bbox_size, curr_bbox_size, alpha): 166 | if alpha == 0: 167 | return prev_bbox_size 168 | return round(alpha * curr_bbox_size + (1 - alpha) * prev_bbox_size) 169 | 170 | def smooth_center(self, prev_center, curr_center, alpha=0.5): 171 | if alpha == 0: 172 | return prev_center 173 | return ( 174 | round(alpha * curr_center[0] + (1 - alpha) * prev_center[0]), 175 | round(alpha * curr_center[1] + (1 - alpha) * prev_center[1]) 176 | ) 177 | 178 | @classmethod 179 | def IS_CHANGED(cls, image): 180 | image_path = folder_paths.get_annotated_filepath(image) 181 | m = hashlib.sha256() 182 | with open(image_path, 'rb') as f: 183 | m.update(f.read()) 184 | return m.digest().hex() 185 | 186 | @classmethod 187 | def VALIDATE_INPUTS(cls, image): 188 | if not folder_paths.exists_annotated_filepath(image): 189 | return "Invalid image file: {}".format(image) 190 | return True 191 | 192 | NODE_CLASS_MAPPINGS = {"LoadImageAndCrop": LoadImageAndCrop} 193 | -------------------------------------------------------------------------------- /__init__.py: -------------------------------------------------------------------------------- 1 | PREFIX = '\33[31m*\33[94m Loading GraftingRaymans GR Nodes \33[31m*\33[0m ' 2 | print(f"\n\n\33[31m************************************\33[0m") 3 | print(f"{PREFIX}\n\33[31m************************************") 4 | 5 | from .Nodes.GRImage import GRImageSize, GRImageResize, GRStackImage, GRResizeImageMethods, GRImageDetailsDisplayer, GRImageDetailsSave, GRImagePaste, GRImagePasteWithMask, GRBackgroundRemoverREMBG 6 | from .Nodes.GRPrompt import GRPromptSelector, GRPromptSelectorMulti, GRPromptHub, GRPrompty, GRPromptGen 7 | from .Nodes.GRMask import GRMaskResize, GRMaskCreate, GRMultiMaskCreate, GRMaskCreateRandom, GRImageMask, GRMaskCreateRandomMulti, GRMask 8 | from .Nodes.GRTile import GRTileImage, GRTileFlipImage, GRFlipTileRedRing, GRFlipTileInverted, GRCheckeredBoard 9 | from .Nodes.GRTextOverlay import GRTextOverlay, GROnomatopoeia 10 | from .Nodes.GRCounter import GRCounterVideo 11 | from .Nodes.GRScroller import GRScrollerVideo 12 | from .Nodes.GRPanOrZoom import GRPanOrZoom 13 | from .Nodes.GRPromptGenExtended import GRPromptGenExtended 14 | from .Nodes.GRBLIP2CaptionGenerator import GRBLIP2CaptionGenerator 15 | from .Nodes.GRFlorence2CaptionGenerator import Florence2PromptGenerator 16 | from .Nodes.GRBLIP2TextExpander import BLIP2TextExpander 17 | from .Nodes.GRLora import GRLora 18 | from .Nodes.GRINTIncrement import GRINTIncrement 19 | from .Nodes.GRImageMultiplier import GRImageMultiplier 20 | from .Nodes.GRSigmas import GRSigmas 21 | 22 | import time 23 | 24 | 25 | NODE_CLASS_MAPPINGS = { "GR Prompt Selector" : GRPromptSelector , "GR Image Resize" : GRImageResize, "GR Mask Resize" : GRMaskResize, "GR Mask Create" : GRMaskCreate, "GR Multi Mask Create" : GRMultiMaskCreate, "GR Image Size": GRImageSize, "GR Tile and Border Image": GRTileImage, "GR Prompt Selector Multi": GRPromptSelectorMulti, "GR Tile and Border Image Random Flip" : GRTileFlipImage, "GR Mask Create Random": GRMaskCreateRandom, "GR Stack Image": GRStackImage, "GR Image Resize Methods" : GRResizeImageMethods,"GR Image Details Displayer": GRImageDetailsDisplayer, "GR Image Details Saver": GRImageDetailsSave, "GR Flip Tile Random Red Ring": GRFlipTileRedRing, "GR Flip Tile Random Inverted": GRFlipTileInverted,"GR Text Overlay": GRTextOverlay,"GR Image/Depth Mask": GRImageMask,"GR Checkered Board":GRCheckeredBoard, "GR Onomatopoeia": GROnomatopoeia, "GR Image Paste": GRImagePaste, "GR Prompt HUB": GRPromptHub, "GR Image Paste With Mask": GRImagePasteWithMask, "GR Counter": GRCounterVideo, "GR Background Remover REMBG": GRBackgroundRemoverREMBG, "GR Scroller": GRScrollerVideo, "GR Mask Create Random Multi": GRMaskCreateRandomMulti, "GR Mask": GRMask, "GR Prompty": GRPrompty, "GR Pan Or Zoom":GRPanOrZoom, "GR Prompt Generator": GRPromptGen, "GR Prompt Generator Extended": GRPromptGenExtended, "GR BLIP 2 Caption Generator": GRBLIP2CaptionGenerator, "GR Florence 2 Caption Generator": Florence2PromptGenerator, "GR BLIP 2 Text Expander": BLIP2TextExpander, "GR Lora Randomizer": GRLora, "GR INT Incremetor": GRINTIncrement, "GR Image Multiplier": GRImageMultiplier, "GR Sigmas": GRSigmas } 26 | 27 | NODE_DISPLAY_NAME_MAPPINGS = { } 28 | __all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS'] 29 | 30 | for i in range(10): 31 | time.sleep(0.1) 32 | print ("\r Loading... {}".format(i)+str(i), end="") 33 | 34 | print(f"\b\b\b\b\b\b\b\b\b\b\b\b\b\b*\33[0m 39 Grafting Nodes Loaded \33[31m*") 35 | print(f"*\33[0m Get Grafting \33[31m*") 36 | print(f"\33[31m************************************\33[0m\n\n") 37 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "comfyui_graftingrayman" 3 | description = "Prompt and Masking nodes." 4 | version = "1.0.0" 5 | license = "LICENSE" 6 | 7 | [project.urls] 8 | Repository = "https://github.com/GraftingRayman/ComfyUI_GraftingRayman" 9 | # Used by Comfy Registry https://comfyregistry.org 10 | # Visit my YouTube channel here: https://www.youtube.com/channel/UCK4AxxjpeECN4GKojVMqL5g 11 | 12 | 13 | [tool.comfy] 14 | PublisherId = "GraftingRayman" 15 | DisplayName = "ComfyUI_GraftingRayman" 16 | Icon = "" 17 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | numpy 2 | torch 3 | torchvision 4 | matplotlib 5 | git+https://github.com/openai/CLIP.git 6 | pillow 7 | insightface>=0.7.3 8 | onnx>=1.14.0 9 | opencv-python>=4.7.0.72 10 | segment_anything 11 | packaging 12 | setuptools 13 | rembg 14 | transformers 15 | fonttools 16 | watchdog 17 | --------------------------------------------------------------------------------