{"KSampler": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model used for denoising the input latent."}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true, "tooltip": "The random seed used for creating the noise."}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "The number of steps used in the denoising process."}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01, "tooltip": "The Classifier-Free Guidance scale balances creativity and adherence to the prompt. Higher values result in images more closely matching the prompt however too high values will negatively impact quality."}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"], {"tooltip": "The algorithm used when sampling, this can affect the quality, speed, and style of the generated output."}], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"], {"tooltip": "The scheduler controls how noise is gradually removed to form the image."}], "positive": ["CONDITIONING", {"tooltip": "The conditioning describing the attributes you want to include in the image."}], "negative": ["CONDITIONING", {"tooltip": "The conditioning describing the attributes you want to exclude from the image."}], "latent_image": ["LATENT", {"tooltip": "The latent image to denoise."}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The amount of denoising applied, lower values will maintain the structure of the initial image allowing for image to image sampling."}]}}, "input_order": {"required": ["model", "seed", "steps", "cfg", "sampler_name", "scheduler", "positive", "negative", "latent_image", "denoise"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "KSampler", "display_name": "KSampler", "description": "Uses the provided model, positive and negative conditioning to denoise the latent image.", "python_module": "nodes", "category": "model/sampling", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The denoised latent."], "search_aliases": ["sampler", "sample", "generate", "denoise", "diffuse", "txt2img", "img2img"]}, "CheckpointLoaderSimple": {"input": {"required": {"ckpt_name": [["FLUX1-dev\\ae.safetensors", "FLUX1-dev\\flux1-dev.safetensors", "FLUX1-dev\\text_encoder\\model.safetensors", "FLUX1-dev\\text_encoder_2\\model-00001-of-00002.safetensors", "FLUX1-dev\\text_encoder_2\\model-00002-of-00002.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00001-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00002-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00003-of-00003.safetensors", "FLUX1-dev\\vae\\diffusion_pytorch_model.safetensors", "anytext_v1.1.safetensors", "anytext_v1.1\\pytorch_model.fp16.safetensors"], {"tooltip": "The name of the checkpoint (model) to load."}]}}, "input_order": {"required": ["ckpt_name"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE"], "output_is_list": [false, false, false], "output_name": ["MODEL", "CLIP", "VAE"], "name": "CheckpointLoaderSimple", "display_name": "Load Checkpoint", "description": "Loads a diffusion model checkpoint, diffusion models are used to denoise latents.", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The model used for denoising latents.", "The CLIP model used for encoding text prompts.", "The VAE model used for encoding and decoding images to and from latent space."], "search_aliases": ["load model", "checkpoint", "model loader", "load checkpoint", "ckpt", "model"]}, "CLIPTextEncode": {"input": {"required": {"text": ["STRING", {"multiline": true, "dynamicPrompts": true, "tooltip": "The text to be encoded."}], "clip": ["CLIP", {"tooltip": "The CLIP model used for encoding the text."}]}}, "input_order": {"required": ["text", "clip"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "CLIPTextEncode", "display_name": "CLIP Text Encode (Prompt)", "description": "Encodes a text prompt using a CLIP model into an embedding that can be used to guide the diffusion model towards generating specific images.", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["A conditioning containing the embedded text used to guide the diffusion model."], "search_aliases": ["text", "prompt", "text prompt", "positive prompt", "negative prompt", "encode text", "text encoder", "encode prompt"]}, "CLIPSetLastLayer": {"input": {"required": {"clip": ["CLIP"], "stop_at_clip_layer": ["INT", {"default": -1, "min": -24, "max": -1, "step": 1, "advanced": true}]}}, "input_order": {"required": ["clip", "stop_at_clip_layer"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPSetLastLayer", "display_name": "CLIP Set Last Layer", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAEDecode": {"input": {"required": {"samples": ["LATENT", {"tooltip": "The latent to be decoded."}], "vae": ["VAE", {"tooltip": "The VAE model used for decoding the latent."}]}}, "input_order": {"required": ["samples", "vae"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "VAEDecode", "display_name": "VAE Decode", "description": "Decodes latent images back into pixel space images.", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The decoded image."], "search_aliases": ["decode", "decode latent", "latent to image", "render latent"]}, "VAEEncode": {"input": {"required": {"pixels": ["IMAGE"], "vae": ["VAE"]}}, "input_order": {"required": ["pixels", "vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "VAEEncode", "display_name": "VAE Encode", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": ["encode", "encode image", "image to latent"]}, "VAEEncodeForInpaint": {"input": {"required": {"pixels": ["IMAGE"], "vae": ["VAE"], "mask": ["MASK"], "grow_mask_by": ["INT", {"default": 6, "min": 0, "max": 64, "step": 1}]}}, "input_order": {"required": ["pixels", "vae", "mask", "grow_mask_by"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "VAEEncodeForInpaint", "display_name": "VAE Encode (for Inpainting)", "description": "", "python_module": "nodes", "category": "model/latent/inpaint", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAELoader": {"input": {"required": {"vae_name": [["ae.safetensors", "diffusion_pytorch_model.fp16.safetensors", "qwen_image_vae.safetensors", "wan_2.1_vae.safetensors", "taef1", "taesd", "taesdxl", "taesd3", "pixel_space"]]}}, "input_order": {"required": ["vae_name"]}, "is_input_list": false, "output": ["VAE"], "output_is_list": [false], "output_name": ["VAE"], "name": "VAELoader", "display_name": "Load VAE", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "EmptyLatentImage": {"input": {"required": {"width": ["INT", {"default": 512, "min": 16, "max": 16384, "step": 8, "tooltip": "The width of the latent images in pixels."}], "height": ["INT", {"default": 512, "min": 16, "max": 16384, "step": 8, "tooltip": "The height of the latent images in pixels."}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096, "tooltip": "The number of latent images in the batch."}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "EmptyLatentImage", "display_name": "Empty Latent Image", "description": "Create a new batch of empty latent images to be denoised via sampling.", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The empty latent image batch."], "search_aliases": ["empty", "empty latent", "new latent", "create latent", "blank latent", "blank"]}, "LatentUpscale": {"input": {"required": {"samples": ["LATENT"], "upscale_method": [["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]], "width": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 8}], "height": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 8}], "crop": [["disabled", "center"]]}}, "input_order": {"required": ["samples", "upscale_method", "width", "height", "crop"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentUpscale", "display_name": "Upscale Latent", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": ["enlarge latent", "resize latent"]}, "LatentUpscaleBy": {"input": {"required": {"samples": ["LATENT"], "upscale_method": [["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]], "scale_by": ["FLOAT", {"default": 1.5, "min": 0.01, "max": 8.0, "step": 0.01}]}}, "input_order": {"required": ["samples", "upscale_method", "scale_by"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentUpscaleBy", "display_name": "Upscale Latent By", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": ["enlarge latent", "resize latent", "scale latent"]}, "LatentFromBatch": {"input": {"required": {"samples": ["LATENT"], "batch_index": ["INT", {"default": 0, "min": -16384, "max": 16384}], "length": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["samples", "batch_index", "length"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentFromBatch", "display_name": "Latent From Batch", "description": "", "python_module": "nodes", "category": "model/latent/batch", "output_node": false, "has_intermediate_output": false, "search_aliases": ["select from batch", "pick latent", "batch subset"]}, "RepeatLatentBatch": {"input": {"required": {"samples": ["LATENT"], "amount": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["samples", "amount"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "RepeatLatentBatch", "display_name": "Repeat Latent Batch", "description": "", "python_module": "nodes", "category": "model/latent/batch", "output_node": false, "has_intermediate_output": false, "search_aliases": ["duplicate latent", "clone latent"]}, "SaveImage": {"input": {"required": {"images": ["IMAGE", {"tooltip": "The images to save."}], "filename_prefix": ["STRING", {"default": "ComfyUI", "tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes."}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["images", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "SaveImage", "display_name": "Save Image", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "nodes", "category": "image", "output_node": true, "has_intermediate_output": false, "search_aliases": ["save", "save image", "export image", "output image", "write image", "download"], "essentials_category": "Basics"}, "PreviewImage": {"input": {"required": {"images": ["IMAGE"]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["images"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "PreviewImage", "display_name": "Preview Image", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "nodes", "category": "image", "output_node": true, "has_intermediate_output": false, "search_aliases": ["preview", "preview image", "show image", "view image", "display image", "image viewer"], "essentials_category": "Basics"}, "LoadImage": {"input": {"required": {"image": [["000001 (1).png", "000001 (2).png", "000001 (3).png", "000001 (4).png", "000001.png", "000002 (1).png", "000002 (2).png", "000002 (3).png", "000002 (4).png", "000002.png", "000003 (1).png", "000003 (2).png", "000003 (3).png", "000003 (4).png", "000003.png", "000004 (1).png", "000004 (2).png", "000004 (3).png", "000004 (4).png", "000004.png", "000005 (1).png", "000005 (2).png", "000005 (3).png", "000005 (4).png", "000005.png", "000006 (1).png", "000006 (2).png", "000006 (3).png", "000006 (4).png", "000006.png", "000007 (1).png", "000007 (2).png", "000007 (3).png", "000007 (4).png", "000007.png", "000008 (1).png", "000008 (2).png", "000008 (3).png", "000008 (4).png", "000008.png", "000009 (1).png", "000009 (2).png", "000009 (3).png", "000009 (4).png", "000009.png", "000010 (1).png", "000010 (2).png", "000010 (3).png", "000010 (4).png", "000010.png", "000011 (1).png", "000011 (2).png", "000011 (3).png", "000011 (4).png", "000011.png", "000012 (1).png", "000012 (2).png", "000012 (3).png", "000012 (4).png", "000012.png", "000013 (1).png", "000013 (2).png", "000013 (3).png", "000013 (4).png", "000013.png", "000014 (1).png", "000014 (2).png", "000014 (3).png", "000014 (4).png", "000014.png", "000015 (1).png", "000015 (2).png", "000015 (3).png", "000015 (4).png", "000015.png", "000016 (1).png", "000016 (2).png", "000016 (3).png", "000016 (4).png", "000016.png", "000017 (1).png", "000017 (2).png", "000017 (3).png", "000017 (4).png", "000017.png", "000018 (1).png", "000018 (2).png", "000018 (3).png", "000018 (4).png", "000018.png", "000019 (1).png", "000019 (2).png", "000019 (3).png", "000019 (4).png", "000019.png", "000020 (1).png", "000020 (2).png", "000020 (3).png", "000020 (4).png", "000020.png", "000021 (1).png", "000021 (2).png", "000021 (3).png", "000021 (4).png", "000021.png", "000022 (1).png", "000022 (2).png", "000022 (3).png", "000022 (4).png", "000022.png", "000023 (1).png", "000023 (2).png", "000023 (3).png", "000023 (4).png", "000023.png", "000024 (1).png", "000024 (2).png", "000024 (3).png", "000024 (4).png", "000024.png", "000025 (1).png", "000025 (2).png", "000025 (3).png", "000025 (4).png", "000025.png", "000026 (1).png", "000026 (2).png", "000026 (3).png", "000026 (4).png", "000026.png", "000027 (1).png", "000027 (2).png", "000027 (3).png", "000027 (4).png", "000027.png", "000028 (1).png", "000028 (2).png", "000028 (3).png", "000028 (4).png", "000028.png", "000029 (1).png", "000029 (2).png", "000029 (3).png", "000029 (4).png", "000029.png", "000030 (1).png", "000030 (2).png", "000030 (3).png", "000030 (4).png", "000030.png", "000031 (1).png", "000031 (2).png", "000031 (3).png", "000031 (4).png", "000031.png", "000032 (1).png", "000032 (2).png", "000032 (3).png", "000032 (4).png", "000032.png", "000033 (1).png", "000033 (2).png", "000033 (3).png", "000033 (4).png", "000033.png", "000034 (1).png", "000034 (2).png", "000034 (3).png", "000034 (4).png", "000034.png", "000035 (1).png", "000035 (2).png", "000035 (3).png", "000035 (4).png", "000035.png", "000036 (1).png", "000036 (2).png", "000036 (3).png", "000036 (4).png", "000036.png", "000037 (1).png", "000037 (2).png", "000037 (3).png", "000037 (4).png", "000037.png", "000038 (1).png", "000038 (2).png", "000038 (3).png", "000038 (4).png", "000038.png", "000039 (1).png", "000039 (2).png", "000039 (3).png", "000039 (4).png", "000039.png", "000040 (1).png", "000040 (2).png", "000040 (3).png", "000040 (4).png", "000040.png", "000041 (1).png", "000041 (2).png", "000041 (3).png", "000041 (4).png", "000041.png", "000042 (1).png", "000042 (2).png", "000042 (3).png", "000042 (4).png", "000042.png", "000043 (1).png", "000043 (2).png", "000043 (3).png", "000043 (4).png", "000043.png", "000044 (1).png", "000044 (2).png", "000044 (3).png", "000044 (4).png", "000044.png", "000045 (1).png", "000045 (2).png", "000045 (3).png", "000045 (4).png", "000045.png", "000046 (1).png", "000046 (2).png", "000046 (3).png", "000046 (4).png", "000046.png", "000047 (1).png", "000047 (2).png", "000047 (3).png", "000047 (4).png", "000047.png", "000048 (1).png", "000048 (2).png", "000048 (3).png", "000048 (4).png", "000048.png", "000049 (1).png", "000049 (2).png", "000049 (3).png", "000049 (4).png", "000049.png", "000050 (1).png", "000050 (2).png", "000050 (3).png", "000050 (4).png", "000050.png", "000051 (1).png", "000051 (2).png", "000051 (3).png", "000051 (4).png", "000051.png", "000052 (1).png", "000052 (2).png", "000052 (3).png", "000052 (4).png", "000052.png", "000053 (1).png", "000053 (2).png", "000053 (3).png", "000053 (4).png", "000053.png", "000054 (1).png", "000054 (2).png", "000054 (3).png", "000054 (4).png", "000054.png", "000055 (1).png", "000055 (2).png", "000055 (3).png", "000055 (4).png", "000055.png", "000056 (1).png", "000056 (2).png", "000056 (3).png", "000056 (4).png", "000056.png", "000057 (1).png", "000057 (2).png", "000057 (3).png", "000057 (4).png", "000057.png", "000058 (1).png", "000058 (2).png", "000058 (3).png", "000058 (4).png", "000058.png", "000059 (1).png", "000059 (2).png", "000059 (3).png", "000059 (4).png", "000059.png", "000060 (1).png", "000060 (2).png", "000060 (3).png", "000060 (4).png", "000060.png", "000061 (1).png", "000061 (2).png", "000061 (3).png", "000061 (4).png", "000061.png", "000062 (1).png", "000062 (2).png", "000062 (3).png", "000062 (4).png", "000062.png", "000063 (1).png", "000063 (2).png", "000063 (3).png", "000063 (4).png", "000063.png", "000064 (1).png", "000064 (2).png", "000064 (3).png", "000064 (4).png", "000064.png", "000065 (1).png", "000065 (2).png", "000065 (3).png", "000065 (4).png", "000065.png", "000066 (1).png", "000066 (2).png", "000066 (3).png", "000066 (4).png", "000066.png", "000067 (1).png", "000067 (2).png", "000067 (3).png", "000067 (4).png", "000067.png", "000068 (1).png", "000068 (2).png", "000068 (3).png", "000068 (4).png", "000068.png", "000069 (1).png", "000069 (2).png", "000069 (3).png", "000069 (4).png", "000069.png", "000070 (1).png", "000070 (2).png", "000070 (3).png", "000070 (4).png", "000070.png", "000071 (1).png", "000071 (2).png", "000071 (3).png", "000071 (4).png", "000071.png", "000072 (1).png", "000072 (2).png", "000072 (3).png", "000072 (4).png", "000072.png", "000073 (1).png", "000073 (2).png", "000073 (3).png", "000073 (4).png", "000073.png", "000074 (1).png", "000074 (2).png", "000074 (3).png", "000074 (4).png", "000074.png", "000075 (1).png", "000075 (2).png", "000075 (3).png", "000075 (4).png", "000075.png", "000076 (1).png", "000076 (2).png", "000076 (3).png", "000076 (4).png", "000076.png", "000077 (1).png", "000077 (2).png", "000077 (3).png", "000077 (4).png", "000077.png", "000078 (1).png", "000078 (2).png", "000078 (3).png", "000078 (4).png", "000078.png", "000079 (1).png", "000079 (2).png", "000079 (3).png", "000079 (4).png", "000079.png", "000080 (1).png", "000080 (2).png", "000080 (3).png", "000080 (4).png", "000080.png", "000081 (1).png", "000081 (2).png", "000081 (3).png", "000081 (4).png", "000081.png", "000082 (1).png", "000082 (2).png", "000082 (3).png", "000082 (4).png", "000082.png", "000083 (1).png", "000083 (2).png", "000083 (3).png", "000083 (4).png", "000083.png", "000084 (1).png", "000084 (2).png", "000084 (3).png", "000084 (4).png", "000084.png", "000085 (1).png", "000085 (2).png", "000085 (3).png", "000085 (4).png", "000085.png", "000086 (1).png", "000086 (2).png", "000086 (3).png", "000086 (4).png", "000086.png", "000087 (1).png", "000087 (2).png", "000087 (3).png", "000087 (4).png", "000087.png", "000088 (1).png", "000088 (2).png", "000088 (3).png", "000088 (4).png", "000088.png", "000089 (1).png", "000089 (2).png", "000089 (3).png", "000089 (4).png", "000089.png", "000090 (1).png", "000090 (2).png", "000090 (3).png", "000090 (4).png", "000090.png", "000091 (1).png", "000091 (2).png", "000091 (3).png", "000091 (4).png", "000091.png", "000092 (1).png", "000092 (2).png", "000092 (3).png", "000092 (4).png", "000092.png", "000093 (1).png", "000093 (2).png", "000093 (3).png", "000093 (4).png", "000093.png", "000094 (1).png", "000094 (2).png", "000094 (3).png", "000094 (4).png", "000094.png", "000095 (1).png", "000095 (2).png", "000095 (3).png", "000095 (4).png", "000095.png", "000096 (1).png", "000096 (2).png", "000096 (3).png", "000096 (4).png", "000096.png", "000097 (1).png", "000097 (2).png", "000097 (3).png", "000097 (4).png", "000097.png", "000098 (1).png", "000098 (2).png", "000098 (3).png", "000098 (4).png", "000098.png", "000099 (1).png", "000099 (2).png", "000099 (3).png", "000099 (4).png", "000099.png", "000100 (1).png", "000100 (2).png", "000100 (3).png", "000100 (4).png", "000100.png", "000101 (1).png", "000101 (2).png", "000101 (3).png", "000101 (4).png", "000101.png", "000102 (1).png", "000102 (2).png", "000102 (3).png", "000102 (4).png", "000102.png", "000103 (1).png", "000103 (2).png", "000103 (3).png", "000103 (4).png", "000103.png", "000104 (1).png", "000104 (2).png", "000104 (3).png", "000104 (4).png", "000104.png", "000105 (1).png", "000105 (2).png", "000105 (3).png", "000105 (4).png", "000105.png", "000106 (1).png", "000106 (2).png", "000106 (3).png", "000106 (4).png", "000106.png", "000107 (1).png", "000107 (2).png", "000107 (3).png", "000107 (4).png", "000107.png", "000108 (1).png", "000108 (2).png", "000108 (3).png", "000108 (4).png", "000108.png", "000109 (1).png", "000109 (2).png", "000109 (3).png", "000109 (4).png", "000109.png", "000110 (1).png", "000110 (2).png", "000110 (3).png", "000110 (4).png", "000110.png", "000111 (1).png", "000111 (2).png", "000111 (3).png", "000111 (4).png", "000111.png", "000112 (1).png", "000112 (2).png", "000112 (3).png", "000112 (4).png", "000112.png", "000113 (1).png", "000113 (2).png", "000113 (3).png", "000113 (4).png", "000113.png", "000114 (1).png", "000114 (2).png", "000114 (3).png", "000114 (4).png", "000114.png", "000115 (1).png", "000115 (2).png", "000115 (3).png", "000115 (4).png", "000115.png", "000116 (1).png", "000116 (2).png", "000116 (3).png", "000116 (4).png", "000116.png", "000117 (1).png", "000117 (2).png", "000117 (3).png", "000117 (4).png", "000117.png", "000118 (1).png", "000118 (2).png", "000118 (3).png", "000118 (4).png", "000118.png", "000119 (1).png", "000119 (2).png", "000119 (3).png", "000119 (4).png", "000119.png", "000120 (1).png", "000120 (2).png", "000120 (3).png", "000120 (4).png", "000120.png", "000121 (1).png", "000121 (2).png", "000121 (3).png", "000121 (4).png", "000121.png", "000122 (1).png", "000122 (2).png", "000122 (3).png", "000122 (4).png", "000122.png", "000123 (1).png", "000123 (2).png", "000123 (3).png", "000123 (4).png", "000123.png", "000124 (1).png", "000124 (2).png", "000124 (3).png", "000124 (4).png", "000124.png", "000125 (1).png", "000125 (2).png", "000125 (3).png", "000125 (4).png", "000125.png", "000126 (1).png", "000126 (2).png", "000126 (3).png", "000126 (4).png", "000126.png", "000127 (1).png", "000127 (2).png", "000127 (3).png", "000127 (4).png", "000127.png", "000128 (1).png", "000128 (2).png", "000128 (3).png", "000128 (4).png", "000128.png", "000129 (1).png", "000129 (2).png", "000129 (3).png", "000129 (4).png", "000129.png", "000130 (1).png", "000130 (2).png", "000130 (3).png", "000130 (4).png", "000130.png", "000131 (1).png", "000131 (2).png", "000131 (3).png", "000131 (4).png", "000131.png", "000132 (1).png", "000132 (2).png", "000132 (3).png", "000132 (4).png", "000132.png", "000133 (1).png", "000133 (2).png", "000133 (3).png", "000133 (4).png", "000133.png", "000134 (1).png", "000134 (2).png", "000134 (3).png", "000134 (4).png", "000134.png", "000135 (1).png", "000135 (2).png", "000135 (3).png", "000135 (4).png", "000135.png", "000136 (1).png", "000136 (2).png", "000136 (3).png", "000136 (4).png", "000136.png", "000137 (1).png", "000137 (2).png", "000137 (3).png", "000137.png", "000138 (1).png", "000138 (2).png", "000138 (3).png", "000138.png", "000139 (1).png", "000139 (2).png", "000139 (3).png", "000139.png", "000140 (1).png", "000140 (2).png", "000140 (3).png", "000140.png", "000141 (1).png", "000141 (2).png", "000141 (3).png", "000141.png", "000142 (1).png", "000142 (2).png", "000142 (3).png", "000142.png", "000143 (1).png", "000143 (2).png", "000143 (3).png", "000143.png", "000144 (1).png", "000144 (2).png", "000144 (3).png", "000144.png", "000145 (1).png", "000145 (2).png", "000145 (3).png", "000145.png", "000146 (1).png", "000146 (2).png", "000146 (3).png", "000146.png", "000147 (1).png", "000147 (2).png", "000147 (3).png", "000147.png", "000148 (1).png", "000148 (2).png", "000148 (3).png", "000148.png", "000149 (1).png", "000149 (2).png", "000149 (3).png", "000149.png", "000150 (1).png", "000150 (2).png", "000150 (3).png", "000150.png", "000151 (1).png", "000151 (2).png", "000151 (3).png", "000151.png", "000152 (1).png", "000152 (2).png", "000152 (3).png", "000152.png", "000153 (1).png", "000153 (2).png", "000153 (3).png", "000153.png", "000154 (1).png", "000154 (2).png", "000154 (3).png", "000154.png", "000155 (1).png", "000155 (2).png", "000155 (3).png", "000155.png", "000156 (1).png", "000156 (2).png", "000156 (3).png", "000156.png", "000157 (1).png", "000157 (2).png", "000157 (3).png", "000157.png", "000158 (1).png", "000158 (2).png", "000158 (3).png", "000158.png", "000159 (1).png", "000159 (2).png", "000159 (3).png", "000159.png", "000160 (1).png", "000160 (2).png", "000160 (3).png", "000160.png", "000161 (1).png", "000161 (2).png", "000161 (3).png", "000161.png", "000162 (1).png", "000162 (2).png", "000162 (3).png", "000162.png", "000163 (1).png", "000163 (2).png", "000163 (3).png", "000163.png", "000164 (1).png", "000164 (2).png", "000164 (3).png", "000164.png", "000165 (1).png", "000165 (2).png", "000165 (3).png", "000165.png", "000166 (1).png", "000166 (2).png", "000166 (3).png", "000166.png", "000167 (1).png", "000167 (2).png", "000167 (3).png", "000167.png", "000168 (1).png", "000168 (2).png", "000168 (3).png", "000168.png", "000169 (1).png", "000169 (2).png", "000169 (3).png", "000169.png", "000170 (1).png", "000170 (2).png", "000170 (3).png", "000170.png", "000171 (1).png", "000171 (2).png", "000171 (3).png", "000171.png", "000172 (1).png", "000172 (2).png", "000172 (3).png", "000172.png", "000173 (1).png", "000173 (2).png", "000173 (3).png", "000173.png", "000174 (1).png", "000174 (2).png", "000174 (3).png", "000174.png", "000175 (1).png", "000175 (2).png", "000175 (3).png", "000175.png", "000176 (1).png", "000176 (2).png", "000176 (3).png", "000176.png", "000177 (1).png", "000177 (2).png", "000177 (3).png", "000177.png", "000178 (1).png", "000178 (2).png", "000178 (3).png", "000178.png", "000179 (1).png", "000179 (2).png", "000179 (3).png", "000179.png", "000180 (1).png", "000180 (2).png", "000180 (3).png", "000180.png", "000181 (1).png", "000181 (2).png", "000181 (3).png", "000181.png", "000182 (1).png", "000182 (2).png", "000182 (3).png", "000182.png", "000183 (1).png", "000183 (2).png", "000183 (3).png", "000183.png", "000184 (1).png", "000184 (2).png", "000184 (3).png", "000184.png", "000185 (1).png", "000185 (2).png", "000185 (3).png", "000185.png", "000186 (1).png", "000186 (2).png", "000186 (3).png", "000186.png", "000187 (1).png", "000187 (2).png", "000187 (3).png", "000187.png", "000188 (1).png", "000188 (2).png", "000188 (3).png", "000188.png", "000189 (1).png", "000189 (2).png", "000189 (3).png", "000189.png", "000190 (1).png", "000190 (2).png", "000190 (3).png", "000190.png", "000191 (1).png", "000191 (2).png", "000191 (3).png", "000191.png", "000192 (1).png", "000192 (2).png", "000192 (3).png", "000192.png", "000193 (1).png", "000193 (2).png", "000193 (3).png", "000193.png", "000194 (1).png", "000194 (2).png", "000194 (3).png", "000194.png", "000195 (1).png", "000195 (2).png", "000195 (3).png", "000195.png", "000196 (1).png", "000196 (2).png", "000196 (3).png", "000196.png", "000197 (1).png", "000197 (2).png", "000197 (3).png", "000197.png", "000198 (1).png", "000198 (2).png", "000198 (3).png", "000198.png", "000199 (1).png", "000199 (2).png", "000199 (3).png", "000199.png", "000200 (1).png", "000200 (2).png", "000200 (3).png", "000200.png", "000201 (1).png", "000201 (2).png", "000201 (3).png", "000201.png", "000202 (1).png", "000202 (2).png", "000202 (3).png", "000202.png", "000203 (1).png", "000203 (2).png", "000203 (3).png", "000203.png", "000204 (1).png", "000204 (2).png", "000204 (3).png", "000204.png", "000205 (1).png", "000205 (2).png", "000205 (3).png", "000205.png", "000206 (1).png", "000206 (2).png", "000206 (3).png", "000206.png", "000207 (1).png", "000207 (2).png", "000207 (3).png", "000207.png", "000208 (1).png", "000208 (2).png", "000208 (3).png", "000208.png", "000209 (1).png", "000209 (2).png", "000209 (3).png", "000209.png", "000210 (1).png", "000210 (2).png", "000210 (3).png", "000210.png", "000211 (1).png", "000211 (2).png", "000211 (3).png", "000211.png", "000212 (1).png", "000212 (2).png", "000212 (3).png", "000212.png", "000213 (1).png", "000213 (2).png", "000213 (3).png", "000213.png", "000214 (1).png", "000214 (2).png", "000214 (3).png", "000214.png", "000215 (1).png", "000215 (2).png", "000215 (3).png", "000215.png", "000216 (1).png", "000216 (2).png", "000216 (3).png", "000216.png", "000217 (1).png", "000217 (2).png", "000217 (3).png", "000217.png", "000218 (1).png", "000218 (2).png", "000218 (3).png", "000218.png", "000219 (1).png", "000219 (2).png", "000219 (3).png", "000219.png", "000220 (1).png", "000220 (2).png", "000220 (3).png", "000220.png", "000221 (1).png", "000221 (2).png", "000221 (3).png", "000221.png", "000222 (1).png", "000222 (2).png", "000222 (3).png", "000222.png", "000223 (1).png", "000223 (2).png", "000223 (3).png", "000223.png", "000224 (1).png", "000224 (2).png", "000224 (3).png", "000224.png", "000225 (1).png", "000225 (2).png", "000225 (3).png", "000225.png", "000226 (1).png", "000226 (2).png", "000226 (3).png", "000226.png", "000227 (1).png", "000227 (2).png", "000227 (3).png", "000227.png", "000228 (1).png", "000228 (2).png", "000228 (3).png", "000228.png", "000229 (1).png", "000229 (2).png", "000229 (3).png", "000229.png", "000230 (1).png", "000230 (2).png", "000230 (3).png", "000230.png", "000231 (1).png", "000231 (2).png", "000231 (3).png", "000231.png", "000232 (1).png", "000232 (2).png", "000232 (3).png", "000232.png", "000233 (1).png", "000233 (2).png", "000233 (3).png", "000233.png", "000234 (1).png", "000234 (2).png", "000234 (3).png", "000234.png", "000235 (1).png", "000235 (2).png", "000235 (3).png", "000235.png", "000236 (1).png", "000236 (2).png", "000236 (3).png", "000236.png", "000237 (1).png", "000237 (2).png", "000237 (3).png", "000237.png", "000238 (1).png", "000238 (2).png", "000238 (3).png", "000238.png", "000239 (1).png", "000239 (2).png", "000239 (3).png", "000239.png", "000240 (1).png", "000240 (2).png", "000240 (3).png", "000240.png", "000241 (1).png", "000241 (2).png", "000241 (3).png", "000241.png", "000242 (1).png", "000242 (2).png", "000242 (3).png", "000242.png", "000243 (1).png", "000243 (2).png", "000243 (3).png", "000243.png", "000244 (1).png", "000244 (2).png", "000244 (3).png", "000244.png", "000245 (1).png", "000245 (2).png", "000245 (3).png", "000245.png", "000246 (1).png", "000246 (2).png", "000246 (3).png", "000246.png", "000247 (1).png", "000247 (2).png", "000247 (3).png", "000247.png", "000248 (1).png", "000248 (2).png", "000248 (3).png", "000248.png", "000249 (1).png", "000249 (2).png", "000249 (3).png", "000249.png", "000250 (1).png", "000250 (2).png", "000250 (3).png", "000250.png", "000251 (1).png", "000251 (2).png", "000251 (3).png", "000251.png", "000252 (1).png", "000252 (2).png", "000252 (3).png", "000252.png", "000253 (1).png", "000253 (2).png", "000253 (3).png", "000253.png", "000254 (1).png", "000254 (2).png", "000254 (3).png", "000254.png", "000255 (1).png", "000255 (2).png", "000255 (3).png", "000255.png", "000256 (1).png", "000256 (2).png", "000256 (3).png", "000256.png", "000257 (1).png", "000257 (2).png", "000257 (3).png", "000257.png", "000258 (1).png", "000258 (2).png", "000258 (3).png", "000258.png", "000259 (1).png", "000259 (2).png", "000259 (3).png", "000259.png", "000260 (1).png", "000260 (2).png", "000260 (3).png", "000260.png", "000261 (1).png", "000261 (2).png", "000261 (3).png", "000261.png", "000262 (1).png", "000262 (2).png", "000262 (3).png", "000262.png", "000263 (1).png", "000263 (2).png", "000263 (3).png", "000263.png", "000264 (1).png", "000264 (2).png", "000264 (3).png", "000264.png", "000265 (1).png", "000265 (2).png", "000265 (3).png", "000265.png", "000266 (1).png", "000266 (2).png", "000266 (3).png", "000266.png", "000267 (1).png", "000267 (2).png", "000267 (3).png", "000267.png", "000268 (1).png", "000268 (2).png", "000268 (3).png", "000268.png", "000269 (1).png", "000269 (2).png", "000269 (3).png", "000269.png", "000270 (1).png", "000270 (2).png", "000270 (3).png", "000270.png", "000271 (1).png", "000271 (2).png", "000271 (3).png", "000271.png", "000272 (1).png", "000272 (2).png", "000272 (3).png", "000272.png", "000273 (1).png", "000273 (2).png", "000273 (3).png", "000273.png", "000274 (1).png", "000274 (2).png", "000274 (3).png", "000274.png", "000275 (1).png", "000275 (2).png", "000275 (3).png", "000275.png", "000276 (1).png", "000276 (2).png", "000276 (3).png", "000276.png", "000277 (1).png", "000277 (2).png", "000277.png", "000278 (1).png", "000278 (2).png", "000278.png", "000279 (1).png", "000279 (2).png", "000279.png", "000280 (1).png", "000280 (2).png", "000280.png", "000281 (1).png", "000281 (2).png", "000281.png", "000282 (1).png", "000282 (2).png", "000282.png", "000283 (1).png", "000283.png", "000284 (1).png", "000284.png", "000285 (1).png", "000285.png", "000286 (1).png", "000286.png", "000287 (1).png", "000287.png", "000288 (1).png", "000288.png", "000289.png", "000290.png", "000291.png", "000292.png", "000293.png", "000294.png", "000295.png", "000296.png", "000297.png", "000298.png", "000299.png", "000300.png", "000301.png", "000302.png", "000303.png", "000304.png", "000305.png", "000306.png", "000307.png", "000308.png", "000309.png", "000310.png", "000311.png", "000312.png", "000313.png", "000314.png", "084419f11856de5234c3a8a3eba3aac7.jpg", "13753499768289aa1210f59c25731506.png", "38f85f76ca64ed6738d5ca0c05542950_origin(1).jpg", "3ea2a2e2aa7aea7bdaab0ed41c3e766d.png", "5b6b0f9e128f5575e17785e97628311a.png", "62683d69df9198b4b8ec71806fe147d8.png", "8fb439ac734b89f1729916e0c56bcf39.png", "A3E38E3E-9369-4C72-A022-E5EC73414D11-73729-00001F1EBB363F3A.jpg", "ComfyUI_00018_.png", "Qwen_Edit2511_\u56fe\u751f\u56fe_00003_.png", "Qwen_\u6587\u751f\u56fe_00006_.png", "clipboard-2026-06-09T08-37-30-236Z-06840286.png", "clipboard-2026-06-09T08-55-09-228Z-06840286.png", "clipboard-2026-06-09T10-24-30-214Z-f4ada252.png", "clipboard-2026-06-10T01-13-36-419Z-06840286.png", "clipboard-2026-06-10T01-43-35-666Z-ed57443b.png", "clipboard-2026-06-10T02-16-15-866Z-9166c31e.png", "clipboard-2026-06-10T02-25-26-729Z-5947938f.jpg", "clipboard-2026-06-10T03-06-23-575Z-68d3b00e.jpg", "clipboard-2026-06-10T03-06-23-577Z-bdb0dae5.png", "clipboard-2026-06-11T08-00-51-819Z-61275a50.jpg", "clipboard-2026-06-11T08-24-13-352Z-fe58af8f.jpg", "comfyui_kaoyan_1.png", "comfyui_kaoyan_2.png", "comfyui_kaoyan_800_1(2).png", "example.png", "img01_classroom.jpg", "img02_club.jpg", "lQDPKeGXrn043cfNDADNEgCwKQa4O46zR9UH3SKJ-rfQAA_4608_3072.jpg", "xz.png", "\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17812587071441.png", "\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17821189242311.png", "\u603b.png", "\u753b\u677f-2_03.jpg", "\u95e8\u5e97\u7cfb\u7edf\u5c0f\u7a0b\u5e8f.png", "\u98df\u54c1\u8336\u53f6\u76f4\u901a\u8f66\u4e3b\u56fe.jpg"], {"image_upload": true}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "LoadImage", "display_name": "Load Image", "description": "", "python_module": "nodes", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": ["load image", "open image", "import image", "image input", "upload image", "read image", "image loader"], "essentials_category": "Basics"}, "LoadImageMask": {"input": {"required": {"image": [["000001 (1).png", "000001 (2).png", "000001 (3).png", "000001 (4).png", "000001.png", "000002 (1).png", "000002 (2).png", "000002 (3).png", "000002 (4).png", "000002.png", "000003 (1).png", "000003 (2).png", "000003 (3).png", "000003 (4).png", "000003.png", "000004 (1).png", "000004 (2).png", "000004 (3).png", "000004 (4).png", "000004.png", "000005 (1).png", "000005 (2).png", "000005 (3).png", "000005 (4).png", "000005.png", "000006 (1).png", "000006 (2).png", "000006 (3).png", "000006 (4).png", "000006.png", "000007 (1).png", "000007 (2).png", "000007 (3).png", "000007 (4).png", "000007.png", "000008 (1).png", "000008 (2).png", "000008 (3).png", "000008 (4).png", "000008.png", "000009 (1).png", "000009 (2).png", "000009 (3).png", "000009 (4).png", "000009.png", "000010 (1).png", "000010 (2).png", "000010 (3).png", "000010 (4).png", "000010.png", "000011 (1).png", "000011 (2).png", "000011 (3).png", "000011 (4).png", "000011.png", "000012 (1).png", "000012 (2).png", "000012 (3).png", "000012 (4).png", "000012.png", "000013 (1).png", "000013 (2).png", "000013 (3).png", "000013 (4).png", "000013.png", "000014 (1).png", "000014 (2).png", "000014 (3).png", "000014 (4).png", "000014.png", "000015 (1).png", "000015 (2).png", "000015 (3).png", "000015 (4).png", "000015.png", "000016 (1).png", "000016 (2).png", "000016 (3).png", "000016 (4).png", "000016.png", "000017 (1).png", "000017 (2).png", "000017 (3).png", "000017 (4).png", "000017.png", "000018 (1).png", "000018 (2).png", "000018 (3).png", "000018 (4).png", "000018.png", "000019 (1).png", "000019 (2).png", "000019 (3).png", "000019 (4).png", "000019.png", "000020 (1).png", "000020 (2).png", "000020 (3).png", "000020 (4).png", "000020.png", "000021 (1).png", "000021 (2).png", "000021 (3).png", "000021 (4).png", "000021.png", "000022 (1).png", "000022 (2).png", "000022 (3).png", "000022 (4).png", "000022.png", "000023 (1).png", "000023 (2).png", "000023 (3).png", "000023 (4).png", "000023.png", "000024 (1).png", "000024 (2).png", "000024 (3).png", "000024 (4).png", "000024.png", "000025 (1).png", "000025 (2).png", "000025 (3).png", "000025 (4).png", "000025.png", "000026 (1).png", "000026 (2).png", "000026 (3).png", "000026 (4).png", "000026.png", "000027 (1).png", "000027 (2).png", "000027 (3).png", "000027 (4).png", "000027.png", "000028 (1).png", "000028 (2).png", "000028 (3).png", "000028 (4).png", "000028.png", "000029 (1).png", "000029 (2).png", "000029 (3).png", "000029 (4).png", "000029.png", "000030 (1).png", "000030 (2).png", "000030 (3).png", "000030 (4).png", "000030.png", "000031 (1).png", "000031 (2).png", "000031 (3).png", "000031 (4).png", "000031.png", "000032 (1).png", "000032 (2).png", "000032 (3).png", "000032 (4).png", "000032.png", "000033 (1).png", "000033 (2).png", "000033 (3).png", "000033 (4).png", "000033.png", "000034 (1).png", "000034 (2).png", "000034 (3).png", "000034 (4).png", "000034.png", "000035 (1).png", "000035 (2).png", "000035 (3).png", "000035 (4).png", "000035.png", "000036 (1).png", "000036 (2).png", "000036 (3).png", "000036 (4).png", "000036.png", "000037 (1).png", "000037 (2).png", "000037 (3).png", "000037 (4).png", "000037.png", "000038 (1).png", "000038 (2).png", "000038 (3).png", "000038 (4).png", "000038.png", "000039 (1).png", "000039 (2).png", "000039 (3).png", "000039 (4).png", "000039.png", "000040 (1).png", "000040 (2).png", "000040 (3).png", "000040 (4).png", "000040.png", "000041 (1).png", "000041 (2).png", "000041 (3).png", "000041 (4).png", "000041.png", "000042 (1).png", "000042 (2).png", "000042 (3).png", "000042 (4).png", "000042.png", "000043 (1).png", "000043 (2).png", "000043 (3).png", "000043 (4).png", "000043.png", "000044 (1).png", "000044 (2).png", "000044 (3).png", "000044 (4).png", "000044.png", "000045 (1).png", "000045 (2).png", "000045 (3).png", "000045 (4).png", "000045.png", "000046 (1).png", "000046 (2).png", "000046 (3).png", "000046 (4).png", "000046.png", "000047 (1).png", "000047 (2).png", "000047 (3).png", "000047 (4).png", "000047.png", "000048 (1).png", "000048 (2).png", "000048 (3).png", "000048 (4).png", "000048.png", "000049 (1).png", "000049 (2).png", "000049 (3).png", "000049 (4).png", "000049.png", "000050 (1).png", "000050 (2).png", "000050 (3).png", "000050 (4).png", "000050.png", "000051 (1).png", "000051 (2).png", "000051 (3).png", "000051 (4).png", "000051.png", "000052 (1).png", "000052 (2).png", "000052 (3).png", "000052 (4).png", "000052.png", "000053 (1).png", "000053 (2).png", "000053 (3).png", "000053 (4).png", "000053.png", "000054 (1).png", "000054 (2).png", "000054 (3).png", "000054 (4).png", "000054.png", "000055 (1).png", "000055 (2).png", "000055 (3).png", "000055 (4).png", "000055.png", "000056 (1).png", "000056 (2).png", "000056 (3).png", "000056 (4).png", "000056.png", "000057 (1).png", "000057 (2).png", "000057 (3).png", "000057 (4).png", "000057.png", "000058 (1).png", "000058 (2).png", "000058 (3).png", "000058 (4).png", "000058.png", "000059 (1).png", "000059 (2).png", "000059 (3).png", "000059 (4).png", "000059.png", "000060 (1).png", "000060 (2).png", "000060 (3).png", "000060 (4).png", "000060.png", "000061 (1).png", "000061 (2).png", "000061 (3).png", "000061 (4).png", "000061.png", "000062 (1).png", "000062 (2).png", "000062 (3).png", "000062 (4).png", "000062.png", "000063 (1).png", "000063 (2).png", "000063 (3).png", "000063 (4).png", "000063.png", "000064 (1).png", "000064 (2).png", "000064 (3).png", "000064 (4).png", "000064.png", "000065 (1).png", "000065 (2).png", "000065 (3).png", "000065 (4).png", "000065.png", "000066 (1).png", "000066 (2).png", "000066 (3).png", "000066 (4).png", "000066.png", "000067 (1).png", "000067 (2).png", "000067 (3).png", "000067 (4).png", "000067.png", "000068 (1).png", "000068 (2).png", "000068 (3).png", "000068 (4).png", "000068.png", "000069 (1).png", "000069 (2).png", "000069 (3).png", "000069 (4).png", "000069.png", "000070 (1).png", "000070 (2).png", "000070 (3).png", "000070 (4).png", "000070.png", "000071 (1).png", "000071 (2).png", "000071 (3).png", "000071 (4).png", "000071.png", "000072 (1).png", "000072 (2).png", "000072 (3).png", "000072 (4).png", "000072.png", "000073 (1).png", "000073 (2).png", "000073 (3).png", "000073 (4).png", "000073.png", "000074 (1).png", "000074 (2).png", "000074 (3).png", "000074 (4).png", "000074.png", "000075 (1).png", "000075 (2).png", "000075 (3).png", "000075 (4).png", "000075.png", "000076 (1).png", "000076 (2).png", "000076 (3).png", "000076 (4).png", "000076.png", "000077 (1).png", "000077 (2).png", "000077 (3).png", "000077 (4).png", "000077.png", "000078 (1).png", "000078 (2).png", "000078 (3).png", "000078 (4).png", "000078.png", "000079 (1).png", "000079 (2).png", "000079 (3).png", "000079 (4).png", "000079.png", "000080 (1).png", "000080 (2).png", "000080 (3).png", "000080 (4).png", "000080.png", "000081 (1).png", "000081 (2).png", "000081 (3).png", "000081 (4).png", "000081.png", "000082 (1).png", "000082 (2).png", "000082 (3).png", "000082 (4).png", "000082.png", "000083 (1).png", "000083 (2).png", "000083 (3).png", "000083 (4).png", "000083.png", "000084 (1).png", "000084 (2).png", "000084 (3).png", "000084 (4).png", "000084.png", "000085 (1).png", "000085 (2).png", "000085 (3).png", "000085 (4).png", "000085.png", "000086 (1).png", "000086 (2).png", "000086 (3).png", "000086 (4).png", "000086.png", "000087 (1).png", "000087 (2).png", "000087 (3).png", "000087 (4).png", "000087.png", "000088 (1).png", "000088 (2).png", "000088 (3).png", "000088 (4).png", "000088.png", "000089 (1).png", "000089 (2).png", "000089 (3).png", "000089 (4).png", "000089.png", "000090 (1).png", "000090 (2).png", "000090 (3).png", "000090 (4).png", "000090.png", "000091 (1).png", "000091 (2).png", "000091 (3).png", "000091 (4).png", "000091.png", "000092 (1).png", "000092 (2).png", "000092 (3).png", "000092 (4).png", "000092.png", "000093 (1).png", "000093 (2).png", "000093 (3).png", "000093 (4).png", "000093.png", "000094 (1).png", "000094 (2).png", "000094 (3).png", "000094 (4).png", "000094.png", "000095 (1).png", "000095 (2).png", "000095 (3).png", "000095 (4).png", "000095.png", "000096 (1).png", "000096 (2).png", "000096 (3).png", "000096 (4).png", "000096.png", "000097 (1).png", "000097 (2).png", "000097 (3).png", "000097 (4).png", "000097.png", "000098 (1).png", "000098 (2).png", "000098 (3).png", "000098 (4).png", "000098.png", "000099 (1).png", "000099 (2).png", "000099 (3).png", "000099 (4).png", "000099.png", "000100 (1).png", "000100 (2).png", "000100 (3).png", "000100 (4).png", "000100.png", "000101 (1).png", "000101 (2).png", "000101 (3).png", "000101 (4).png", "000101.png", "000102 (1).png", "000102 (2).png", "000102 (3).png", "000102 (4).png", "000102.png", "000103 (1).png", "000103 (2).png", "000103 (3).png", "000103 (4).png", "000103.png", "000104 (1).png", "000104 (2).png", "000104 (3).png", "000104 (4).png", "000104.png", "000105 (1).png", "000105 (2).png", "000105 (3).png", "000105 (4).png", "000105.png", "000106 (1).png", "000106 (2).png", "000106 (3).png", "000106 (4).png", "000106.png", "000107 (1).png", "000107 (2).png", "000107 (3).png", "000107 (4).png", "000107.png", "000108 (1).png", "000108 (2).png", "000108 (3).png", "000108 (4).png", "000108.png", "000109 (1).png", "000109 (2).png", "000109 (3).png", "000109 (4).png", "000109.png", "000110 (1).png", "000110 (2).png", "000110 (3).png", "000110 (4).png", "000110.png", "000111 (1).png", "000111 (2).png", "000111 (3).png", "000111 (4).png", "000111.png", "000112 (1).png", "000112 (2).png", "000112 (3).png", "000112 (4).png", "000112.png", "000113 (1).png", "000113 (2).png", "000113 (3).png", "000113 (4).png", "000113.png", "000114 (1).png", "000114 (2).png", "000114 (3).png", "000114 (4).png", "000114.png", "000115 (1).png", "000115 (2).png", "000115 (3).png", "000115 (4).png", "000115.png", "000116 (1).png", "000116 (2).png", "000116 (3).png", "000116 (4).png", "000116.png", "000117 (1).png", "000117 (2).png", "000117 (3).png", "000117 (4).png", "000117.png", "000118 (1).png", "000118 (2).png", "000118 (3).png", "000118 (4).png", "000118.png", "000119 (1).png", "000119 (2).png", "000119 (3).png", "000119 (4).png", "000119.png", "000120 (1).png", "000120 (2).png", "000120 (3).png", "000120 (4).png", "000120.png", "000121 (1).png", "000121 (2).png", "000121 (3).png", "000121 (4).png", "000121.png", "000122 (1).png", "000122 (2).png", "000122 (3).png", "000122 (4).png", "000122.png", "000123 (1).png", "000123 (2).png", "000123 (3).png", "000123 (4).png", "000123.png", "000124 (1).png", "000124 (2).png", "000124 (3).png", "000124 (4).png", "000124.png", "000125 (1).png", "000125 (2).png", "000125 (3).png", "000125 (4).png", "000125.png", "000126 (1).png", "000126 (2).png", "000126 (3).png", "000126 (4).png", "000126.png", "000127 (1).png", "000127 (2).png", "000127 (3).png", "000127 (4).png", "000127.png", "000128 (1).png", "000128 (2).png", "000128 (3).png", "000128 (4).png", "000128.png", "000129 (1).png", "000129 (2).png", "000129 (3).png", "000129 (4).png", "000129.png", "000130 (1).png", "000130 (2).png", "000130 (3).png", "000130 (4).png", "000130.png", "000131 (1).png", "000131 (2).png", "000131 (3).png", "000131 (4).png", "000131.png", "000132 (1).png", "000132 (2).png", "000132 (3).png", "000132 (4).png", "000132.png", "000133 (1).png", "000133 (2).png", "000133 (3).png", "000133 (4).png", "000133.png", "000134 (1).png", "000134 (2).png", "000134 (3).png", "000134 (4).png", "000134.png", "000135 (1).png", "000135 (2).png", "000135 (3).png", "000135 (4).png", "000135.png", "000136 (1).png", "000136 (2).png", "000136 (3).png", "000136 (4).png", "000136.png", "000137 (1).png", "000137 (2).png", "000137 (3).png", "000137.png", "000138 (1).png", "000138 (2).png", "000138 (3).png", "000138.png", "000139 (1).png", "000139 (2).png", "000139 (3).png", "000139.png", "000140 (1).png", "000140 (2).png", "000140 (3).png", "000140.png", "000141 (1).png", "000141 (2).png", "000141 (3).png", "000141.png", "000142 (1).png", "000142 (2).png", "000142 (3).png", "000142.png", "000143 (1).png", "000143 (2).png", "000143 (3).png", "000143.png", "000144 (1).png", "000144 (2).png", "000144 (3).png", "000144.png", "000145 (1).png", "000145 (2).png", "000145 (3).png", "000145.png", "000146 (1).png", "000146 (2).png", "000146 (3).png", "000146.png", "000147 (1).png", "000147 (2).png", "000147 (3).png", "000147.png", "000148 (1).png", "000148 (2).png", "000148 (3).png", "000148.png", "000149 (1).png", "000149 (2).png", "000149 (3).png", "000149.png", "000150 (1).png", "000150 (2).png", "000150 (3).png", "000150.png", "000151 (1).png", "000151 (2).png", "000151 (3).png", "000151.png", "000152 (1).png", "000152 (2).png", "000152 (3).png", "000152.png", "000153 (1).png", "000153 (2).png", "000153 (3).png", "000153.png", "000154 (1).png", "000154 (2).png", "000154 (3).png", "000154.png", "000155 (1).png", "000155 (2).png", "000155 (3).png", "000155.png", "000156 (1).png", "000156 (2).png", "000156 (3).png", "000156.png", "000157 (1).png", "000157 (2).png", "000157 (3).png", "000157.png", "000158 (1).png", "000158 (2).png", "000158 (3).png", "000158.png", "000159 (1).png", "000159 (2).png", "000159 (3).png", "000159.png", "000160 (1).png", "000160 (2).png", "000160 (3).png", "000160.png", "000161 (1).png", "000161 (2).png", "000161 (3).png", "000161.png", "000162 (1).png", "000162 (2).png", "000162 (3).png", "000162.png", "000163 (1).png", "000163 (2).png", "000163 (3).png", "000163.png", "000164 (1).png", "000164 (2).png", "000164 (3).png", "000164.png", "000165 (1).png", "000165 (2).png", "000165 (3).png", "000165.png", "000166 (1).png", "000166 (2).png", "000166 (3).png", "000166.png", "000167 (1).png", "000167 (2).png", "000167 (3).png", "000167.png", "000168 (1).png", "000168 (2).png", "000168 (3).png", "000168.png", "000169 (1).png", "000169 (2).png", "000169 (3).png", "000169.png", "000170 (1).png", "000170 (2).png", "000170 (3).png", "000170.png", "000171 (1).png", "000171 (2).png", "000171 (3).png", "000171.png", "000172 (1).png", "000172 (2).png", "000172 (3).png", "000172.png", "000173 (1).png", "000173 (2).png", "000173 (3).png", "000173.png", "000174 (1).png", "000174 (2).png", "000174 (3).png", "000174.png", "000175 (1).png", "000175 (2).png", "000175 (3).png", "000175.png", "000176 (1).png", "000176 (2).png", "000176 (3).png", "000176.png", "000177 (1).png", "000177 (2).png", "000177 (3).png", "000177.png", "000178 (1).png", "000178 (2).png", "000178 (3).png", "000178.png", "000179 (1).png", "000179 (2).png", "000179 (3).png", "000179.png", "000180 (1).png", "000180 (2).png", "000180 (3).png", "000180.png", "000181 (1).png", "000181 (2).png", "000181 (3).png", "000181.png", "000182 (1).png", "000182 (2).png", "000182 (3).png", "000182.png", "000183 (1).png", "000183 (2).png", "000183 (3).png", "000183.png", "000184 (1).png", "000184 (2).png", "000184 (3).png", "000184.png", "000185 (1).png", "000185 (2).png", "000185 (3).png", "000185.png", "000186 (1).png", "000186 (2).png", "000186 (3).png", "000186.png", "000187 (1).png", "000187 (2).png", "000187 (3).png", "000187.png", "000188 (1).png", "000188 (2).png", "000188 (3).png", "000188.png", "000189 (1).png", "000189 (2).png", "000189 (3).png", "000189.png", "000190 (1).png", "000190 (2).png", "000190 (3).png", "000190.png", "000191 (1).png", "000191 (2).png", "000191 (3).png", "000191.png", "000192 (1).png", "000192 (2).png", "000192 (3).png", "000192.png", "000193 (1).png", "000193 (2).png", "000193 (3).png", "000193.png", "000194 (1).png", "000194 (2).png", "000194 (3).png", "000194.png", "000195 (1).png", "000195 (2).png", "000195 (3).png", "000195.png", "000196 (1).png", "000196 (2).png", "000196 (3).png", "000196.png", "000197 (1).png", "000197 (2).png", "000197 (3).png", "000197.png", "000198 (1).png", "000198 (2).png", "000198 (3).png", "000198.png", "000199 (1).png", "000199 (2).png", "000199 (3).png", "000199.png", "000200 (1).png", "000200 (2).png", "000200 (3).png", "000200.png", "000201 (1).png", "000201 (2).png", "000201 (3).png", "000201.png", "000202 (1).png", "000202 (2).png", "000202 (3).png", "000202.png", "000203 (1).png", "000203 (2).png", "000203 (3).png", "000203.png", "000204 (1).png", "000204 (2).png", "000204 (3).png", "000204.png", "000205 (1).png", "000205 (2).png", "000205 (3).png", "000205.png", "000206 (1).png", "000206 (2).png", "000206 (3).png", "000206.png", "000207 (1).png", "000207 (2).png", "000207 (3).png", "000207.png", "000208 (1).png", "000208 (2).png", "000208 (3).png", "000208.png", "000209 (1).png", "000209 (2).png", "000209 (3).png", "000209.png", "000210 (1).png", "000210 (2).png", "000210 (3).png", "000210.png", "000211 (1).png", "000211 (2).png", "000211 (3).png", "000211.png", "000212 (1).png", "000212 (2).png", "000212 (3).png", "000212.png", "000213 (1).png", "000213 (2).png", "000213 (3).png", "000213.png", "000214 (1).png", "000214 (2).png", "000214 (3).png", "000214.png", "000215 (1).png", "000215 (2).png", "000215 (3).png", "000215.png", "000216 (1).png", "000216 (2).png", "000216 (3).png", "000216.png", "000217 (1).png", "000217 (2).png", "000217 (3).png", "000217.png", "000218 (1).png", "000218 (2).png", "000218 (3).png", "000218.png", "000219 (1).png", "000219 (2).png", "000219 (3).png", "000219.png", "000220 (1).png", "000220 (2).png", "000220 (3).png", "000220.png", "000221 (1).png", "000221 (2).png", "000221 (3).png", "000221.png", "000222 (1).png", "000222 (2).png", "000222 (3).png", "000222.png", "000223 (1).png", "000223 (2).png", "000223 (3).png", "000223.png", "000224 (1).png", "000224 (2).png", "000224 (3).png", "000224.png", "000225 (1).png", "000225 (2).png", "000225 (3).png", "000225.png", "000226 (1).png", "000226 (2).png", "000226 (3).png", "000226.png", "000227 (1).png", "000227 (2).png", "000227 (3).png", "000227.png", "000228 (1).png", "000228 (2).png", "000228 (3).png", "000228.png", "000229 (1).png", "000229 (2).png", "000229 (3).png", "000229.png", "000230 (1).png", "000230 (2).png", "000230 (3).png", "000230.png", "000231 (1).png", "000231 (2).png", "000231 (3).png", "000231.png", "000232 (1).png", "000232 (2).png", "000232 (3).png", "000232.png", "000233 (1).png", "000233 (2).png", "000233 (3).png", "000233.png", "000234 (1).png", "000234 (2).png", "000234 (3).png", "000234.png", "000235 (1).png", "000235 (2).png", "000235 (3).png", "000235.png", "000236 (1).png", "000236 (2).png", "000236 (3).png", "000236.png", "000237 (1).png", "000237 (2).png", "000237 (3).png", "000237.png", "000238 (1).png", "000238 (2).png", "000238 (3).png", "000238.png", "000239 (1).png", "000239 (2).png", "000239 (3).png", "000239.png", "000240 (1).png", "000240 (2).png", "000240 (3).png", "000240.png", "000241 (1).png", "000241 (2).png", "000241 (3).png", "000241.png", "000242 (1).png", "000242 (2).png", "000242 (3).png", "000242.png", "000243 (1).png", "000243 (2).png", "000243 (3).png", "000243.png", "000244 (1).png", "000244 (2).png", "000244 (3).png", "000244.png", "000245 (1).png", "000245 (2).png", "000245 (3).png", "000245.png", "000246 (1).png", "000246 (2).png", "000246 (3).png", "000246.png", "000247 (1).png", "000247 (2).png", "000247 (3).png", "000247.png", "000248 (1).png", "000248 (2).png", "000248 (3).png", "000248.png", "000249 (1).png", "000249 (2).png", "000249 (3).png", "000249.png", "000250 (1).png", "000250 (2).png", "000250 (3).png", "000250.png", "000251 (1).png", "000251 (2).png", "000251 (3).png", "000251.png", "000252 (1).png", "000252 (2).png", "000252 (3).png", "000252.png", "000253 (1).png", "000253 (2).png", "000253 (3).png", "000253.png", "000254 (1).png", "000254 (2).png", "000254 (3).png", "000254.png", "000255 (1).png", "000255 (2).png", "000255 (3).png", "000255.png", "000256 (1).png", "000256 (2).png", "000256 (3).png", "000256.png", "000257 (1).png", "000257 (2).png", "000257 (3).png", "000257.png", "000258 (1).png", "000258 (2).png", "000258 (3).png", "000258.png", "000259 (1).png", "000259 (2).png", "000259 (3).png", "000259.png", "000260 (1).png", "000260 (2).png", "000260 (3).png", "000260.png", "000261 (1).png", "000261 (2).png", "000261 (3).png", "000261.png", "000262 (1).png", "000262 (2).png", "000262 (3).png", "000262.png", "000263 (1).png", "000263 (2).png", "000263 (3).png", "000263.png", "000264 (1).png", "000264 (2).png", "000264 (3).png", "000264.png", "000265 (1).png", "000265 (2).png", "000265 (3).png", "000265.png", "000266 (1).png", "000266 (2).png", "000266 (3).png", "000266.png", "000267 (1).png", "000267 (2).png", "000267 (3).png", "000267.png", "000268 (1).png", "000268 (2).png", "000268 (3).png", "000268.png", "000269 (1).png", "000269 (2).png", "000269 (3).png", "000269.png", "000270 (1).png", "000270 (2).png", "000270 (3).png", "000270.png", "000271 (1).png", "000271 (2).png", "000271 (3).png", "000271.png", "000272 (1).png", "000272 (2).png", "000272 (3).png", "000272.png", "000273 (1).png", "000273 (2).png", "000273 (3).png", "000273.png", "000274 (1).png", "000274 (2).png", "000274 (3).png", "000274.png", "000275 (1).png", "000275 (2).png", "000275 (3).png", "000275.png", "000276 (1).png", "000276 (2).png", "000276 (3).png", "000276.png", "000277 (1).png", "000277 (2).png", "000277.png", "000278 (1).png", "000278 (2).png", "000278.png", "000279 (1).png", "000279 (2).png", "000279.png", "000280 (1).png", "000280 (2).png", "000280.png", "000281 (1).png", "000281 (2).png", "000281.png", "000282 (1).png", "000282 (2).png", "000282.png", "000283 (1).png", "000283.png", "000284 (1).png", "000284.png", "000285 (1).png", "000285.png", "000286 (1).png", "000286.png", "000287 (1).png", "000287.png", "000288 (1).png", "000288.png", "000289.png", "000290.png", "000291.png", "000292.png", "000293.png", "000294.png", "000295.png", "000296.png", "000297.png", "000298.png", "000299.png", "000300.png", "000301.png", "000302.png", "000303.png", "000304.png", "000305.png", "000306.png", "000307.png", "000308.png", "000309.png", "000310.png", "000311.png", "000312.png", "000313.png", "000314.png", "084419f11856de5234c3a8a3eba3aac7.jpg", "13753499768289aa1210f59c25731506.png", "38f85f76ca64ed6738d5ca0c05542950_origin(1).jpg", "3ea2a2e2aa7aea7bdaab0ed41c3e766d.png", "5b6b0f9e128f5575e17785e97628311a.png", "62683d69df9198b4b8ec71806fe147d8.png", "8fb439ac734b89f1729916e0c56bcf39.png", "A3E38E3E-9369-4C72-A022-E5EC73414D11-73729-00001F1EBB363F3A.jpg", "ComfyUI_00018_.png", "Qwen_Edit2511_\u56fe\u751f\u56fe_00003_.png", "Qwen_\u6587\u751f\u56fe_00006_.png", "clipboard-2026-06-09T08-37-30-236Z-06840286.png", "clipboard-2026-06-09T08-55-09-228Z-06840286.png", "clipboard-2026-06-09T10-24-30-214Z-f4ada252.png", "clipboard-2026-06-10T01-13-36-419Z-06840286.png", "clipboard-2026-06-10T01-43-35-666Z-ed57443b.png", "clipboard-2026-06-10T02-16-15-866Z-9166c31e.png", "clipboard-2026-06-10T02-25-26-729Z-5947938f.jpg", "clipboard-2026-06-10T03-06-23-575Z-68d3b00e.jpg", "clipboard-2026-06-10T03-06-23-577Z-bdb0dae5.png", "clipboard-2026-06-11T08-00-51-819Z-61275a50.jpg", "clipboard-2026-06-11T08-24-13-352Z-fe58af8f.jpg", "comfyui_kaoyan_1.png", "comfyui_kaoyan_2.png", "comfyui_kaoyan_800_1(2).png", "example.png", "img01_classroom.jpg", "img02_club.jpg", "lQDPKeGXrn043cfNDADNEgCwKQa4O46zR9UH3SKJ-rfQAA_4608_3072.jpg", "xz.png", "\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17812587071441.png", "\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17821189242311.png", "\u603b.png", "\u753b\u677f-2_03.jpg", "\u95e8\u5e97\u7cfb\u7edf\u5c0f\u7a0b\u5e8f.png", "\u98df\u54c1\u8336\u53f6\u76f4\u901a\u8f66\u4e3b\u56fe.jpg"], {"image_upload": true}], "channel": [["alpha", "red", "green", "blue"]]}}, "input_order": {"required": ["image", "channel"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "LoadImageMask", "display_name": "Load Image (as Mask)", "description": "", "python_module": "nodes", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": ["import mask", "alpha mask", "channel mask"], "essentials_category": "Image Tools"}, "LoadImageOutput": {"input": {"required": {"image": ["COMBO", {"image_upload": true, "image_folder": "output", "remote": {"route": "/internal/files/output", "refresh_button": true, "control_after_refresh": "first"}}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "LoadImageOutput", "display_name": "Load Image (from Outputs)", "description": "Load an image from the output folder. When the refresh button is clicked, the node will update the image list and automatically select the first image, allowing for easy iteration.", "python_module": "nodes", "category": "image", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["output image", "previous generation"], "essentials_category": "Basics"}, "ImageScale": {"input": {"required": {"image": ["IMAGE"], "upscale_method": [["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]], "width": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 1}], "crop": [["disabled", "center"]]}}, "input_order": {"required": ["image", "upscale_method", "width", "height", "crop"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageScale", "display_name": "Upscale Image", "description": "", "python_module": "nodes", "category": "image/upscaling", "output_node": false, "has_intermediate_output": false, "search_aliases": ["resize", "resize image", "scale image", "image resize", "zoom", "zoom in", "change size"], "essentials_category": "Image Tools"}, "ImageScaleBy": {"input": {"required": {"image": ["IMAGE"], "upscale_method": [["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]], "scale_by": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 8.0, "step": 0.01}]}}, "input_order": {"required": ["image", "upscale_method", "scale_by"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageScaleBy", "display_name": "Upscale Image By", "description": "", "python_module": "nodes", "category": "image/upscaling", "output_node": false, "has_intermediate_output": false, "search_aliases": [], "essentials_category": "Image Tools"}, "ImageInvert": {"input": {"required": {"image": ["IMAGE"]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageInvert", "display_name": "Invert Image Colors", "description": "", "python_module": "nodes", "category": "image/color", "output_node": false, "has_intermediate_output": false, "search_aliases": ["reverse colors"], "essentials_category": "Image Tools"}, "ImageBatch": {"input": {"required": {"image1": ["IMAGE"], "image2": ["IMAGE"]}}, "input_order": {"required": ["image1", "image2"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageBatch", "display_name": "Batch Images (DEPRECATED)", "description": "", "python_module": "nodes", "category": "image/batch", "output_node": false, "has_intermediate_output": false, "deprecated": true, "search_aliases": ["combine images", "merge images", "stack images"]}, "ImagePadForOutpaint": {"input": {"required": {"image": ["IMAGE"], "left": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "top": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "right": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "bottom": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "feathering": ["INT", {"default": 40, "min": 0, "max": 16384, "step": 1, "advanced": true}]}}, "input_order": {"required": ["image", "left", "top", "right", "bottom", "feathering"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "ImagePadForOutpaint", "display_name": "Pad Image for Outpainting", "description": "", "python_module": "nodes", "category": "image/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["extend canvas", "expand image"]}, "EmptyImage": {"input": {"required": {"width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "color": ["INT", {"default": 0, "min": 0, "max": 16777215, "step": 1, "display": "color"}]}}, "input_order": {"required": ["width", "height", "batch_size", "color"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "EmptyImage", "display_name": "Empty Image", "description": "", "python_module": "nodes", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ConditioningAverage": {"input": {"required": {"conditioning_to": ["CONDITIONING"], "conditioning_from": ["CONDITIONING"], "conditioning_to_strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning_to", "conditioning_from", "conditioning_to_strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningAverage", "display_name": "ConditioningAverage", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": ["blend prompts", "interpolate conditioning", "mix prompts", "style fusion", "weighted blend"]}, "ConditioningCombine": {"input": {"required": {"conditioning_1": ["CONDITIONING"], "conditioning_2": ["CONDITIONING"]}}, "input_order": {"required": ["conditioning_1", "conditioning_2"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningCombine", "display_name": "Conditioning (Combine)", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": ["combine", "merge conditioning", "combine prompts", "merge prompts", "mix prompts", "add prompt"], "essentials_category": "Image Generation"}, "ConditioningConcat": {"input": {"required": {"conditioning_to": ["CONDITIONING"], "conditioning_from": ["CONDITIONING"]}}, "input_order": {"required": ["conditioning_to", "conditioning_from"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningConcat", "display_name": "Conditioning (Concat)", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ConditioningSetArea": {"input": {"required": {"conditioning": ["CONDITIONING"], "width": ["INT", {"default": 64, "min": 64, "max": 16384, "step": 8}], "height": ["INT", {"default": 64, "min": 64, "max": 16384, "step": 8}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "width", "height", "x", "y", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetArea", "display_name": "Conditioning (Set Area)", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": ["regional prompt", "area prompt", "spatial conditioning", "localized prompt"]}, "ConditioningSetAreaPercentage": {"input": {"required": {"conditioning": ["CONDITIONING"], "width": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "height": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "x": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "y": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "width", "height", "x", "y", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetAreaPercentage", "display_name": "Conditioning (Set Area with Percentage)", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ConditioningSetAreaStrength": {"input": {"required": {"conditioning": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetAreaStrength", "display_name": "ConditioningSetAreaStrength", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ConditioningSetMask": {"input": {"required": {"conditioning": ["CONDITIONING"], "mask": ["MASK"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}}, "input_order": {"required": ["conditioning", "mask", "strength", "set_cond_area"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetMask", "display_name": "Conditioning (Set Mask)", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": ["masked prompt", "regional inpaint conditioning", "mask conditioning"]}, "KSamplerAdvanced": {"input": {"required": {"model": ["MODEL"], "add_noise": [["enable", "disable"], {"advanced": true}], "noise_seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"]], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "latent_image": ["LATENT"], "start_at_step": ["INT", {"default": 0, "min": 0, "max": 10000, "advanced": true}], "end_at_step": ["INT", {"default": 10000, "min": 0, "max": 10000, "advanced": true}], "return_with_leftover_noise": [["disable", "enable"], {"advanced": true}]}}, "input_order": {"required": ["model", "add_noise", "noise_seed", "steps", "cfg", "sampler_name", "scheduler", "positive", "negative", "latent_image", "start_at_step", "end_at_step", "return_with_leftover_noise"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "KSamplerAdvanced", "display_name": "KSampler (Advanced)", "description": "", "python_module": "nodes", "category": "model/sampling", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SetLatentNoiseMask": {"input": {"required": {"samples": ["LATENT"], "mask": ["MASK"]}}, "input_order": {"required": ["samples", "mask"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "SetLatentNoiseMask", "display_name": "Set Latent Noise Mask", "description": "", "python_module": "nodes", "category": "model/latent/inpaint", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LatentComposite": {"input": {"required": {"samples_to": ["LATENT"], "samples_from": ["LATENT"], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "feather": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}]}}, "input_order": {"required": ["samples_to", "samples_from", "x", "y", "feather"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentComposite", "display_name": "Latent Composite", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": ["overlay latent", "layer latent", "paste latent"]}, "LatentBlend": {"input": {"required": {"samples1": ["LATENT"], "samples2": ["LATENT"], "blend_factor": ["FLOAT", {"default": 0.5, "min": 0, "max": 1, "step": 0.01}]}}, "input_order": {"required": ["samples1", "samples2", "blend_factor"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentBlend", "display_name": "Latent Blend", "description": "", "python_module": "nodes", "category": "experimental", "output_node": false, "has_intermediate_output": false, "search_aliases": ["mix latents", "interpolate latents"]}, "LatentRotate": {"input": {"required": {"samples": ["LATENT"], "rotation": [["none", "90 degrees", "180 degrees", "270 degrees"]]}}, "input_order": {"required": ["samples", "rotation"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentRotate", "display_name": "Rotate Latent", "description": "", "python_module": "nodes", "category": "model/latent/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LatentFlip": {"input": {"required": {"samples": ["LATENT"], "flip_method": [["x-axis: vertically", "y-axis: horizontally"]]}}, "input_order": {"required": ["samples", "flip_method"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentFlip", "display_name": "Flip Latent", "description": "", "python_module": "nodes", "category": "model/latent/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["mirror latent"]}, "LatentCrop": {"input": {"required": {"samples": ["LATENT"], "width": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "height": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}]}}, "input_order": {"required": ["samples", "width", "height", "x", "y"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentCrop", "display_name": "Crop Latent", "description": "", "python_module": "nodes", "category": "model/latent/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["trim latent", "cut latent"]}, "LoraLoader": {"input": {"required": {"model": ["MODEL", {"tooltip": "The diffusion model the LoRA will be applied to."}], "clip": ["CLIP", {"tooltip": "The CLIP model the LoRA will be applied to."}], "lora_name": [[], {"tooltip": "The name of the LoRA."}], "strength_model": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the diffusion model. This value can be negative."}], "strength_clip": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the CLIP model. This value can be negative."}]}}, "input_order": {"required": ["model", "clip", "lora_name", "strength_model", "strength_clip"]}, "is_input_list": false, "output": ["MODEL", "CLIP"], "output_is_list": [false, false], "output_name": ["MODEL", "CLIP"], "name": "LoraLoader", "display_name": "Load LoRA (Model and CLIP)", "description": "This LoRA loader is used to modify both diffusion and CLIP models, altering the way in which latents are denoised such as applying styles. Multiple LoRA nodes can be linked together.", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The modified diffusion model.", "The modified CLIP model."], "search_aliases": ["lora", "load lora", "apply lora", "lora loader", "lora model"], "essentials_category": "Image Generation"}, "CLIPLoader": {"input": {"required": {"clip_name": [["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]], "type": [["stable_diffusion", "stable_cascade", "sd3", "stable_audio", "mochi", "ltxv", "pixart", "cosmos", "lumina2", "wan", "hidream", "chroma", "ace", "omnigen2", "qwen_image", "hunyuan_image", "flux2", "ovis", "longcat_image", "cogvideox", "lens", "pixeldit", "ideogram4"]]}, "optional": {"device": [["default", "cpu"], {"advanced": true}]}}, "input_order": {"required": ["clip_name", "type"], "optional": ["device"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPLoader", "display_name": "Load CLIP", "description": "[Recipes]\n\nstable_diffusion: clip-l\nstable_cascade: clip-g\nsd3: t5 xxl/ clip-g / clip-l\nstable_audio: t5 base\nmochi: t5 xxl\ncogvideox: t5 xxl (226-token padding)\ncosmos: old t5 xxl\nlumina2: gemma 2 2B\nwan: umt5 xxl\n hidream: llama-3.1 (Recommend) or t5\nomnigen2: qwen vl 2.5 3B\nlens: gpt-oss-20b\n pixeldit: gemma 2 2B elm", "python_module": "nodes", "category": "advanced/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "UNETLoader": {"input": {"required": {"unet_name": [[]], "weight_dtype": [["default", "fp8_e4m3fn", "fp8_e4m3fn_fast", "fp8_e5m2"], {"advanced": true}]}}, "input_order": {"required": ["unet_name", "weight_dtype"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "UNETLoader", "display_name": "Load Diffusion Model", "description": "", "python_module": "nodes", "category": "advanced/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DualCLIPLoader": {"input": {"required": {"clip_name1": [["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]], "clip_name2": [["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]], "type": [["sdxl", "sd3", "flux", "hunyuan_video", "hidream", "hunyuan_image", "hunyuan_video_15", "kandinsky5", "kandinsky5_image", "ltxv", "newbie", "ace"]]}, "optional": {"device": [["default", "cpu"], {"advanced": true}]}}, "input_order": {"required": ["clip_name1", "clip_name2", "type"], "optional": ["device"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "DualCLIPLoader", "display_name": "DualCLIPLoader", "description": "[Recipes]\n\nsdxl: clip-l, clip-g\nsd3: clip-l, clip-g / clip-l, t5 / clip-g, t5\nflux: clip-l, t5\nhidream: at least one of t5 or llama, recommended t5 and llama\nhunyuan_image: qwen2.5vl 7b and byt5 small\nnewbie: gemma-3-4b-it, jina clip v2", "python_module": "nodes", "category": "advanced/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPVisionEncode": {"input": {"required": {"clip_vision": ["CLIP_VISION"], "image": ["IMAGE"], "crop": [["center", "none"]]}}, "input_order": {"required": ["clip_vision", "image", "crop"]}, "is_input_list": false, "output": ["CLIP_VISION_OUTPUT"], "output_is_list": [false], "output_name": ["CLIP_VISION_OUTPUT"], "name": "CLIPVisionEncode", "display_name": "CLIP Vision Encode", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "StyleModelApply": {"input": {"required": {"conditioning": ["CONDITIONING"], "style_model": ["STYLE_MODEL"], "clip_vision_output": ["CLIP_VISION_OUTPUT"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}], "strength_type": [["multiply", "attn_bias"]]}}, "input_order": {"required": ["conditioning", "style_model", "clip_vision_output", "strength", "strength_type"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "StyleModelApply", "display_name": "Apply Style Model", "description": "", "python_module": "nodes", "category": "model/conditioning/style_model", "output_node": false, "has_intermediate_output": false, "search_aliases": ["style transfer"]}, "unCLIPConditioning": {"input": {"required": {"conditioning": ["CONDITIONING"], "clip_vision_output": ["CLIP_VISION_OUTPUT"], "strength": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}], "noise_augmentation": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "clip_vision_output", "strength", "noise_augmentation"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "unCLIPConditioning", "display_name": "unCLIPConditioning", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ControlNetApply": {"input": {"required": {"conditioning": ["CONDITIONING"], "control_net": ["CONTROL_NET"], "image": ["IMAGE"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "control_net", "image", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ControlNetApply", "display_name": "Apply ControlNet (DEPRECATED)", "description": "", "python_module": "nodes", "category": "model/conditioning/controlnet", "output_node": false, "has_intermediate_output": false, "deprecated": true, "search_aliases": []}, "ControlNetApplyAdvanced": {"input": {"required": {"positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "control_net": ["CONTROL_NET"], "image": ["IMAGE"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}, "optional": {"vae": ["VAE"]}}, "input_order": {"required": ["positive", "negative", "control_net", "image", "strength", "start_percent", "end_percent"], "optional": ["vae"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "ControlNetApplyAdvanced", "display_name": "Apply ControlNet", "description": "", "python_module": "nodes", "category": "model/conditioning/controlnet", "output_node": false, "has_intermediate_output": false, "search_aliases": ["controlnet", "apply controlnet", "use controlnet", "control net"]}, "ControlNetLoader": {"input": {"required": {"control_net_name": [["Kolors-ControlNet-Canny\\diffusion_pytorch_model.safetensors"]]}}, "input_order": {"required": ["control_net_name"]}, "is_input_list": false, "output": ["CONTROL_NET"], "output_is_list": [false], "output_name": ["CONTROL_NET"], "name": "ControlNetLoader", "display_name": "Load ControlNet Model", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": ["controlnet", "control net", "cn", "load controlnet", "controlnet loader"]}, "DiffControlNetLoader": {"input": {"required": {"model": ["MODEL"], "control_net_name": [["Kolors-ControlNet-Canny\\diffusion_pytorch_model.safetensors"]]}}, "input_order": {"required": ["model", "control_net_name"]}, "is_input_list": false, "output": ["CONTROL_NET"], "output_is_list": [false], "output_name": ["CONTROL_NET"], "name": "DiffControlNetLoader", "display_name": "Load ControlNet Model (diff)", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "StyleModelLoader": {"input": {"required": {"style_model_name": [[]]}}, "input_order": {"required": ["style_model_name"]}, "is_input_list": false, "output": ["STYLE_MODEL"], "output_is_list": [false], "output_name": ["STYLE_MODEL"], "name": "StyleModelLoader", "display_name": "Load Style Model", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPVisionLoader": {"input": {"required": {"clip_name": [["CLIP-ViT-H-14-laion2B-s32B-b79K\\model.safetensors", "CLIP-ViT-H-14-laion2B-s32B-b79K\\open_clip_model.safetensors", "CLIP-ViT-H-14-laion2B-s32B-b79K\\open_clip_pytorch_model.bin", "CLIP-ViT-H-14-laion2B-s32B-b79K\\pytorch_model.bin", "clip_vision_h.safetensors"]]}}, "input_order": {"required": ["clip_name"]}, "is_input_list": false, "output": ["CLIP_VISION"], "output_is_list": [false], "output_name": ["CLIP_VISION"], "name": "CLIPVisionLoader", "display_name": "Load CLIP Vision", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAEDecodeTiled": {"input": {"required": {"samples": ["LATENT"], "vae": ["VAE"], "tile_size": ["INT", {"default": 512, "min": 64, "max": 4096, "step": 32, "advanced": true}], "overlap": ["INT", {"default": 64, "min": 0, "max": 4096, "step": 32, "advanced": true}], "temporal_size": ["INT", {"default": 64, "min": 8, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to decode at a time.", "advanced": true}], "temporal_overlap": ["INT", {"default": 8, "min": 4, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to overlap.", "advanced": true}]}}, "input_order": {"required": ["samples", "vae", "tile_size", "overlap", "temporal_size", "temporal_overlap"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "VAEDecodeTiled", "display_name": "VAE Decode (Tiled)", "description": "", "python_module": "nodes", "category": "experimental", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAEEncodeTiled": {"input": {"required": {"pixels": ["IMAGE"], "vae": ["VAE"], "tile_size": ["INT", {"default": 512, "min": 64, "max": 4096, "step": 64, "advanced": true}], "overlap": ["INT", {"default": 64, "min": 0, "max": 4096, "step": 32, "advanced": true}], "temporal_size": ["INT", {"default": 64, "min": 8, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to encode at a time.", "advanced": true}], "temporal_overlap": ["INT", {"default": 8, "min": 4, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to overlap.", "advanced": true}]}}, "input_order": {"required": ["pixels", "vae", "tile_size", "overlap", "temporal_size", "temporal_overlap"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "VAEEncodeTiled", "display_name": "VAE Encode (Tiled)", "description": "", "python_module": "nodes", "category": "experimental", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "unCLIPCheckpointLoader": {"input": {"required": {"ckpt_name": [["FLUX1-dev\\ae.safetensors", "FLUX1-dev\\flux1-dev.safetensors", "FLUX1-dev\\text_encoder\\model.safetensors", "FLUX1-dev\\text_encoder_2\\model-00001-of-00002.safetensors", "FLUX1-dev\\text_encoder_2\\model-00002-of-00002.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00001-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00002-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00003-of-00003.safetensors", "FLUX1-dev\\vae\\diffusion_pytorch_model.safetensors", "anytext_v1.1.safetensors", "anytext_v1.1\\pytorch_model.fp16.safetensors"]]}}, "input_order": {"required": ["ckpt_name"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE", "CLIP_VISION"], "output_is_list": [false, false, false, false], "output_name": ["MODEL", "CLIP", "VAE", "CLIP_VISION"], "name": "unCLIPCheckpointLoader", "display_name": "Load unCLIP Checkpoint", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "GLIGENLoader": {"input": {"required": {"gligen_name": [[]]}}, "input_order": {"required": ["gligen_name"]}, "is_input_list": false, "output": ["GLIGEN"], "output_is_list": [false], "output_name": ["GLIGEN"], "name": "GLIGENLoader", "display_name": "Load GLIGEN Model", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "GLIGENTextBoxApply": {"input": {"required": {"conditioning_to": ["CONDITIONING"], "clip": ["CLIP"], "gligen_textbox_model": ["GLIGEN"], "text": ["STRING", {"multiline": true, "dynamicPrompts": true}], "width": ["INT", {"default": 64, "min": 8, "max": 16384, "step": 8}], "height": ["INT", {"default": 64, "min": 8, "max": 16384, "step": 8}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}]}}, "input_order": {"required": ["conditioning_to", "clip", "gligen_textbox_model", "text", "width", "height", "x", "y"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "GLIGENTextBoxApply", "display_name": "GLIGENTextBoxApply", "description": "", "python_module": "nodes", "category": "model/conditioning/gligen", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "InpaintModelConditioning": {"input": {"required": {"positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "vae": ["VAE"], "pixels": ["IMAGE"], "mask": ["MASK"], "noise_mask": ["BOOLEAN", {"default": true, "tooltip": "Add a noise mask to the latent so sampling will only happen within the mask. Might improve results or completely break things depending on the model."}]}}, "input_order": {"required": ["positive", "negative", "vae", "pixels", "mask", "noise_mask"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "name": "InpaintModelConditioning", "display_name": "InpaintModelConditioning", "description": "", "python_module": "nodes", "category": "model/conditioning/inpaint", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CheckpointLoader": {"input": {"required": {"config_name": [["anything_v3.yaml", "v1-inference.yaml", "v1-inference_clip_skip_2.yaml", "v1-inference_clip_skip_2_fp16.yaml", "v1-inference_fp16.yaml", "v1-inpainting-inference.yaml", "v2-inference-v.yaml", "v2-inference-v_fp32.yaml", "v2-inference.yaml", "v2-inference_fp32.yaml", "v2-inpainting-inference.yaml"]], "ckpt_name": [["FLUX1-dev\\ae.safetensors", "FLUX1-dev\\flux1-dev.safetensors", "FLUX1-dev\\text_encoder\\model.safetensors", "FLUX1-dev\\text_encoder_2\\model-00001-of-00002.safetensors", "FLUX1-dev\\text_encoder_2\\model-00002-of-00002.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00001-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00002-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00003-of-00003.safetensors", "FLUX1-dev\\vae\\diffusion_pytorch_model.safetensors", "anytext_v1.1.safetensors", "anytext_v1.1\\pytorch_model.fp16.safetensors"]]}}, "input_order": {"required": ["config_name", "ckpt_name"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE"], "output_is_list": [false, false, false], "output_name": ["MODEL", "CLIP", "VAE"], "name": "CheckpointLoader", "display_name": "Load Checkpoint With Config (DEPRECATED)", "description": "", "python_module": "nodes", "category": "advanced/loaders", "output_node": false, "has_intermediate_output": false, "deprecated": true, "search_aliases": ["load model", "model loader"]}, "DiffusersLoader": {"input": {"required": {"model_path": [["Kolors"]]}}, "input_order": {"required": ["model_path"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE"], "output_is_list": [false, false, false], "output_name": ["MODEL", "CLIP", "VAE"], "name": "DiffusersLoader", "display_name": "DiffusersLoader", "description": "", "python_module": "nodes", "category": "advanced/loaders/deprecated", "output_node": false, "has_intermediate_output": false, "search_aliases": ["load diffusers model"]}, "LoadLatent": {"input": {"required": {"latent": [[]]}}, "input_order": {"required": ["latent"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LoadLatent", "display_name": "LoadLatent", "description": "", "python_module": "nodes", "category": "experimental", "output_node": false, "has_intermediate_output": false, "search_aliases": ["import latent", "open latent"]}, "SaveLatent": {"input": {"required": {"samples": ["LATENT"], "filename_prefix": ["STRING", {"default": "latents/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["samples", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "SaveLatent", "display_name": "SaveLatent", "description": "", "python_module": "nodes", "category": "experimental", "output_node": true, "has_intermediate_output": false, "search_aliases": ["export latent"]}, "ConditioningZeroOut": {"input": {"required": {"conditioning": ["CONDITIONING"]}}, "input_order": {"required": ["conditioning"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningZeroOut", "display_name": "ConditioningZeroOut", "description": "", "python_module": "nodes", "category": "advanced/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": ["null conditioning", "clear conditioning"]}, "ConditioningSetTimestepRange": {"input": {"required": {"conditioning": ["CONDITIONING"], "start": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["conditioning", "start", "end"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetTimestepRange", "display_name": "ConditioningSetTimestepRange", "description": "", "python_module": "nodes", "category": "advanced/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LoraLoaderModelOnly": {"input": {"required": {"model": ["MODEL"], "lora_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "lora_name", "strength_model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "LoraLoaderModelOnly", "display_name": "Load LoRA", "description": "This LoRAs loader is used to modify the diffusion model, altering the way in which latents are denoised such as applying styles. Multiple LoRA nodes can be linked together.", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The modified diffusion model.", "The modified CLIP model."], "search_aliases": ["lora", "load lora", "apply lora", "lora loader", "lora model"], "essentials_category": "Image Generation"}, "LatentAdd": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}]}}, "input_order": {"required": ["samples1", "samples2"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentAdd", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine latents", "sum latents"], "essentials_category": null, "has_intermediate_output": false}, "LatentSubtract": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}]}}, "input_order": {"required": ["samples1", "samples2"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentSubtract", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["difference latent", "remove features"], "essentials_category": null, "has_intermediate_output": false}, "LatentMultiply": {"input": {"required": {"samples": ["LATENT", {}], "multiplier": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["samples", "multiplier"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["scale latent", "amplify latent", "latent gain"], "essentials_category": null, "has_intermediate_output": false}, "LatentInterpolate": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}], "ratio": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["samples1", "samples2", "ratio"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentInterpolate", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["blend latent", "mix latent", "lerp latent", "transition"], "essentials_category": null, "has_intermediate_output": false}, "LatentConcat": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}], "dim": ["COMBO", {"multiselect": false, "options": ["x", "-x", "y", "-y", "t", "-t"]}]}}, "input_order": {"required": ["samples1", "samples2", "dim"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentConcat", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["join latents", "stitch latents"], "essentials_category": null, "has_intermediate_output": false}, "LatentCut": {"input": {"required": {"samples": ["LATENT", {}], "dim": ["COMBO", {"multiselect": false, "options": ["x", "y", "t"]}], "index": ["INT", {"default": 0, "min": -16384, "max": 16384, "step": 1}], "amount": ["INT", {"default": 1, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["samples", "dim", "index", "amount"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentCut", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop latent", "slice latent", "extract region"], "essentials_category": null, "has_intermediate_output": false}, "LatentCutToBatch": {"input": {"required": {"samples": ["LATENT", {}], "dim": ["COMBO", {"multiselect": false, "options": ["t", "x", "y"]}], "slice_size": ["INT", {"default": 1, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["samples", "dim", "slice_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentCutToBatch", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["slice to batch", "split latent", "tile latent"], "essentials_category": null, "has_intermediate_output": false}, "LatentBatch": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}]}}, "input_order": {"required": ["samples1", "samples2"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentBatch", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/batch", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine latents", "merge latents", "join latents"], "essentials_category": null, "has_intermediate_output": false}, "LatentBatchSeedBehavior": {"input": {"required": {"samples": ["LATENT", {}], "seed_behavior": ["COMBO", {"default": "fixed", "multiselect": false, "options": ["random", "fixed"]}]}}, "input_order": {"required": ["samples", "seed_behavior"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentBatchSeedBehavior", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LatentApplyOperation": {"input": {"required": {"samples": ["LATENT", {}], "operation": ["LATENT_OPERATION", {}]}}, "input_order": {"required": ["samples", "operation"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentApplyOperation", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced/operations", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["transform latent"], "essentials_category": null, "has_intermediate_output": false}, "LatentApplyOperationCFG": {"input": {"required": {"model": ["MODEL", {}], "operation": ["LATENT_OPERATION", {}]}}, "input_order": {"required": ["model", "operation"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentApplyOperationCFG", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced/operations", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LatentOperationTonemapReinhard": {"input": {"required": {"multiplier": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["multiplier"]}, "is_input_list": false, "output": ["LATENT_OPERATION"], "output_is_list": [false], "output_name": ["LATENT_OPERATION"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentOperationTonemapReinhard", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced/operations", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["hdr latent"], "essentials_category": null, "has_intermediate_output": false}, "LatentOperationSharpen": {"input": {"required": {"sharpen_radius": ["INT", {"advanced": true, "default": 9, "min": 1, "max": 31, "step": 1}], "sigma": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.1, "max": 10.0, "step": 0.1}], "alpha": ["FLOAT", {"advanced": true, "default": 0.1, "min": 0.0, "max": 5.0, "step": 0.01}]}}, "input_order": {"required": ["sharpen_radius", "sigma", "alpha"]}, "is_input_list": false, "output": ["LATENT_OPERATION"], "output_is_list": [false], "output_name": ["LATENT_OPERATION"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentOperationSharpen", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced/operations", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReplaceVideoLatentFrames": {"input": {"required": {"destination": ["LATENT", {"tooltip": "The destination latent where frames will be replaced."}], "index": ["INT", {"tooltip": "The starting latent frame index in the destination latent where the source latent frames will be placed. Negative values count from the end.", "default": 0, "min": -16384, "max": 16384, "step": 1}]}, "optional": {"source": ["LATENT", {"tooltip": "The source latent providing frames to insert into the destination latent. If not provided, the destination latent is returned unchanged."}]}}, "input_order": {"required": ["destination", "index"], "optional": ["source"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReplaceVideoLatentFrames", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HypernetworkLoader": {"input": {"required": {"model": ["MODEL", {}], "hypernetwork_name": ["COMBO", {"multiselect": false, "options": []}], "strength": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "hypernetwork_name", "strength"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "HypernetworkLoader", "display_name": "Load Hypernetwork", "description": "", "python_module": "comfy_extras.nodes_hypernetwork", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "UpscaleModelLoader": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["realesr-animevideov3-x2.bin", "realesr-animevideov3-x3.bin", "realesr-animevideov3-x4.bin", "realesrgan-x4plus-anime.bin", "realesrgan-x4plus.bin"]}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["UPSCALE_MODEL"], "output_is_list": [false], "output_name": ["UPSCALE_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "UpscaleModelLoader", "display_name": "Load Upscale Model", "description": "", "python_module": "comfy_extras.nodes_upscale_model", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageUpscaleWithModel": {"input": {"required": {"upscale_model": ["UPSCALE_MODEL", {}], "image": ["IMAGE", {}]}}, "input_order": {"required": ["upscale_model", "image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageUpscaleWithModel", "display_name": "Upscale Image (using Model)", "description": "", "python_module": "comfy_extras.nodes_upscale_model", "category": "image/upscaling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["upscale", "upscaler", "upsc", "enlarge image", "super resolution", "hires", "superres", "increase resolution"], "essentials_category": null, "has_intermediate_output": false}, "ImageBlend": {"input": {"required": {"image1": ["IMAGE", {}], "image2": ["IMAGE", {}], "blend_factor": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "blend_mode": ["COMBO", {"multiselect": false, "options": ["normal", "multiply", "screen", "overlay", "soft_light", "difference"]}]}}, "input_order": {"required": ["image1", "image2", "blend_factor", "blend_mode"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageBlend", "display_name": "Blend Images", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["mix images"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "ImageBlur": {"input": {"required": {"image": ["IMAGE", {}], "blur_radius": ["INT", {"default": 1, "min": 1, "max": 31, "step": 1}], "sigma": ["FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0, "step": 0.1}]}}, "input_order": {"required": ["image", "blur_radius", "sigma"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageBlur", "display_name": "Blur Image", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageQuantize": {"input": {"required": {"image": ["IMAGE", {}], "colors": ["INT", {"default": 256, "min": 1, "max": 256, "step": 1}], "dither": ["COMBO", {"multiselect": false, "options": ["none", "floyd-steinberg", "bayer-2", "bayer-4", "bayer-8", "bayer-16"]}]}}, "input_order": {"required": ["image", "colors", "dither"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageQuantize", "display_name": "Quantize Image", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageSharpen": {"input": {"required": {"image": ["IMAGE", {}], "sharpen_radius": ["INT", {"advanced": true, "default": 1, "min": 1, "max": 31, "step": 1}], "sigma": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.1, "max": 10.0, "step": 0.01}], "alpha": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 5.0, "step": 0.01}]}}, "input_order": {"required": ["image", "sharpen_radius", "sigma", "alpha"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageSharpen", "display_name": "Sharpen Image", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageScaleToTotalPixels": {"input": {"required": {"image": ["IMAGE", {}], "upscale_method": ["COMBO", {"multiselect": false, "options": ["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]}], "megapixels": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 16.0, "step": 0.01}], "resolution_steps": ["INT", {"advanced": true, "default": 1, "min": 1, "max": 256}]}}, "input_order": {"required": ["image", "upscale_method", "megapixels", "resolution_steps"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageScaleToTotalPixels", "display_name": "Scale Image to Total Pixels", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/upscaling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ResizeImageMaskNode": {"input": {"required": {"input": ["COMFY_MATCHTYPE_V3", {"template": {"template_id": "input_type", "allowed_types": "IMAGE,MASK"}}], "resize_type": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Select how to resize: by exact dimensions, scale factor, matching another image, etc.", "options": [{"key": "scale dimensions", "inputs": {"required": {"width": ["INT", {"tooltip": "Target width in pixels. Set to 0 to auto-calculate from height while preserving aspect ratio.", "default": 512, "min": 0, "max": 16384, "step": 1}], "height": ["INT", {"tooltip": "Target height in pixels. Set to 0 to auto-calculate from width while preserving aspect ratio.", "default": 512, "min": 0, "max": 16384, "step": 1}], "crop": ["COMBO", {"tooltip": "How to handle aspect ratio mismatch: 'disabled' stretches to fit, 'center' crops to maintain aspect ratio.", "default": "center", "multiselect": false, "options": ["disabled", "center"]}]}}}, {"key": "scale by multiplier", "inputs": {"required": {"multiplier": ["FLOAT", {"tooltip": "Scale factor (e.g., 2.0 doubles size, 0.5 halves size).", "default": 1.0, "min": 0.01, "max": 8.0, "step": 0.01}]}}}, {"key": "scale longer dimension", "inputs": {"required": {"longer_size": ["INT", {"tooltip": "The longer edge will be resized to this value. Aspect ratio is preserved.", "default": 512, "min": 0, "max": 16384, "step": 1}]}}}, {"key": "scale shorter dimension", "inputs": {"required": {"shorter_size": ["INT", {"tooltip": "The shorter edge will be resized to this value. Aspect ratio is preserved.", "default": 512, "min": 0, "max": 16384, "step": 1}]}}}, {"key": "scale width", "inputs": {"required": {"width": ["INT", {"tooltip": "Target width in pixels. Height auto-adjusts to preserve aspect ratio.", "default": 512, "min": 0, "max": 16384, "step": 1}]}}}, {"key": "scale height", "inputs": {"required": {"height": ["INT", {"tooltip": "Target height in pixels. Width auto-adjusts to preserve aspect ratio.", "default": 512, "min": 0, "max": 16384, "step": 1}]}}}, {"key": "scale total pixels", "inputs": {"required": {"megapixels": ["FLOAT", {"tooltip": "Target total megapixels (e.g., 1.0 \u2248 1024\u00d71024). Aspect ratio is preserved.", "default": 1.0, "min": 0.01, "max": 16.0, "step": 0.01}]}}}, {"key": "match size", "inputs": {"required": {"match": ["IMAGE,MASK", {"tooltip": "Resize input to match the dimensions of this reference image or mask."}], "crop": ["COMBO", {"tooltip": "How to handle aspect ratio mismatch: 'disabled' stretches to fit, 'center' crops to maintain aspect ratio.", "default": "center", "multiselect": false, "options": ["disabled", "center"]}]}}}, {"key": "scale to multiple", "inputs": {"required": {"multiple": ["INT", {"tooltip": "Resize so width and height are divisible by this number. Useful for latent alignment (e.g., 8 or 64).", "default": 8, "min": 1, "max": 16384, "step": 1}]}}}]}], "scale_method": ["COMBO", {"tooltip": "Interpolation algorithm. 'area' is best for downscaling, 'lanczos' for upscaling, 'nearest-exact' for pixel art.", "default": "area", "multiselect": false, "options": ["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]}]}}, "input_order": {"required": ["input", "resize_type", "scale_method"]}, "is_input_list": false, "output": ["COMFY_MATCHTYPE_V3"], "output_is_list": [false], "output_name": ["resized"], "output_tooltips": [null], "output_matchtypes": ["input_type"], "name": "ResizeImageMaskNode", "display_name": "Resize Image/Mask", "description": "Resize an image or mask using various scaling methods.", "python_module": "comfy_extras.nodes_post_processing", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["resize", "resize image", "resize mask", "scale", "scale image", "scale mask", "image resize", "change size", "dimensions", "shrink", "enlarge"], "essentials_category": null, "has_intermediate_output": false}, "BatchImagesNode": {"input": {"required": {"images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 1, "max": 50}}]}}, "input_order": {"required": ["images"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "BatchImagesNode", "display_name": "Batch Images", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["batch", "image batch", "batch images", "combine images", "merge images", "stack images"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "BatchMasksNode": {"input": {"required": {"masks": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"mask": ["MASK", {}]}}, "prefix": "mask", "min": 1, "max": 50}}]}}, "input_order": {"required": ["masks"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "BatchMasksNode", "display_name": "Batch Masks", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine masks", "stack masks", "merge masks"], "essentials_category": null, "has_intermediate_output": false}, "BatchLatentsNode": {"input": {"required": {"latents": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"latent": ["LATENT", {}]}}, "prefix": "latent", "min": 1, "max": 50}}]}}, "input_order": {"required": ["latents"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "BatchLatentsNode", "display_name": "Batch Latents", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine latents", "stack latents", "merge latents"], "essentials_category": null, "has_intermediate_output": false}, "ColorTransfer": {"input": {"required": {"image_target": ["IMAGE", {"tooltip": "Image(s) to apply the color transform to."}], "image_ref": ["IMAGE", {"tooltip": "Reference image(s) to match colors to."}], "method": ["COMBO", {"multiselect": false, "options": ["reinhard_lab", "mkl_lab", "histogram"]}], "source_stats": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "per_frame: each frame matched to image_ref individually. uniform: pool stats across all source frames as baseline, match to image_ref. target_frame: use one chosen frame as the baseline for the transform to image_ref, applied uniformly to all frames (preserves relative differences)", "options": [{"key": "per_frame", "inputs": {"required": {}}}, {"key": "uniform", "inputs": {"required": {}}}, {"key": "target_frame", "inputs": {"required": {"target_index": ["INT", {"tooltip": "Frame index used as the source baseline for computing the transform to image_ref", "default": 0, "min": 0, "max": 10000}]}}}]}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["image_target", "image_ref", "method", "source_stats", "strength"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["image"], "output_tooltips": [null], "output_matchtypes": null, "name": "ColorTransfer", "display_name": "Transfer Color", "description": "Match the colors of one image to another using various algorithms.", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["color match", "color grading", "color correction", "match colors", "color transform", "mkl", "reinhard", "histogram"], "essentials_category": null, "has_intermediate_output": false}, "LatentCompositeMasked": {"input": {"required": {"destination": ["LATENT", {}], "source": ["LATENT", {}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "resize_source": ["BOOLEAN", {"default": false}]}, "optional": {"mask": ["MASK", {}]}}, "input_order": {"required": ["destination", "source", "x", "y", "resize_source"], "optional": ["mask"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentCompositeMasked", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_mask", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["overlay latent", "layer latent", "paste latent", "inpaint latent"], "essentials_category": null, "has_intermediate_output": false}, "ImageCompositeMasked": {"input": {"required": {"destination": ["IMAGE", {}], "source": ["IMAGE", {}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "resize_source": ["BOOLEAN", {"default": false}]}, "optional": {"mask": ["MASK", {}]}}, "input_order": {"required": ["destination", "source", "x", "y", "resize_source"], "optional": ["mask"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageCompositeMasked", "display_name": "Image Composite Masked", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/compositing", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["overlay", "layer", "paste image", "images composition"], "essentials_category": null, "has_intermediate_output": false}, "MaskToImage": {"input": {"required": {"mask": ["MASK", {}]}}, "input_order": {"required": ["mask"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MaskToImage", "display_name": "Convert Mask to Image", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["convert mask"], "essentials_category": null, "has_intermediate_output": false}, "ImageToMask": {"input": {"required": {"image": ["IMAGE", {}], "channel": ["COMBO", {"multiselect": false, "options": ["red", "green", "blue", "alpha"]}]}}, "input_order": {"required": ["image", "channel"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageToMask", "display_name": "Convert Image to Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["extract channel", "channel to mask"], "essentials_category": null, "has_intermediate_output": false}, "ImageColorToMask": {"input": {"required": {"image": ["IMAGE", {}], "color": ["INT", {"default": 0, "min": 0, "max": 16777215, "step": 1, "display": "number"}]}}, "input_order": {"required": ["image", "color"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageColorToMask", "display_name": "Convert Image Color to Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["color keying", "chroma key"], "essentials_category": null, "has_intermediate_output": false}, "SolidMask": {"input": {"required": {"value": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["value", "width", "height"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "SolidMask", "display_name": "Create Solid Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "InvertMask": {"input": {"required": {"mask": ["MASK", {}]}}, "input_order": {"required": ["mask"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "InvertMask", "display_name": "Invert Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["reverse mask", "flip mask"], "essentials_category": null, "has_intermediate_output": false}, "CropMask": {"input": {"required": {"mask": ["MASK", {}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["mask", "x", "y", "width", "height"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "CropMask", "display_name": "Crop Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["cut mask", "extract mask region", "mask slice"], "essentials_category": null, "has_intermediate_output": false}, "MaskComposite": {"input": {"required": {"destination": ["MASK", {}], "source": ["MASK", {}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "operation": ["COMBO", {"multiselect": false, "options": ["multiply", "add", "subtract", "and", "or", "xor"]}]}}, "input_order": {"required": ["destination", "source", "x", "y", "operation"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "MaskComposite", "display_name": "Combine Masks", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine masks", "blend masks", "layer masks", "masks composition"], "essentials_category": null, "has_intermediate_output": false}, "FeatherMask": {"input": {"required": {"mask": ["MASK", {}], "left": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "top": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "right": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "bottom": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}]}}, "input_order": {"required": ["mask", "left", "top", "right", "bottom"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "FeatherMask", "display_name": "Feather Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["soft edge mask", "blur mask edges", "gradient mask edge"], "essentials_category": null, "has_intermediate_output": false}, "GrowMask": {"input": {"required": {"mask": ["MASK", {}], "expand": ["INT", {"default": 0, "min": -16384, "max": 16384, "step": 1}], "tapered_corners": ["BOOLEAN", {"advanced": true, "default": true}]}}, "input_order": {"required": ["mask", "expand", "tapered_corners"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrowMask", "display_name": "Grow Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["expand mask", "shrink mask"], "essentials_category": null, "has_intermediate_output": false}, "ThresholdMask": {"input": {"required": {"mask": ["MASK", {}], "value": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["mask", "value"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "ThresholdMask", "display_name": "Threshold Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["binary mask"], "essentials_category": null, "has_intermediate_output": false}, "MaskPreview": {"input": {"required": {"mask": ["MASK", {}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["mask"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "MaskPreview", "display_name": "Preview Mask", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["show mask", "view mask", "inspect mask", "debug mask"], "essentials_category": null, "has_intermediate_output": false}, "PorterDuffImageComposite": {"input": {"required": {"source": ["IMAGE", {}], "source_alpha": ["MASK", {}], "destination": ["IMAGE", {}], "destination_alpha": ["MASK", {}], "mode": ["COMBO", {"default": "DST", "multiselect": false, "options": ["ADD", "CLEAR", "DARKEN", "DST", "DST_ATOP", "DST_IN", "DST_OUT", "DST_OVER", "LIGHTEN", "MULTIPLY", "OVERLAY", "SCREEN", "SRC", "SRC_ATOP", "SRC_IN", "SRC_OUT", "SRC_OVER", "XOR"]}]}}, "input_order": {"required": ["source", "source_alpha", "destination", "destination_alpha", "mode"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "PorterDuffImageComposite", "display_name": "Porter-Duff Image Composite", "description": "", "python_module": "comfy_extras.nodes_compositing", "category": "image/compositing", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["alpha composite", "blend modes", "layer blend", "transparency blend"], "essentials_category": null, "has_intermediate_output": false}, "SplitImageWithAlpha": {"input": {"required": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SplitImageWithAlpha", "display_name": "Split Image with Alpha", "description": "", "python_module": "comfy_extras.nodes_compositing", "category": "image/compositing", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["extract alpha", "separate transparency", "remove alpha"], "essentials_category": null, "has_intermediate_output": false}, "JoinImageWithAlpha": {"input": {"required": {"image": ["IMAGE", {}], "alpha": ["MASK", {}]}}, "input_order": {"required": ["image", "alpha"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "JoinImageWithAlpha", "display_name": "Join Image with Alpha", "description": "", "python_module": "comfy_extras.nodes_compositing", "category": "image/compositing", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["add transparency", "apply alpha", "composite alpha", "RGBA"], "essentials_category": null, "has_intermediate_output": false}, "RebatchLatents": {"input": {"required": {"latents": ["LATENT", {}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["latents", "batch_size"]}, "is_input_list": true, "output": ["LATENT"], "output_is_list": [true], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "RebatchLatents", "display_name": "Rebatch Latents", "description": "", "python_module": "comfy_extras.nodes_rebatch", "category": "model/latent/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RebatchImages": {"input": {"required": {"images": ["IMAGE", {}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["images", "batch_size"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RebatchImages", "display_name": "Rebatch Images", "description": "", "python_module": "comfy_extras.nodes_rebatch", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelMergeSimple": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "ratio": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "ratio"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSimple", "display_name": "ModelMergeSimple", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "advanced/model_merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeBlocks": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "input": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "out": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "input", "middle", "out"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeBlocks", "display_name": "ModelMergeBlocks", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "advanced/model_merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSubtract": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "multiplier": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "multiplier"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSubtract", "display_name": "ModelMergeSubtract", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "advanced/model_merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeAdd": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"]}}, "input_order": {"required": ["model1", "model2"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeAdd", "display_name": "ModelMergeAdd", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "advanced/model_merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CheckpointSave": {"input": {"required": {"model": ["MODEL"], "clip": ["CLIP"], "vae": ["VAE"], "filename_prefix": ["STRING", {"default": "checkpoints/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["model", "clip", "vae", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "CheckpointSave", "display_name": "Save Checkpoint", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "advanced/model_merging", "output_node": true, "has_intermediate_output": false, "search_aliases": ["save model", "export checkpoint", "merge save"]}, "CLIPMergeSimple": {"input": {"required": {"clip1": ["CLIP"], "clip2": ["CLIP"], "ratio": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["clip1", "clip2", "ratio"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPMergeSimple", "display_name": "CLIPMergeSimple", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "advanced/model_merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPMergeSubtract": {"input": {"required": {"clip1": ["CLIP"], "clip2": ["CLIP"], "multiplier": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["clip1", "clip2", "multiplier"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPMergeSubtract", "display_name": "CLIPMergeSubtract", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "advanced/model_merging", "output_node": false, "has_intermediate_output": false, "search_aliases": ["clip difference", "text encoder subtract"]}, "CLIPMergeAdd": {"input": {"required": {"clip1": ["CLIP"], "clip2": ["CLIP"]}}, "input_order": {"required": ["clip1", "clip2"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPMergeAdd", "display_name": "CLIPMergeAdd", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "advanced/model_merging", "output_node": false, "has_intermediate_output": false, "search_aliases": ["combine clip"]}, "CLIPSave": {"input": {"required": {"clip": ["CLIP"], "filename_prefix": ["STRING", {"default": "clip/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["clip", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "CLIPSave", "display_name": "CLIPSave", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "advanced/model_merging", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "VAESave": {"input": {"required": {"vae": ["VAE"], "filename_prefix": ["STRING", {"default": "vae/ComfyUI_vae"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["vae", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "VAESave", "display_name": "VAESave", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "advanced/model_merging", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "ModelSave": {"input": {"required": {"model": ["MODEL"], "filename_prefix": ["STRING", {"default": "diffusion_models/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["model", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "ModelSave", "display_name": "ModelSave", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "advanced/model_merging", "output_node": true, "has_intermediate_output": false, "search_aliases": ["export model", "checkpoint save"]}, "TomePatchModel": {"input": {"required": {"model": ["MODEL", {}], "ratio": ["FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "ratio"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "TomePatchModel", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_tomesd", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeSDXLRefiner": {"input": {"required": {"ascore": ["FLOAT", {"default": 6.0, "min": 0.0, "max": 1000.0, "step": 0.01}], "width": ["INT", {"default": 1024, "min": 0, "max": 16384}], "height": ["INT", {"default": 1024, "min": 0, "max": 16384}], "text": ["STRING", {"multiline": true, "dynamicPrompts": true}], "clip": ["CLIP", {}]}}, "input_order": {"required": ["ascore", "width", "height", "text", "clip"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeSDXLRefiner", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_clip_sdxl", "category": "advanced/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeSDXL": {"input": {"required": {"clip": ["CLIP", {}], "width": ["INT", {"default": 1024, "min": 0, "max": 16384}], "height": ["INT", {"default": 1024, "min": 0, "max": 16384}], "crop_w": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 16384}], "crop_h": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 16384}], "target_width": ["INT", {"default": 1024, "min": 0, "max": 16384}], "target_height": ["INT", {"default": 1024, "min": 0, "max": 16384}], "text_g": ["STRING", {"multiline": true, "dynamicPrompts": true}], "text_l": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "width", "height", "crop_w", "crop_h", "target_width", "target_height", "text_g", "text_l"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeSDXL", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_clip_sdxl", "category": "advanced/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Canny": {"input": {"required": {"image": ["IMAGE", {}], "low_threshold": ["FLOAT", {"default": 0.4, "min": 0.01, "max": 0.99, "step": 0.01}], "high_threshold": ["FLOAT", {"default": 0.8, "min": 0.01, "max": 0.99, "step": 0.01}]}}, "input_order": {"required": ["image", "low_threshold", "high_threshold"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Canny", "display_name": "Detect Edges (Canny)", "description": "", "python_module": "comfy_extras.nodes_canny", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["edge detection", "outline", "contour detection", "line art"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "FreeU": {"input": {"required": {"model": ["MODEL", {}], "b1": ["FLOAT", {"advanced": true, "default": 1.1, "min": 0.0, "max": 10.0, "step": 0.01}], "b2": ["FLOAT", {"advanced": true, "default": 1.2, "min": 0.0, "max": 10.0, "step": 0.01}], "s1": ["FLOAT", {"advanced": true, "default": 0.9, "min": 0.0, "max": 10.0, "step": 0.01}], "s2": ["FLOAT", {"advanced": true, "default": 0.2, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "b1", "b2", "s1", "s2"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "FreeU", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_freelunch", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FreeU_V2": {"input": {"required": {"model": ["MODEL", {}], "b1": ["FLOAT", {"advanced": true, "default": 1.3, "min": 0.0, "max": 10.0, "step": 0.01}], "b2": ["FLOAT", {"advanced": true, "default": 1.4, "min": 0.0, "max": 10.0, "step": 0.01}], "s1": ["FLOAT", {"advanced": true, "default": 0.9, "min": 0.0, "max": 10.0, "step": 0.01}], "s2": ["FLOAT", {"advanced": true, "default": 0.2, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "b1", "b2", "s1", "s2"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "FreeU_V2", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_freelunch", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerCustom": {"input": {"required": {"model": ["MODEL", {}], "add_noise": ["BOOLEAN", {"advanced": true, "default": true}], "noise_seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "sampler": ["SAMPLER", {}], "sigmas": ["SIGMAS", {}], "latent_image": ["LATENT", {}]}}, "input_order": {"required": ["model", "add_noise", "noise_seed", "cfg", "positive", "negative", "sampler", "sigmas", "latent_image"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["output", "denoised_output"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SamplerCustom", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/custom_sampling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CFGOverride": {"input": {"required": {"model": ["MODEL", {}], "cfg": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["model", "cfg", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "CFGOverride", "display_name": "CFG Override", "description": "Override cfg to a fixed value over a [start, end] percent (sigma) range. With multiple overrides, the one nearest the sampler wins on overlap.", "python_module": "comfy_extras.nodes_custom_sampler", "category": "sampling/custom_sampling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BasicScheduler": {"input": {"required": {"model": ["MODEL", {}], "scheduler": ["COMBO", {"multiselect": false, "options": ["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"]}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "scheduler", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "BasicScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KarrasScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "sigma_max": ["FLOAT", {"advanced": true, "default": 14.614642, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "sigma_min": ["FLOAT", {"advanced": true, "default": 0.0291675, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "rho": ["FLOAT", {"advanced": true, "default": 7.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["steps", "sigma_max", "sigma_min", "rho"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "KarrasScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ExponentialScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "sigma_max": ["FLOAT", {"advanced": true, "default": 14.614642, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "sigma_min": ["FLOAT", {"advanced": true, "default": 0.0291675, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["steps", "sigma_max", "sigma_min"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "ExponentialScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PolyexponentialScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "sigma_max": ["FLOAT", {"advanced": true, "default": 14.614642, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "sigma_min": ["FLOAT", {"advanced": true, "default": 0.0291675, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "rho": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["steps", "sigma_max", "sigma_min", "rho"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "PolyexponentialScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LaplaceScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "sigma_max": ["FLOAT", {"advanced": true, "default": 14.614642, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "sigma_min": ["FLOAT", {"advanced": true, "default": 0.0291675, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "mu": ["FLOAT", {"advanced": true, "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.1, "round": false}], "beta": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0.0, "max": 10.0, "step": 0.1, "round": false}]}}, "input_order": {"required": ["steps", "sigma_max", "sigma_min", "mu", "beta"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "LaplaceScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VPScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "beta_d": ["FLOAT", {"advanced": true, "default": 19.9, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "beta_min": ["FLOAT", {"advanced": true, "default": 0.1, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "eps_s": ["FLOAT", {"advanced": true, "default": 0.001, "min": 0.0, "max": 1.0, "step": 0.0001, "round": false}]}}, "input_order": {"required": ["steps", "beta_d", "beta_min", "eps_s"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "VPScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BetaSamplingScheduler": {"input": {"required": {"model": ["MODEL", {}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "alpha": ["FLOAT", {"advanced": true, "default": 0.6, "min": 0.0, "max": 50.0, "step": 0.01, "round": false}], "beta": ["FLOAT", {"advanced": true, "default": 0.6, "min": 0.0, "max": 50.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["model", "steps", "alpha", "beta"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "BetaSamplingScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SDTurboScheduler": {"input": {"required": {"model": ["MODEL", {}], "steps": ["INT", {"default": 1, "min": 1, "max": 10}], "denoise": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "SDTurboScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KSamplerSelect": {"input": {"required": {"sampler_name": ["COMBO", {"multiselect": false, "options": ["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]}]}}, "input_order": {"required": ["sampler_name"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "KSamplerSelect", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerEulerAncestral": {"input": {"required": {"eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerEulerAncestral", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerEulerAncestralCFGPP": {"input": {"required": {"eta": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerEulerAncestralCFGPP", "display_name": "SamplerEulerAncestralCFG++", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerLMS": {"input": {"required": {"order": ["INT", {"advanced": true, "default": 4, "min": 1, "max": 100}]}}, "input_order": {"required": ["order"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerLMS", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMPP_3M_SDE": {"input": {"required": {"eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "noise_device": ["COMBO", {"advanced": true, "multiselect": false, "options": ["gpu", "cpu"]}]}}, "input_order": {"required": ["eta", "s_noise", "noise_device"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMPP_3M_SDE", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMPP_2M_SDE": {"input": {"required": {"solver_type": ["COMBO", {"multiselect": false, "options": ["midpoint", "heun"]}], "eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "noise_device": ["COMBO", {"advanced": true, "multiselect": false, "options": ["gpu", "cpu"]}]}}, "input_order": {"required": ["solver_type", "eta", "s_noise", "noise_device"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMPP_2M_SDE", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMPP_SDE": {"input": {"required": {"eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "r": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "noise_device": ["COMBO", {"advanced": true, "multiselect": false, "options": ["gpu", "cpu"]}]}}, "input_order": {"required": ["eta", "s_noise", "r", "noise_device"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMPP_SDE", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMPP_2S_Ancestral": {"input": {"required": {"eta": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMPP_2S_Ancestral", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMAdaptative": {"input": {"required": {"order": ["INT", {"advanced": true, "default": 3, "min": 2, "max": 3}], "rtol": ["FLOAT", {"advanced": true, "default": 0.05, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "atol": ["FLOAT", {"advanced": true, "default": 0.0078, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "h_init": ["FLOAT", {"advanced": true, "default": 0.05, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "pcoeff": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "icoeff": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "dcoeff": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "accept_safety": ["FLOAT", {"advanced": true, "default": 0.81, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "eta": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["order", "rtol", "atol", "h_init", "pcoeff", "icoeff", "dcoeff", "accept_safety", "eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMAdaptative", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerER_SDE": {"input": {"required": {"solver_type": ["COMBO", {"multiselect": false, "options": ["ER-SDE", "Reverse-time SDE", "ODE"]}], "max_stage": ["INT", {"advanced": true, "default": 3, "min": 1, "max": 3}], "eta": ["FLOAT", {"tooltip": "Stochastic strength of reverse-time SDE.\nWhen eta=0, it reduces to deterministic ODE. This setting doesn't apply to ER-SDE solver type.", "advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["solver_type", "max_stage", "eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerER_SDE", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerSASolver": {"input": {"required": {"model": ["MODEL", {}], "eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01, "round": false}], "sde_start_percent": ["FLOAT", {"advanced": true, "default": 0.2, "min": 0.0, "max": 1.0, "step": 0.001}], "sde_end_percent": ["FLOAT", {"advanced": true, "default": 0.8, "min": 0.0, "max": 1.0, "step": 0.001}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "predictor_order": ["INT", {"advanced": true, "default": 3, "min": 1, "max": 6}], "corrector_order": ["INT", {"advanced": true, "default": 4, "min": 0, "max": 6}], "use_pece": ["BOOLEAN", {"advanced": true}], "simple_order_2": ["BOOLEAN", {"advanced": true}]}}, "input_order": {"required": ["model", "eta", "sde_start_percent", "sde_end_percent", "s_noise", "predictor_order", "corrector_order", "use_pece", "simple_order_2"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerSASolver", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sde"], "essentials_category": null, "has_intermediate_output": false}, "SamplerSEEDS2": {"input": {"required": {"solver_type": ["COMBO", {"multiselect": false, "options": ["phi_1", "phi_2"]}], "eta": ["FLOAT", {"tooltip": "Stochastic strength", "advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"tooltip": "SDE noise multiplier", "advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "r": ["FLOAT", {"tooltip": "Relative step size for the intermediate stage (c2 node)", "advanced": true, "default": 0.5, "min": 0.01, "max": 1.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["solver_type", "eta", "s_noise", "r"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerSEEDS2", "display_name": null, "description": "This sampler node can represent multiple samplers:\n\nseeds_2\n- default setting\n\nexp_heun_2_x0\n- solver_type=phi_2, r=1.0, eta=0.0\n\nexp_heun_2_x0_sde\n- solver_type=phi_2, r=1.0, eta=1.0, s_noise=1.0", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sde", "exp heun"], "essentials_category": null, "has_intermediate_output": false}, "SplitSigmas": {"input": {"required": {"sigmas": ["SIGMAS", {}], "step": ["INT", {"default": 0, "min": 0, "max": 10000}]}}, "input_order": {"required": ["sigmas", "step"]}, "is_input_list": false, "output": ["SIGMAS", "SIGMAS"], "output_is_list": [false, false], "output_name": ["high_sigmas", "low_sigmas"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SplitSigmas", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SplitSigmasDenoise": {"input": {"required": {"sigmas": ["SIGMAS", {}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["sigmas", "denoise"]}, "is_input_list": false, "output": ["SIGMAS", "SIGMAS"], "output_is_list": [false, false], "output_name": ["high_sigmas", "low_sigmas"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SplitSigmasDenoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FlipSigmas": {"input": {"required": {"sigmas": ["SIGMAS", {}]}}, "input_order": {"required": ["sigmas"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "FlipSigmas", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SetFirstSigma": {"input": {"required": {"sigmas": ["SIGMAS", {}], "sigma": ["FLOAT", {"default": 136.0, "min": 0.0, "max": 20000.0, "step": 0.001, "round": false}]}}, "input_order": {"required": ["sigmas", "sigma"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "SetFirstSigma", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ExtendIntermediateSigmas": {"input": {"required": {"sigmas": ["SIGMAS", {}], "steps": ["INT", {"default": 2, "min": 1, "max": 100}], "start_at_sigma": ["FLOAT", {"default": -1.0, "min": -1.0, "max": 20000.0, "step": 0.01, "round": false}], "end_at_sigma": ["FLOAT", {"default": 12.0, "min": 0.0, "max": 20000.0, "step": 0.01, "round": false}], "spacing": ["COMBO", {"multiselect": false, "options": ["linear", "cosine", "sine"]}]}}, "input_order": {"required": ["sigmas", "steps", "start_at_sigma", "end_at_sigma", "spacing"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "ExtendIntermediateSigmas", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["interpolate sigmas"], "essentials_category": null, "has_intermediate_output": false}, "SamplingPercentToSigma": {"input": {"required": {"model": ["MODEL", {}], "sampling_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.0001}], "return_actual_sigma": ["BOOLEAN", {"tooltip": "Return the actual sigma value instead of the value used for interval checks.\nThis only affects results at 0.0 and 1.0.", "default": false}]}}, "input_order": {"required": ["model", "sampling_percent", "return_actual_sigma"]}, "is_input_list": false, "output": ["FLOAT"], "output_is_list": [false], "output_name": ["sigma_value"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplingPercentToSigma", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CFGGuider": {"input": {"required": {"model": ["MODEL", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}]}}, "input_order": {"required": ["model", "positive", "negative", "cfg"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "CFGGuider", "display_name": "CFG Guider", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DualCFGGuider": {"input": {"required": {"model": ["MODEL", {}], "cond1": ["CONDITIONING", {}], "cond2": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "cfg_conds": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "cfg_cond2_negative": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "style": ["COMBO", {"multiselect": false, "options": ["regular", "nested"]}]}}, "input_order": {"required": ["model", "cond1", "cond2", "negative", "cfg_conds", "cfg_cond2_negative", "style"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "DualCFGGuider", "display_name": "Dual CFG Guider", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["dual prompt guidance"], "essentials_category": null, "has_intermediate_output": false}, "DualModelGuider": {"input": {"required": {"model": ["MODEL", {"tooltip": "Model used for the positive (conditional) pass."}], "positive": ["CONDITIONING", {}], "cfg": ["FLOAT", {"default": 4.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}]}, "optional": {"model_negative": ["MODEL", {"tooltip": "Model used for the negative (unconditional) pass. Use the same model for ordinary CFG."}], "negative": ["CONDITIONING", {"tooltip": "Negative conditioning run on the negative model. Leave unconnected for a text-free (image-only) unconditional pass."}]}}, "input_order": {"required": ["model", "positive", "cfg"], "optional": ["model_negative", "negative"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "DualModelGuider", "display_name": "Dual Model CFG Guider", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BasicGuider": {"input": {"required": {"model": ["MODEL", {}], "conditioning": ["CONDITIONING", {}]}}, "input_order": {"required": ["model", "conditioning"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "BasicGuider", "display_name": "Basic Guider", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RandomNoise": {"input": {"required": {"noise_seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}}, "input_order": {"required": ["noise_seed"]}, "is_input_list": false, "output": ["NOISE"], "output_is_list": [false], "output_name": ["NOISE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RandomNoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/noise", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DisableNoise": {"input": {"required": {}}, "input_order": {"required": []}, "is_input_list": false, "output": ["NOISE"], "output_is_list": [false], "output_name": ["NOISE"], "output_tooltips": [null], "output_matchtypes": null, "name": "DisableNoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/noise", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["zero noise"], "essentials_category": null, "has_intermediate_output": false}, "AddNoise": {"input": {"required": {"model": ["MODEL", {}], "noise": ["NOISE", {}], "sigmas": ["SIGMAS", {}], "latent_image": ["LATENT", {}]}}, "input_order": {"required": ["model", "noise", "sigmas", "latent_image"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "AddNoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "experimental/custom_sampling/noise", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerCustomAdvanced": {"input": {"required": {"noise": ["NOISE", {}], "guider": ["GUIDER", {}], "sampler": ["SAMPLER", {}], "sigmas": ["SIGMAS", {}], "latent_image": ["LATENT", {}]}}, "input_order": {"required": ["noise", "guider", "sampler", "sigmas", "latent_image"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["output", "denoised_output"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SamplerCustomAdvanced", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/custom_sampling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ManualSigmas": {"input": {"required": {"sigmas": ["STRING", {"default": "1, 0.5", "multiline": false}]}}, "input_order": {"required": ["sigmas"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "ManualSigmas", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "experimental/custom_sampling", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["custom noise schedule", "define sigmas"], "essentials_category": null, "has_intermediate_output": false}, "HyperTile": {"input": {"required": {"model": ["MODEL", {}], "tile_size": ["INT", {"advanced": true, "default": 256, "min": 1, "max": 2048}], "swap_size": ["INT", {"advanced": true, "default": 2, "min": 1, "max": 128}], "max_depth": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 10}], "scale_depth": ["BOOLEAN", {"advanced": true, "default": false}]}}, "input_order": {"required": ["model", "tile_size", "swap_size", "max_depth", "scale_depth"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "HyperTile", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hypertile", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelSamplingDiscrete": {"input": {"required": {"model": ["MODEL"], "sampling": [["eps", "v_prediction", "lcm", "x0", "img_to_img", "img_to_img_flow"]], "zsnr": ["BOOLEAN", {"default": false, "advanced": true}]}}, "input_order": {"required": ["model", "sampling", "zsnr"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingDiscrete", "display_name": "ModelSamplingDiscrete", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "advanced/model", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingContinuousEDM": {"input": {"required": {"model": ["MODEL"], "sampling": [["v_prediction", "edm", "edm_playground_v2.5", "eps", "cosmos_rflow"]], "sigma_max": ["FLOAT", {"default": 120.0, "min": 0.0, "max": 1000.0, "step": 0.001, "round": false, "advanced": true}], "sigma_min": ["FLOAT", {"default": 0.002, "min": 0.0, "max": 1000.0, "step": 0.001, "round": false, "advanced": true}]}}, "input_order": {"required": ["model", "sampling", "sigma_max", "sigma_min"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingContinuousEDM", "display_name": "ModelSamplingContinuousEDM", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "advanced/model", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingContinuousV": {"input": {"required": {"model": ["MODEL"], "sampling": [["v_prediction"]], "sigma_max": ["FLOAT", {"default": 500.0, "min": 0.0, "max": 1000.0, "step": 0.001, "round": false, "advanced": true}], "sigma_min": ["FLOAT", {"default": 0.03, "min": 0.0, "max": 1000.0, "step": 0.001, "round": false, "advanced": true}]}}, "input_order": {"required": ["model", "sampling", "sigma_max", "sigma_min"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingContinuousV", "display_name": "ModelSamplingContinuousV", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "advanced/model", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingStableCascade": {"input": {"required": {"model": ["MODEL"], "shift": ["FLOAT", {"default": 2.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "shift"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingStableCascade", "display_name": "ModelSamplingStableCascade", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "advanced/model", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingSD3": {"input": {"required": {"model": ["MODEL"], "shift": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "shift"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingSD3", "display_name": "ModelSamplingSD3", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "advanced/model", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingAuraFlow": {"input": {"required": {"model": ["MODEL"], "shift": ["FLOAT", {"default": 1.73, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "shift"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingAuraFlow", "display_name": "ModelSamplingAuraFlow", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "advanced/model", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingFlux": {"input": {"required": {"model": ["MODEL"], "max_shift": ["FLOAT", {"default": 1.15, "min": 0.0, "max": 100.0, "step": 0.01, "advanced": true}], "base_shift": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 100.0, "step": 0.01, "advanced": true}], "width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 8}]}}, "input_order": {"required": ["model", "max_shift", "base_shift", "width", "height"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingFlux", "display_name": "ModelSamplingFlux", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "advanced/model", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelNoiseScale": {"input": {"required": {"model": ["MODEL"], "noise_scale": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 64.0, "step": 0.01, "tooltip": "Absolute training noise scale. For example HiDream-O1 base: 8.0, dev: 7.5."}]}}, "input_order": {"required": ["model", "noise_scale"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelNoiseScale", "display_name": "ModelNoiseScale", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "advanced/model", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "RescaleCFG": {"input": {"required": {"model": ["MODEL"], "multiplier": ["FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "multiplier"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "RescaleCFG", "display_name": "RescaleCFG", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "advanced/model", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelComputeDtype": {"input": {"required": {"model": ["MODEL"], "dtype": [["default", "fp32", "fp16", "bf16"], {"advanced": true}]}}, "input_order": {"required": ["model", "dtype"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelComputeDtype", "display_name": "ModelComputeDtype", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "advanced/debug/model", "output_node": false, "has_intermediate_output": false, "search_aliases": ["model precision", "change dtype"]}, "PatchModelAddDownscale": {"input": {"required": {"model": ["MODEL", {}], "block_number": ["INT", {"advanced": true, "default": 3, "min": 1, "max": 32, "step": 1}], "downscale_factor": ["FLOAT", {"default": 2.0, "min": 0.1, "max": 9.0, "step": 0.001}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 0.35, "min": 0.0, "max": 1.0, "step": 0.001}], "downscale_after_skip": ["BOOLEAN", {"advanced": true, "default": true}], "downscale_method": ["COMBO", {"multiselect": false, "options": ["bicubic", "nearest-exact", "bilinear", "area", "bislerp"]}], "upscale_method": ["COMBO", {"multiselect": false, "options": ["bicubic", "nearest-exact", "bilinear", "area", "bislerp"]}]}}, "input_order": {"required": ["model", "block_number", "downscale_factor", "start_percent", "end_percent", "downscale_after_skip", "downscale_method", "upscale_method"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "PatchModelAddDownscale", "display_name": "PatchModelAddDownscale (Kohya Deep Shrink)", "description": "", "python_module": "comfy_extras.nodes_model_downscale", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageCrop": {"input": {"required": {"image": ["IMAGE", {}], "width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}]}}, "input_order": {"required": ["image", "width", "height", "x", "y"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageCrop", "display_name": "Crop Image (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["trim"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "ImageCropV2": {"input": {"required": {"image": ["IMAGE", {}], "crop_region": ["BOUNDING_BOX", {"default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "component": "ImageCrop"}]}}, "input_order": {"required": ["image", "crop_region"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageCropV2", "display_name": "Crop Image", "description": "Crop an image to the specified dimensions.", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop", "cut", "trim"], "essentials_category": "Image Tools", "has_intermediate_output": true}, "PrimitiveBoundingBox": {"input": {"required": {"x": ["INT", {"default": 0, "min": 0, "max": 16384}], "y": ["INT", {"default": 0, "min": 0, "max": 16384}], "width": ["INT", {"default": 512, "min": 1, "max": 16384}], "height": ["INT", {"default": 512, "min": 1, "max": 16384}]}}, "input_order": {"required": ["x", "y", "width", "height"]}, "is_input_list": false, "output": ["BOUNDING_BOX"], "output_is_list": [false], "output_name": ["BOUNDING_BOX"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveBoundingBox", "display_name": "Bounding Box", "description": "", "python_module": "comfy_extras.nodes_images", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RepeatImageBatch": {"input": {"required": {"image": ["IMAGE", {}], "amount": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["image", "amount"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RepeatImageBatch", "display_name": "Repeat Image Batch", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["duplicate image", "clone image"], "essentials_category": null, "has_intermediate_output": false}, "ImageFromBatch": {"input": {"required": {"image": ["IMAGE", {}], "batch_index": ["INT", {"default": 0, "min": -16384, "max": 16384}], "length": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["image", "batch_index", "length"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageFromBatch", "display_name": "Get Image from Batch", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["select image", "pick from batch", "extract image"], "essentials_category": null, "has_intermediate_output": false}, "ImageAddNoise": {"input": {"required": {"image": ["IMAGE", {}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "strength": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["image", "seed", "strength"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageAddNoise", "display_name": "Add Noise to Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["film grain"], "essentials_category": null, "has_intermediate_output": false}, "SaveAnimatedWEBP": {"input": {"required": {"images": ["IMAGE", {}], "filename_prefix": ["STRING", {"default": "ComfyUI", "multiline": false}], "fps": ["FLOAT", {"default": 6.0, "min": 0.01, "max": 1000.0, "step": 0.01}], "lossless": ["BOOLEAN", {"default": true}], "quality": ["INT", {"default": 80, "min": 0, "max": 100}], "method": ["COMBO", {"multiselect": false, "options": ["default", "fastest", "slowest"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "filename_prefix", "fps", "lossless", "quality", "method"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveAnimatedWEBP", "display_name": "Save Animated WEBP", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveAnimatedPNG": {"input": {"required": {"images": ["IMAGE", {}], "filename_prefix": ["STRING", {"default": "ComfyUI", "multiline": false}], "fps": ["FLOAT", {"default": 6.0, "min": 0.01, "max": 1000.0, "step": 0.01}], "compress_level": ["INT", {"advanced": true, "default": 4, "min": 0, "max": 9}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "filename_prefix", "fps", "compress_level"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveAnimatedPNG", "display_name": "Save Animated PNG", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveImageAdvanced": {"input": {"required": {"images": ["IMAGE", {"tooltip": "The images to save."}], "filename_prefix": ["STRING", {"tooltip": "The prefix for the file to save. May include formatting tokens such as %date:yyyy-MM-dd% or %Empty Latent Image.width%.", "default": "ComfyUI", "multiline": false}], "format": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The file format in which to save the image.", "options": [{"key": "png", "inputs": {"required": {"bit_depth": ["COMBO", {"advanced": true, "default": "8-bit", "multiselect": false, "options": ["8-bit", "16-bit"]}], "input_color_space": ["COMBO", {"advanced": true, "default": "sRGB", "multiselect": false, "options": ["sRGB"]}]}}}, {"key": "exr", "inputs": {"required": {"bit_depth": ["COMBO", {"advanced": true, "default": "32-bit float", "multiselect": false, "options": ["32-bit float"]}], "input_color_space": ["COMBO", {"tooltip": "Colorspace of the input tensor. The EXR is always written as scene-linear in the matching gamut.\n  'sRGB'   \u2014 input is sRGB-encoded Rec.709; the inverse sRGB EOTF is applied.\n  'HDR'    \u2014 input is HLG-encoded Rec.2020 (BT.2100); the inverse HLG OETF is applied to get scene-linear light.\n  'linear' \u2014 input is already scene-linear (Rec.709 primaries); written through unchanged. Use this for renderer/compositor output.", "advanced": true, "default": "sRGB", "multiselect": false, "options": ["sRGB", "HDR", "linear"]}]}}}]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "filename_prefix", "format"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveImageAdvanced", "display_name": "Save Image (Advanced)", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["save", "save image", "export image", "output image", "write image"], "essentials_category": "Basics", "has_intermediate_output": false}, "SaveSVGNode": {"input": {"required": {"svg": ["SVG", {}], "filename_prefix": ["STRING", {"tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes.", "default": "svg/ComfyUI", "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["svg", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveSVGNode", "display_name": "Save SVG", "description": "Save SVG files on disk.", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export vector", "save vector graphics"], "essentials_category": null, "has_intermediate_output": false}, "ImageStitch": {"input": {"required": {"image1": ["IMAGE", {}], "direction": ["COMBO", {"default": "right", "multiselect": false, "options": ["right", "down", "left", "up"]}], "match_image_size": ["BOOLEAN", {"default": true}], "spacing_width": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 1024, "step": 2}], "spacing_color": ["COMBO", {"advanced": true, "default": "white", "multiselect": false, "options": ["white", "black", "red", "green", "blue"]}]}, "optional": {"image2": ["IMAGE", {}]}}, "input_order": {"required": ["image1", "direction", "match_image_size", "spacing_width", "spacing_color"], "optional": ["image2"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageStitch", "display_name": "Stitch Images", "description": "Stitches image2 to image1 in the specified direction.\nIf image2 is not provided, returns image1 unchanged.\nOptional spacing can be added between images.", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine images", "join images", "concatenate images", "side by side"], "essentials_category": null, "has_intermediate_output": false}, "ResizeAndPadImage": {"input": {"required": {"image": ["IMAGE", {}], "target_width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "target_height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "padding_color": ["COMBO", {"advanced": true, "multiselect": false, "options": ["white", "black"]}], "interpolation": ["COMBO", {"advanced": true, "multiselect": false, "options": ["area", "bicubic", "nearest-exact", "bilinear", "lanczos"]}]}}, "input_order": {"required": ["image", "target_width", "target_height", "padding_color", "interpolation"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ResizeAndPadImage", "display_name": "Resize And Pad Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["fit to size"], "essentials_category": null, "has_intermediate_output": false}, "GetImageSize": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["INT", "INT", "INT"], "output_is_list": [false, false, false], "output_name": ["width", "height", "batch_size"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "GetImageSize", "display_name": "Get Image Size", "description": "Returns width and height of the image, and passes it through unchanged.", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["dimensions", "resolution", "image info"], "essentials_category": null, "has_intermediate_output": false}, "ImageRotate": {"input": {"required": {"image": ["IMAGE", {}], "rotation": ["COMBO", {"multiselect": false, "options": ["none", "90 degrees", "180 degrees", "270 degrees"]}]}}, "input_order": {"required": ["image", "rotation"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageRotate", "display_name": "Rotate Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["turn", "flip orientation"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "ImageFlip": {"input": {"required": {"image": ["IMAGE", {}], "flip_method": ["COMBO", {"multiselect": false, "options": ["x-axis: vertically", "y-axis: horizontally"]}]}}, "input_order": {"required": ["image", "flip_method"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageFlip", "display_name": "Flip Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["mirror", "reflect"], "essentials_category": null, "has_intermediate_output": false}, "ImageScaleToMaxDimension": {"input": {"required": {"image": ["IMAGE", {}], "upscale_method": ["COMBO", {"multiselect": false, "options": ["area", "lanczos", "bilinear", "nearest-exact", "bilinear", "bicubic"]}], "largest_size": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 1}]}}, "input_order": {"required": ["image", "upscale_method", "largest_size"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageScaleToMaxDimension", "display_name": "Scale Image to Max Dimension", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/upscaling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SplitImageToTileList": {"input": {"required": {"image": ["IMAGE", {}], "tile_width": ["INT", {"default": 1024, "min": 64, "max": 16384}], "tile_height": ["INT", {"default": 1024, "min": 64, "max": 16384}], "overlap": ["INT", {"default": 128, "min": 0, "max": 4096}]}}, "input_order": {"required": ["image", "tile_width", "tile_height", "overlap"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "SplitImageToTileList", "display_name": "Split Image into List of Tiles", "description": "Splits an image into a batched list of tiles with a specified overlap.", "python_module": "comfy_extras.nodes_images", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["split image", "tile image", "slice image"], "essentials_category": null, "has_intermediate_output": false}, "ImageMergeTileList": {"input": {"required": {"image_list": ["IMAGE", {}], "final_width": ["INT", {"default": 1024, "min": 64, "max": 32768}], "final_height": ["INT", {"default": 1024, "min": 64, "max": 32768}], "overlap": ["INT", {"default": 128, "min": 0, "max": 4096}]}}, "input_order": {"required": ["image_list", "final_width", "final_height", "overlap"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageMergeTileList", "display_name": "Merge List of Tiles to Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["split image", "tile image", "slice image"], "essentials_category": null, "has_intermediate_output": false}, "ImageOnlyCheckpointLoader": {"input": {"required": {"ckpt_name": [["FLUX1-dev\\ae.safetensors", "FLUX1-dev\\flux1-dev.safetensors", "FLUX1-dev\\text_encoder\\model.safetensors", "FLUX1-dev\\text_encoder_2\\model-00001-of-00002.safetensors", "FLUX1-dev\\text_encoder_2\\model-00002-of-00002.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00001-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00002-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00003-of-00003.safetensors", "FLUX1-dev\\vae\\diffusion_pytorch_model.safetensors", "anytext_v1.1.safetensors", "anytext_v1.1\\pytorch_model.fp16.safetensors"]]}}, "input_order": {"required": ["ckpt_name"]}, "is_input_list": false, "output": ["MODEL", "CLIP_VISION", "VAE"], "output_is_list": [false, false, false], "output_name": ["MODEL", "CLIP_VISION", "VAE"], "name": "ImageOnlyCheckpointLoader", "display_name": "Load Checkpoint Image Only (img2vid model)", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SVD_img2vid_Conditioning": {"input": {"required": {"clip_vision": ["CLIP_VISION"], "init_image": ["IMAGE"], "vae": ["VAE"], "width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 576, "min": 16, "max": 16384, "step": 8}], "video_frames": ["INT", {"default": 14, "min": 1, "max": 4096}], "motion_bucket_id": ["INT", {"default": 127, "min": 1, "max": 1023, "advanced": true}], "fps": ["INT", {"default": 6, "min": 1, "max": 1024}], "augmentation_level": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 10.0, "step": 0.01, "advanced": true}]}}, "input_order": {"required": ["clip_vision", "init_image", "vae", "width", "height", "video_frames", "motion_bucket_id", "fps", "augmentation_level"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "name": "SVD_img2vid_Conditioning", "display_name": "SVD_img2vid_Conditioning", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/conditioning/video_models", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VideoLinearCFGGuidance": {"input": {"required": {"model": ["MODEL"], "min_cfg": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.5, "round": 0.01, "advanced": true}]}}, "input_order": {"required": ["model", "min_cfg"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "VideoLinearCFGGuidance", "display_name": "Video Linear CFG Guidance", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/sampling/guiders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VideoTriangleCFGGuidance": {"input": {"required": {"model": ["MODEL"], "min_cfg": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.5, "round": 0.01, "advanced": true}]}}, "input_order": {"required": ["model", "min_cfg"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "VideoTriangleCFGGuidance", "display_name": "Video Triangle CFG Guidance", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/sampling/guiders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImageOnlyCheckpointSave": {"input": {"required": {"model": ["MODEL"], "clip_vision": ["CLIP_VISION"], "vae": ["VAE"], "filename_prefix": ["STRING", {"default": "checkpoints/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["model", "clip_vision", "vae", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "ImageOnlyCheckpointSave", "display_name": "ImageOnlyCheckpointSave", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "advanced/model_merging", "output_node": true, "has_intermediate_output": false, "search_aliases": ["save model", "export checkpoint", "merge save"]}, "ConditioningSetAreaPercentageVideo": {"input": {"required": {"conditioning": ["CONDITIONING"], "width": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "height": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "temporal": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "x": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "y": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "z": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "width", "height", "temporal", "x", "y", "z", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetAreaPercentageVideo", "display_name": "ConditioningSetAreaPercentageVideo", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "Ideogram4Scheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 200}], "width": ["INT", {"default": 1024, "min": 256, "max": 8192, "step": 16}], "height": ["INT", {"default": 1024, "min": 256, "max": 8192, "step": 16}], "mu": ["FLOAT", {"default": 0.0, "min": -10.0, "max": 10.0, "step": 0.05}], "std": ["FLOAT", {"default": 1.75, "min": 0.1, "max": 5.0, "step": 0.05}]}}, "input_order": {"required": ["steps", "width", "height", "mu", "std"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "Ideogram4Scheduler", "display_name": "Ideogram 4 Scheduler", "description": "", "python_module": "comfy_extras.nodes_ideogram4", "category": "sampling/custom_sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TrainLoraNode": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to train the LoRA on."}], "latents": ["LATENT", {"tooltip": "The Latents to use for training, serve as dataset/input of the model."}], "positive": ["CONDITIONING", {"tooltip": "The positive conditioning to use for training."}], "batch_size": ["INT", {"tooltip": "The batch size to use for training.", "default": 1, "min": 1, "max": 10000}], "grad_accumulation_steps": ["INT", {"tooltip": "The number of gradient accumulation steps to use for training.", "default": 1, "min": 1, "max": 1024}], "steps": ["INT", {"tooltip": "The number of steps to train the LoRA for.", "default": 16, "min": 1, "max": 100000}], "learning_rate": ["FLOAT", {"tooltip": "The learning rate to use for training.", "default": 0.0005, "min": 1e-07, "max": 1.0, "step": 1e-07}], "rank": ["INT", {"tooltip": "The rank of the LoRA layers.", "default": 8, "min": 1, "max": 128}], "optimizer": ["COMBO", {"tooltip": "The optimizer to use for training.", "default": "AdamW", "multiselect": false, "options": ["AdamW", "Adam", "SGD", "RMSprop"]}], "loss_function": ["COMBO", {"tooltip": "The loss function to use for training.", "default": "MSE", "multiselect": false, "options": ["MSE", "L1", "Huber", "SmoothL1"]}], "seed": ["INT", {"tooltip": "The seed to use for training (used in generator for LoRA weight initialization and noise sampling)", "default": 0, "min": 0, "max": 18446744073709551615}], "training_dtype": ["COMBO", {"tooltip": "The dtype to use for training. 'none' preserves the model's native compute dtype instead of overriding it. For fp16 models, GradScaler is automatically enabled.", "default": "bf16", "multiselect": false, "options": ["bf16", "fp32", "none"]}], "lora_dtype": ["COMBO", {"tooltip": "The dtype to use for lora.", "default": "bf16", "multiselect": false, "options": ["bf16", "fp32"]}], "quantized_backward": ["BOOLEAN", {"tooltip": "When using training_dtype 'none' and training on quantized model, doing backward with quantized matmul when enabled.", "default": false}], "algorithm": ["COMBO", {"tooltip": "The algorithm to use for training.", "default": "LoRA", "multiselect": false, "options": ["LoRA", "LoHa", "LoKr", "OFT"]}], "gradient_checkpointing": ["BOOLEAN", {"tooltip": "Use gradient checkpointing for training.", "default": true}], "checkpoint_depth": ["INT", {"tooltip": "Depth level for gradient checkpointing.", "default": 1, "min": 1, "max": 5}], "offloading": ["BOOLEAN", {"tooltip": "Offload model weights to CPU during training to save GPU memory.", "default": false}], "existing_lora": ["COMBO", {"tooltip": "The existing LoRA to append to. Set to None for new LoRA.", "default": "[None]", "multiselect": false, "options": ["[None]"]}], "bucket_mode": ["BOOLEAN", {"tooltip": "Enable resolution bucket mode. When enabled, expects pre-bucketed latents from ResolutionBucket node.", "default": false}], "bypass_mode": ["BOOLEAN", {"tooltip": "Enable bypass mode for training. When enabled, adapters are applied via forward hooks instead of weight modification. Useful for quantized models where weights cannot be directly modified.", "default": false}]}}, "input_order": {"required": ["model", "latents", "positive", "batch_size", "grad_accumulation_steps", "steps", "learning_rate", "rank", "optimizer", "loss_function", "seed", "training_dtype", "lora_dtype", "quantized_backward", "algorithm", "gradient_checkpointing", "checkpoint_depth", "offloading", "existing_lora", "bucket_mode", "bypass_mode"]}, "is_input_list": true, "output": ["LORA_MODEL", "LOSS_MAP", "INT"], "output_is_list": [false, false, false], "output_name": ["lora", "loss_map", "steps"], "output_tooltips": ["LoRA weights", "Loss history", "Total training steps"], "output_matchtypes": null, "name": "TrainLoraNode", "display_name": "Train LoRA", "description": "", "python_module": "comfy_extras.nodes_train", "category": "model/training", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LoraModelLoader": {"input": {"required": {"model": ["MODEL", {"tooltip": "The diffusion model the LoRA will be applied to."}], "lora": ["LORA_MODEL", {"tooltip": "The LoRA model to apply to the diffusion model."}], "strength_model": ["FLOAT", {"tooltip": "How strongly to modify the diffusion model. This value can be negative.", "default": 1.0, "min": -100.0, "max": 100.0}], "bypass": ["BOOLEAN", {"tooltip": "When enabled, applies LoRA in bypass mode without modifying base model weights. Useful for training and when model weights are offloaded.", "default": false}]}}, "input_order": {"required": ["model", "lora", "strength_model", "bypass"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["model"], "output_tooltips": ["The modified diffusion model."], "output_matchtypes": null, "name": "LoraModelLoader", "display_name": "Load LoRA Model", "description": "", "python_module": "comfy_extras.nodes_train", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveLoRA": {"input": {"required": {"lora": ["LORA_MODEL", {"tooltip": "The LoRA model to save. Do not use the model with LoRA layers."}], "prefix": ["STRING", {"tooltip": "The prefix to use for the saved LoRA file.", "default": "loras/ComfyUI_trained_lora", "multiline": false}]}, "optional": {"steps": ["INT", {"tooltip": "Optional: The number of steps the LoRA has been trained for, used to name the saved file."}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["lora", "prefix"], "optional": ["steps"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveLoRA", "display_name": "Save LoRA Weights", "description": "", "python_module": "comfy_extras.nodes_train", "category": "advanced/model_merging", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export lora"], "essentials_category": null, "has_intermediate_output": false}, "LossGraphNode": {"input": {"required": {"loss": ["LOSS_MAP", {"tooltip": "Loss map from training node."}], "filename_prefix": ["STRING", {"tooltip": "Prefix for the saved loss graph image.", "default": "loss_graph", "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["loss", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "LossGraphNode", "display_name": "Plot Loss Graph", "description": "", "python_module": "comfy_extras.nodes_train", "category": "model/training", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["training chart", "training visualization", "plot loss"], "essentials_category": null, "has_intermediate_output": false}, "LoadImageDataSetFromFolder": {"input": {"required": {"folder": ["COMBO", {"tooltip": "The folder to load images from.", "multiselect": false, "options": ["3d", "pasted"]}]}}, "input_order": {"required": ["folder"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["images"], "output_tooltips": ["List of loaded images"], "output_matchtypes": null, "name": "LoadImageDataSetFromFolder", "display_name": "Load Image (from Folder)", "description": "Load a dataset of images from a specified folder and return a list of images. Supported formats: PNG, JPG, JPEG, WEBP.", "python_module": "comfy_extras.nodes_dataset", "category": "image", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["load folder", "load from folder", "load dataset", "load images", "import dataset"], "essentials_category": null, "has_intermediate_output": false}, "LoadImageTextDataSetFromFolder": {"input": {"required": {"folder": ["COMBO", {"tooltip": "The folder to load images and text captions from.", "multiselect": false, "options": ["3d", "pasted"]}]}}, "input_order": {"required": ["folder"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [true, true], "output_name": ["images", "texts"], "output_tooltips": ["List of loaded images", "List of text captions"], "output_matchtypes": null, "name": "LoadImageTextDataSetFromFolder", "display_name": "Load Image-Text (from Folder)", "description": "Load a dataset of pairs of images and text captions from a specified folder and return them as a list. Supported formats: PNG, JPG, JPEG, WEBP.", "python_module": "comfy_extras.nodes_dataset", "category": "image", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["load folder", "load from folder", "load dataset", "load images", "import dataset"], "essentials_category": null, "has_intermediate_output": false}, "SaveImageDataSetToFolder": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to save."}], "folder_name": ["STRING", {"tooltip": "Name of the folder to save images to (inside output directory).", "default": "dataset", "multiline": false}], "filename_prefix": ["STRING", {"tooltip": "Prefix for saved image filenames.", "advanced": true, "default": "image", "multiline": false}], "mode": ["COMBO", {"tooltip": "Whether to overwrite existing files or increment filenames to avoid overwriting.", "default": "overwrite", "multiselect": false, "options": ["overwrite", "increment"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "folder_name", "filename_prefix", "mode"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": true, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveImageDataSetToFolder", "display_name": "Save Image (to Folder) (DEPRECATED)", "description": "Save a dataset of images to a specified folder. Supported formats: PNG.", "python_module": "comfy_extras.nodes_dataset", "category": "image", "output_node": true, "deprecated": true, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["save folder", "save to folder", "save dataset", "save images", "export dataset"], "essentials_category": null, "has_intermediate_output": false}, "SaveImageTextDataSetToFolder": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to save."}], "folder_name": ["STRING", {"tooltip": "Name of the folder to save images to (inside output directory).", "default": "dataset", "multiline": false}], "filename_prefix": ["STRING", {"tooltip": "Prefix for saved image filenames.", "advanced": true, "default": "image", "multiline": false}], "mode": ["COMBO", {"tooltip": "Whether to overwrite existing files or increment filenames to avoid overwriting.", "default": "overwrite", "multiselect": false, "options": ["overwrite", "increment"]}]}, "optional": {"texts": ["STRING", {"tooltip": "List of text captions to save.", "forceInput": true, "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "folder_name", "filename_prefix", "mode"], "optional": ["texts"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": true, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveImageTextDataSetToFolder", "display_name": "Save Image-Text (to Folder)", "description": "Save a dataset of pairs of images and text captions to a specified folder. Images are saved as PNG files and captions are saved as TXT files with the same filename_prefix.", "python_module": "comfy_extras.nodes_dataset", "category": "image", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["save folder", "save to folder", "save dataset", "save images", "save text", "export dataset"], "essentials_category": null, "has_intermediate_output": false}, "ResizeImagesByShorterEdge": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "shorter_edge": ["INT", {"tooltip": "Target dimension for the shorter edge.", "default": 512, "min": 1, "max": 8192}]}}, "input_order": {"required": ["images", "shorter_edge"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ResizeImagesByShorterEdge", "display_name": "Resize Images by Shorter Edge (DEPRECATED)", "description": "Resize images so that the shorter edge matches the specified dimension while preserving aspect ratio.", "python_module": "comfy_extras.nodes_dataset", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ResizeImagesByLongerEdge": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "longer_edge": ["INT", {"tooltip": "Target dimension for the longer edge.", "default": 1024, "min": 1, "max": 8192}]}}, "input_order": {"required": ["images", "longer_edge"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ResizeImagesByLongerEdge", "display_name": "Resize Images by Longer Edge (DEPRECATED)", "description": "Resize images so that the longer edge matches the specified dimension while preserving aspect ratio.", "python_module": "comfy_extras.nodes_dataset", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CenterCropImages": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "width": ["INT", {"tooltip": "Crop width.", "default": 512, "min": 1, "max": 8192}], "height": ["INT", {"tooltip": "Crop height.", "default": 512, "min": 1, "max": 8192}]}}, "input_order": {"required": ["images", "width", "height"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "CenterCropImages", "display_name": "Crop Image (Center)", "description": "Center crop an image to the specified dimensions.", "python_module": "comfy_extras.nodes_dataset", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop", "cut", "trim"], "essentials_category": null, "has_intermediate_output": false}, "RandomCropImages": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "width": ["INT", {"tooltip": "Crop width.", "default": 512, "min": 1, "max": 8192}], "height": ["INT", {"tooltip": "Crop height.", "default": 512, "min": 1, "max": 8192}], "seed": ["INT", {"tooltip": "Random seed.", "default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["images", "width", "height", "seed"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "RandomCropImages", "display_name": "Crop Image (Random)", "description": "Randomly crop an image to the specified dimensions.", "python_module": "comfy_extras.nodes_dataset", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop", "cut", "trim"], "essentials_category": null, "has_intermediate_output": false}, "NormalizeImages": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "mean": ["FLOAT", {"tooltip": "Mean value for normalization.", "advanced": true, "default": 0.5, "min": 0.0, "max": 1.0}], "std": ["FLOAT", {"tooltip": "Standard deviation for normalization.", "advanced": true, "default": 0.5, "min": 0.001, "max": 1.0}]}}, "input_order": {"required": ["images", "mean", "std"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "NormalizeImages", "display_name": "Normalize Image Colors", "description": "Normalize images using mean and standard deviation.", "python_module": "comfy_extras.nodes_dataset", "category": "image/color", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["normalize", "normalize colors"], "essentials_category": null, "has_intermediate_output": false}, "AdjustBrightness": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "factor": ["FLOAT", {"tooltip": "Brightness factor. 1.0 = no change, <1.0 = darker, >1.0 = brighter.", "default": 1.0, "min": 0.0, "max": 2.0}]}}, "input_order": {"required": ["images", "factor"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "AdjustBrightness", "display_name": "Adjust Brightness", "description": "Adjust the brightness of an image.", "python_module": "comfy_extras.nodes_dataset", "category": "image/adjustments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["brightness"], "essentials_category": null, "has_intermediate_output": false}, "AdjustContrast": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "factor": ["FLOAT", {"tooltip": "Contrast factor. 1.0 = no change, <1.0 = less contrast, >1.0 = more contrast.", "default": 1.0, "min": 0.0, "max": 2.0}]}}, "input_order": {"required": ["images", "factor"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "AdjustContrast", "display_name": "Adjust Contrast", "description": "Adjust the contrast of an image.", "python_module": "comfy_extras.nodes_dataset", "category": "image/adjustments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["contrast"], "essentials_category": null, "has_intermediate_output": false}, "ShuffleDataset": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to process."}], "seed": ["INT", {"tooltip": "Random seed.", "default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["images", "seed"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ShuffleDataset", "display_name": "Shuffle Images List", "description": "Randomly shuffle the order of images in a list.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["shuffle", "randomize", "mix"], "essentials_category": null, "has_intermediate_output": false}, "ShuffleImageTextDataset": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to shuffle."}], "texts": ["STRING", {"tooltip": "List of texts to shuffle.", "forceInput": true, "multiline": false}], "seed": ["INT", {"tooltip": "Random seed.", "default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["images", "texts", "seed"]}, "is_input_list": true, "output": ["IMAGE", "STRING"], "output_is_list": [true, true], "output_name": ["images", "texts"], "output_tooltips": ["Shuffled images", "Shuffled texts"], "output_matchtypes": null, "name": "ShuffleImageTextDataset", "display_name": "Shuffle Pairs of Image-Text", "description": "Randomly shuffle the order of pairs of image-text in a list.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["shuffle", "randomize", "mix"], "essentials_category": null, "has_intermediate_output": false}, "TextToLowercase": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}]}}, "input_order": {"required": ["texts"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "TextToLowercase", "display_name": "Convert Text to Lowercase (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextToUppercase": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}]}}, "input_order": {"required": ["texts"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "TextToUppercase", "display_name": "Convert Text to Uppercase (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TruncateText": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}], "max_length": ["INT", {"tooltip": "Maximum text length.", "default": 77, "min": 1, "max": 10000}]}}, "input_order": {"required": ["texts", "max_length"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "TruncateText", "display_name": "Truncate Text", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AddTextPrefix": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}], "prefix": ["STRING", {"tooltip": "Prefix to add.", "default": "", "multiline": false}]}}, "input_order": {"required": ["texts", "prefix"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "AddTextPrefix", "display_name": "Add Text Prefix (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AddTextSuffix": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}], "suffix": ["STRING", {"tooltip": "Suffix to add.", "default": "", "multiline": false}]}}, "input_order": {"required": ["texts", "suffix"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "AddTextSuffix", "display_name": "Add Text Suffix (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReplaceText": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}], "find": ["STRING", {"tooltip": "Text to find.", "default": "", "multiline": false}], "replace": ["STRING", {"tooltip": "Text to replace with.", "default": "", "multiline": false}]}}, "input_order": {"required": ["texts", "find", "replace"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "ReplaceText", "display_name": "Replace Text (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StripWhitespace": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}]}}, "input_order": {"required": ["texts"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "StripWhitespace", "display_name": "Strip Whitespace (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageDeduplication": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to process."}], "similarity_threshold": ["FLOAT", {"tooltip": "Similarity threshold (0-1). Higher means more similar. Images above this threshold are considered duplicates.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0}]}}, "input_order": {"required": ["images", "similarity_threshold"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ImageDeduplication", "display_name": "Deduplicate Images", "description": "Remove duplicate or very similar images from a list.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["deduplicate", "remove duplicates", "similarity filter"], "essentials_category": null, "has_intermediate_output": false}, "ImageGrid": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to process."}], "columns": ["INT", {"tooltip": "Number of columns in the grid.", "default": 4, "min": 1, "max": 20}], "cell_width": ["INT", {"tooltip": "Width of each cell in the grid.", "advanced": true, "default": 256, "min": 32, "max": 2048}], "cell_height": ["INT", {"tooltip": "Height of each cell in the grid.", "advanced": true, "default": 256, "min": 32, "max": 2048}], "padding": ["INT", {"tooltip": "Padding between images.", "advanced": true, "default": 4, "min": 0, "max": 50}]}}, "input_order": {"required": ["images", "columns", "cell_width", "cell_height", "padding"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ImageGrid", "display_name": "Make Image Grid", "description": "Arrange multiple images into a grid layout.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["grid", "collage", "combine"], "essentials_category": null, "has_intermediate_output": false}, "MergeImageLists": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to process."}]}}, "input_order": {"required": ["images"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "MergeImageLists", "display_name": "Merge Image Lists (DEPRECATED)", "description": "Concatenate multiple image lists into one.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["list", "merge list", "make list"], "essentials_category": null, "has_intermediate_output": false}, "MergeTextLists": {"input": {"required": {"texts": ["STRING", {"tooltip": "List of texts to process.", "multiline": false}]}}, "input_order": {"required": ["texts"]}, "is_input_list": true, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "MergeTextLists", "display_name": "Merge Text Lists (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MakeTrainingDataset": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to encode."}], "vae": ["VAE", {"tooltip": "VAE model for encoding images to latents."}], "clip": ["CLIP", {"tooltip": "CLIP model for encoding text to conditioning."}]}, "optional": {"texts": ["STRING", {"tooltip": "List of text captions. Can be length n (matching images), 1 (repeated for all), or omitted (uses empty string).", "forceInput": true, "multiline": false}]}}, "input_order": {"required": ["images", "vae", "clip"], "optional": ["texts"]}, "is_input_list": true, "output": ["LATENT", "CONDITIONING"], "output_is_list": [true, true], "output_name": ["latents", "conditioning"], "output_tooltips": ["List of latent dicts", "List of conditioning lists"], "output_matchtypes": null, "name": "MakeTrainingDataset", "display_name": "Make Training Dataset", "description": "Encode images with VAE and texts with CLIP to create a training dataset of latents and conditionings.", "python_module": "comfy_extras.nodes_dataset", "category": "model/training", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["encode dataset"], "essentials_category": null, "has_intermediate_output": false}, "SaveTrainingDataset": {"input": {"required": {"latents": ["LATENT", {"tooltip": "List of latent dicts from MakeTrainingDataset."}], "conditioning": ["CONDITIONING", {"tooltip": "List of conditioning lists from MakeTrainingDataset."}], "folder_name": ["STRING", {"tooltip": "Name of folder to save dataset (inside output directory).", "default": "training_dataset", "multiline": false}], "shard_size": ["INT", {"tooltip": "Number of samples per shard file.", "advanced": true, "default": 1000, "min": 1, "max": 100000}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["latents", "conditioning", "folder_name", "shard_size"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": true, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveTrainingDataset", "display_name": "Save Training Dataset", "description": "Save encoded training dataset (latents + conditioning) to disk for efficient loading during training.", "python_module": "comfy_extras.nodes_dataset", "category": "model/training", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export dataset", "save dataset"], "essentials_category": null, "has_intermediate_output": false}, "LoadTrainingDataset": {"input": {"required": {"folder_name": ["STRING", {"tooltip": "Name of folder containing the saved dataset (inside output directory).", "default": "training_dataset", "multiline": false}]}}, "input_order": {"required": ["folder_name"]}, "is_input_list": false, "output": ["LATENT", "CONDITIONING"], "output_is_list": [true, true], "output_name": ["latents", "conditioning"], "output_tooltips": ["List of latent dicts", "List of conditioning lists"], "output_matchtypes": null, "name": "LoadTrainingDataset", "display_name": "Load Training Dataset", "description": "Load encoded training dataset (latents + conditioning) from disk for use in training.", "python_module": "comfy_extras.nodes_dataset", "category": "model/training", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["import dataset", "training data"], "essentials_category": null, "has_intermediate_output": false}, "ResolutionBucket": {"input": {"required": {"latents": ["LATENT", {"tooltip": "List of latent dicts to bucket by resolution."}], "conditioning": ["CONDITIONING", {"tooltip": "List of conditioning lists (must match latents length)."}]}}, "input_order": {"required": ["latents", "conditioning"]}, "is_input_list": true, "output": ["LATENT", "CONDITIONING"], "output_is_list": [true, true], "output_name": ["latents", "conditioning"], "output_tooltips": ["List of batched latent dicts, one per resolution bucket.", "List of condition lists, one per resolution bucket."], "output_matchtypes": null, "name": "ResolutionBucket", "display_name": "Resolution Bucket", "description": "Group latents and conditionings into buckets", "python_module": "comfy_extras.nodes_dataset", "category": "model/training", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["bucket by resolution", "group by resolution", "batch by resolution"], "essentials_category": null, "has_intermediate_output": false}, "SelfAttentionGuidance": {"input": {"required": {"model": ["MODEL", {}], "scale": ["FLOAT", {"default": 0.5, "min": -2.0, "max": 5.0, "step": 0.01}], "blur_sigma": ["FLOAT", {"advanced": true, "default": 2.0, "min": 0.0, "max": 10.0, "step": 0.1}]}}, "input_order": {"required": ["model", "scale", "blur_sigma"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SelfAttentionGuidance", "display_name": "Self-Attention Guidance", "description": "", "python_module": "comfy_extras.nodes_sag", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PerpNeg": {"input": {"required": {"model": ["MODEL", {}], "empty_conditioning": ["CONDITIONING", {}], "neg_scale": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "empty_conditioning", "neg_scale"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "PerpNeg", "display_name": "Perp-Neg (DEPRECATED by Perp-Neg Guider)", "description": "", "python_module": "comfy_extras.nodes_perpneg", "category": "experimental", "output_node": false, "deprecated": true, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PerpNegGuider": {"input": {"required": {"model": ["MODEL", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "empty_conditioning": ["CONDITIONING", {}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "neg_scale": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "positive", "negative", "empty_conditioning", "cfg", "neg_scale"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "PerpNegGuider", "display_name": "Perp-Neg Guider", "description": "", "python_module": "comfy_extras.nodes_perpneg", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableZero123_Conditioning": {"input": {"required": {"clip_vision": ["CLIP_VISION", {}], "init_image": ["IMAGE", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 256, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 256, "min": 16, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "elevation": ["FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}], "azimuth": ["FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}]}}, "input_order": {"required": ["clip_vision", "init_image", "vae", "width", "height", "batch_size", "elevation", "azimuth"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "StableZero123_Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable3d", "category": "model/conditioning/3d_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableZero123_Conditioning_Batched": {"input": {"required": {"clip_vision": ["CLIP_VISION", {}], "init_image": ["IMAGE", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 256, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 256, "min": 16, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "elevation": ["FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}], "azimuth": ["FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}], "elevation_batch_increment": ["FLOAT", {"advanced": true, "default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}], "azimuth_batch_increment": ["FLOAT", {"advanced": true, "default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}]}}, "input_order": {"required": ["clip_vision", "init_image", "vae", "width", "height", "batch_size", "elevation", "azimuth", "elevation_batch_increment", "azimuth_batch_increment"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "StableZero123_Conditioning_Batched", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable3d", "category": "model/conditioning/3d_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SV3D_Conditioning": {"input": {"required": {"clip_vision": ["CLIP_VISION", {}], "init_image": ["IMAGE", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 576, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 576, "min": 16, "max": 16384, "step": 8}], "video_frames": ["INT", {"default": 21, "min": 1, "max": 4096}], "elevation": ["FLOAT", {"default": 0.0, "min": -90.0, "max": 90.0, "step": 0.1, "round": false}]}}, "input_order": {"required": ["clip_vision", "init_image", "vae", "width", "height", "video_frames", "elevation"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "SV3D_Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable3d", "category": "model/conditioning/3d_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SD_4XUpscale_Conditioning": {"input": {"required": {"images": ["IMAGE", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "scale_ratio": ["FLOAT", {"default": 4.0, "min": 0.0, "max": 10.0, "step": 0.01}], "noise_augmentation": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["images", "positive", "negative", "scale_ratio", "noise_augmentation"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "SD_4XUpscale_Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_sdupscale", "category": "model/conditioning/upscale_diffusion", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PhotoMakerLoader": {"input": {"required": {"photomaker_model_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["photomaker_model_name"]}, "is_input_list": false, "output": ["PHOTOMAKER"], "output_is_list": [false], "output_name": ["PHOTOMAKER"], "output_tooltips": [null], "output_matchtypes": null, "name": "PhotoMakerLoader", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_photomaker", "category": "experimental/photomaker", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PhotoMakerEncode": {"input": {"required": {"photomaker": ["PHOTOMAKER", {}], "image": ["IMAGE", {}], "clip": ["CLIP", {}], "text": ["STRING", {"default": "photograph of photomaker", "multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["photomaker", "image", "clip", "text"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "PhotoMakerEncode", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_photomaker", "category": "experimental/photomaker", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodePixArtAlpha": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 0, "max": 16384}], "height": ["INT", {"default": 1024, "min": 0, "max": 16384}], "text": ["STRING", {"multiline": true, "dynamicPrompts": true}], "clip": ["CLIP", {}]}}, "input_order": {"required": ["width", "height", "text", "clip"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodePixArtAlpha", "display_name": null, "description": "Encodes text and sets the resolution conditioning for PixArt Alpha. Does not apply to PixArt Sigma.", "python_module": "comfy_extras.nodes_pixart", "category": "advanced/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["pixart prompt"], "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeControlnet": {"input": {"required": {"clip": ["CLIP", {}], "conditioning": ["CONDITIONING", {}], "text": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "conditioning", "text"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeControlnet", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cond", "category": "experimental/conditioning", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "T5TokenizerOptions": {"input": {"required": {"clip": ["CLIP", {}], "min_padding": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 10000, "step": 1}], "min_length": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 10000, "step": 1}]}}, "input_order": {"required": ["clip", "min_padding", "min_length"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "T5TokenizerOptions", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cond", "category": "experimental/conditioning", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Morphology": {"input": {"required": {"image": ["IMAGE", {}], "operation": ["COMBO", {"multiselect": false, "options": ["erode", "dilate", "open", "close", "gradient", "bottom_hat", "top_hat"]}], "kernel_size": ["INT", {"default": 3, "min": 3, "max": 999, "step": 1}]}}, "input_order": {"required": ["image", "operation", "kernel_size"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Morphology", "display_name": "Apply Morphology", "description": "", "python_module": "comfy_extras.nodes_morphology", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["erode", "dilate"], "essentials_category": null, "has_intermediate_output": false}, "ImageRGBToYUV": {"input": {"required": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE", "IMAGE", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["Y", "U", "V"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "ImageRGBToYUV", "display_name": "Image RGB to YUV", "description": "", "python_module": "comfy_extras.nodes_morphology", "category": "image/color", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["color space conversion"], "essentials_category": null, "has_intermediate_output": false}, "ImageYUVToRGB": {"input": {"required": {"Y": ["IMAGE", {}], "U": ["IMAGE", {}], "V": ["IMAGE", {}]}}, "input_order": {"required": ["Y", "U", "V"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageYUVToRGB", "display_name": "Image YUV to RGB", "description": "", "python_module": "comfy_extras.nodes_morphology", "category": "image/color", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["color space conversion"], "essentials_category": null, "has_intermediate_output": false}, "StableCascade_EmptyLatentImage": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 256, "max": 16384, "step": 8}], "height": ["INT", {"default": 1024, "min": 256, "max": 16384, "step": 8}], "compression": ["INT", {"advanced": true, "default": 42, "min": 4, "max": 128, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "compression", "batch_size"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["stage_c", "stage_b"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "StableCascade_EmptyLatentImage", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable_cascade", "category": "model/latent/stable_cascade", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableCascade_StageB_Conditioning": {"input": {"required": {"conditioning": ["CONDITIONING", {}], "stage_c": ["LATENT", {}]}}, "input_order": {"required": ["conditioning", "stage_c"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StableCascade_StageB_Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable_cascade", "category": "model/conditioning/stable_cascade", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableCascade_StageC_VAEEncode": {"input": {"required": {"image": ["IMAGE", {}], "vae": ["VAE", {}], "compression": ["INT", {"advanced": true, "default": 42, "min": 4, "max": 128, "step": 1}]}}, "input_order": {"required": ["image", "vae", "compression"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["stage_c", "stage_b"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "StableCascade_StageC_VAEEncode", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable_cascade", "category": "model/latent/stable_cascade", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableCascade_SuperResolutionControlnet": {"input": {"required": {"image": ["IMAGE", {}], "vae": ["VAE", {}]}}, "input_order": {"required": ["image", "vae"]}, "is_input_list": false, "output": ["IMAGE", "LATENT", "LATENT"], "output_is_list": [false, false, false], "output_name": ["controlnet_input", "stage_c", "stage_b"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "StableCascade_SuperResolutionControlnet", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable_cascade", "category": "experimental/stable_cascade", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DifferentialDiffusion": {"input": {"required": {"model": ["MODEL", {}]}, "optional": {"strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model"], "optional": ["strength"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "DifferentialDiffusion", "display_name": "Differential Diffusion", "description": "", "python_module": "comfy_extras.nodes_differential_diffusion", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["inpaint gradient", "variable denoise strength"], "essentials_category": null, "has_intermediate_output": false}, "InstructPixToPixConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "pixels": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "pixels"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "InstructPixToPixConditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ip2p", "category": "model/conditioning/instructpix2pix", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelMergeSD1": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "time_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "label_emb.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "time_embed.", "label_emb.", "input_blocks.0.", "input_blocks.1.", "input_blocks.2.", "input_blocks.3.", "input_blocks.4.", "input_blocks.5.", "input_blocks.6.", "input_blocks.7.", "input_blocks.8.", "input_blocks.9.", "input_blocks.10.", "input_blocks.11.", "middle_block.0.", "middle_block.1.", "middle_block.2.", "output_blocks.0.", "output_blocks.1.", "output_blocks.2.", "output_blocks.3.", "output_blocks.4.", "output_blocks.5.", "output_blocks.6.", "output_blocks.7.", "output_blocks.8.", "output_blocks.9.", "output_blocks.10.", "output_blocks.11.", "out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSD1", "display_name": "ModelMergeSD1", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "advanced/model_merging/model_specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSD2": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "time_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "label_emb.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "time_embed.", "label_emb.", "input_blocks.0.", "input_blocks.1.", "input_blocks.2.", "input_blocks.3.", "input_blocks.4.", "input_blocks.5.", "input_blocks.6.", "input_blocks.7.", "input_blocks.8.", "input_blocks.9.", "input_blocks.10.", "input_blocks.11.", "middle_block.0.", "middle_block.1.", "middle_block.2.", "output_blocks.0.", "output_blocks.1.", "output_blocks.2.", "output_blocks.3.", "output_blocks.4.", "output_blocks.5.", "output_blocks.6.", "output_blocks.7.", "output_blocks.8.", "output_blocks.9.", "output_blocks.10.", "output_blocks.11.", "out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSD2", "display_name": "ModelMergeSD2", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "advanced/model_merging/model_specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSDXL": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "time_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "label_emb.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.0": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.1": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.2": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.3": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.4": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.5": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.6": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.7": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.8": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.0": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.1": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.2": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.0": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.1": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.2": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.3": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.4": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.5": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.6": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.7": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.8": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "time_embed.", "label_emb.", "input_blocks.0", "input_blocks.1", "input_blocks.2", "input_blocks.3", "input_blocks.4", "input_blocks.5", "input_blocks.6", "input_blocks.7", "input_blocks.8", "middle_block.0", "middle_block.1", "middle_block.2", "output_blocks.0", "output_blocks.1", "output_blocks.2", "output_blocks.3", "output_blocks.4", "output_blocks.5", "output_blocks.6", "output_blocks.7", "output_blocks.8", "out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSDXL", "display_name": "ModelMergeSDXL", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "advanced/model_merging/model_specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSD3_2B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "context_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "y_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embed.", "x_embedder.", "context_embedder.", "y_embedder.", "t_embedder.", "joint_blocks.0.", "joint_blocks.1.", "joint_blocks.2.", "joint_blocks.3.", "joint_blocks.4.", "joint_blocks.5.", "joint_blocks.6.", "joint_blocks.7.", "joint_blocks.8.", "joint_blocks.9.", "joint_blocks.10.", "joint_blocks.11.", "joint_blocks.12.", "joint_blocks.13.", "joint_blocks.14.", "joint_blocks.15.", "joint_blocks.16.", "joint_blocks.17.", "joint_blocks.18.", "joint_blocks.19.", "joint_blocks.20.", "joint_blocks.21.", "joint_blocks.22.", "joint_blocks.23.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSD3_2B", "display_name": "ModelMergeSD3_2B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "advanced/model_merging/model_specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeAuraflow": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "init_x_linear.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "positional_encoding": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "cond_seq_linear.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "register_tokens": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_layers.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_layers.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_layers.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_layers.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "modF.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_linear.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "init_x_linear.", "positional_encoding", "cond_seq_linear.", "register_tokens", "t_embedder.", "double_layers.0.", "double_layers.1.", "double_layers.2.", "double_layers.3.", "single_layers.0.", "single_layers.1.", "single_layers.2.", "single_layers.3.", "single_layers.4.", "single_layers.5.", "single_layers.6.", "single_layers.7.", "single_layers.8.", "single_layers.9.", "single_layers.10.", "single_layers.11.", "single_layers.12.", "single_layers.13.", "single_layers.14.", "single_layers.15.", "single_layers.16.", "single_layers.17.", "single_layers.18.", "single_layers.19.", "single_layers.20.", "single_layers.21.", "single_layers.22.", "single_layers.23.", "single_layers.24.", "single_layers.25.", "single_layers.26.", "single_layers.27.", "single_layers.28.", "single_layers.29.", "single_layers.30.", "single_layers.31.", "modF.", "final_linear."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeAuraflow", "display_name": "ModelMergeAuraflow", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "advanced/model_merging/model_specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeFlux1": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "img_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "time_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "guidance_in": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "vector_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txt_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "img_in.", "time_in.", "guidance_in", "vector_in.", "txt_in.", "double_blocks.0.", "double_blocks.1.", "double_blocks.2.", "double_blocks.3.", "double_blocks.4.", "double_blocks.5.", "double_blocks.6.", "double_blocks.7.", "double_blocks.8.", "double_blocks.9.", "double_blocks.10.", "double_blocks.11.", "double_blocks.12.", "double_blocks.13.", "double_blocks.14.", "double_blocks.15.", "double_blocks.16.", "double_blocks.17.", "double_blocks.18.", "single_blocks.0.", "single_blocks.1.", "single_blocks.2.", "single_blocks.3.", "single_blocks.4.", "single_blocks.5.", "single_blocks.6.", "single_blocks.7.", "single_blocks.8.", "single_blocks.9.", "single_blocks.10.", "single_blocks.11.", "single_blocks.12.", "single_blocks.13.", "single_blocks.14.", "single_blocks.15.", "single_blocks.16.", "single_blocks.17.", "single_blocks.18.", "single_blocks.19.", "single_blocks.20.", "single_blocks.21.", "single_blocks.22.", "single_blocks.23.", "single_blocks.24.", "single_blocks.25.", "single_blocks.26.", "single_blocks.27.", "single_blocks.28.", "single_blocks.29.", "single_blocks.30.", "single_blocks.31.", "single_blocks.32.", "single_blocks.33.", "single_blocks.34.", "single_blocks.35.", "single_blocks.36.", "single_blocks.37.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeFlux1", "display_name": "ModelMergeFlux1", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "advanced/model_merging/model_specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSD35_Large": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "context_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "y_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embed.", "x_embedder.", "context_embedder.", "y_embedder.", "t_embedder.", "joint_blocks.0.", "joint_blocks.1.", "joint_blocks.2.", "joint_blocks.3.", "joint_blocks.4.", "joint_blocks.5.", "joint_blocks.6.", "joint_blocks.7.", "joint_blocks.8.", "joint_blocks.9.", "joint_blocks.10.", "joint_blocks.11.", "joint_blocks.12.", "joint_blocks.13.", "joint_blocks.14.", "joint_blocks.15.", "joint_blocks.16.", "joint_blocks.17.", "joint_blocks.18.", "joint_blocks.19.", "joint_blocks.20.", "joint_blocks.21.", "joint_blocks.22.", "joint_blocks.23.", "joint_blocks.24.", "joint_blocks.25.", "joint_blocks.26.", "joint_blocks.27.", "joint_blocks.28.", "joint_blocks.29.", "joint_blocks.30.", "joint_blocks.31.", "joint_blocks.32.", "joint_blocks.33.", "joint_blocks.34.", "joint_blocks.35.", "joint_blocks.36.", "joint_blocks.37.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSD35_Large", "display_name": "ModelMergeSD35_Large", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "advanced/model_merging/model_specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeMochiPreview": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_frequencies.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t5_y_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t5_yproj.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.38.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.39.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.40.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.41.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.42.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.43.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.44.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.45.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.46.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.47.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_frequencies.", "t_embedder.", "t5_y_embedder.", "t5_yproj.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "blocks.28.", "blocks.29.", "blocks.30.", "blocks.31.", "blocks.32.", "blocks.33.", "blocks.34.", "blocks.35.", "blocks.36.", "blocks.37.", "blocks.38.", "blocks.39.", "blocks.40.", "blocks.41.", "blocks.42.", "blocks.43.", "blocks.44.", "blocks.45.", "blocks.46.", "blocks.47.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeMochiPreview", "display_name": "ModelMergeMochiPreview", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "advanced/model_merging/model_specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeLTXV": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "patchify_proj.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "adaln_single.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "caption_projection.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "scale_shift_table": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "proj_out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "patchify_proj.", "adaln_single.", "caption_projection.", "transformer_blocks.0.", "transformer_blocks.1.", "transformer_blocks.2.", "transformer_blocks.3.", "transformer_blocks.4.", "transformer_blocks.5.", "transformer_blocks.6.", "transformer_blocks.7.", "transformer_blocks.8.", "transformer_blocks.9.", "transformer_blocks.10.", "transformer_blocks.11.", "transformer_blocks.12.", "transformer_blocks.13.", "transformer_blocks.14.", "transformer_blocks.15.", "transformer_blocks.16.", "transformer_blocks.17.", "transformer_blocks.18.", "transformer_blocks.19.", "transformer_blocks.20.", "transformer_blocks.21.", "transformer_blocks.22.", "transformer_blocks.23.", "transformer_blocks.24.", "transformer_blocks.25.", "transformer_blocks.26.", "transformer_blocks.27.", "scale_shift_table", "proj_out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeLTXV", "display_name": "ModelMergeLTXV", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "advanced/model_merging/model_specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeCosmos7B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "extra_pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "affline_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embedder.", "extra_pos_embedder.", "x_embedder.", "t_embedder.", "affline_norm.", "blocks.block0.", "blocks.block1.", "blocks.block2.", "blocks.block3.", "blocks.block4.", "blocks.block5.", "blocks.block6.", "blocks.block7.", "blocks.block8.", "blocks.block9.", "blocks.block10.", "blocks.block11.", "blocks.block12.", "blocks.block13.", "blocks.block14.", "blocks.block15.", "blocks.block16.", "blocks.block17.", "blocks.block18.", "blocks.block19.", "blocks.block20.", "blocks.block21.", "blocks.block22.", "blocks.block23.", "blocks.block24.", "blocks.block25.", "blocks.block26.", "blocks.block27.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeCosmos7B", "display_name": "ModelMergeCosmos7B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "advanced/model_merging/model_specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeCosmos14B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "extra_pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "affline_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embedder.", "extra_pos_embedder.", "x_embedder.", "t_embedder.", "affline_norm.", "blocks.block0.", "blocks.block1.", "blocks.block2.", "blocks.block3.", "blocks.block4.", "blocks.block5.", "blocks.block6.", "blocks.block7.", "blocks.block8.", "blocks.block9.", "blocks.block10.", "blocks.block11.", "blocks.block12.", "blocks.block13.", "blocks.block14.", "blocks.block15.", "blocks.block16.", "blocks.block17.", "blocks.block18.", "blocks.block19.", "blocks.block20.", "blocks.block21.", "blocks.block22.", "blocks.block23.", "blocks.block24.", "blocks.block25.", "blocks.block26.", "blocks.block27.", "blocks.block28.", "blocks.block29.", "blocks.block30.", "blocks.block31.", "blocks.block32.", "blocks.block33.", "blocks.block34.", "blocks.block35.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeCosmos14B", "display_name": "ModelMergeCosmos14B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "advanced/model_merging/model_specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeWAN2_1": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "patch_embedding.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "time_embedding.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "time_projection.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "text_embedding.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "img_emb.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.38.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.39.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "head.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "patch_embedding.", "time_embedding.", "time_projection.", "text_embedding.", "img_emb.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "blocks.28.", "blocks.29.", "blocks.30.", "blocks.31.", "blocks.32.", "blocks.33.", "blocks.34.", "blocks.35.", "blocks.36.", "blocks.37.", "blocks.38.", "blocks.39.", "head."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeWAN2_1", "display_name": "ModelMergeWAN2_1", "description": "1.3B model has 30 blocks, 14B model has 40 blocks. Image to video model has the extra img_emb.", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "advanced/model_merging/model_specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeCosmosPredict2_2B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedding_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embedder.", "x_embedder.", "t_embedder.", "t_embedding_norm.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeCosmosPredict2_2B", "display_name": "ModelMergeCosmosPredict2_2B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "advanced/model_merging/model_specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeCosmosPredict2_14B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedding_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embedder.", "x_embedder.", "t_embedder.", "t_embedding_norm.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "blocks.28.", "blocks.29.", "blocks.30.", "blocks.31.", "blocks.32.", "blocks.33.", "blocks.34.", "blocks.35.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeCosmosPredict2_14B", "display_name": "ModelMergeCosmosPredict2_14B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "advanced/model_merging/model_specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeQwenImage": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embeds.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "img_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txt_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txt_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "time_text_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.38.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.39.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.40.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.41.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.42.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.43.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.44.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.45.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.46.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.47.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.48.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.49.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.50.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.51.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.52.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.53.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.54.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.55.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.56.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.57.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.58.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.59.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "proj_out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embeds.", "img_in.", "txt_norm.", "txt_in.", "time_text_embed.", "transformer_blocks.0.", "transformer_blocks.1.", "transformer_blocks.2.", "transformer_blocks.3.", "transformer_blocks.4.", "transformer_blocks.5.", "transformer_blocks.6.", "transformer_blocks.7.", "transformer_blocks.8.", "transformer_blocks.9.", "transformer_blocks.10.", "transformer_blocks.11.", "transformer_blocks.12.", "transformer_blocks.13.", "transformer_blocks.14.", "transformer_blocks.15.", "transformer_blocks.16.", "transformer_blocks.17.", "transformer_blocks.18.", "transformer_blocks.19.", "transformer_blocks.20.", "transformer_blocks.21.", "transformer_blocks.22.", "transformer_blocks.23.", "transformer_blocks.24.", "transformer_blocks.25.", "transformer_blocks.26.", "transformer_blocks.27.", "transformer_blocks.28.", "transformer_blocks.29.", "transformer_blocks.30.", "transformer_blocks.31.", "transformer_blocks.32.", "transformer_blocks.33.", "transformer_blocks.34.", "transformer_blocks.35.", "transformer_blocks.36.", "transformer_blocks.37.", "transformer_blocks.38.", "transformer_blocks.39.", "transformer_blocks.40.", "transformer_blocks.41.", "transformer_blocks.42.", "transformer_blocks.43.", "transformer_blocks.44.", "transformer_blocks.45.", "transformer_blocks.46.", "transformer_blocks.47.", "transformer_blocks.48.", "transformer_blocks.49.", "transformer_blocks.50.", "transformer_blocks.51.", "transformer_blocks.52.", "transformer_blocks.53.", "transformer_blocks.54.", "transformer_blocks.55.", "transformer_blocks.56.", "transformer_blocks.57.", "transformer_blocks.58.", "transformer_blocks.59.", "proj_out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeQwenImage", "display_name": "ModelMergeQwenImage", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "advanced/model_merging/model_specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PerturbedAttentionGuidance": {"input": {"required": {"model": ["MODEL", {}], "scale": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": 0.01}]}}, "input_order": {"required": ["model", "scale"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "PerturbedAttentionGuidance", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_pag", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AlignYourStepsScheduler": {"input": {"required": {"model_type": ["COMBO", {"multiselect": false, "options": ["SD1", "SDXL", "SVD"]}], "steps": ["INT", {"default": 10, "min": 1, "max": 10000}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model_type", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "AlignYourStepsScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_align_your_steps", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["AYS scheduler"], "essentials_category": null, "has_intermediate_output": false}, "UNetSelfAttentionMultiply": {"input": {"required": {"model": ["MODEL", {}], "q": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "k": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "v": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "out": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "q", "k", "v", "out"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "UNetSelfAttentionMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_attention_multiply", "category": "experimental/attention_experiments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "UNetCrossAttentionMultiply": {"input": {"required": {"model": ["MODEL", {}], "q": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "k": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "v": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "out": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "q", "k", "v", "out"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "UNetCrossAttentionMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_attention_multiply", "category": "experimental/attention_experiments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPAttentionMultiply": {"input": {"required": {"clip": ["CLIP", {}], "q": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "k": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "v": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "out": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["clip", "q", "k", "v", "out"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPAttentionMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_attention_multiply", "category": "experimental/attention_experiments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["clip attention scale", "text encoder attention"], "essentials_category": null, "has_intermediate_output": false}, "UNetTemporalAttentionMultiply": {"input": {"required": {"model": ["MODEL", {}], "self_structural": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "self_temporal": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "cross_structural": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "cross_temporal": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "self_structural", "self_temporal", "cross_structural", "cross_temporal"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "UNetTemporalAttentionMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_attention_multiply", "category": "experimental/attention_experiments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerLCMUpscale": {"input": {"required": {"scale_ratio": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.1, "max": 20.0, "step": 0.01}], "scale_steps": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 1000, "step": 1}], "upscale_method": ["COMBO", {"multiselect": false, "options": ["bislerp", "nearest-exact", "bilinear", "area", "bicubic"]}]}}, "input_order": {"required": ["scale_ratio", "scale_steps", "upscale_method"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerLCMUpscale", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_advanced_samplers", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerLCM": {"input": {"required": {"s_noise": ["FLOAT", {"tooltip": "Per-step noise multiplier at the first step (1.0 = match training).", "default": 1.0, "min": 0.0, "max": 64.0, "step": 0.01}], "s_noise_end": ["FLOAT", {"tooltip": "Per-step noise multiplier at the last step. Set equal to s_noise for a constant schedule.", "default": 1.0, "min": 0.0, "max": 64.0, "step": 0.01}], "noise_clip_std": ["FLOAT", {"tooltip": "Clamp per-step noise to +/- N*std. 0 disables.", "default": 0.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["s_noise", "s_noise_end", "noise_clip_std"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerLCM", "display_name": null, "description": "LCM sampler with tunable per-step noise. s_noise is a multiplier on the model's training noise scale", "python_module": "comfy_extras.nodes_advanced_samplers", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerEulerCFGpp": {"input": {"required": {"version": ["COMBO", {"advanced": true, "multiselect": false, "options": ["regular", "alternative"]}]}}, "input_order": {"required": ["version"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerEulerCFGpp", "display_name": "SamplerEulerCFG++", "description": "", "python_module": "comfy_extras.nodes_advanced_samplers", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WebcamCapture": {"input": {"required": {"image": ["WEBCAM", {}], "width": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "height": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "capture_on_queue": ["BOOLEAN", {"default": true}]}}, "input_order": {"required": ["image", "width", "height", "capture_on_queue"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "WebcamCapture", "display_name": "Webcam Capture", "description": "", "python_module": "comfy_extras.nodes_webcam", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": ["camera input", "live capture", "camera feed", "snapshot"], "essentials_category": "Basics"}, "EmptyLatentAudio": {"input": {"required": {"seconds": ["FLOAT", {"default": 47.6, "min": 1.0, "max": 1000.0, "step": 0.1}], "batch_size": ["INT", {"tooltip": "The number of latent images in the batch.", "default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["seconds", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyLatentAudio", "display_name": "Empty Latent Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/latent/audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": "Audio", "has_intermediate_output": false}, "VAEEncodeAudio": {"input": {"required": {"audio": ["AUDIO", {}], "vae": ["VAE", {}]}}, "input_order": {"required": ["audio", "vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEEncodeAudio", "display_name": "VAE Encode Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/latent/audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["audio to latent"], "essentials_category": null, "has_intermediate_output": false}, "VAEDecodeAudio": {"input": {"required": {"samples": ["LATENT", {}], "vae": ["VAE", {}]}}, "input_order": {"required": ["samples", "vae"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEDecodeAudio", "display_name": "VAE Decode Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/latent/audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["latent to audio"], "essentials_category": null, "has_intermediate_output": false}, "VAEDecodeAudioTiled": {"input": {"required": {"samples": ["LATENT", {}], "vae": ["VAE", {}], "tile_size": ["INT", {"default": 512, "min": 32, "max": 8192, "step": 8}], "overlap": ["INT", {"default": 64, "min": 0, "max": 1024, "step": 8}]}}, "input_order": {"required": ["samples", "vae", "tile_size", "overlap"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEDecodeAudioTiled", "display_name": "VAE Decode Audio (Tiled)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/latent/audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["latent to audio"], "essentials_category": null, "has_intermediate_output": false}, "SaveAudio": {"input": {"required": {"audio": ["AUDIO", {}], "filename_prefix": ["STRING", {"default": "audio/ComfyUI", "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveAudio", "display_name": "Save Audio (FLAC) (Deprecated)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export flac"], "essentials_category": "Audio", "has_intermediate_output": false}, "SaveAudioMP3": {"input": {"required": {"audio": ["AUDIO", {}], "filename_prefix": ["STRING", {"default": "audio/ComfyUI", "multiline": false}], "quality": ["COMBO", {"default": "V0", "multiselect": false, "options": ["V0", "128k", "320k"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio", "filename_prefix", "quality"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveAudioMP3", "display_name": "Save Audio (MP3) (Deprecated)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export mp3"], "essentials_category": "Audio", "has_intermediate_output": false}, "SaveAudioOpus": {"input": {"required": {"audio": ["AUDIO", {}], "filename_prefix": ["STRING", {"default": "audio/ComfyUI", "multiline": false}], "quality": ["COMBO", {"default": "128k", "multiselect": false, "options": ["64k", "96k", "128k", "192k", "320k"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio", "filename_prefix", "quality"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveAudioOpus", "display_name": "Save Audio (Opus) (Deprecated)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export opus"], "essentials_category": null, "has_intermediate_output": false}, "SaveAudioAdvanced": {"input": {"required": {"audio": ["AUDIO", {"tooltip": "The audio to save."}], "filename_prefix": ["STRING", {"tooltip": "The prefix for the file to save. May include formatting tokens such as %date:yyyy-MM-dd%.", "default": "audio/ComfyUI", "multiline": false}], "format": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The file format in which to save the audio.", "options": [{"key": "flac", "inputs": {"required": {}}}, {"key": "mp3", "inputs": {"required": {"quality": ["COMBO", {"default": "V0", "multiselect": false, "options": ["V0", "128k", "320k"]}]}}}, {"key": "opus", "inputs": {"required": {"quality": ["COMBO", {"default": "128k", "multiselect": false, "options": ["64k", "96k", "128k", "192k", "320k"]}]}}}]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio", "filename_prefix", "format"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveAudioAdvanced", "display_name": "Save Audio (Advanced)", "description": "Saves the input audio to your ComfyUI output directory.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["save audio", "export audio", "output audio", "write audio", "flac", "mp3", "opus"], "essentials_category": null, "has_intermediate_output": false}, "LoadAudio": {"input": {"required": {"audio": ["COMBO", {"multiselect": false, "options": [], "audio_upload": true}]}}, "input_order": {"required": ["audio"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadAudio", "display_name": "Load Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["import audio", "open audio", "audio file"], "essentials_category": "Audio", "has_intermediate_output": false}, "PreviewAudio": {"input": {"required": {"audio": ["AUDIO", {}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "PreviewAudio", "display_name": "Preview Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["play audio"], "essentials_category": null, "has_intermediate_output": false}, "ConditioningStableAudio": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "seconds_start": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1000.0, "step": 0.1}], "seconds_total": ["FLOAT", {"default": 47.0, "min": 0.0, "max": 1000.0, "step": 0.1}]}}, "input_order": {"required": ["positive", "negative", "seconds_start", "seconds_total"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ConditioningStableAudio", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecordAudio": {"input": {"required": {"audio": ["AUDIO_RECORD", {}]}}, "input_order": {"required": ["audio"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecordAudio", "display_name": "Record Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["microphone input", "audio capture", "voice input"], "essentials_category": null, "has_intermediate_output": false}, "TrimAudioDuration": {"input": {"required": {"audio": ["AUDIO", {}], "start_index": ["FLOAT", {"tooltip": "Start time in seconds, can be negative to count from the end (supports sub-seconds).", "default": 0.0, "min": -18446744073709551615, "max": 18446744073709551615, "step": 0.01}], "duration": ["FLOAT", {"tooltip": "Duration in seconds", "default": 60.0, "min": 0.0, "step": 0.01}]}}, "input_order": {"required": ["audio", "start_index", "duration"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "TrimAudioDuration", "display_name": "Trim Audio Duration", "description": "Trim audio tensor into chosen time range.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["cut audio", "audio clip", "shorten audio"], "essentials_category": null, "has_intermediate_output": false}, "SplitAudioChannels": {"input": {"required": {"audio": ["AUDIO", {}]}}, "input_order": {"required": ["audio"]}, "is_input_list": false, "output": ["AUDIO", "AUDIO"], "output_is_list": [false, false], "output_name": ["left", "right"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SplitAudioChannels", "display_name": "Split Audio Channels", "description": "Separates the audio into left and right channels.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["stereo to mono"], "essentials_category": null, "has_intermediate_output": false}, "JoinAudioChannels": {"input": {"required": {"audio_left": ["AUDIO", {}], "audio_right": ["AUDIO", {}]}}, "input_order": {"required": ["audio_left", "audio_right"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "JoinAudioChannels", "display_name": "Join Audio Channels", "description": "Joins left and right mono audio channels into a stereo audio.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AudioConcat": {"input": {"required": {"audio1": ["AUDIO", {}], "audio2": ["AUDIO", {}], "direction": ["COMBO", {"tooltip": "Whether to append audio2 after or before audio1.", "default": "after", "multiselect": false, "options": ["after", "before"]}]}}, "input_order": {"required": ["audio1", "audio2", "direction"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioConcat", "display_name": "Concatenate Audio", "description": "Concatenates the audio1 to audio2 in the specified direction.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["join audio", "combine audio", "append audio"], "essentials_category": null, "has_intermediate_output": false}, "AudioMerge": {"input": {"required": {"audio1": ["AUDIO", {}], "audio2": ["AUDIO", {}], "merge_method": ["COMBO", {"tooltip": "The method used to combine the audio waveforms.", "multiselect": false, "options": ["add", "mean", "subtract", "multiply"]}]}}, "input_order": {"required": ["audio1", "audio2", "merge_method"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioMerge", "display_name": "Merge Audio", "description": "Combine two audio tracks by overlaying their waveforms.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["mix audio", "overlay audio", "layer audio"], "essentials_category": null, "has_intermediate_output": false}, "AudioAdjustVolume": {"input": {"required": {"audio": ["AUDIO", {}], "volume": ["INT", {"tooltip": "Volume adjustment in decibels (dB). 0 = no change, +6 = double, -6 = half, etc", "default": 1, "min": -100, "max": 100}]}}, "input_order": {"required": ["audio", "volume"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioAdjustVolume", "display_name": "Adjust Audio Volume", "description": "Adjust the volume of the audio by a specified amount in decibels (dB).", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["audio gain", "loudness", "audio level"], "essentials_category": null, "has_intermediate_output": false}, "EmptyAudio": {"input": {"required": {"duration": ["FLOAT", {"tooltip": "Duration of the empty audio clip in seconds", "default": 60.0, "min": 0.0, "max": 18446744073709551615, "step": 0.01}], "sample_rate": ["INT", {"tooltip": "Sample rate of the empty audio clip.", "advanced": true, "default": 44100, "min": 1, "max": 192000}], "channels": ["INT", {"tooltip": "Number of audio channels (1 for mono, 2 for stereo).", "advanced": true, "default": 2, "min": 1, "max": 2}]}}, "input_order": {"required": ["duration", "sample_rate", "channels"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyAudio", "display_name": "Empty Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["blank audio"], "essentials_category": null, "has_intermediate_output": false}, "AudioEqualizer3Band": {"input": {"required": {"audio": ["AUDIO", {}], "low_gain_dB": ["FLOAT", {"tooltip": "Gain for Low frequencies (Bass)", "default": 0.0, "min": -24.0, "max": 24.0, "step": 0.1}], "low_freq": ["INT", {"tooltip": "Cutoff frequency for Low shelf", "default": 100, "min": 20, "max": 500}], "mid_gain_dB": ["FLOAT", {"tooltip": "Gain for Mid frequencies", "default": 0.0, "min": -24.0, "max": 24.0, "step": 0.1}], "mid_freq": ["INT", {"tooltip": "Center frequency for Mids", "default": 1000, "min": 200, "max": 4000}], "mid_q": ["FLOAT", {"tooltip": "Q factor (bandwidth) for Mids", "default": 0.707, "min": 0.1, "max": 10.0, "step": 0.1}], "high_gain_dB": ["FLOAT", {"tooltip": "Gain for High frequencies (Treble)", "default": 0.0, "min": -24.0, "max": 24.0, "step": 0.1}], "high_freq": ["INT", {"tooltip": "Cutoff frequency for High shelf", "default": 5000, "min": 1000, "max": 15000}]}}, "input_order": {"required": ["audio", "low_gain_dB", "low_freq", "mid_gain_dB", "mid_freq", "mid_q", "high_gain_dB", "high_freq"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioEqualizer3Band", "display_name": "Audio Equalizer (3-Band)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["eq", "bass boost", "treble boost", "equalizer"], "essentials_category": null, "has_intermediate_output": false}, "TripleCLIPLoader": {"input": {"required": {"clip_name1": ["COMBO", {"multiselect": false, "options": ["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]}], "clip_name2": ["COMBO", {"multiselect": false, "options": ["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]}], "clip_name3": ["COMBO", {"multiselect": false, "options": ["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]}]}}, "input_order": {"required": ["clip_name1", "clip_name2", "clip_name3"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "TripleCLIPLoader", "display_name": null, "description": "[Recipes]\n\nsd3: clip-l, clip-g, t5", "python_module": "comfy_extras.nodes_sd3", "category": "advanced/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptySD3LatentImage": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptySD3LatentImage", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_sd3", "category": "model/latent/sd3", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeSD3": {"input": {"required": {"clip": ["CLIP", {}], "clip_l": ["STRING", {"multiline": true, "dynamicPrompts": true}], "clip_g": ["STRING", {"multiline": true, "dynamicPrompts": true}], "t5xxl": ["STRING", {"multiline": true, "dynamicPrompts": true}], "empty_padding": ["COMBO", {"advanced": true, "multiselect": false, "options": ["none", "empty_prompt"]}]}}, "input_order": {"required": ["clip", "clip_l", "clip_g", "t5xxl", "empty_padding"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeSD3", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_sd3", "category": "advanced/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sd3 prompt"], "essentials_category": null, "has_intermediate_output": false}, "ControlNetApplySD3": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "control_net": ["CONTROL_NET", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["positive", "negative", "control_net", "vae", "image", "strength", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ControlNetApplySD3", "display_name": "Apply Controlnet with VAE", "description": "", "python_module": "comfy_extras.nodes_sd3", "category": "model/conditioning/controlnet", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SkipLayerGuidanceSD3": {"input": {"required": {"model": ["MODEL", {}], "layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "scale": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 10.0, "step": 0.1}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.01, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["model", "layers", "scale", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SkipLayerGuidanceSD3", "display_name": null, "description": "Generic version of SkipLayerGuidance node that can be used on every DiT model.", "python_module": "comfy_extras.nodes_sd3", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GITSScheduler": {"input": {"required": {"coeff": ["FLOAT", {"advanced": true, "default": 1.2, "min": 0.8, "max": 1.5, "step": 0.05}], "steps": ["INT", {"default": 10, "min": 2, "max": 1000}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["coeff", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "GITSScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_gits", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SetUnionControlNetType": {"input": {"required": {"control_net": ["CONTROL_NET", {}], "type": ["COMBO", {"multiselect": false, "options": ["auto", "openpose", "depth", "hed/pidi/scribble/ted", "canny/lineart/anime_lineart/mlsd", "normal", "segment", "tile", "repaint"]}]}}, "input_order": {"required": ["control_net", "type"]}, "is_input_list": false, "output": ["CONTROL_NET"], "output_is_list": [false], "output_name": ["CONTROL_NET"], "output_tooltips": [null], "output_matchtypes": null, "name": "SetUnionControlNetType", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_controlnet", "category": "model/conditioning/controlnet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ControlNetInpaintingAliMamaApply": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "control_net": ["CONTROL_NET", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "mask": ["MASK", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["positive", "negative", "control_net", "vae", "image", "mask", "strength", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ControlNetInpaintingAliMamaApply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_controlnet", "category": "model/conditioning/controlnet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["masked controlnet"], "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeHunyuanDiT": {"input": {"required": {"clip": ["CLIP", {}], "bert": ["STRING", {"multiline": true, "dynamicPrompts": true}], "mt5xl": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "bert", "mt5xl"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeHunyuanDiT", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "advanced/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeHunyuanVideo_ImageToVideo": {"input": {"required": {"clip": ["CLIP", {}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}], "image_interleave": ["INT", {"tooltip": "How much the image influences things vs the text prompt. Higher number means more influence from the text prompt.", "advanced": true, "default": 2, "min": 1, "max": 512}]}}, "input_order": {"required": ["clip", "clip_vision_output", "prompt", "image_interleave"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeHunyuanVideo_ImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "advanced/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyHunyuanLatentVideo": {"input": {"required": {"width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 25, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyHunyuanLatentVideo", "display_name": "Empty HunyuanVideo 1.0 Latent", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/latent/video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyHunyuanVideo15Latent": {"input": {"required": {"width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 25, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyHunyuanVideo15Latent", "display_name": "Empty HunyuanVideo 1.5 Latent", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/latent/video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanVideo15ImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 33, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["start_image", "clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "HunyuanVideo15ImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanVideo15SuperResolution": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "latent": ["LATENT", {}], "noise_augmentation": ["FLOAT", {"advanced": true, "default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"vae": ["VAE", {}], "start_image": ["IMAGE", {}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "latent", "noise_augmentation"], "optional": ["vae", "start_image", "clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "HunyuanVideo15SuperResolution", "display_name": "Hunyuan Video 1.5 Super Resolution", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanVideo15LatentUpscaleWithModel": {"input": {"required": {"model": ["LATENT_UPSCALE_MODEL", {}], "samples": ["LATENT", {}], "upscale_method": ["COMBO", {"default": "bilinear", "multiselect": false, "options": ["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]}], "width": ["INT", {"default": 1280, "min": 0, "max": 16384, "step": 8}], "height": ["INT", {"default": 720, "min": 0, "max": 16384, "step": 8}], "crop": ["COMBO", {"multiselect": false, "options": ["disabled", "center"]}]}}, "input_order": {"required": ["model", "samples", "upscale_method", "width", "height", "crop"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "HunyuanVideo15LatentUpscaleWithModel", "display_name": "Hunyuan Video 15 Latent Upscale With Model", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LatentUpscaleModelLoader": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["LATENT_UPSCALE_MODEL"], "output_is_list": [false], "output_name": ["LATENT_UPSCALE_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentUpscaleModelLoader", "display_name": "Load Latent Upscale Model", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 53, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "guidance_type": ["COMBO", {"advanced": true, "multiselect": false, "options": ["v1 (concat)", "v2 (replace)", "custom"]}]}, "optional": {"start_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "vae", "width", "height", "length", "batch_size", "guidance_type"], "optional": ["start_image"]}, "is_input_list": false, "output": ["CONDITIONING", "LATENT"], "output_is_list": [false, false], "output_name": ["positive", "latent"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "HunyuanImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyHunyuanImageLatent": {"input": {"required": {"width": ["INT", {"default": 2048, "min": 64, "max": 16384, "step": 32}], "height": ["INT", {"default": 2048, "min": 64, "max": 16384, "step": 32}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyHunyuanImageLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanRefinerLatent": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "latent": ["LATENT", {}], "noise_augmentation": ["FLOAT", {"advanced": true, "default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["positive", "negative", "latent", "noise_augmentation"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "HunyuanRefinerLatent", "display_name": "Hunyuan Latent Refiner", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Epsilon Scaling": {"input": {"required": {"model": ["MODEL", {}], "scaling_factor": ["FLOAT", {"advanced": true, "default": 1.005, "min": 0.5, "max": 1.5, "step": 0.001, "display": "number"}]}}, "input_order": {"required": ["model", "scaling_factor"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "Epsilon Scaling", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_eps", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TemporalScoreRescaling": {"input": {"required": {"model": ["MODEL", {}], "tsr_k": ["FLOAT", {"tooltip": "Controls the rescaling strength.\nLower k produces more detailed results; higher k produces smoother results in image generation. Setting k = 1 disables rescaling.", "advanced": true, "default": 0.95, "min": 0.01, "max": 100.0, "step": 0.001, "display": "number"}], "tsr_sigma": ["FLOAT", {"tooltip": "Controls how early rescaling takes effect.\nLarger values take effect earlier.", "advanced": true, "default": 1.0, "min": 0.01, "max": 100.0, "step": 0.001, "display": "number"}]}}, "input_order": {"required": ["model", "tsr_k", "tsr_sigma"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "TemporalScoreRescaling", "display_name": "TSR - Temporal Score Rescaling", "description": "[Post-CFG Function]\nTSR - Temporal Score Rescaling (2510.01184)\n\nRescaling the model's score or noise to steer the sampling diversity.\n", "python_module": "comfy_extras.nodes_eps", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeFlux": {"input": {"required": {"clip": ["CLIP", {}], "clip_l": ["STRING", {"multiline": true, "dynamicPrompts": true}], "t5xxl": ["STRING", {"multiline": true, "dynamicPrompts": true}], "guidance": ["FLOAT", {"default": 3.5, "min": 0.0, "max": 100.0, "step": 0.1}]}}, "input_order": {"required": ["clip", "clip_l", "t5xxl", "guidance"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeFlux", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_flux", "category": "advanced/conditioning/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxGuidance": {"input": {"required": {"conditioning": ["CONDITIONING", {}], "guidance": ["FLOAT", {"default": 3.5, "min": 0.0, "max": 100.0, "step": 0.1}]}}, "input_order": {"required": ["conditioning", "guidance"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxGuidance", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_flux", "category": "advanced/conditioning/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxDisableGuidance": {"input": {"required": {"conditioning": ["CONDITIONING", {}]}}, "input_order": {"required": ["conditioning"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxDisableGuidance", "display_name": null, "description": "This node completely disables the guidance embed on Flux and Flux like models", "python_module": "comfy_extras.nodes_flux", "category": "advanced/conditioning/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKontextImageScale": {"input": {"required": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxKontextImageScale", "display_name": null, "description": "This node resizes the image to one that is more optimal for flux kontext.", "python_module": "comfy_extras.nodes_flux", "category": "advanced/conditioning/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKontextMultiReferenceLatentMethod": {"input": {"required": {"conditioning": ["CONDITIONING", {}], "reference_latents_method": ["COMBO", {"advanced": true, "multiselect": false, "options": ["offset", "index", "uxo/uno", "index_timestep_zero"]}]}}, "input_order": {"required": ["conditioning", "reference_latents_method"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxKontextMultiReferenceLatentMethod", "display_name": "Edit Model Reference Method", "description": "", "python_module": "comfy_extras.nodes_flux", "category": "advanced/conditioning/flux", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyFlux2LatentImage": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyFlux2LatentImage", "display_name": "Empty Flux 2 Latent", "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Flux2Scheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 4096}], "width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 1}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 1}]}}, "input_order": {"required": ["steps", "width", "height"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "Flux2Scheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKVCache": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to use KV Cache on."}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The patched model with KV Cache enabled."], "output_matchtypes": null, "name": "FluxKVCache", "display_name": "Flux KV Cache", "description": "Enables KV Cache optimization for reference images on Flux family models.", "python_module": "comfy_extras.nodes_flux", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LoraSave": {"input": {"required": {"filename_prefix": ["STRING", {"default": "loras/ComfyUI_extracted_lora", "multiline": false}], "rank": ["INT", {"advanced": true, "default": 8, "min": 1, "max": 4096, "step": 1}], "lora_type": ["COMBO", {"advanced": true, "multiselect": false, "options": ["standard", "full_diff"]}], "bias_diff": ["BOOLEAN", {"advanced": true, "default": true}]}, "optional": {"model_diff": ["MODEL", {"tooltip": "The ModelSubtract output to be converted to a lora."}], "text_encoder_diff": ["CLIP", {"tooltip": "The CLIPSubtract output to be converted to a lora."}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["filename_prefix", "rank", "lora_type", "bias_diff"], "optional": ["model_diff", "text_encoder_diff"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "LoraSave", "display_name": "Extract and Save Lora", "description": "", "python_module": "comfy_extras.nodes_lora_extract", "category": "experimental", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export lora"], "essentials_category": null, "has_intermediate_output": false}, "TorchCompileModel": {"input": {"required": {"model": ["MODEL", {}], "backend": ["COMBO", {"advanced": true, "multiselect": false, "options": ["inductor", "cudagraphs"]}]}}, "input_order": {"required": ["model", "backend"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "TorchCompileModel", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_torch_compile", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyMochiLatentVideo": {"input": {"required": {"width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 25, "min": 7, "max": 16384, "step": 6}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyMochiLatentVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_mochi", "category": "model/latent/video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SkipLayerGuidanceDiT": {"input": {"required": {"model": ["MODEL", {}], "double_layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "single_layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "scale": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 10.0, "step": 0.1}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.01, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.001}], "rescaling_scale": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "double_layers", "single_layers", "scale", "start_percent", "end_percent", "rescaling_scale"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SkipLayerGuidanceDiT", "display_name": null, "description": "Generic version of SkipLayerGuidance node that can be used on every DiT model.", "python_module": "comfy_extras.nodes_slg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SkipLayerGuidanceDiTSimple": {"input": {"required": {"model": ["MODEL", {}], "double_layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "single_layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["model", "double_layers", "single_layers", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SkipLayerGuidanceDiTSimple", "display_name": null, "description": "Simple version of the SkipLayerGuidanceDiT node that only modifies the uncond pass.", "python_module": "comfy_extras.nodes_slg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Mahiro": {"input": {"required": {"model": ["MODEL", {}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "Mahiro", "display_name": "Positive-Biased Guidance", "description": "Modify the guidance to scale more on the 'direction' of the positive prompt rather than the difference between the negative prompt.", "python_module": "comfy_extras.nodes_mahiro", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["mahiro", "mahiro cfg", "similarity-adaptive guidance", "positive-biased cfg"], "essentials_category": null, "has_intermediate_output": false}, "LTXVLatentUpsampler": {"input": {"required": {"samples": ["LATENT", {}], "upscale_model": ["LATENT_UPSCALE_MODEL", {}], "vae": ["VAE", {}]}}, "input_order": {"required": ["samples", "upscale_model", "vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVLatentUpsampler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt_upsampler", "category": "model/latent/video", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVAudioVAELoader": {"input": {"required": {"ckpt_name": ["COMBO", {"tooltip": "Audio VAE checkpoint to load.", "multiselect": false, "options": ["FLUX1-dev\\ae.safetensors", "FLUX1-dev\\flux1-dev.safetensors", "FLUX1-dev\\text_encoder\\model.safetensors", "FLUX1-dev\\text_encoder_2\\model-00001-of-00002.safetensors", "FLUX1-dev\\text_encoder_2\\model-00002-of-00002.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00001-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00002-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00003-of-00003.safetensors", "FLUX1-dev\\vae\\diffusion_pytorch_model.safetensors", "anytext_v1.1.safetensors", "anytext_v1.1\\pytorch_model.fp16.safetensors"]}]}}, "input_order": {"required": ["ckpt_name"]}, "is_input_list": false, "output": ["VAE"], "output_is_list": [false], "output_name": ["Audio VAE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVAudioVAELoader", "display_name": "Load LTXV Audio VAE", "description": "", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVAudioVAEEncode": {"input": {"required": {"audio": ["AUDIO", {"tooltip": "The audio to be encoded."}], "audio_vae": ["VAE", {"display_name": "Audio VAE", "tooltip": "The Audio VAE model to use for encoding."}]}}, "input_order": {"required": ["audio", "audio_vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["Audio Latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVAudioVAEEncode", "display_name": "LTXV Audio VAE Encode", "description": "", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/latent/audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVAudioVAEDecode": {"input": {"required": {"samples": ["LATENT", {"tooltip": "The latent to be decoded."}], "audio_vae": ["VAE", {"display_name": "Audio VAE", "tooltip": "The Audio VAE model used for decoding the latent."}]}}, "input_order": {"required": ["samples", "audio_vae"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["Audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVAudioVAEDecode", "display_name": "LTXV Audio VAE Decode", "description": "", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/latent/audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVEmptyLatentAudio": {"input": {"required": {"frames_number": ["INT", {"tooltip": "Number of frames.", "default": 97, "min": 1, "max": 1000, "step": 1, "display": "number"}], "frame_rate": ["INT", {"tooltip": "Number of frames per second.", "default": 25, "min": 1, "max": 1000, "step": 1, "display": "number"}], "batch_size": ["INT", {"tooltip": "The number of latent audio samples in the batch.", "default": 1, "min": 1, "max": 4096, "display": "number"}], "audio_vae": ["VAE", {"display_name": "Audio VAE", "tooltip": "The Audio VAE model to get configuration from."}]}}, "input_order": {"required": ["frames_number", "frame_rate", "batch_size", "audio_vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["Latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVEmptyLatentAudio", "display_name": "LTXV Empty Latent Audio", "description": "", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/latent/audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXAVTextEncoderLoader": {"input": {"required": {"text_encoder": ["COMBO", {"multiselect": false, "options": ["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]}], "ckpt_name": ["COMBO", {"multiselect": false, "options": ["FLUX1-dev\\ae.safetensors", "FLUX1-dev\\flux1-dev.safetensors", "FLUX1-dev\\text_encoder\\model.safetensors", "FLUX1-dev\\text_encoder_2\\model-00001-of-00002.safetensors", "FLUX1-dev\\text_encoder_2\\model-00002-of-00002.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00001-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00002-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00003-of-00003.safetensors", "FLUX1-dev\\vae\\diffusion_pytorch_model.safetensors", "anytext_v1.1.safetensors", "anytext_v1.1\\pytorch_model.fp16.safetensors"]}], "device": ["COMBO", {"advanced": true, "multiselect": false, "options": ["default", "cpu"]}]}}, "input_order": {"required": ["text_encoder", "ckpt_name", "device"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXAVTextEncoderLoader", "display_name": "LTXV Audio Text Encoder Loader", "description": "[Recipes]\n\nltxav: gemma 3 12B", "python_module": "comfy_extras.nodes_lt_audio", "category": "advanced/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyLTXVLatentVideo": {"input": {"required": {"width": ["INT", {"default": 768, "min": 64, "max": 16384, "step": 32}], "height": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 32}], "length": ["INT", {"default": 97, "min": 1, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyLTXVLatentVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/latent/video/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVImgToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "width": ["INT", {"default": 768, "min": 64, "max": 16384, "step": 32}], "height": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 32}], "length": ["INT", {"default": 97, "min": 9, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0}]}}, "input_order": {"required": ["positive", "negative", "vae", "image", "width", "height", "length", "batch_size", "strength"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "LTXVImgToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVImgToVideoInplace": {"input": {"required": {"vae": ["VAE", {}], "image": ["IMAGE", {}], "latent": ["LATENT", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0}], "bypass": ["BOOLEAN", {"tooltip": "Bypass the conditioning.", "default": false}]}}, "input_order": {"required": ["vae", "image", "latent", "strength", "bypass"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVImgToVideoInplace", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelSamplingLTXV": {"input": {"required": {"model": ["MODEL", {}], "max_shift": ["FLOAT", {"default": 2.05, "min": 0.0, "max": 100.0, "step": 0.01}], "base_shift": ["FLOAT", {"default": 0.95, "min": 0.0, "max": 100.0, "step": 0.01}]}, "optional": {"latent": ["LATENT", {}]}}, "input_order": {"required": ["model", "max_shift", "base_shift"], "optional": ["latent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "ModelSamplingLTXV", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "advanced/model", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "frame_rate": ["FLOAT", {"default": 25.0, "min": 0.0, "max": 1000.0, "step": 0.01}]}}, "input_order": {"required": ["positive", "negative", "frame_rate"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LTXVConditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "max_shift": ["FLOAT", {"default": 2.05, "min": 0.0, "max": 100.0, "step": 0.01}], "base_shift": ["FLOAT", {"default": 0.95, "min": 0.0, "max": 100.0, "step": 0.01}], "stretch": ["BOOLEAN", {"tooltip": "Stretch the sigmas to be in the range [terminal, 1].", "advanced": true, "default": true}], "terminal": ["FLOAT", {"tooltip": "The terminal value of the sigmas after stretching.", "advanced": true, "default": 0.1, "min": 0.0, "max": 0.99, "step": 0.01}]}, "optional": {"latent": ["LATENT", {}]}}, "input_order": {"required": ["steps", "max_shift", "base_shift", "stretch", "terminal"], "optional": ["latent"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GetICLoRAParameters": {"input": {"required": {"iclora_model": ["MODEL", {"tooltip": "Direct output from a LoRA Loader for the specific IC-LoRA from which to extract the metadata."}]}}, "input_order": {"required": ["iclora_model"]}, "is_input_list": false, "output": ["IC_LORA_PARAMETERS"], "output_is_list": [false], "output_name": ["iclora_parameters"], "output_tooltips": ["IC-LoRA parameters extracted from the LoRA metadata (eg. reference_downscale_factor). Connect to LTXVAddGuide if the LoRA requires special handling of the guides."], "output_matchtypes": null, "name": "GetICLoRAParameters", "display_name": "Get IC-LoRA Parameters", "description": "Extracts IC-LoRA parameters from the safetensors metadata of a LoRA-loaded model and outputs them for LTXVAddGuide (eg. reference_downscale_factor).", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["ic-lora", "ic lora", "iclora", "downscale factor", "reference downscale"], "essentials_category": null, "has_intermediate_output": false}, "LTXVAddGuide": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "latent": ["LATENT", {}], "image": ["IMAGE", {"tooltip": "Image or video to condition the latent video on. Must be 8*n + 1 frames. If the video is not 8*n + 1 frames, it will be cropped to the nearest 8*n + 1 frames."}], "frame_idx": ["INT", {"tooltip": "Frame index to start the conditioning at. For single-frame images or videos with 1-8 frames, any frame_idx value is acceptable. For videos with 9+ frames, frame_idx must be divisible by 8, otherwise it will be rounded down to the nearest multiple of 8. Negative values are counted from the end of the video.", "default": 0, "min": -9999, "max": 9999}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}, "optional": {"attention_mask": ["MASK", {"tooltip": "Optional pixel-space spatial mask. Controls per-region conditioning influence via self-attention, multiplied by strength."}], "iclora_parameters": ["IC_LORA_PARAMETERS", {"tooltip": "Optional IC-LoRA parameters from a Get IC-LoRA Parameters node. Used for adjusting guide processing as required by certain IC-LoRAs (eg. those with a reference_downscale_factor > 1). When chained, each LTXVAddGuide uses only the parameters connected to it."}]}}, "input_order": {"required": ["positive", "negative", "vae", "latent", "image", "frame_idx", "strength"], "optional": ["attention_mask", "iclora_parameters"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "LTXVAddGuide", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVPreprocess": {"input": {"required": {"image": ["IMAGE", {}], "img_compression": ["INT", {"tooltip": "Amount of compression to apply on image.", "default": 35, "min": 0, "max": 100}]}}, "input_order": {"required": ["image", "img_compression"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["output_image"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVPreprocess", "display_name": "LTXV Preprocess", "description": "", "python_module": "comfy_extras.nodes_lt", "category": "video/preprocessors", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVCropGuides": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "latent": ["LATENT", {}]}}, "input_order": {"required": ["positive", "negative", "latent"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "LTXVCropGuides", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVConcatAVLatent": {"input": {"required": {"video_latent": ["LATENT", {}], "audio_latent": ["LATENT", {}]}}, "input_order": {"required": ["video_latent", "audio_latent"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVConcatAVLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/latent/video/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVSeparateAVLatent": {"input": {"required": {"av_latent": ["LATENT", {}]}}, "input_order": {"required": ["av_latent"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["video_latent", "audio_latent"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LTXVSeparateAVLatent", "display_name": null, "description": "LTXV Separate AV Latent", "python_module": "comfy_extras.nodes_lt", "category": "model/latent/video/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVReferenceAudio": {"input": {"required": {"model": ["MODEL", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "reference_audio": ["AUDIO", {"tooltip": "Reference audio clip whose speaker identity to transfer. ~5 seconds recommended (training duration). Shorter or longer clips may degrade voice identity transfer."}], "audio_vae": ["VAE", {"display_name": "Audio VAE", "tooltip": "LTXV Audio VAE for encoding."}], "identity_guidance_scale": ["FLOAT", {"tooltip": "Strength of identity guidance. Runs an extra forward pass without reference each step to amplify speaker identity. Set to 0 to disable (no extra pass).", "default": 3.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": 0.01}], "start_percent": ["FLOAT", {"tooltip": "Start of the sigma range where identity guidance is active.", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"tooltip": "End of the sigma range where identity guidance is active.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["model", "positive", "negative", "reference_audio", "audio_vae", "identity_guidance_scale", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["MODEL", "CONDITIONING", "CONDITIONING"], "output_is_list": [false, false, false], "output_name": ["MODEL", "positive", "negative"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "LTXVReferenceAudio", "display_name": "LTXV Reference Audio (ID-LoRA)", "description": "Set reference audio for ID-LoRA speaker identity transfer. Encodes a reference audio clip into the conditioning and optionally patches the model with identity guidance (extra forward pass without reference, amplifying the speaker identity effect).", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CreateHookLora": {"input": {"required": {"lora_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}], "strength_clip": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}]}, "optional": {"prev_hooks": ["HOOKS"]}}, "input_order": {"required": ["lora_name", "strength_model", "strength_clip"], "optional": ["prev_hooks"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CreateHookLora", "display_name": "Create Hook LoRA", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/create", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CreateHookLoraModelOnly": {"input": {"required": {"lora_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}]}, "optional": {"prev_hooks": ["HOOKS"]}}, "input_order": {"required": ["lora_name", "strength_model"], "optional": ["prev_hooks"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CreateHookLoraModelOnly", "display_name": "Create Hook LoRA (MO)", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/create", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CreateHookModelAsLora": {"input": {"required": {"ckpt_name": [["FLUX1-dev\\ae.safetensors", "FLUX1-dev\\flux1-dev.safetensors", "FLUX1-dev\\text_encoder\\model.safetensors", "FLUX1-dev\\text_encoder_2\\model-00001-of-00002.safetensors", "FLUX1-dev\\text_encoder_2\\model-00002-of-00002.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00001-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00002-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00003-of-00003.safetensors", "FLUX1-dev\\vae\\diffusion_pytorch_model.safetensors", "anytext_v1.1.safetensors", "anytext_v1.1\\pytorch_model.fp16.safetensors"]], "strength_model": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}], "strength_clip": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}]}, "optional": {"prev_hooks": ["HOOKS"]}}, "input_order": {"required": ["ckpt_name", "strength_model", "strength_clip"], "optional": ["prev_hooks"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CreateHookModelAsLora", "display_name": "Create Hook Model as LoRA", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/create", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CreateHookModelAsLoraModelOnly": {"input": {"required": {"ckpt_name": [["FLUX1-dev\\ae.safetensors", "FLUX1-dev\\flux1-dev.safetensors", "FLUX1-dev\\text_encoder\\model.safetensors", "FLUX1-dev\\text_encoder_2\\model-00001-of-00002.safetensors", "FLUX1-dev\\text_encoder_2\\model-00002-of-00002.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00001-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00002-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00003-of-00003.safetensors", "FLUX1-dev\\vae\\diffusion_pytorch_model.safetensors", "anytext_v1.1.safetensors", "anytext_v1.1\\pytorch_model.fp16.safetensors"]], "strength_model": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}]}, "optional": {"prev_hooks": ["HOOKS"]}}, "input_order": {"required": ["ckpt_name", "strength_model"], "optional": ["prev_hooks"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CreateHookModelAsLoraModelOnly", "display_name": "Create Hook Model as LoRA (MO)", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/create", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "SetHookKeyframes": {"input": {"required": {"hooks": ["HOOKS"]}, "optional": {"hook_kf": ["HOOK_KEYFRAMES"]}}, "input_order": {"required": ["hooks"], "optional": ["hook_kf"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "SetHookKeyframes", "display_name": "Set Hook Keyframes", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/scheduling", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CreateHookKeyframe": {"input": {"required": {"strength_mult": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}]}, "optional": {"prev_hook_kf": ["HOOK_KEYFRAMES"]}}, "input_order": {"required": ["strength_mult", "start_percent"], "optional": ["prev_hook_kf"]}, "is_input_list": false, "output": ["HOOK_KEYFRAMES"], "output_is_list": [false], "output_name": ["HOOK_KF"], "name": "CreateHookKeyframe", "display_name": "Create Hook Keyframe", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/scheduling", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["hook scheduling", "strength animation", "timed hook"]}, "CreateHookKeyframesInterpolated": {"input": {"required": {"strength_start": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}], "strength_end": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}], "interpolation": [["linear", "ease_in", "ease_out", "ease_in_out"]], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "keyframes_count": ["INT", {"default": 5, "min": 2, "max": 100, "step": 1}], "print_keyframes": ["BOOLEAN", {"default": false, "advanced": true}]}, "optional": {"prev_hook_kf": ["HOOK_KEYFRAMES"]}}, "input_order": {"required": ["strength_start", "strength_end", "interpolation", "start_percent", "end_percent", "keyframes_count", "print_keyframes"], "optional": ["prev_hook_kf"]}, "is_input_list": false, "output": ["HOOK_KEYFRAMES"], "output_is_list": [false], "output_name": ["HOOK_KF"], "name": "CreateHookKeyframesInterpolated", "display_name": "Create Hook Keyframes Interp.", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/scheduling", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["ease hook strength", "smooth hook transition", "interpolate keyframes"]}, "CreateHookKeyframesFromFloats": {"input": {"required": {"floats_strength": ["FLOATS", {"default": -1, "min": -1, "step": 0.001, "forceInput": true}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "print_keyframes": ["BOOLEAN", {"default": false, "advanced": true}]}, "optional": {"prev_hook_kf": ["HOOK_KEYFRAMES"]}}, "input_order": {"required": ["floats_strength", "start_percent", "end_percent", "print_keyframes"], "optional": ["prev_hook_kf"]}, "is_input_list": false, "output": ["HOOK_KEYFRAMES"], "output_is_list": [false], "output_name": ["HOOK_KF"], "name": "CreateHookKeyframesFromFloats", "display_name": "Create Hook Keyframes From Floats", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/scheduling", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["batch keyframes", "strength list to keyframes"]}, "CombineHooks2": {"input": {"required": {}, "optional": {"hooks_A": ["HOOKS"], "hooks_B": ["HOOKS"]}}, "input_order": {"required": [], "optional": ["hooks_A", "hooks_B"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CombineHooks2", "display_name": "Combine Hooks [2]", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/combine", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["merge hooks"]}, "CombineHooks4": {"input": {"required": {}, "optional": {"hooks_A": ["HOOKS"], "hooks_B": ["HOOKS"], "hooks_C": ["HOOKS"], "hooks_D": ["HOOKS"]}}, "input_order": {"required": [], "optional": ["hooks_A", "hooks_B", "hooks_C", "hooks_D"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CombineHooks4", "display_name": "Combine Hooks [4]", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/combine", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CombineHooks8": {"input": {"required": {}, "optional": {"hooks_A": ["HOOKS"], "hooks_B": ["HOOKS"], "hooks_C": ["HOOKS"], "hooks_D": ["HOOKS"], "hooks_E": ["HOOKS"], "hooks_F": ["HOOKS"], "hooks_G": ["HOOKS"], "hooks_H": ["HOOKS"]}}, "input_order": {"required": [], "optional": ["hooks_A", "hooks_B", "hooks_C", "hooks_D", "hooks_E", "hooks_F", "hooks_G", "hooks_H"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CombineHooks8", "display_name": "Combine Hooks [8]", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/combine", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ConditioningSetProperties": {"input": {"required": {"cond_NEW": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}, "optional": {"mask": ["MASK"], "hooks": ["HOOKS"], "timesteps": ["TIMESTEPS_RANGE"]}}, "input_order": {"required": ["cond_NEW", "strength", "set_cond_area"], "optional": ["mask", "hooks", "timesteps"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetProperties", "display_name": "Cond Set Props", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond single", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ConditioningSetPropertiesAndCombine": {"input": {"required": {"cond": ["CONDITIONING"], "cond_NEW": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}, "optional": {"mask": ["MASK"], "hooks": ["HOOKS"], "timesteps": ["TIMESTEPS_RANGE"]}}, "input_order": {"required": ["cond", "cond_NEW", "strength", "set_cond_area"], "optional": ["mask", "hooks", "timesteps"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetPropertiesAndCombine", "display_name": "Cond Set Props Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond single", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "PairConditioningSetProperties": {"input": {"required": {"positive_NEW": ["CONDITIONING"], "negative_NEW": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}, "optional": {"mask": ["MASK"], "hooks": ["HOOKS"], "timesteps": ["TIMESTEPS_RANGE"]}}, "input_order": {"required": ["positive_NEW", "negative_NEW", "strength", "set_cond_area"], "optional": ["mask", "hooks", "timesteps"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "PairConditioningSetProperties", "display_name": "Cond Pair Set Props", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond pair", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "PairConditioningSetPropertiesAndCombine": {"input": {"required": {"positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "positive_NEW": ["CONDITIONING"], "negative_NEW": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}, "optional": {"mask": ["MASK"], "hooks": ["HOOKS"], "timesteps": ["TIMESTEPS_RANGE"]}}, "input_order": {"required": ["positive", "negative", "positive_NEW", "negative_NEW", "strength", "set_cond_area"], "optional": ["mask", "hooks", "timesteps"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "PairConditioningSetPropertiesAndCombine", "display_name": "Cond Pair Set Props Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond pair", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ConditioningSetDefaultCombine": {"input": {"required": {"cond": ["CONDITIONING"], "cond_DEFAULT": ["CONDITIONING"]}, "optional": {"hooks": ["HOOKS"]}}, "input_order": {"required": ["cond", "cond_DEFAULT"], "optional": ["hooks"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetDefaultCombine", "display_name": "Cond Set Default Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond single", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "PairConditioningSetDefaultCombine": {"input": {"required": {"positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "positive_DEFAULT": ["CONDITIONING"], "negative_DEFAULT": ["CONDITIONING"]}, "optional": {"hooks": ["HOOKS"]}}, "input_order": {"required": ["positive", "negative", "positive_DEFAULT", "negative_DEFAULT"], "optional": ["hooks"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "PairConditioningSetDefaultCombine", "display_name": "Cond Pair Set Default Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond pair", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "PairConditioningCombine": {"input": {"required": {"positive_A": ["CONDITIONING"], "negative_A": ["CONDITIONING"], "positive_B": ["CONDITIONING"], "negative_B": ["CONDITIONING"]}}, "input_order": {"required": ["positive_A", "negative_A", "positive_B", "negative_B"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "PairConditioningCombine", "display_name": "Cond Pair Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond pair", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "SetClipHooks": {"input": {"required": {"clip": ["CLIP"], "apply_to_conds": ["BOOLEAN", {"default": true, "advanced": true}], "schedule_clip": ["BOOLEAN", {"default": false, "advanced": true}]}, "optional": {"hooks": ["HOOKS"]}}, "input_order": {"required": ["clip", "apply_to_conds", "schedule_clip"], "optional": ["hooks"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "SetClipHooks", "display_name": "Set CLIP Hooks", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/clip", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ConditioningTimestepsRange": {"input": {"required": {"start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["start_percent", "end_percent"]}, "is_input_list": false, "output": ["TIMESTEPS_RANGE", "TIMESTEPS_RANGE", "TIMESTEPS_RANGE"], "output_is_list": [false, false, false], "output_name": ["TIMESTEPS_RANGE", "BEFORE_RANGE", "AFTER_RANGE"], "name": "ConditioningTimestepsRange", "display_name": "Timesteps Range", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["prompt scheduling", "timestep segments", "conditioning phases"]}, "MultiGPU_WorkUnits": {"input": {"required": {"model": ["MODEL", {}], "max_gpus": ["INT", {"default": 2, "min": 1, "step": 1}]}}, "input_order": {"required": ["model", "max_gpus"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "MultiGPU_WorkUnits", "display_name": "MultiGPU CFG Split", "description": "Prepares model to have sampling accelerated via splitting work units.\n\nShould be placed after nodes that modify the model object itself, such as compile or attention-switch nodes.\n\nOther than those exceptions, this node can be placed in any order.", "python_module": "comfy_extras.nodes_multigpu", "category": "advanced/multigpu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SelectModelDevice": {"input": {"required": {"model": ["MODEL", {}], "device": ["COMBO", {"multiselect": false, "options": ["default", "cpu"]}]}}, "input_order": {"required": ["model", "device"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SelectModelDevice", "display_name": "Select Model Device", "description": "Place the diffusion model on a specific device (default / cpu / gpu:N).\n\n- \"default\" restores the device assigned by the loader (even after a\n  prior Select Model Device call).\n- \"cpu\" pins both the load and offload device to CPU.\n- \"gpu:N\" pins the load device to the Nth available GPU; the offload\n  device is restored to the loader's original choice.\n\nWhen the requested device differs from the device the input model is\nalready on, a fresh model is spawned via the loader's reload factory\n(cached_patcher_init) so the new patcher owns independent weights on\nthe new device. Loaders that don't support multigpu (no factory) will\ncause the node to pass through unchanged with a warning.\n\nIf the workflow already has MultiGPU CFG Split applied and the chosen\nGPU collides with one of the existing multigpu clones, that clone is\ndropped so two patchers don't end up bound to the same device.\n\nWhen the selected device does not exist on the current machine\n(e.g. a workflow built on a 2-GPU box opened on a 1-GPU box),\nthe node passes the model through unchanged and logs a message\ninstead of failing.\n\nNOTE: Placing Select Model Device *after* a node that has already\nconsumed the same model (e.g. a KSampler that ran on this model on\nthe original device) is not recommended -- any state the prior\nconsumer mutated on the original model will be observed when the\nselected device matches the original (fast path). Place Select Model\nDevice before any consumer of the model.", "python_module": "comfy_extras.nodes_multigpu", "category": "advanced/multigpu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SelectCLIPDevice": {"input": {"required": {"clip": ["CLIP", {}], "device": ["COMBO", {"multiselect": false, "options": ["default", "cpu"]}]}}, "input_order": {"required": ["clip", "device"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "SelectCLIPDevice", "display_name": "Select CLIP Device", "description": "Place the CLIP text encoder on a specific device (default / cpu / gpu:N).\n\n- \"default\" restores the device assigned by the loader.\n- \"cpu\" pins both the load and offload device to CPU.\n- \"gpu:N\" pins the load device to the Nth available GPU.\n\nWhen the selected device does not exist on the current machine\n(e.g. a workflow built on a 2-GPU box opened on a 1-GPU box),\nthe node passes the CLIP through unchanged and logs a message\ninstead of failing.", "python_module": "comfy_extras.nodes_multigpu", "category": "advanced/multigpu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SelectVAEDevice": {"input": {"required": {"vae": ["VAE", {}], "device": ["COMBO", {"multiselect": false, "options": ["default"]}]}}, "input_order": {"required": ["vae", "device"]}, "is_input_list": false, "output": ["VAE"], "output_is_list": [false], "output_name": ["VAE"], "output_tooltips": [null], "output_matchtypes": null, "name": "SelectVAEDevice", "display_name": "Select VAE Device", "description": "Place the VAE on a specific device (default / gpu:N).\n\n- \"default\" restores the device assigned by the loader.\n- \"gpu:N\" pins the load device to the Nth available GPU; the offload\n  device is set to the standard VAE offload device.\n\nCPU is intentionally not exposed in the UI for the VAE; if a workflow\nsupplies \"cpu\" anyway (e.g. opened from another machine), the request\nis dropped with a log message and the VAE is passed through unchanged.\n\nWhen the selected device does not exist on the current machine\n(e.g. a workflow built on a 2-GPU box opened on a 1-GPU box),\nthe node passes the VAE through unchanged and logs a message\ninstead of failing.", "python_module": "comfy_extras.nodes_multigpu", "category": "advanced/multigpu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Load3D": {"input": {"required": {"model_file": ["COMBO", {"multiselect": false, "options": ["none"], "file_upload": true}], "image": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}}, "input_order": {"required": ["model_file", "image", "width", "height"]}, "is_input_list": false, "output": ["IMAGE", "MASK", "STRING", "IMAGE", "LOAD3D_CAMERA", "VIDEO", "FILE_3D", "LOAD3D_MODEL_INFO"], "output_is_list": [false, false, false, false, false, false, false, false], "output_name": ["image", "mask", "mesh_path", "normal", "camera_info", "recording_video", "model_3d", "model_3d_info"], "output_tooltips": [null, null, null, null, null, null, null, null], "output_matchtypes": null, "name": "Load3D", "display_name": "Load 3D & Animation", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": "Basics", "has_intermediate_output": false}, "Preview3D": {"input": {"required": {"model_file": ["STRING,FILE_3D_GLB,FILE_3D_GLTF,FILE_3D_FBX,FILE_3D_OBJ,FILE_3D_STL,FILE_3D_USDZ,FILE_3D", {"default": "", "widgetType": "STRING", "multiline": false, "tooltip": "3D model file or path string"}]}, "optional": {"camera_info": ["LOAD3D_CAMERA", {"advanced": true}], "bg_image": ["IMAGE", {"advanced": true}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_file"], "optional": ["camera_info", "bg_image"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "Preview3D", "display_name": "Preview 3D & Animation", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["view mesh", "3d viewer"], "essentials_category": null, "has_intermediate_output": false}, "Preview3DAdvanced": {"input": {"required": {"model_file": ["FILE_3D_GLB,FILE_3D_GLTF,FILE_3D_FBX,FILE_3D_OBJ,FILE_3D_STL,FILE_3D_USDZ,FILE_3D", {"tooltip": "3D model file from an upstream 3D node."}], "image": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}, "optional": {"camera_info": ["LOAD3D_CAMERA", {"advanced": true}], "model_3d_info": ["LOAD3D_MODEL_INFO", {"advanced": true}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_file", "image", "width", "height"], "optional": ["camera_info", "model_3d_info"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["FILE_3D", "LOAD3D_CAMERA", "LOAD3D_MODEL_INFO", "INT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model_file", "camera_info", "model_3d_info", "width", "height"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "Preview3DAdvanced", "display_name": "Preview 3D (Advanced)", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["preview 3d", "3d viewer", "view mesh", "frame 3d", "3d camera output"], "essentials_category": null, "has_intermediate_output": false}, "EmptyCosmosLatentVideo": {"input": {"required": {"width": ["INT", {"default": 1280, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 704, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 121, "min": 1, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyCosmosLatentVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cosmos", "category": "model/latent/video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CosmosImageToVideoLatent": {"input": {"required": {"vae": ["VAE", {}], "width": ["INT", {"default": 1280, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 704, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 121, "min": 1, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}], "end_image": ["IMAGE", {}]}}, "input_order": {"required": ["vae", "width", "height", "length", "batch_size"], "optional": ["start_image", "end_image"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "CosmosImageToVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cosmos", "category": "model/conditioning/inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CosmosPredict2ImageToVideoLatent": {"input": {"required": {"vae": ["VAE", {}], "width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 93, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}], "end_image": ["IMAGE", {}]}}, "input_order": {"required": ["vae", "width", "height", "length", "batch_size"], "optional": ["start_image", "end_image"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "CosmosPredict2ImageToVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cosmos", "category": "model/conditioning/inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveWEBM": {"input": {"required": {"images": ["IMAGE", {"tooltip": "RGBA images are saved with their alpha channel as transparency (vp9 codec only)."}], "filename_prefix": ["STRING", {"default": "ComfyUI", "multiline": false}], "codec": ["COMBO", {"multiselect": false, "options": ["vp9", "av1"]}], "fps": ["FLOAT", {"default": 24.0, "min": 0.01, "max": 1000.0, "step": 0.01}], "crf": ["FLOAT", {"tooltip": "Higher crf means lower quality with a smaller file size, lower crf means higher quality higher filesize.", "default": 32.0, "min": 0, "max": 63.0, "step": 1}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "filename_prefix", "codec", "fps", "crf"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveWEBM", "display_name": "Save WEBM", "description": "", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export webm"], "essentials_category": null, "has_intermediate_output": false}, "SaveVideo": {"input": {"required": {"video": ["VIDEO", {"tooltip": "The video to save."}], "filename_prefix": ["STRING", {"tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes.", "default": "video/ComfyUI", "multiline": false}], "format": ["COMBO", {"tooltip": "The format to save the video as.", "default": "auto", "multiselect": false, "options": ["auto", "mp4"]}], "codec": ["COMBO", {"tooltip": "The codec to use for the video.", "default": "auto", "multiselect": false, "options": ["auto", "h264"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["video", "filename_prefix", "format", "codec"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveVideo", "display_name": "Save Video", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export video"], "essentials_category": "Basics", "has_intermediate_output": false}, "CreateVideo": {"input": {"required": {"images": ["IMAGE", {"tooltip": "The images to create a video from."}], "fps": ["FLOAT", {"default": 30.0, "min": 1.0, "max": 120.0, "step": 1.0}]}, "optional": {"audio": ["AUDIO", {"tooltip": "The audio to add to the video."}]}}, "input_order": {"required": ["images", "fps"], "optional": ["audio"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "CreateVideo", "display_name": "Create Video", "description": "Create a video from images.", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["images to video"], "essentials_category": "Video Tools", "has_intermediate_output": false}, "GetVideoComponents": {"input": {"required": {"video": ["VIDEO", {"tooltip": "The video to extract components from."}]}}, "input_order": {"required": ["video"]}, "is_input_list": false, "output": ["IMAGE", "AUDIO", "FLOAT"], "output_is_list": [false, false, false], "output_name": ["images", "audio", "fps"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "GetVideoComponents", "display_name": "Get Video Components", "description": "Extracts all components from a video: frames, audio, and framerate.", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["extract frames", "split video", "video to images", "demux"], "essentials_category": null, "has_intermediate_output": false}, "LoadVideo": {"input": {"required": {"file": ["COMBO", {"multiselect": false, "options": [], "video_upload": true}]}}, "input_order": {"required": ["file"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadVideo", "display_name": "Load Video", "description": "", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["import video", "open video", "video file"], "essentials_category": "Basics", "has_intermediate_output": false}, "Video Slice": {"input": {"required": {"video": ["VIDEO", {}], "start_time": ["FLOAT", {"tooltip": "Start time in seconds", "default": 0.0, "min": -100000.0, "max": 100000.0, "step": 0.001}], "duration": ["FLOAT", {"tooltip": "Duration in seconds, or 0 for unlimited duration", "default": 0.0, "min": 0.0, "step": 0.001}], "strict_duration": ["BOOLEAN", {"tooltip": "If True, when the specified duration is not possible, an error will be raised.", "default": false}]}}, "input_order": {"required": ["video", "start_time", "duration", "strict_duration"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Video Slice", "display_name": "Video Slice", "description": "", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["trim video duration", "skip first frames", "frame load cap", "start time"], "essentials_category": "Video Tools", "has_intermediate_output": false}, "CLIPTextEncodeLumina2": {"input": {"required": {"system_prompt": ["COMBO", {"tooltip": "Lumina2 provide two types of system prompts:Superior: You are an assistant designed to generate superior images with the superior degree of image-text alignment based on textual prompts or user prompts. Alignment: You are an assistant designed to generate high-quality images with the highest degree of image-text alignment based on textual prompts.", "multiselect": false, "options": ["superior", "alignment"]}], "user_prompt": ["STRING", {"tooltip": "The text to be encoded.", "multiline": true, "dynamicPrompts": true}], "clip": ["CLIP", {"tooltip": "The CLIP model used for encoding the text."}]}}, "input_order": {"required": ["system_prompt", "user_prompt", "clip"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": ["A conditioning containing the embedded text used to guide the diffusion model."], "output_matchtypes": null, "name": "CLIPTextEncodeLumina2", "display_name": "CLIP Text Encode for Lumina2", "description": "Encodes a system prompt and a user prompt using a CLIP model into an embedding that can be used to guide the diffusion model towards generating specific images.", "python_module": "comfy_extras.nodes_lumina2", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["lumina prompt"], "essentials_category": null, "has_intermediate_output": false}, "RenormCFG": {"input": {"required": {"model": ["MODEL", {}], "cfg_trunc": ["FLOAT", {"advanced": true, "default": 100, "min": 0.0, "max": 100.0, "step": 0.01}], "renorm_cfg": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "cfg_trunc", "renorm_cfg"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "RenormCFG", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lumina2", "category": "advanced/model", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanTrackToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "tracks": ["STRING", {"default": "[]", "multiline": true}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "temperature": ["FLOAT", {"advanced": true, "default": 220.0, "min": 1.0, "max": 1000.0, "step": 0.1}], "topk": ["INT", {"advanced": true, "default": 2, "min": 1, "max": 10}], "start_image": ["IMAGE", {}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "tracks", "width", "height", "length", "batch_size", "temperature", "topk", "start_image"], "optional": ["clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanTrackToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["motion tracking", "trajectory video", "point tracking", "keypoint animation"], "essentials_category": null, "has_intermediate_output": false}, "WanImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_output", "start_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanFunControlToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "control_video": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_output", "start_image", "control_video"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanFunControlToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan22FunControlToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"ref_image": ["IMAGE", {}], "control_video": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["ref_image", "control_video"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "Wan22FunControlToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanFunInpaintToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "end_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_output", "start_image", "end_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanFunInpaintToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanFirstLastFrameToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_start_image": ["CLIP_VISION_OUTPUT", {}], "clip_vision_end_image": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "end_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_start_image", "clip_vision_end_image", "start_image", "end_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanFirstLastFrameToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanVaceToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1000.0, "step": 0.01}]}, "optional": {"control_video": ["IMAGE", {}], "control_masks": ["MASK", {}], "reference_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size", "strength"], "optional": ["control_video", "control_masks", "reference_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["positive", "negative", "latent", "trim_latent"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "WanVaceToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["video conditioning", "video control"], "essentials_category": null, "has_intermediate_output": false}, "TrimVideoLatent": {"input": {"required": {"samples": ["LATENT", {}], "trim_amount": ["INT", {"default": 0, "min": 0, "max": 99999}]}}, "input_order": {"required": ["samples", "trim_amount"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "TrimVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/latent/video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanCameraImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "camera_conditions": ["WAN_CAMERA_EMBEDDING", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_output", "start_image", "camera_conditions"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanCameraImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanPhantomSubjectToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"images": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["images"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false, false], "output_name": ["positive", "negative_text", "negative_img_text", "latent"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "WanPhantomSubjectToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanSoundImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 77, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"audio_encoder_output": ["AUDIO_ENCODER_OUTPUT", {}], "ref_image": ["IMAGE", {}], "control_video": ["IMAGE", {}], "ref_motion": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["audio_encoder_output", "ref_image", "control_video", "ref_motion"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanSoundImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanSoundImageToVideoExtend": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "length": ["INT", {"default": 77, "min": 1, "max": 16384, "step": 4}], "video_latent": ["LATENT", {}]}, "optional": {"audio_encoder_output": ["AUDIO_ENCODER_OUTPUT", {}], "ref_image": ["IMAGE", {}], "control_video": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "length", "video_latent"], "optional": ["audio_encoder_output", "ref_image", "control_video"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanSoundImageToVideoExtend", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanHuMoImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 97, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"audio_encoder_output": ["AUDIO_ENCODER_OUTPUT", {}], "ref_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["audio_encoder_output", "ref_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanHuMoImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanAnimateToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 77, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "continue_motion_max_frames": ["INT", {"default": 5, "min": 1, "max": 16384, "step": 4}], "video_frame_offset": ["INT", {"tooltip": "The amount of frames to seek in all the input videos. Used for generating longer videos by chunk. Connect to the video_frame_offset output of the previous node for extending a video.", "default": 0, "min": 0, "max": 16384, "step": 1}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "reference_image": ["IMAGE", {}], "face_video": ["IMAGE", {}], "pose_video": ["IMAGE", {}], "background_video": ["IMAGE", {}], "character_mask": ["MASK", {}], "continue_motion": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size", "continue_motion_max_frames", "video_frame_offset"], "optional": ["clip_vision_output", "reference_image", "face_video", "pose_video", "background_video", "character_mask", "continue_motion"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT", "INT", "INT", "INT"], "output_is_list": [false, false, false, false, false, false], "output_name": ["positive", "negative", "latent", "trim_latent", "trim_image", "video_frame_offset"], "output_tooltips": [null, null, null, null, null, null], "output_matchtypes": null, "name": "WanAnimateToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan22ImageToVideoLatent": {"input": {"required": {"vae": ["VAE", {}], "width": ["INT", {"default": 1280, "min": 32, "max": 16384, "step": 32}], "height": ["INT", {"default": 704, "min": 32, "max": 16384, "step": 32}], "length": ["INT", {"default": 49, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}]}}, "input_order": {"required": ["vae", "width", "height", "length", "batch_size"], "optional": ["start_image"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan22ImageToVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanInfiniteTalkToVideo": {"input": {"required": {"mode": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "single_speaker", "inputs": {"required": {}}}, {"key": "two_speakers", "inputs": {"required": {}, "optional": {"audio_encoder_output_2": ["AUDIO_ENCODER_OUTPUT", {}], "mask_1": ["MASK", {"tooltip": "Mask for the first speaker, required if using two audio inputs."}], "mask_2": ["MASK", {"tooltip": "Mask for the second speaker, required if using two audio inputs."}]}}}]}], "model": ["MODEL", {}], "model_patch": ["MODEL_PATCH", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "audio_encoder_output_1": ["AUDIO_ENCODER_OUTPUT", {}], "motion_frame_count": ["INT", {"tooltip": "Number of previous frames to use as motion context.", "advanced": true, "default": 9, "min": 1, "max": 33, "step": 1}], "audio_scale": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "previous_frames": ["IMAGE", {}]}}, "input_order": {"required": ["mode", "model", "model_patch", "positive", "negative", "vae", "width", "height", "length", "audio_encoder_output_1", "motion_frame_count", "audio_scale"], "optional": ["clip_vision_output", "start_image", "previous_frames"]}, "is_input_list": false, "output": ["MODEL", "CONDITIONING", "CONDITIONING", "LATENT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model", "positive", "negative", "latent", "trim_image"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "WanInfiniteTalkToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanSCAILToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 512, "min": 32, "max": 16384, "step": 32}], "height": ["INT", {"default": 896, "min": 32, "max": 16384, "step": 32}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "pose_strength": ["FLOAT", {"tooltip": "Strength of the pose latent.", "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "pose_start": ["FLOAT", {"tooltip": "Start step to use pose conditioning.", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "pose_end": ["FLOAT", {"tooltip": "End step to use pose conditioning.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "reference_image": ["IMAGE", {}], "pose_video": ["IMAGE", {"tooltip": "Video used for pose conditioning. Will be downscaled to half the resolution of the main video."}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size", "pose_strength", "pose_start", "pose_end"], "optional": ["clip_vision_output", "reference_image", "pose_video"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, "Empty latent of the generation size."], "output_matchtypes": null, "name": "WanSCAILToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LotusConditioning": {"input": {"required": {}}, "input_order": {"required": []}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["conditioning"], "output_tooltips": [null], "output_matchtypes": null, "name": "LotusConditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lotus", "category": "model/conditioning/lotus", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyLatentHunyuan3Dv2": {"input": {"required": {"resolution": ["INT", {"default": 3072, "min": 1, "max": 8192}], "batch_size": ["INT", {"tooltip": "The number of latent images in the batch.", "default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["resolution", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyLatentHunyuan3Dv2", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "model/latent/3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Hunyuan3Dv2Conditioning": {"input": {"required": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Hunyuan3Dv2Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "model/conditioning/3d_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Hunyuan3Dv2ConditioningMultiView": {"input": {"required": {}, "optional": {"front": ["CLIP_VISION_OUTPUT", {}], "left": ["CLIP_VISION_OUTPUT", {}], "back": ["CLIP_VISION_OUTPUT", {}], "right": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": [], "optional": ["front", "left", "back", "right"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Hunyuan3Dv2ConditioningMultiView", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "model/conditioning/3d_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VAEDecodeHunyuan3D": {"input": {"required": {"samples": ["LATENT", {}], "vae": ["VAE", {}], "num_chunks": ["INT", {"advanced": true, "default": 8000, "min": 1000, "max": 500000}], "octree_resolution": ["INT", {"advanced": true, "default": 256, "min": 16, "max": 512}]}}, "input_order": {"required": ["samples", "vae", "num_chunks", "octree_resolution"]}, "is_input_list": false, "output": ["VOXEL"], "output_is_list": [false], "output_name": ["VOXEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEDecodeHunyuan3D", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "model/latent/3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VoxelToMeshBasic": {"input": {"required": {"voxel": ["VOXEL", {}], "threshold": ["FLOAT", {"default": 0.6, "min": -1.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["voxel", "threshold"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["MESH"], "output_tooltips": [null], "output_matchtypes": null, "name": "VoxelToMeshBasic", "display_name": "Voxel to Mesh (Basic) (DEPRECATED)", "description": "Converts a voxel grid to a mesh.", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "3d", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VoxelToMesh": {"input": {"required": {"voxel": ["VOXEL", {}], "algorithm": ["COMBO", {"multiselect": false, "options": ["surface net", "basic"]}], "threshold": ["FLOAT", {"default": 0.6, "min": -1.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["voxel", "algorithm", "threshold"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["MESH"], "output_tooltips": [null], "output_matchtypes": null, "name": "VoxelToMesh", "display_name": "Voxel to Mesh", "description": "Converts a voxel grid to a mesh.", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PrimitiveString": {"input": {"required": {"value": ["STRING", {"multiline": false}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveString", "display_name": "Text String", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["text", "string", "text box", "prompt"], "essentials_category": null, "has_intermediate_output": false}, "PrimitiveStringMultiline": {"input": {"required": {"value": ["STRING", {"multiline": true}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveStringMultiline", "display_name": "Text String (Multiline)", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["text", "string", "text multiline", "string multiline", "text box", "prompt"], "essentials_category": "Basics", "has_intermediate_output": false}, "PrimitiveInt": {"input": {"required": {"value": ["INT", {"min": -9223372036854775807, "max": 9223372036854775807, "control_after_generate": "fixed"}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["INT"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveInt", "display_name": "Int", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PrimitiveFloat": {"input": {"required": {"value": ["FLOAT", {"min": -9223372036854775807, "max": 9223372036854775807, "step": 0.1}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["FLOAT"], "output_is_list": [false], "output_name": ["FLOAT"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveFloat", "display_name": "Float", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PrimitiveBoolean": {"input": {"required": {"value": ["BOOLEAN", {}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveBoolean", "display_name": "Boolean", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CFGZeroStar": {"input": {"required": {"model": ["MODEL", {}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "CFGZeroStar", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cfg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CFGNorm": {"input": {"required": {"model": ["MODEL", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}, "optional": {"pre_cfg": ["BOOLEAN", {"tooltip": "If true, rescale the combined noise BEFORE the sampler's CFG combine, without clamping (can amplify). Matches the norm-scaled CFG used by models like Lens. Default false keeps the original post-CFG x0-space attenuate-only behavior.", "default": false}]}}, "input_order": {"required": ["model", "strength"], "optional": ["pre_cfg"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "CFGNorm", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cfg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OptimalStepsScheduler": {"input": {"required": {"model_type": ["COMBO", {"multiselect": false, "options": ["FLUX", "Wan", "Chroma"]}], "steps": ["INT", {"default": 20, "min": 3, "max": 1000}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model_type", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "OptimalStepsScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_optimalsteps", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "QuadrupleCLIPLoader": {"input": {"required": {"clip_name1": ["COMBO", {"multiselect": false, "options": ["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]}], "clip_name2": ["COMBO", {"multiselect": false, "options": ["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]}], "clip_name3": ["COMBO", {"multiselect": false, "options": ["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]}], "clip_name4": ["COMBO", {"multiselect": false, "options": ["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]}]}}, "input_order": {"required": ["clip_name1", "clip_name2", "clip_name3", "clip_name4"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "QuadrupleCLIPLoader", "display_name": null, "description": "[Recipes]\n\nhidream: long clip-l, long clip-g, t5xxl, llama_8b_3.1_instruct", "python_module": "comfy_extras.nodes_hidream", "category": "advanced/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeHiDream": {"input": {"required": {"clip": ["CLIP", {}], "clip_l": ["STRING", {"multiline": true, "dynamicPrompts": true}], "clip_g": ["STRING", {"multiline": true, "dynamicPrompts": true}], "t5xxl": ["STRING", {"multiline": true, "dynamicPrompts": true}], "llama": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "clip_l", "clip_g", "t5xxl", "llama"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeHiDream", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hidream", "category": "advanced/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["hidream prompt"], "essentials_category": null, "has_intermediate_output": false}, "FreSca": {"input": {"required": {"model": ["MODEL", {}], "scale_low": ["FLOAT", {"tooltip": "Scaling factor for low-frequency components", "advanced": true, "default": 1.0, "min": 0, "max": 10, "step": 0.01}], "scale_high": ["FLOAT", {"tooltip": "Scaling factor for high-frequency components", "advanced": true, "default": 1.25, "min": 0, "max": 10, "step": 0.01}], "freq_cutoff": ["INT", {"tooltip": "Number of frequency indices around center to consider as low-frequency", "advanced": true, "default": 20, "min": 1, "max": 10000, "step": 1}]}}, "input_order": {"required": ["model", "scale_low", "scale_high", "freq_cutoff"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "FreSca", "display_name": "FreSca", "description": "Applies frequency-dependent scaling to the guidance", "python_module": "comfy_extras.nodes_fresca", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["frequency guidance"], "essentials_category": null, "has_intermediate_output": false}, "APG": {"input": {"required": {"model": ["MODEL", {}], "eta": ["FLOAT", {"tooltip": "Controls the scale of the parallel guidance vector. Default CFG behavior at a setting of 1.", "advanced": true, "default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}], "norm_threshold": ["FLOAT", {"tooltip": "Normalize guidance vector to this value, normalization disable at a setting of 0.", "advanced": true, "default": 5.0, "min": 0.0, "max": 50.0, "step": 0.1}], "momentum": ["FLOAT", {"tooltip": "Controls a running average of guidance during diffusion, disabled at a setting of 0.", "advanced": true, "default": 0.0, "min": -5.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "eta", "norm_threshold", "momentum"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "APG", "display_name": "Adaptive Projected Guidance", "description": "", "python_module": "comfy_extras.nodes_apg", "category": "model/sampling/custom_sampling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PreviewAny": {"input": {"required": {"source": ["*", {}]}}, "input_order": {"required": ["source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "name": "PreviewAny", "display_name": "Preview as Text", "description": "", "python_module": "comfy_extras.nodes_preview_any", "category": "utilities", "output_node": true, "has_intermediate_output": false, "search_aliases": ["show output", "inspect", "debug", "print value", "show text"]}, "TextEncodeAceStepAudio": {"input": {"required": {"clip": ["CLIP", {}], "tags": ["STRING", {"multiline": true, "dynamicPrompts": true}], "lyrics": ["STRING", {"multiline": true, "dynamicPrompts": true}], "lyrics_strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["clip", "tags", "lyrics", "lyrics_strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeAceStepAudio", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ace", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyAceStepLatentAudio": {"input": {"required": {"seconds": ["FLOAT", {"default": 120.0, "min": 1.0, "max": 1000.0, "step": 0.1}], "batch_size": ["INT", {"tooltip": "The number of latent images in the batch.", "default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["seconds", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyAceStepLatentAudio", "display_name": "Empty Ace Step 1.0 Latent Audio", "description": "", "python_module": "comfy_extras.nodes_ace", "category": "model/latent/audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeAceStepAudio1.5": {"input": {"required": {"clip": ["CLIP", {}], "tags": ["STRING", {"multiline": true, "dynamicPrompts": true}], "lyrics": ["STRING", {"multiline": true, "dynamicPrompts": true}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "bpm": ["INT", {"default": 120, "min": 10, "max": 300}], "duration": ["FLOAT", {"default": 120.0, "min": 0.0, "max": 2000.0, "step": 0.1}], "timesignature": ["COMBO", {"multiselect": false, "options": ["2", "3", "4", "6"]}], "language": ["COMBO", {"default": "en", "multiselect": false, "options": ["ar", "az", "bg", "bn", "ca", "cs", "da", "de", "el", "en", "es", "fa", "fi", "fr", "he", "hi", "hr", "ht", "hu", "id", "is", "it", "ja", "ko", "la", "lt", "ms", "ne", "nl", "no", "pa", "pl", "pt", "ro", "ru", "sa", "sk", "sr", "sv", "sw", "ta", "te", "th", "tl", "tr", "uk", "ur", "vi", "yue", "zh", "unknown"]}], "keyscale": ["COMBO", {"multiselect": false, "options": ["C major", "C# major", "Db major", "D major", "D# major", "Eb major", "E major", "F major", "F# major", "Gb major", "G major", "G# major", "Ab major", "A major", "A# major", "Bb major", "B major", "C minor", "C# minor", "Db minor", "D minor", "D# minor", "Eb minor", "E minor", "F minor", "F# minor", "Gb minor", "G minor", "G# minor", "Ab minor", "A minor", "A# minor", "Bb minor", "B minor"]}], "generate_audio_codes": ["BOOLEAN", {"tooltip": "Enable the LLM that generates audio codes. This can be slow but will increase the quality of the generated audio. Turn this off if you are giving the model an audio reference.", "advanced": true, "default": true}], "cfg_scale": ["FLOAT", {"advanced": true, "default": 2.0, "min": 0.0, "max": 100.0, "step": 0.1}], "temperature": ["FLOAT", {"advanced": true, "default": 0.85, "min": 0.0, "max": 2.0, "step": 0.01}], "top_p": ["FLOAT", {"advanced": true, "default": 0.9, "min": 0.0, "max": 2000.0, "step": 0.01}], "top_k": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 100}], "min_p": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["clip", "tags", "lyrics", "seed", "bpm", "duration", "timesignature", "language", "keyscale", "generate_audio_codes", "cfg_scale", "temperature", "top_p", "top_k", "min_p"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeAceStepAudio1.5", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ace", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyAceStep1.5LatentAudio": {"input": {"required": {"seconds": ["FLOAT", {"default": 120.0, "min": 1.0, "max": 1000.0, "step": 0.01}], "batch_size": ["INT", {"tooltip": "The number of latent images in the batch.", "default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["seconds", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyAceStep1.5LatentAudio", "display_name": "Empty Ace Step 1.5 Latent Audio", "description": "", "python_module": "comfy_extras.nodes_ace", "category": "model/latent/audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReferenceTimbreAudio": {"input": {"required": {"conditioning": ["CONDITIONING", {}]}, "optional": {"latent": ["LATENT", {}]}}, "input_order": {"required": ["conditioning"], "optional": ["latent"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReferenceTimbreAudio", "display_name": "Reference Audio", "description": "This node sets the reference audio for ace step 1.5", "python_module": "comfy_extras.nodes_ace", "category": "advanced/conditioning/audio", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StringFormat": {"input": {"required": {"values": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"value": ["*", {}]}}, "names": ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"], "min": 0}}], "f_string": ["STRING", {"default": "{a}", "multiline": true}]}}, "input_order": {"required": ["values", "f_string"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringFormat", "display_name": "Format Text", "description": "Same as Python's string format method. Supports all of Python's format options and features.", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["string", "format"], "essentials_category": null, "has_intermediate_output": false}, "StringConcatenate": {"input": {"required": {"string_a": ["STRING", {"multiline": true}], "string_b": ["STRING", {"multiline": true}], "delimiter": ["STRING", {"default": "", "multiline": false}]}}, "input_order": {"required": ["string_a", "string_b", "delimiter"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringConcatenate", "display_name": "Concatenate Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["concatenate", "text concat", "join text", "merge text", "combine strings", "string concat", "append text", "combine text"], "essentials_category": null, "has_intermediate_output": false}, "StringSubstring": {"input": {"required": {"string": ["STRING", {"multiline": true}], "start": ["INT", {}], "end": ["INT", {}]}}, "input_order": {"required": ["string", "start", "end"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringSubstring", "display_name": "Substring", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["substring", "extract text", "text portion"], "essentials_category": null, "has_intermediate_output": false}, "StringLength": {"input": {"required": {"string": ["STRING", {"multiline": true}]}}, "input_order": {"required": ["string"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["length"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringLength", "display_name": "Text Length", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["character count", "text size", "string length"], "essentials_category": null, "has_intermediate_output": false}, "CaseConverter": {"input": {"required": {"string": ["STRING", {"multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["UPPERCASE", "lowercase", "Capitalize", "Title Case"]}]}}, "input_order": {"required": ["string", "mode"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CaseConverter", "display_name": "Convert Text Case", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["case converter", "text case", "uppercase", "lowercase", "capitalize"], "essentials_category": null, "has_intermediate_output": false}, "StringTrim": {"input": {"required": {"string": ["STRING", {"multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["Both", "Left", "Right"]}]}}, "input_order": {"required": ["string", "mode"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringTrim", "display_name": "Trim Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["trim", "clean whitespace", "remove whitespace", "remove spaces", "strip"], "essentials_category": null, "has_intermediate_output": false}, "StringReplace": {"input": {"required": {"string": ["STRING", {"multiline": true}], "find": ["STRING", {"multiline": true}], "replace": ["STRING", {"multiline": true}]}}, "input_order": {"required": ["string", "find", "replace"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringReplace", "display_name": "Replace Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["replace", "find and replace", "substitute", "swap text"], "essentials_category": null, "has_intermediate_output": false}, "StringContains": {"input": {"required": {"string": ["STRING", {"multiline": true}], "substring": ["STRING", {"multiline": true}], "case_sensitive": ["BOOLEAN", {"advanced": true, "default": true}]}}, "input_order": {"required": ["string", "substring", "case_sensitive"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["contains"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringContains", "display_name": "Contains Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["contains", "text includes", "string includes"], "essentials_category": null, "has_intermediate_output": false}, "StringCompare": {"input": {"required": {"string_a": ["STRING", {"multiline": true}], "string_b": ["STRING", {"multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["Starts With", "Ends With", "Equal"]}], "case_sensitive": ["BOOLEAN", {"advanced": true, "default": true}]}}, "input_order": {"required": ["string_a", "string_b", "mode", "case_sensitive"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringCompare", "display_name": "Compare Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["compare", "text match", "string equals", "starts with", "ends with"], "essentials_category": null, "has_intermediate_output": false}, "RegexMatch": {"input": {"required": {"string": ["STRING", {"multiline": true}], "regex_pattern": ["STRING", {"multiline": true}], "case_insensitive": ["BOOLEAN", {"advanced": true, "default": true}], "multiline": ["BOOLEAN", {"advanced": true, "default": false}], "dotall": ["BOOLEAN", {"advanced": true, "default": false}]}}, "input_order": {"required": ["string", "regex_pattern", "case_insensitive", "multiline", "dotall"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["matches"], "output_tooltips": [null], "output_matchtypes": null, "name": "RegexMatch", "display_name": "Match Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["regex match", "regex", "pattern match", "text contains", "string match"], "essentials_category": null, "has_intermediate_output": false}, "RegexExtract": {"input": {"required": {"string": ["STRING", {"multiline": true}], "regex_pattern": ["STRING", {"multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["First Match", "All Matches", "First Group", "All Groups"]}], "case_insensitive": ["BOOLEAN", {"advanced": true, "default": true}], "multiline": ["BOOLEAN", {"advanced": true, "default": false}], "dotall": ["BOOLEAN", {"advanced": true, "default": false}], "group_index": ["INT", {"advanced": true, "default": 1, "min": 0, "max": 100}]}}, "input_order": {"required": ["string", "regex_pattern", "mode", "case_insensitive", "multiline", "dotall", "group_index"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "RegexExtract", "display_name": "Extract Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["regex extract", "regex", "pattern extract", "text parser", "parse text"], "essentials_category": null, "has_intermediate_output": false}, "RegexReplace": {"input": {"required": {"string": ["STRING", {"multiline": true}], "regex_pattern": ["STRING", {"multiline": true}], "replace": ["STRING", {"multiline": true}]}, "optional": {"case_insensitive": ["BOOLEAN", {"advanced": true, "default": true}], "multiline": ["BOOLEAN", {"advanced": true, "default": false}], "dotall": ["BOOLEAN", {"tooltip": "When enabled, the dot (.) character will match any character including newline characters. When disabled, dots won't match newlines.", "advanced": true, "default": false}], "count": ["INT", {"tooltip": "Maximum number of replacements to make. Set to 0 to replace all occurrences (default). Set to 1 to replace only the first match, 2 for the first two matches, etc.", "advanced": true, "default": 0, "min": 0, "max": 100}]}}, "input_order": {"required": ["string", "regex_pattern", "replace"], "optional": ["case_insensitive", "multiline", "dotall", "count"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "RegexReplace", "display_name": "Replace Text (Regex)", "description": "Find and replace text using regex patterns.", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["regex replace", "regex", "pattern replace", "substitution"], "essentials_category": null, "has_intermediate_output": false}, "JsonExtractString": {"input": {"required": {"json_string": ["STRING", {"multiline": true}], "key": ["STRING", {"multiline": false}]}}, "input_order": {"required": ["json_string", "key"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "JsonExtractString", "display_name": "Extract Text from JSON", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["json", "extract json", "parse json", "json value", "read json"], "essentials_category": null, "has_intermediate_output": false}, "WanCameraEmbedding": {"input": {"required": {"camera_pose": ["COMBO", {"default": "Static", "multiselect": false, "options": ["Static", "Pan Up", "Pan Down", "Pan Left", "Pan Right", "Zoom In", "Zoom Out", "Anti Clockwise (ACW)", "ClockWise (CW)"]}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}]}, "optional": {"speed": ["FLOAT", {"default": 1.0, "min": 0, "max": 10.0, "step": 0.1}], "fx": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0, "max": 1, "step": 1e-09}], "fy": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0, "max": 1, "step": 1e-09}], "cx": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0, "max": 1, "step": 0.01}], "cy": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0, "max": 1, "step": 0.01}]}}, "input_order": {"required": ["camera_pose", "width", "height", "length"], "optional": ["speed", "fx", "fy", "cx", "cy"]}, "is_input_list": false, "output": ["WAN_CAMERA_EMBEDDING", "INT", "INT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["camera_embedding", "width", "height", "length"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "WanCameraEmbedding", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_camera_trajectory", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReferenceLatent": {"input": {"required": {"conditioning": ["CONDITIONING", {}]}, "optional": {"latent": ["LATENT", {}]}}, "input_order": {"required": ["conditioning"], "optional": ["latent"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReferenceLatent", "display_name": null, "description": "This node sets the guiding latent for an edit model. If the model supports it you can chain multiple to set multiple reference images.", "python_module": "comfy_extras.nodes_edit_model", "category": "advanced/conditioning/edit_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TCFG": {"input": {"required": {"model": ["MODEL", {}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "TCFG", "display_name": "Tangential Damping CFG", "description": "TCFG \u2013 Tangential Damping CFG (2503.18137)\n\nRefine the uncond (negative) to align with the cond (positive) for improving quality.", "python_module": "comfy_extras.nodes_tcfg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ContextWindowsManual": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to apply context windows to during sampling."}], "context_length": ["INT", {"tooltip": "The length of the context window.", "advanced": true, "default": 16, "min": 1}], "context_overlap": ["INT", {"tooltip": "The overlap of the context window.", "advanced": true, "default": 4, "min": 0}], "context_schedule": ["COMBO", {"tooltip": "The stride of the context window.", "multiselect": false, "options": ["standard_static", "standard_uniform", "looped_uniform", "batched"]}], "context_stride": ["INT", {"tooltip": "The stride of the context window; only applicable to uniform schedules.", "advanced": true, "default": 1, "min": 1}], "closed_loop": ["BOOLEAN", {"tooltip": "Whether to close the context window loop; only applicable to looped schedules.", "default": false}], "fuse_method": ["COMBO", {"tooltip": "The method to use to fuse the context windows.", "default": "pyramid", "multiselect": false, "options": ["pyramid", "relative", "flat", "overlap-linear"]}], "dim": ["INT", {"tooltip": "The dimension to apply the context windows to.", "default": 0, "min": 0, "max": 5}], "freenoise": ["BOOLEAN", {"tooltip": "Whether to apply FreeNoise noise shuffling, improves window blending.", "default": false}], "cond_retain_index_list": ["STRING", {"tooltip": "List of latent indices to retain in the conditioning tensors for each window, for example setting this to '0' will use the initial start image for each window.", "default": "", "multiline": false}], "split_conds_to_windows": ["BOOLEAN", {"tooltip": "Whether to split multiple conditionings (created by ConditionCombine) to each window based on region index.", "default": false}], "causal_window_fix": ["BOOLEAN", {"tooltip": "Whether to add a causal fix frame to non-0-indexed context windows.", "default": true}]}}, "input_order": {"required": ["model", "context_length", "context_overlap", "context_schedule", "context_stride", "closed_loop", "fuse_method", "dim", "freenoise", "cond_retain_index_list", "split_conds_to_windows", "causal_window_fix"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with context windows applied during sampling."], "output_matchtypes": null, "name": "ContextWindowsManual", "display_name": "Context Windows (Manual)", "description": "Manually set context windows.", "python_module": "comfy_extras.nodes_context_windows", "category": "model/patch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanContextWindowsManual": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to apply context windows to during sampling."}], "context_length": ["INT", {"tooltip": "The length of the context window.", "advanced": true, "default": 81, "min": 1, "max": 16384, "step": 4}], "context_overlap": ["INT", {"tooltip": "The overlap of the context window.", "advanced": true, "default": 30, "min": 0}], "context_schedule": ["COMBO", {"tooltip": "The stride of the context window.", "multiselect": false, "options": ["standard_static", "standard_uniform", "looped_uniform", "batched"]}], "context_stride": ["INT", {"tooltip": "The stride of the context window; only applicable to uniform schedules.", "advanced": true, "default": 1, "min": 1}], "closed_loop": ["BOOLEAN", {"tooltip": "Whether to close the context window loop; only applicable to looped schedules.", "default": false}], "fuse_method": ["COMBO", {"tooltip": "The method to use to fuse the context windows.", "default": "pyramid", "multiselect": false, "options": ["pyramid", "relative", "flat", "overlap-linear"]}], "freenoise": ["BOOLEAN", {"tooltip": "Whether to apply FreeNoise noise shuffling, improves window blending.", "default": false}]}}, "input_order": {"required": ["model", "context_length", "context_overlap", "context_schedule", "context_stride", "closed_loop", "fuse_method", "freenoise"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with context windows applied during sampling."], "output_matchtypes": null, "name": "WanContextWindowsManual", "display_name": "WAN Context Windows (Manual)", "description": "Manually set context windows for WAN-like models (dim=2).", "python_module": "comfy_extras.nodes_context_windows", "category": "model/patch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeQwenImageEdit": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}]}, "optional": {"vae": ["VAE", {}], "image": ["IMAGE", {}]}}, "input_order": {"required": ["clip", "prompt"], "optional": ["vae", "image"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeQwenImageEdit", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_qwen", "category": "advanced/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeQwenImageEditPlus": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}]}, "optional": {"vae": ["VAE", {}], "image1": ["IMAGE", {}], "image2": ["IMAGE", {}], "image3": ["IMAGE", {}]}}, "input_order": {"required": ["clip", "prompt"], "optional": ["vae", "image1", "image2", "image3"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeQwenImageEditPlus", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_qwen", "category": "advanced/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyQwenImageLayeredLatentImage": {"input": {"required": {"width": ["INT", {"default": 640, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 640, "min": 16, "max": 16384, "step": 16}], "layers": ["INT", {"default": 3, "min": 0, "max": 16384, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "layers", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyQwenImageLayeredLatentImage", "display_name": "Empty Qwen Image Layered Latent", "description": "", "python_module": "comfy_extras.nodes_qwen", "category": "model/latent/qwen", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyChromaRadianceLatentImage": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyChromaRadianceLatentImage", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_chroma_radiance", "category": "model/latent/chroma_radiance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ChromaRadianceOptions": {"input": {"required": {"model": ["MODEL", {}], "preserve_wrapper": ["BOOLEAN", {"tooltip": "When enabled, will delegate to an existing model function wrapper if it exists. Generally should be left enabled.", "default": true}], "start_sigma": ["FLOAT", {"tooltip": "First sigma that these options will be in effect.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0}], "end_sigma": ["FLOAT", {"tooltip": "Last sigma that these options will be in effect.", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0}], "nerf_tile_size": ["INT", {"tooltip": "Allows overriding the default NeRF tile size. -1 means use the default (32). 0 means use non-tiling mode (may require a lot of VRAM).", "advanced": true, "default": -1, "min": -1}], "force_sequential_txt_ids": ["BOOLEAN", {"tooltip": "Force usage of sequential text token IDs instead of zeroes. Should be used for checkpoints from 2026-05-22 to 2026-06-01 that are trained in this way but do not contain the __sequential__ key in the state dict.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "preserve_wrapper", "start_sigma", "end_sigma", "nerf_tile_size", "force_sequential_txt_ids"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "ChromaRadianceOptions", "display_name": null, "description": "Allows setting advanced options for the Chroma Radiance model.", "python_module": "comfy_extras.nodes_chroma_radiance", "category": "model/patch/chroma_radiance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PiDConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "latent": ["LATENT", {"tooltip": "latent (from VAEEncode or a KSampler)."}], "latent_format": ["COMBO", {"tooltip": "Flux1 (16-ch) and Flux2 (128-ch) latents are auto-detected from channel dim under 'flux'. For SD3 (16-ch), SDXL (4-ch), or QwenImage (16-ch), select manually.", "default": "flux", "multiselect": false, "options": ["flux", "sd3", "sdxl", "qwenimage"]}], "degrade_sigma": ["FLOAT", {"tooltip": "0 = clean latent. Increase to denoise corrupted latent outputs.", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["positive", "latent", "latent_format", "degrade_sigma"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "PiDConditioning", "display_name": "PiD Conditioning", "description": "Attaches a latent and a degrade_sigma scalar to a CONDITIONING for PiD decoding/upscaling", "python_module": "comfy_extras.nodes_pid", "category": "advanced/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelPatchLoader": {"input": {"required": {"name": [["qwen_image_inpaint_diffsynth_controlnet.safetensors"]]}}, "input_order": {"required": ["name"]}, "is_input_list": false, "output": ["MODEL_PATCH"], "output_is_list": [false], "output_name": ["MODEL_PATCH"], "name": "ModelPatchLoader", "display_name": "ModelPatchLoader", "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "advanced/loaders", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "QwenImageDiffsynthControlnet": {"input": {"required": {"model": ["MODEL"], "model_patch": ["MODEL_PATCH"], "vae": ["VAE"], "image": ["IMAGE"], "strength": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}, "optional": {"mask": ["MASK"]}}, "input_order": {"required": ["model", "model_patch", "vae", "image", "strength"], "optional": ["mask"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "QwenImageDiffsynthControlnet", "display_name": "QwenImageDiffsynthControlnet", "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "advanced/loaders/qwen", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ZImageFunControlnet": {"input": {"required": {"model": ["MODEL"], "model_patch": ["MODEL_PATCH"], "vae": ["VAE"], "strength": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}, "optional": {"image": ["IMAGE"], "inpaint_image": ["IMAGE"], "mask": ["MASK"]}}, "input_order": {"required": ["model", "model_patch", "vae", "strength"], "optional": ["image", "inpaint_image", "mask"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ZImageFunControlnet", "display_name": "ZImageFunControlnet", "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "advanced/loaders/zimage", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "USOStyleReference": {"input": {"required": {"model": ["MODEL"], "model_patch": ["MODEL_PATCH"], "clip_vision_output": ["CLIP_VISION_OUTPUT"]}}, "input_order": {"required": ["model", "model_patch", "clip_vision_output"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "USOStyleReference", "display_name": "USOStyleReference", "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/patch/flux", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "SUPIRApply": {"input": {"required": {"model": ["MODEL", {}], "model_patch": ["MODEL_PATCH", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "strength_start": ["FLOAT", {"tooltip": "Control strength at the start of sampling (high sigma).", "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "strength_end": ["FLOAT", {"tooltip": "Control strength at the end of sampling (low sigma). Linearly interpolated from start.", "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "restore_cfg": ["FLOAT", {"tooltip": "Pulls denoised output toward the input latent. Higher = stronger fidelity to input. 0 to disable.", "advanced": true, "default": 4.0, "min": 0.0, "max": 20.0, "step": 0.1}], "restore_cfg_s_tmin": ["FLOAT", {"tooltip": "Sigma threshold below which restore_cfg is disabled.", "advanced": true, "default": 0.05, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "model_patch", "vae", "image", "strength_start", "strength_end", "restore_cfg", "restore_cfg_s_tmin"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SUPIRApply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/patch/supir", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EasyCache": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to add EasyCache to."}], "reuse_threshold": ["FLOAT", {"tooltip": "The threshold for reusing cached steps.", "advanced": true, "default": 0.2, "min": 0.0, "max": 3.0, "step": 0.01}], "start_percent": ["FLOAT", {"tooltip": "The relative sampling step to begin use of EasyCache.", "advanced": true, "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.01}], "end_percent": ["FLOAT", {"tooltip": "The relative sampling step to end use of EasyCache.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "verbose": ["BOOLEAN", {"tooltip": "Whether to log verbose information.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "reuse_threshold", "start_percent", "end_percent", "verbose"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with EasyCache."], "output_matchtypes": null, "name": "EasyCache", "display_name": "EasyCache", "description": "Native EasyCache implementation.", "python_module": "comfy_extras.nodes_easycache", "category": "advanced/debug/model", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LazyCache": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to add LazyCache to."}], "reuse_threshold": ["FLOAT", {"tooltip": "The threshold for reusing cached steps.", "advanced": true, "default": 0.2, "min": 0.0, "max": 3.0, "step": 0.01}], "start_percent": ["FLOAT", {"tooltip": "The relative sampling step to begin use of LazyCache.", "advanced": true, "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.01}], "end_percent": ["FLOAT", {"tooltip": "The relative sampling step to end use of LazyCache.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "verbose": ["BOOLEAN", {"tooltip": "Whether to log verbose information.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "reuse_threshold", "start_percent", "end_percent", "verbose"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with LazyCache."], "output_matchtypes": null, "name": "LazyCache", "display_name": "LazyCache", "description": "A homebrew version of EasyCache - even 'easier' version of EasyCache to implement. Overall works worse than EasyCache, but better in some rare cases AND universal compatibility with everything in ComfyUI.", "python_module": "comfy_extras.nodes_easycache", "category": "advanced/debug/model", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AudioEncoderLoader": {"input": {"required": {"audio_encoder_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["audio_encoder_name"]}, "is_input_list": false, "output": ["AUDIO_ENCODER"], "output_is_list": [false], "output_name": ["AUDIO_ENCODER"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioEncoderLoader", "display_name": "Load Audio Encoder", "description": "", "python_module": "comfy_extras.nodes_audio_encoder", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AudioEncoderEncode": {"input": {"required": {"audio_encoder": ["AUDIO_ENCODER", {}], "audio": ["AUDIO", {}]}}, "input_order": {"required": ["audio_encoder", "audio"]}, "is_input_list": false, "output": ["AUDIO_ENCODER_OUTPUT"], "output_is_list": [false], "output_name": ["AUDIO_ENCODER_OUTPUT"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioEncoderEncode", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_audio_encoder", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ScaleROPE": {"input": {"required": {"model": ["MODEL", {}], "scale_x": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1}], "shift_x": ["FLOAT", {"advanced": true, "default": 0.0, "min": -256.0, "max": 256.0, "step": 0.1}], "scale_y": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1}], "shift_y": ["FLOAT", {"advanced": true, "default": 0.0, "min": -256.0, "max": 256.0, "step": 0.1}], "scale_t": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1}], "shift_t": ["FLOAT", {"advanced": true, "default": 0.0, "min": -256.0, "max": 256.0, "step": 0.1}]}}, "input_order": {"required": ["model", "scale_x", "shift_x", "scale_y", "shift_y", "scale_t", "shift_t"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "ScaleROPE", "display_name": null, "description": "Scale and shift the ROPE of the model.", "python_module": "comfy_extras.nodes_rope", "category": "model/patch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ComfySwitchNode": {"input": {"required": {"switch": ["BOOLEAN", {}], "on_false": ["COMFY_MATCHTYPE_V3", {"lazy": true, "template": {"template_id": "switch", "allowed_types": "*"}}], "on_true": ["COMFY_MATCHTYPE_V3", {"lazy": true, "template": {"template_id": "switch", "allowed_types": "*"}}]}}, "input_order": {"required": ["switch", "on_false", "on_true"]}, "is_input_list": false, "output": ["COMFY_MATCHTYPE_V3"], "output_is_list": [false], "output_name": ["output"], "output_tooltips": [null], "output_matchtypes": ["switch"], "name": "ComfySwitchNode", "display_name": "Switch", "description": "", "python_module": "comfy_extras.nodes_logic", "category": "utilities/logic", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CustomCombo": {"input": {"required": {"choice": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["choice"]}, "is_input_list": false, "output": ["STRING", "INT"], "output_is_list": [false, false], "output_name": ["STRING", "INDEX"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "CustomCombo", "display_name": "Custom Combo", "description": "", "python_module": "comfy_extras.nodes_logic", "category": "utilities", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ComfyNotNode": {"input": {"required": {"value": ["*", {}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "ComfyNotNode", "display_name": "Not", "description": "Logical NOT operation. Returns true if the value is falsy. Uses Python's rules for truthiness.", "python_module": "comfy_extras.nodes_logic", "category": "utilities/logic", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["invert", "toggle", "negate", "flip boolean"], "essentials_category": null, "has_intermediate_output": false}, "ComfyAndNode": {"input": {"required": {"values": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"value": ["*", {}]}}, "prefix": "value", "min": 1, "max": 10}}]}}, "input_order": {"required": ["values"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "ComfyAndNode", "display_name": "And", "description": "Logical AND operation. Returns true if all of the values are truthy. Uses Python's rules for truthiness.", "python_module": "comfy_extras.nodes_logic", "category": "utilities/logic", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["all", "every"], "essentials_category": null, "has_intermediate_output": false}, "ComfyOrNode": {"input": {"required": {"values": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"value": ["*", {}]}}, "prefix": "value", "min": 1, "max": 10}}]}}, "input_order": {"required": ["values"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "ComfyOrNode", "display_name": "Or", "description": "Logical OR operation. Returns true if any of the values are truthy. Uses Python's rules for truthiness.", "python_module": "comfy_extras.nodes_logic", "category": "utilities/logic", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["any", "some"], "essentials_category": null, "has_intermediate_output": false}, "ResolutionSelector": {"input": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio for the output dimensions.", "default": "1:1 (Square)", "multiselect": false, "options": ["1:1 (Square)", "3:2 (Photo)", "4:3 (Standard)", "16:9 (Widescreen)", "21:9 (Ultrawide)", "2:3 (Portrait Photo)", "3:4 (Portrait Standard)", "9:16 (Portrait Widescreen)"]}], "megapixels": ["FLOAT", {"tooltip": "Target total megapixels. 1.0 MP \u2248 1024\u00d71024 for square.", "default": 1.0, "min": 0.1, "max": 16.0, "step": 0.1}]}}, "input_order": {"required": ["aspect_ratio", "megapixels"]}, "is_input_list": false, "output": ["INT", "INT"], "output_is_list": [false, false], "output_name": ["width", "height"], "output_tooltips": ["Calculated width in pixels (multiple of 8).", "Calculated height in pixels (multiple of 8)."], "output_matchtypes": null, "name": "ResolutionSelector", "display_name": "Resolution Selector", "description": "Calculate width and height from aspect ratio and megapixel target. Useful for setting up Empty Latent Image dimensions.", "python_module": "comfy_extras.nodes_resolution", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "wanBlockSwap": {"input": {"required": {"model": ["MODEL", {}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "wanBlockSwap", "display_name": null, "description": "Intercept wanBlockSwap custom node that causes major instability and make it no-op.", "python_module": "comfy_extras.nodes_nop", "category": "", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Kandinsky5ImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 768, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 512, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 121, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["start_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT", "LATENT"], "output_is_list": [false, false, false, false], "output_name": ["positive", "negative", "latent", "cond_latent"], "output_tooltips": [null, null, "Empty video latent", "Clean encoded start images, used to replace the noisy start of the model output latents"], "output_matchtypes": null, "name": "Kandinsky5ImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_kandinsky5", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "NormalizeVideoLatentStart": {"input": {"required": {"latent": ["LATENT", {}], "start_frame_count": ["INT", {"tooltip": "Number of latent frames to normalize, counted from the start", "default": 4, "min": 1, "max": 16384, "step": 1}], "reference_frame_count": ["INT", {"tooltip": "Number of latent frames after the start frames to use as reference", "default": 5, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["latent", "start_frame_count", "reference_frame_count"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "NormalizeVideoLatentStart", "display_name": null, "description": "Normalizes the initial frames of a video latent to match the mean and standard deviation of subsequent reference frames. Helps reduce differences between the starting frames and the rest of the video.", "python_module": "comfy_extras.nodes_kandinsky5", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeKandinsky5": {"input": {"required": {"clip": ["CLIP", {}], "clip_l": ["STRING", {"multiline": true, "dynamicPrompts": true}], "qwen25_7b": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "clip_l", "qwen25_7b"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeKandinsky5", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_kandinsky5", "category": "advanced/conditioning/kandinsky5", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["kandinsky prompt"], "essentials_category": null, "has_intermediate_output": false}, "WanMoveTrackToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "strength": ["FLOAT", {"tooltip": "Strength of the track conditioning.", "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "start_image": ["IMAGE", {}]}, "optional": {"tracks": ["TRACKS", {}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "strength", "width", "height", "length", "batch_size", "start_image"], "optional": ["tracks", "clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanMoveTrackToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanMoveTracksFromCoords": {"input": {"required": {}, "optional": {"track_coords": ["STRING", {"default": "[]", "forceInput": true, "multiline": false}], "track_mask": ["MASK", {}]}}, "input_order": {"required": [], "optional": ["track_coords", "track_mask"]}, "is_input_list": false, "output": ["TRACKS", "INT"], "output_is_list": [false, false], "output_name": ["TRACKS", "track_length"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "WanMoveTracksFromCoords", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanMoveConcatTrack": {"input": {"required": {"tracks_1": ["TRACKS", {}]}, "optional": {"tracks_2": ["TRACKS", {}]}}, "input_order": {"required": ["tracks_1"], "optional": ["tracks_2"]}, "is_input_list": false, "output": ["TRACKS"], "output_is_list": [false], "output_name": ["TRACKS"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanMoveConcatTrack", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanMoveVisualizeTracks": {"input": {"required": {"images": ["IMAGE", {}], "line_resolution": ["INT", {"default": 24, "min": 1, "max": 1024}], "circle_size": ["INT", {"advanced": true, "default": 12, "min": 1, "max": 128}], "opacity": ["FLOAT", {"default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01}], "line_width": ["INT", {"advanced": true, "default": 16, "min": 1, "max": 128}]}, "optional": {"tracks": ["TRACKS", {}]}}, "input_order": {"required": ["images", "line_resolution", "circle_size", "opacity", "line_width"], "optional": ["tracks"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanMoveVisualizeTracks", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GenerateTracks": {"input": {"required": {"width": ["INT", {"default": 832, "min": 16, "max": 4096, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 4096, "step": 16}], "start_x": ["FLOAT", {"tooltip": "Normalized X coordinate (0-1) for start position.", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "start_y": ["FLOAT", {"tooltip": "Normalized Y coordinate (0-1) for start position.", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "end_x": ["FLOAT", {"tooltip": "Normalized X coordinate (0-1) for end position.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "end_y": ["FLOAT", {"tooltip": "Normalized Y coordinate (0-1) for end position.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "num_frames": ["INT", {"default": 81, "min": 1, "max": 1024}], "num_tracks": ["INT", {"default": 5, "min": 1, "max": 100}], "track_spread": ["FLOAT", {"tooltip": "Normalized distance between tracks. Tracks are spread perpendicular to the motion direction.", "default": 0.025, "min": 0.0, "max": 1.0, "step": 0.001}], "bezier": ["BOOLEAN", {"tooltip": "Enable Bezier curve path using the mid point as control point.", "default": false}], "mid_x": ["FLOAT", {"tooltip": "Normalized X control point for Bezier curve. Only used when 'bezier' is enabled.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "mid_y": ["FLOAT", {"tooltip": "Normalized Y control point for Bezier curve. Only used when 'bezier' is enabled.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "interpolation": ["COMBO", {"tooltip": "Controls the timing/speed of movement along the path.", "multiselect": false, "options": ["linear", "ease_in", "ease_out", "ease_in_out", "constant"]}]}, "optional": {"track_mask": ["MASK", {"tooltip": "Optional mask to indicate visible frames."}]}}, "input_order": {"required": ["width", "height", "start_x", "start_y", "end_x", "end_y", "num_frames", "num_tracks", "track_spread", "bezier", "mid_x", "mid_y", "interpolation"], "optional": ["track_mask"]}, "is_input_list": false, "output": ["TRACKS", "INT"], "output_is_list": [false, false], "output_name": ["TRACKS", "track_length"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "GenerateTracks", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["motion paths", "camera movement", "trajectory"], "essentials_category": null, "has_intermediate_output": false}, "EmptyARVideoLatent": {"input": {"required": {"width": ["INT", {"default": 832, "min": 16, "max": 8192, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 8192, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 1024, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyARVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ar_video", "category": "model/latent/video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerARVideo": {"input": {"required": {"num_frame_per_block": ["INT", {"tooltip": "Frames per autoregressive block. 1 = framewise, 3 = chunkwise. Must match the checkpoint's training mode.", "default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["num_frame_per_block"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerARVideo", "display_name": "Sampler AR Video", "description": "", "python_module": "comfy_extras.nodes_ar_video", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ARVideoI2V": {"input": {"required": {"model": ["MODEL", {}], "vae": ["VAE", {}], "start_image": ["IMAGE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 8192, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 8192, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 1024, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["model", "vae", "start_image", "width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["MODEL", "LATENT"], "output_is_list": [false, false], "output_name": ["MODEL", "LATENT"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ARVideoI2V", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ar_video", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageCompare": {"input": {"required": {"compare_view": ["IMAGECOMPARE", {"socketless": true}]}, "optional": {"image_a": ["IMAGE", {}], "image_b": ["IMAGE", {}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["compare_view"], "optional": ["image_a", "image_b"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "ImageCompare", "display_name": "Compare Images", "description": "Compares two images side by side with a slider.", "python_module": "comfy_extras.nodes_image_compare", "category": "image", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": "Image Tools", "has_intermediate_output": false}, "TextEncodeZImageOmni": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}], "auto_resize_images": ["BOOLEAN", {"advanced": true, "default": true}]}, "optional": {"image_encoder": ["CLIP_VISION", {}], "vae": ["VAE", {}], "image1": ["IMAGE", {}], "image2": ["IMAGE", {}], "image3": ["IMAGE", {}]}}, "input_order": {"required": ["clip", "prompt", "auto_resize_images"], "optional": ["image_encoder", "vae", "image1", "image2", "image3"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeZImageOmni", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_zimage", "category": "advanced/conditioning", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GLSLShader": {"input": {"required": {"fragment_shader": ["STRING", {"tooltip": "GLSL fragment shader source code (GLSL ES 3.00 / WebGL 2.0 compatible)", "default": "#version 300 es\nprecision highp float;\n\nuniform sampler2D u_image0;\nuniform vec2 u_resolution;\n\nin vec2 v_texCoord;\nlayout(location = 0) out vec4 fragColor0;\n\nvoid main() {\n    fragColor0 = texture(u_image0, v_texCoord);\n}\n", "multiline": true}], "size_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Output size: 'from_input' uses first input image dimensions, 'custom' allows manual size", "options": [{"key": "from_input", "inputs": {"required": {}}}, {"key": "custom", "inputs": {"required": {"width": ["INT", {"default": 512, "min": 1, "max": 16384}], "height": ["INT", {"default": 512, "min": 1, "max": 16384}]}}}]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Images are available as u_image0-4 (sampler2D) in the shader code", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 1, "max": 5}}], "floats": ["COMFY_AUTOGROW_V3", {"tooltip": "Floats are available as u_float0-19 in the shader code", "template": {"input": {"required": {"float": ["FLOAT", {"default": 0.0, "forceInput": true}]}}, "prefix": "u_float", "min": 0, "max": 20}}], "ints": ["COMFY_AUTOGROW_V3", {"tooltip": "Ints are available as u_int0-19 in the shader code", "template": {"input": {"required": {"int": ["INT", {"default": 0, "forceInput": true}]}}, "prefix": "u_int", "min": 0, "max": 20}}], "bools": ["COMFY_AUTOGROW_V3", {"tooltip": "Booleans are available as u_bool0-9 (bool) in the shader code", "template": {"input": {"required": {"bool": ["BOOLEAN", {"default": false, "forceInput": true}]}}, "prefix": "u_bool", "min": 0, "max": 10}}], "curves": ["COMFY_AUTOGROW_V3", {"tooltip": "Curves are available as u_curve0-3 (sampler2D, 1D LUT) in the shader code. Sample with texture(u_curve0, vec2(x, 0.5)).r", "template": {"input": {"required": {"curve": ["CURVE", {"default": {"points": [[0.0, 0.0], [1.0, 1.0]], "interpolation": "monotone_cubic"}, "socketless": true, "forceInput": true}]}}, "prefix": "u_curve", "min": 0, "max": 4}}]}}, "input_order": {"required": ["fragment_shader", "size_mode", "images", "floats", "ints", "bools", "curves"]}, "is_input_list": false, "output": ["IMAGE", "IMAGE", "IMAGE", "IMAGE"], "output_is_list": [false, false, false, false], "output_name": ["IMAGE0", "IMAGE1", "IMAGE2", "IMAGE3"], "output_tooltips": ["Available via layout(location = 0) out vec4 fragColor0 in the shader code", "Available via layout(location = 1) out vec4 fragColor1 in the shader code", "Available via layout(location = 2) out vec4 fragColor2 in the shader code", "Available via layout(location = 3) out vec4 fragColor3 in the shader code"], "output_matchtypes": null, "name": "GLSLShader", "display_name": "GLSL Shader", "description": "Apply GLSL ES fragment shaders to images. u_resolution (vec2) is always available.", "python_module": "comfy_extras.nodes_glsl", "category": "image/shader", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": true}, "LoraLoaderBypass": {"input": {"required": {"model": ["MODEL", {"tooltip": "The diffusion model the LoRA will be applied to."}], "clip": ["CLIP", {"tooltip": "The CLIP model the LoRA will be applied to."}], "lora_name": [[], {"tooltip": "The name of the LoRA."}], "strength_model": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the diffusion model. This value can be negative."}], "strength_clip": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the CLIP model. This value can be negative."}]}}, "input_order": {"required": ["model", "clip", "lora_name", "strength_model", "strength_clip"]}, "is_input_list": false, "output": ["MODEL", "CLIP"], "output_is_list": [false, false], "output_name": ["MODEL", "CLIP"], "name": "LoraLoaderBypass", "display_name": "Load LoRA (Bypass) (For debugging)", "description": "Apply LoRA in bypass mode. Unlike regular LoRA, this doesn't modify model weights - instead it injects the LoRA computation during forward pass. Useful for training scenarios.", "python_module": "comfy_extras.nodes_lora_debug", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The modified diffusion model.", "The modified CLIP model."], "experimental": true, "search_aliases": []}, "LoraLoaderBypassModelOnly": {"input": {"required": {"model": ["MODEL"], "lora_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "lora_name", "strength_model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "LoraLoaderBypassModelOnly", "display_name": "Load LoRA (Bypass, Model Only) (for debugging)", "description": "Apply LoRA in bypass mode. Unlike regular LoRA, this doesn't modify model weights - instead it injects the LoRA computation during forward pass. Useful for training scenarios.", "python_module": "comfy_extras.nodes_lora_debug", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The modified diffusion model.", "The modified CLIP model."], "experimental": true, "search_aliases": []}, "TextGenerate": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"default": "", "multiline": true, "dynamicPrompts": true}], "max_length": ["INT", {"default": 256, "min": 1, "max": 2048}], "sampling_mode": ["COMFY_DYNAMICCOMBO_V3", {"display_name": "Sampling Mode", "options": [{"key": "on", "inputs": {"required": {"temperature": ["FLOAT", {"default": 0.7, "min": 0.01, "max": 2.0, "step": 1e-06}], "top_k": ["INT", {"default": 64, "min": 0, "max": 1000}], "top_p": ["FLOAT", {"default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "min_p": ["FLOAT", {"default": 0.05, "min": 0.0, "max": 1.0, "step": 0.01}], "repetition_penalty": ["FLOAT", {"default": 1.05, "min": 0.0, "max": 5.0, "step": 0.01}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}]}, "optional": {"presence_penalty": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 5.0, "step": 0.01}]}}}, {"key": "off", "inputs": {"required": {}}}]}]}, "optional": {"image": ["IMAGE", {}], "video": ["IMAGE", {"tooltip": "Video frames as image batch. Assumed to be 24 FPS; subsampled to 1 FPS internally."}], "audio": ["AUDIO", {}], "thinking": ["BOOLEAN", {"tooltip": "Operate in thinking mode if the model supports it.", "default": false}], "use_default_template": ["BOOLEAN", {"tooltip": "Use the built in system prompt/template if the model has one.", "advanced": true, "default": true}]}}, "input_order": {"required": ["clip", "prompt", "max_length", "sampling_mode"], "optional": ["image", "video", "audio", "thinking", "use_default_template"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["generated_text"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextGenerate", "display_name": "Generate Text", "description": "", "python_module": "comfy_extras.nodes_textgen", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["LLM", "gemma"], "essentials_category": null, "has_intermediate_output": false}, "TextGenerateLTX2Prompt": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"default": "", "multiline": true, "dynamicPrompts": true}], "max_length": ["INT", {"default": 256, "min": 1, "max": 2048}], "sampling_mode": ["COMFY_DYNAMICCOMBO_V3", {"display_name": "Sampling Mode", "options": [{"key": "on", "inputs": {"required": {"temperature": ["FLOAT", {"default": 0.7, "min": 0.01, "max": 2.0, "step": 1e-06}], "top_k": ["INT", {"default": 64, "min": 0, "max": 1000}], "top_p": ["FLOAT", {"default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "min_p": ["FLOAT", {"default": 0.05, "min": 0.0, "max": 1.0, "step": 0.01}], "repetition_penalty": ["FLOAT", {"default": 1.05, "min": 0.0, "max": 5.0, "step": 0.01}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}]}, "optional": {"presence_penalty": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 5.0, "step": 0.01}]}}}, {"key": "off", "inputs": {"required": {}}}]}]}, "optional": {"image": ["IMAGE", {}], "video": ["IMAGE", {"tooltip": "Video frames as image batch. Assumed to be 24 FPS; subsampled to 1 FPS internally."}], "audio": ["AUDIO", {}], "thinking": ["BOOLEAN", {"tooltip": "Operate in thinking mode if the model supports it.", "default": false}], "use_default_template": ["BOOLEAN", {"tooltip": "Use the built in system prompt/template if the model has one.", "advanced": true, "default": true}]}}, "input_order": {"required": ["clip", "prompt", "max_length", "sampling_mode"], "optional": ["image", "video", "audio", "thinking", "use_default_template"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["generated_text"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextGenerateLTX2Prompt", "display_name": "Generate LTX2 Prompt", "description": "", "python_module": "comfy_extras.nodes_textgen", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["prompt enhance", "LLM", "gemma"], "essentials_category": null, "has_intermediate_output": false}, "ColorToRGBInt": {"input": {"required": {"color": ["COLOR", {"default": "#ffffff", "socketless": true}]}}, "input_order": {"required": ["color"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["rgb_int"], "output_tooltips": [null], "output_matchtypes": null, "name": "ColorToRGBInt", "display_name": "Color to RGB Int", "description": "Convert a color to a RGB integer value.", "python_module": "comfy_extras.nodes_color", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CreateList": {"input": {"required": {"inputs": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"input": ["COMFY_MATCHTYPE_V3", {"template": {"template_id": "type", "allowed_types": "*"}}]}}, "prefix": "input", "min": 1, "max": 10}}]}}, "input_order": {"required": ["inputs"]}, "is_input_list": true, "output": ["COMFY_MATCHTYPE_V3"], "output_is_list": [true], "output_name": ["list"], "output_tooltips": [null], "output_matchtypes": ["type"], "name": "CreateList", "display_name": "Create List", "description": "", "python_module": "comfy_extras.nodes_toolkit", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["Image Iterator", "Text Iterator", "Iterator"], "essentials_category": null, "has_intermediate_output": false}, "NAGuidance": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to apply NAG to."}], "nag_scale": ["FLOAT", {"tooltip": "The guidance scale factor. Higher values push further from the negative prompt.", "default": 5.0, "min": 0.0, "max": 50.0, "step": 0.1}], "nag_alpha": ["FLOAT", {"tooltip": "Blending factor for the normalized attention. 1.0 is full replacement, 0.0 is no effect.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "nag_tau": ["FLOAT", {"default": 1.5, "min": 1.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "nag_scale", "nag_alpha", "nag_tau"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The patched model with NAG enabled."], "output_matchtypes": null, "name": "NAGuidance", "display_name": "Normalized Attention Guidance", "description": "Applies Normalized Attention Guidance to models, enabling negative prompts on distilled/schnell models.", "python_module": "comfy_extras.nodes_nag", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SDPoseKeypointExtractor": {"input": {"required": {"model": ["MODEL", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "batch_size": ["INT", {"default": 16, "min": 1, "max": 10000, "step": 1}]}, "optional": {"bboxes": ["BOUNDING_BOX", {"tooltip": "Optional bounding boxes for more accurate detections. Required for multi-person detection.", "default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "forceInput": true}]}}, "input_order": {"required": ["model", "vae", "image", "batch_size"], "optional": ["bboxes"]}, "is_input_list": false, "output": ["POSE_KEYPOINT"], "output_is_list": [false], "output_name": ["keypoints"], "output_tooltips": ["Keypoints in OpenPose frame format (canvas_width, canvas_height, people)"], "output_matchtypes": null, "name": "SDPoseKeypointExtractor", "display_name": "SDPose Keypoint Extractor", "description": "Extract pose keypoints from images using the SDPose model: https://huggingface.co/Comfy-Org/SDPose/tree/main/checkpoints", "python_module": "comfy_extras.nodes_sdpose", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["openpose", "pose detection", "preprocessor", "keypoints", "sdpose"], "essentials_category": null, "has_intermediate_output": false}, "SDPoseDrawKeypoints": {"input": {"required": {"keypoints": ["POSE_KEYPOINT", {}], "draw_body": ["BOOLEAN", {"default": true}], "draw_hands": ["BOOLEAN", {"default": true}], "draw_face": ["BOOLEAN", {"default": true}], "draw_feet": ["BOOLEAN", {"default": false}], "stick_width": ["INT", {"default": 4, "min": 1, "max": 10, "step": 1}], "face_point_size": ["INT", {"default": 3, "min": 1, "max": 10, "step": 1}], "score_threshold": ["FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["keypoints", "draw_body", "draw_hands", "draw_face", "draw_feet", "stick_width", "face_point_size", "score_threshold"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "SDPoseDrawKeypoints", "display_name": "SDPose Draw Keypoints", "description": "", "python_module": "comfy_extras.nodes_sdpose", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["openpose", "pose detection", "preprocessor", "keypoints", "pose"], "essentials_category": null, "has_intermediate_output": false}, "SDPoseFaceBBoxes": {"input": {"required": {"keypoints": ["POSE_KEYPOINT", {}], "scale": ["FLOAT", {"tooltip": "Multiplier for the bounding box area around each detected face.", "default": 1.5, "min": 1.0, "max": 10.0, "step": 0.1}], "force_square": ["BOOLEAN", {"tooltip": "Expand the shorter bbox axis so the crop region is always square.", "default": true}]}}, "input_order": {"required": ["keypoints", "scale", "force_square"]}, "is_input_list": false, "output": ["BOUNDING_BOX"], "output_is_list": [false], "output_name": ["bboxes"], "output_tooltips": ["Face bounding boxes per frame, compatible with SDPoseKeypointExtractor bboxes input."], "output_matchtypes": null, "name": "SDPoseFaceBBoxes", "display_name": "SDPose Face Bounding Boxes", "description": "", "python_module": "comfy_extras.nodes_sdpose", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face bbox", "face bounding box", "pose", "keypoints"], "essentials_category": null, "has_intermediate_output": false}, "CropByBBoxes": {"input": {"required": {"image": ["IMAGE", {}], "bboxes": ["BOUNDING_BOX", {"default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "forceInput": true}], "output_width": ["INT", {"tooltip": "Width each crop is resized to.", "default": 512, "min": 64, "max": 4096, "step": 8}], "output_height": ["INT", {"tooltip": "Height each crop is resized to.", "default": 512, "min": 64, "max": 4096, "step": 8}], "padding": ["INT", {"tooltip": "Extra padding in pixels added on each side of the bbox before cropping.", "default": 0, "min": 0, "max": 1024, "step": 1}], "keep_aspect": ["COMBO", {"tooltip": "Whether to stretch the crop to fit the output size, or pad with black pixels to preserve aspect ratio.", "default": "stretch", "multiselect": false, "options": ["stretch", "pad"]}]}}, "input_order": {"required": ["image", "bboxes", "output_width", "output_height", "padding", "keep_aspect"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": ["All crops stacked into a single image batch."], "output_matchtypes": null, "name": "CropByBBoxes", "display_name": "Crop By Bounding Boxes", "description": "Crop and resize regions from the input image batch based on provided bounding boxes.", "python_module": "comfy_extras.nodes_sdpose", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop", "face crop", "bbox crop", "pose", "bounding box"], "essentials_category": null, "has_intermediate_output": false}, "ComfyMathExpression": {"input": {"required": {"expression": ["STRING", {"default": "a + b", "multiline": true}], "values": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"value": ["FLOAT,INT,BOOLEAN", {}]}}, "names": ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"], "min": 1}}]}}, "input_order": {"required": ["expression", "values"]}, "is_input_list": false, "output": ["FLOAT", "INT", "BOOLEAN"], "output_is_list": [false, false, false], "output_name": ["FLOAT", "INT", "BOOL"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "ComfyMathExpression", "display_name": "Math Expression", "description": "", "python_module": "comfy_extras.nodes_math", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["expression", "formula", "calculate", "calculator", "eval", "math"], "essentials_category": null, "has_intermediate_output": false}, "ComfyNumberConvert": {"input": {"required": {"value": ["INT,FLOAT,STRING,BOOLEAN", {"display_name": "value"}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["FLOAT", "INT"], "output_is_list": [false, false], "output_name": ["FLOAT", "INT"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ComfyNumberConvert", "display_name": "Convert Number", "description": "", "python_module": "comfy_extras.nodes_number_convert", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["int to float", "float to int", "number convert", "int2float", "float2int", "cast", "parse number", "string to number", "bool to int"], "essentials_category": null, "has_intermediate_output": false}, "Painter": {"input": {"required": {"mask": ["STRING", {"widgetType": "PAINTER", "image_upload": true, "default": "", "socketless": true, "multiline": false}], "width": ["INT", {"hidden": true, "default": 512, "socketless": true, "min": 64, "max": 4096, "step": 64}], "height": ["INT", {"hidden": true, "default": 512, "socketless": true, "min": 64, "max": 4096, "step": 64}], "bg_color": ["COLOR", {"default": "#000000", "socketless": true}]}, "optional": {"image": ["IMAGE", {"tooltip": "Optional base image to paint over"}]}}, "input_order": {"required": ["mask", "width", "height", "bg_color"], "optional": ["image"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Painter", "display_name": "Painter", "description": "", "python_module": "comfy_extras.nodes_painter", "category": "image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": true}, "CurveEditor": {"input": {"required": {"curve": ["CURVE", {"default": {"points": [[0.0, 0.0], [1.0, 1.0]], "interpolation": "monotone_cubic"}, "socketless": true}]}, "optional": {"histogram": ["HISTOGRAM", {}]}}, "input_order": {"required": ["curve"], "optional": ["histogram"]}, "is_input_list": false, "output": ["CURVE"], "output_is_list": [false], "output_name": ["curve"], "output_tooltips": [null], "output_matchtypes": null, "name": "CurveEditor", "display_name": "Curve Editor", "description": "", "python_module": "comfy_extras.nodes_curve", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageHistogram": {"input": {"required": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["HISTOGRAM", "HISTOGRAM", "HISTOGRAM", "HISTOGRAM", "HISTOGRAM"], "output_is_list": [false, false, false, false, false], "output_name": ["rgb", "luminance", "red", "green", "blue"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "ImageHistogram", "display_name": "Image Histogram", "description": "", "python_module": "comfy_extras.nodes_curve", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LoadBackgroundRemovalModel": {"input": {"required": {"bg_removal_name": ["COMBO", {"tooltip": "The model used to remove backgrounds from images", "multiselect": false, "options": []}]}}, "input_order": {"required": ["bg_removal_name"]}, "is_input_list": false, "output": ["BACKGROUND_REMOVAL"], "output_is_list": [false], "output_name": ["bg_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadBackgroundRemovalModel", "display_name": "Load Background Removal Model", "description": "", "python_module": "comfy_extras.nodes_bg_removal", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RemoveBackground": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Input image to remove the background from"}], "bg_removal_model": ["BACKGROUND_REMOVAL", {"tooltip": "Background removal model used to generate the mask"}]}}, "input_order": {"required": ["image", "bg_removal_model"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["mask"], "output_tooltips": ["Generated foreground mask"], "output_matchtypes": null, "name": "RemoveBackground", "display_name": "Remove Background", "description": "Generates a foreground mask to remove the background from an image using a background removal model.", "python_module": "comfy_extras.nodes_bg_removal", "category": "image/background removal", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RTDETR_detect": {"input": {"required": {"model": ["MODEL", {"display_name": "model"}], "image": ["IMAGE", {"display_name": "image"}], "threshold": ["FLOAT", {"display_name": "threshold", "default": 0.5}], "class_name": ["COMBO", {"tooltip": "Filter detections by class. Set to 'all' to disable filtering.", "default": "all", "multiselect": false, "options": ["all", "person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", "traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard", "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", "couch", "potted plant", "bed", "dining table", "toilet", "tv", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear", "hair drier", "toothbrush"]}], "max_detections": ["INT", {"display_name": "max_detections", "tooltip": "Maximum number of detections to return per image. In order of descending confidence score.", "default": 100}]}}, "input_order": {"required": ["model", "image", "threshold", "class_name", "max_detections"]}, "is_input_list": false, "output": ["BOUNDING_BOX"], "output_is_list": [false], "output_name": ["bboxes"], "output_tooltips": [null], "output_matchtypes": null, "name": "RTDETR_detect", "display_name": "RT-DETR Detect", "description": "", "python_module": "comfy_extras.nodes_rtdetr", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["bbox", "bounding box", "object detection", "coco"], "essentials_category": null, "has_intermediate_output": false}, "DrawBBoxes": {"input": {"required": {"bboxes": ["BOUNDING_BOX", {"default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "forceInput": true}]}, "optional": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["bboxes"], "optional": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["out_image"], "output_tooltips": [null], "output_matchtypes": null, "name": "DrawBBoxes", "display_name": "Draw BBoxes", "description": "", "python_module": "comfy_extras.nodes_rtdetr", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["bbox", "bounding box", "object detection", "rt_detr", "visualize detections", "coco"], "essentials_category": null, "has_intermediate_output": false}, "FrameInterpolationModelLoader": {"input": {"required": {"model_name": ["COMBO", {"tooltip": "Select a frame interpolation model to load. Models must be placed in the 'frame_interpolation' folder.", "multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["INTERP_MODEL"], "output_is_list": [false], "output_name": ["INTERP_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "FrameInterpolationModelLoader", "display_name": "Load Frame Interpolation Model", "description": "", "python_module": "comfy_extras.nodes_frame_interpolation", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FrameInterpolate": {"input": {"required": {"interp_model": ["INTERP_MODEL", {}], "images": ["IMAGE", {}], "multiplier": ["INT", {"default": 2, "min": 2, "max": 16}]}}, "input_order": {"required": ["interp_model", "images", "multiplier"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FrameInterpolate", "display_name": "Frame Interpolate", "description": "", "python_module": "comfy_extras.nodes_frame_interpolation", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["rife", "film", "frame interpolation", "slow motion", "interpolate frames", "vfi"], "essentials_category": null, "has_intermediate_output": false}, "SAM3_Detect": {"input": {"required": {"model": ["MODEL", {"display_name": "model"}], "image": ["IMAGE", {"display_name": "image"}], "threshold": ["FLOAT", {"display_name": "threshold", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "refine_iterations": ["INT", {"display_name": "refine_iterations", "tooltip": "SAM decoder refinement passes (0=use raw detector masks)", "default": 2, "min": 0, "max": 5}], "individual_masks": ["BOOLEAN", {"display_name": "individual_masks", "tooltip": "Output per-object masks instead of union", "default": false}]}, "optional": {"conditioning": ["CONDITIONING", {"display_name": "conditioning", "tooltip": "Text conditioning from CLIPTextEncode"}], "bboxes": ["BOUNDING_BOX", {"display_name": "bboxes", "tooltip": "Bounding boxes to segment within", "default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "forceInput": true}], "positive_coords": ["STRING", {"display_name": "positive_coords", "tooltip": "Positive point prompts as JSON [{\"x\": int, \"y\": int}, ...] (pixel coords)", "forceInput": true, "multiline": false}], "negative_coords": ["STRING", {"display_name": "negative_coords", "tooltip": "Negative point prompts as JSON [{\"x\": int, \"y\": int}, ...] (pixel coords)", "forceInput": true, "multiline": false}]}}, "input_order": {"required": ["model", "image", "threshold", "refine_iterations", "individual_masks"], "optional": ["conditioning", "bboxes", "positive_coords", "negative_coords"]}, "is_input_list": false, "output": ["MASK", "BOUNDING_BOX"], "output_is_list": [false, false], "output_name": ["masks", "bboxes"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SAM3_Detect", "display_name": "SAM3 Detect", "description": "", "python_module": "comfy_extras.nodes_sam3", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sam3", "segment anything", "open vocabulary", "text detection", "segment"], "essentials_category": null, "has_intermediate_output": false}, "SAM3_VideoTrack": {"input": {"required": {"images": ["IMAGE", {"display_name": "images", "tooltip": "Video frames as batched images"}], "model": ["MODEL", {"display_name": "model"}], "detection_threshold": ["FLOAT", {"display_name": "detection_threshold", "tooltip": "Score threshold for text-prompted detection.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "max_objects": ["INT", {"display_name": "max_objects", "tooltip": "Max tracked objects. Initial masks count toward this limit. 0 uses the internal cap of 64.", "default": 4, "min": 0, "max": 64}], "detect_interval": ["INT", {"display_name": "detect_interval", "tooltip": "Run detection every N frames (1=every frame). Higher values save compute.", "default": 1, "min": 1}]}, "optional": {"initial_mask": ["MASK", {"display_name": "initial_mask", "tooltip": "Mask(s) for the first frame to track (one per object)"}], "conditioning": ["CONDITIONING", {"display_name": "conditioning", "tooltip": "Text conditioning for detecting new objects during tracking"}]}}, "input_order": {"required": ["images", "model", "detection_threshold", "max_objects", "detect_interval"], "optional": ["initial_mask", "conditioning"]}, "is_input_list": false, "output": ["SAM3_TRACK_DATA"], "output_is_list": [false], "output_name": ["track_data"], "output_tooltips": [null], "output_matchtypes": null, "name": "SAM3_VideoTrack", "display_name": "SAM3 Video Track", "description": "", "python_module": "comfy_extras.nodes_sam3", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sam3", "video", "track", "propagate"], "essentials_category": null, "has_intermediate_output": false}, "SAM3_TrackPreview": {"input": {"required": {"track_data": ["SAM3_TRACK_DATA", {"display_name": "track_data"}], "opacity": ["FLOAT", {"display_name": "opacity", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.05}], "fps": ["FLOAT", {"display_name": "fps", "default": 24.0, "min": 1.0, "max": 120.0, "step": 1.0}]}, "optional": {"images": ["IMAGE", {"display_name": "images"}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["track_data", "opacity", "fps"], "optional": ["images"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SAM3_TrackPreview", "display_name": "SAM3 Track Preview", "description": "", "python_module": "comfy_extras.nodes_sam3", "category": "image/detection", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SAM3_TrackToMask": {"input": {"required": {"track_data": ["SAM3_TRACK_DATA", {"display_name": "track_data"}], "object_indices": ["STRING", {"display_name": "object_indices", "tooltip": "Comma-separated object indices to include (e.g. '0,2,3'). Empty = all objects.", "default": "", "multiline": false}]}}, "input_order": {"required": ["track_data", "object_indices"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["masks"], "output_tooltips": [null], "output_matchtypes": null, "name": "SAM3_TrackToMask", "display_name": "SAM3 Track to Mask", "description": "", "python_module": "comfy_extras.nodes_sam3", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpticalFlowLoader": {"input": {"required": {"model_name": ["COMBO", {"tooltip": "Optical flow model to load.  Files must be placed in the 'optical_flow' folder.  Today only torchvision's raft_large.pth is supported.", "multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["OPTICAL_FLOW"], "output_is_list": [false], "output_name": ["OPTICAL_FLOW"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpticalFlowLoader", "display_name": "Load Optical Flow Model", "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDQuadmaskPreprocess": {"input": {"required": {"mask": ["MASK", {}], "dilate_width": ["INT", {"tooltip": "Dilation radius for the primary mask region (0 = no dilation)", "default": 0, "min": 0, "max": 50, "step": 1}]}}, "input_order": {"required": ["mask", "dilate_width"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["quadmask"], "output_tooltips": [null], "output_matchtypes": null, "name": "VOIDQuadmaskPreprocess", "display_name": "VOID Quadmask Preprocessor", "description": "", "python_module": "comfy_extras.nodes_void", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDInpaintConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "video": ["IMAGE", {"tooltip": "Source video frames [T, H, W, 3]"}], "quadmask": ["MASK", {"tooltip": "Preprocessed quadmask from VOIDQuadmaskPreprocess [T, H, W]"}], "width": ["INT", {"default": 672, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 384, "min": 16, "max": 16384, "step": 8}], "length": ["INT", {"tooltip": "Number of pixel frames to process. For CogVideoX-Fun-V1.5 (patch_size_t=2), latent_t must be even \u2014 lengths that produce odd latent_t are rounded down (e.g. 49 \u2192 45).", "default": 45, "min": 1, "max": 16384, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["positive", "negative", "vae", "video", "quadmask", "width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "VOIDInpaintConditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDWarpedNoise": {"input": {"required": {"optical_flow": ["OPTICAL_FLOW", {"tooltip": "Optical flow model from OpticalFlowLoader (RAFT-large)."}], "video": ["IMAGE", {"tooltip": "Pass 1 output video frames [T, H, W, 3]"}], "width": ["INT", {"default": 672, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 384, "min": 16, "max": 16384, "step": 8}], "length": ["INT", {"tooltip": "Number of pixel frames. Rounded down to make latent_t even (patch_size_t=2 requirement), e.g. 49 \u2192 45.", "default": 45, "min": 1, "max": 16384, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["optical_flow", "video", "width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["warped_noise"], "output_tooltips": [null], "output_matchtypes": null, "name": "VOIDWarpedNoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/latent/video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDWarpedNoiseSource": {"input": {"required": {"warped_noise": ["LATENT", {"tooltip": "Warped noise latent from VOIDWarpedNoise"}]}}, "input_order": {"required": ["warped_noise"]}, "is_input_list": false, "output": ["NOISE"], "output_is_list": [false], "output_name": ["NOISE"], "output_tooltips": [null], "output_matchtypes": null, "name": "VOIDWarpedNoiseSource", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/sampling/noise", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDSampler": {"input": {"required": {}}, "input_order": {"required": []}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "VOIDSampler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanDancerVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"tooltip": "The number of frames in the generated video. Should stay 149 for WanDancer.", "default": 149, "min": 1, "max": 16384, "step": 4}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {"tooltip": "The CLIP vision embeds for the first frame."}], "clip_vision_output_ref": ["CLIP_VISION_OUTPUT", {"tooltip": "The CLIP vision embeds for the reference image."}], "start_image": ["IMAGE", {"tooltip": "The initial image(s) to be encoded, can be any number of frames."}], "mask": ["MASK", {"tooltip": "Image conditioning mask for the start image(s). White is kept, black is generated. Used for the local generations."}], "audio_encoder_output": ["AUDIO_ENCODER_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length"], "optional": ["clip_vision_output", "clip_vision_output_ref", "start_image", "mask", "audio_encoder_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, "Empty latent."], "output_matchtypes": null, "name": "WanDancerVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wandancer", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanDancerEncodeAudio": {"input": {"required": {"audio": ["AUDIO", {}], "video_frames": ["INT", {"default": 149, "min": 1, "max": 16384, "step": 4}], "audio_inject_scale": ["FLOAT", {"tooltip": "The scale for the audio features when injected into the video model.", "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["audio", "video_frames", "audio_inject_scale"]}, "is_input_list": false, "output": ["AUDIO_ENCODER_OUTPUT", "STRING"], "output_is_list": [false, false], "output_name": ["audio_encoder_output", "fps_string"], "output_tooltips": [null, "The calculated fps based on the audio length and the number of video frames. Used in the prompt."], "output_matchtypes": null, "name": "WanDancerEncodeAudio", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wandancer", "category": "model/conditioning/video_models", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanDancerPadKeyframes": {"input": {"required": {"images": ["IMAGE", {}], "segment_length": ["INT", {"tooltip": "Length of this segment (usually 149 frames)", "default": 149, "min": 1, "max": 10000}], "segment_index": ["INT", {"tooltip": "Which segment this is (0 for first, 1 for second, etc.)", "default": 0, "min": 0, "max": 100}], "audio": ["AUDIO", {"tooltip": "Audio to calculate total output frames from and extract segment audio."}]}}, "input_order": {"required": ["images", "segment_length", "segment_index", "audio"]}, "is_input_list": false, "output": ["IMAGE", "MASK", "AUDIO"], "output_is_list": [false, false, false], "output_name": ["keyframes_sequence", "keyframes_mask", "audio_segment"], "output_tooltips": ["Padded keyframe sequence", "Mask indicating valid frames", "Audio segment for this video segment"], "output_matchtypes": null, "name": "WanDancerPadKeyframes", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wandancer", "category": "image/video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanDancerPadKeyframesList": {"input": {"required": {"images": ["IMAGE", {}], "segment_length": ["INT", {"tooltip": "Length of each segment (usually 149 frames)", "default": 149, "min": 1, "max": 10000}], "num_segments": ["INT", {"tooltip": "How many padded segments to emit as lists.", "default": 1, "min": 1, "max": 100}], "audio": ["AUDIO", {"tooltip": "Audio to slice for each emitted segment."}]}}, "input_order": {"required": ["images", "segment_length", "num_segments", "audio"]}, "is_input_list": false, "output": ["IMAGE", "MASK", "AUDIO"], "output_is_list": [true, true, true], "output_name": ["keyframes_sequence", "keyframes_mask", "audio_segment"], "output_tooltips": ["Padded keyframe sequences", "Masks indicating valid frames", "Audio segment for each video segment"], "output_matchtypes": null, "name": "WanDancerPadKeyframesList", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wandancer", "category": "image/video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyHiDreamO1LatentImage": {"input": {"required": {"width": ["INT", {"default": 2048, "min": 64, "max": 4096, "step": 32}], "height": ["INT", {"default": 2048, "min": 64, "max": 4096, "step": 32}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyHiDreamO1LatentImage", "display_name": "Empty HiDream-O1 Latent Image", "description": "Empty pixel-space latent for HiDream-O1-Image. The model was trained at ~4 megapixels; lower resolutions go off-distribution and quality regresses noticeably. Trained resolutions: 2048x2048, 2304x1728, 1728x2304, 2560x1440, 1440x2560, 2496x1664, 1664x2496, 3104x1312, 1312x3104, 2304x1792, 1792x2304.", "python_module": "comfy_extras.nodes_hidream_o1", "category": "model/latent/image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HiDreamO1ReferenceImages": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference images. 1 image = instruction edit; 2-10 images = multi reference.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 1}}]}}, "input_order": {"required": ["positive", "negative", "images"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "HiDreamO1ReferenceImages", "display_name": "HiDream-O1 Reference Images", "description": "Attach 1-10 reference images to conditioning, one for edit instructionor multiple for subject-driven personalization.", "python_module": "comfy_extras.nodes_hidream_o1", "category": "model/conditioning/image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HiDreamO1PatchSeamSmoothing": {"input": {"required": {"model": ["MODEL", {}], "start_percent": ["FLOAT", {"tooltip": "Sampling progress (0=start, 1=end) at which the blend turns ON.", "default": 0.8, "min": 0.0, "max": 1.0, "step": 0.01}], "end_percent": ["FLOAT", {"tooltip": "Sampling progress at which the blend turns OFF.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "pattern": ["COMBO", {"tooltip": "Shift layout. single_shift: one pass at the natural patch grid + others offset. symmetric: all passes off-grid, shifts split around origin.", "default": "single_shift", "multiselect": false, "options": ["single_shift", "symmetric"]}], "passes": ["COMBO", {"tooltip": "Number of passes per gated step. 2/4 = fixed. ramp_*: pass count increases as sampling approaches end (more smoothing where seams are most visible).", "default": "2", "multiselect": false, "options": ["2", "4", "ramp_2_4", "ramp_2_4_8"]}], "blend": ["COMBO", {"tooltip": "average: equal-weight mean. window: Hann-windowed weighting favoring each pass away from its patch boundaries. median: per-pixel median, rejects wraparound-outlier passes.", "default": "average", "multiselect": false, "options": ["average", "window", "median"]}], "strength": ["FLOAT", {"tooltip": "Interpolation between the natural-grid pred (0) and the averaged result (1).", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "start_percent", "end_percent", "pattern", "passes", "blend", "strength"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "HiDreamO1PatchSeamSmoothing", "display_name": "HiDream-O1 Patch Seam Smoothing", "description": "Average the model output across multiple shifted patch-grid positions during the late portion of sampling. Cancels seams.", "python_module": "comfy_extras.nodes_hidream_o1", "category": "advanced/model", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveGLB": {"input": {"required": {"mesh": ["MESH,FILE_3D_GLB,FILE_3D_GLTF,FILE_3D_OBJ,FILE_3D_FBX,FILE_3D_STL,FILE_3D_USDZ,FILE_3D", {"tooltip": "Mesh or 3D file to save"}], "filename_prefix": ["STRING", {"default": "3d/ComfyUI", "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["mesh", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveGLB", "display_name": "Save 3D Model", "description": "", "python_module": "comfy_extras.nodes_save_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export 3d model", "save mesh"], "essentials_category": "Basics", "has_intermediate_output": false}, "LoadMoGeModel": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["MOGE_MODEL"], "output_is_list": [false], "output_name": ["MOGE_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadMoGeModel", "display_name": "Load MoGe Model", "description": "", "python_module": "comfy_extras.nodes_moge", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MoGeInference": {"input": {"required": {"moge_model": ["MOGE_MODEL", {}], "image": ["IMAGE", {}], "resolution_level": ["INT", {"tooltip": "0 = fastest, 9 = most detail.", "default": 9, "min": 0, "max": 9}], "fov_x_degrees": ["FLOAT", {"tooltip": "Horizontal field of view of the source camera. Sets the focal length used to unproject the depth map into 3D. 0 = auto-recover from the predicted points.", "advanced": true, "default": 0.0, "min": 0.0, "max": 170.0, "step": 0.1}], "batch_size": ["INT", {"tooltip": "Images per inference call. Lower if you OOM on a long video / image set.", "default": 4, "min": 1, "max": 64}], "force_projection": ["BOOLEAN", {"advanced": true, "default": true}], "apply_mask": ["BOOLEAN", {"tooltip": "Set masked-out (sky / invalid) pixels to inf in points and depth so meshing culls them. Disable to keep the raw predicted geometry everywhere; the mask is still returned separately.", "advanced": true, "default": true}]}}, "input_order": {"required": ["moge_model", "image", "resolution_level", "fov_x_degrees", "batch_size", "force_projection", "apply_mask"]}, "is_input_list": false, "output": ["MOGE_GEOMETRY"], "output_is_list": [false], "output_name": ["moge_geometry"], "output_tooltips": [null], "output_matchtypes": null, "name": "MoGeInference", "display_name": "Run MoGe Inference", "description": "Run MoGe on a single image to estimate depth and geometry.", "python_module": "comfy_extras.nodes_moge", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["moge", "depth", "geometry", "depth estimation", "geometry estimation"], "essentials_category": null, "has_intermediate_output": false}, "MoGePanoramaInference": {"input": {"required": {"moge_model": ["MOGE_MODEL", {}], "image": ["IMAGE", {"tooltip": "Equirectangular panorama (any aspect)."}], "resolution_level": ["INT", {"tooltip": "Per-view detail (0 = fastest, 9 = most detailed).", "default": 9, "min": 0, "max": 9}], "split_resolution": ["INT", {"tooltip": "Resolution of each perspective split.", "default": 512, "min": 256, "max": 1024}], "merge_resolution": ["INT", {"tooltip": "Long-side resolution of the merged equirect distance map.", "default": 1920, "min": 256, "max": 8192}], "batch_size": ["INT", {"tooltip": "Views per inference batch (12 splits total).", "default": 4, "min": 1, "max": 12}]}}, "input_order": {"required": ["moge_model", "image", "resolution_level", "split_resolution", "merge_resolution", "batch_size"]}, "is_input_list": false, "output": ["MOGE_GEOMETRY"], "output_is_list": [false], "output_name": ["moge_geometry"], "output_tooltips": [null], "output_matchtypes": null, "name": "MoGePanoramaInference", "display_name": "Run MoGe Panorama Inference", "description": "Run MoGe on an equirectangular panorama by splitting it into 12 perspective views, running inference on each, and merging the results into a single depth map.", "python_module": "comfy_extras.nodes_moge", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["moge", "panorama", "depth", "geometry", "depth estimation", "geometry estimation"], "essentials_category": null, "has_intermediate_output": false}, "MoGeRender": {"input": {"required": {"moge_geometry": ["MOGE_GEOMETRY", {}], "output": ["COMBO", {"tooltip": "DirectX vs OpenGL controls the normal-map green-channel convention. DirectX: green = -Y down (Unreal). OpenGL: green = +Y up (Blender, Substance, Unity, glTF).", "default": "depth", "multiselect": false, "options": ["depth", "depth_colored", "normal_opengl", "normal_directx", "mask"]}]}}, "input_order": {"required": ["moge_geometry", "output"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MoGeRender", "display_name": "Render MoGe Geometry", "description": "Render a depth map or normal map from geometry data", "python_module": "comfy_extras.nodes_moge", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["moge", "render", "geometry", "depth", "normal"], "essentials_category": null, "has_intermediate_output": false}, "MoGePointMapToMesh": {"input": {"required": {"moge_geometry": ["MOGE_GEOMETRY", {}], "batch_index": ["INT", {"tooltip": "Which image of a batched MoGe geometry to mesh. Per-image vertex counts differ, so batches can't be stacked into a single MESH.", "default": 0, "min": 0, "max": 4096}], "decimation": ["INT", {"tooltip": "Vertex stride; 1 = full resolution.", "default": 1, "min": 1, "max": 8}], "discontinuity_threshold": ["FLOAT", {"tooltip": "Drop pixels whose 3x3 depth span exceeds this fraction. 0 = off.", "default": 0.04, "min": 0.0, "max": 1.0, "step": 0.01}], "texture": ["BOOLEAN", {"tooltip": "Carry the source image through as the baseColor texture.", "default": true}]}}, "input_order": {"required": ["moge_geometry", "batch_index", "decimation", "discontinuity_threshold", "texture"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["MESH"], "output_tooltips": [null], "output_matchtypes": null, "name": "MoGePointMapToMesh", "display_name": "Convert MoGe Point Map to Mesh", "description": "Convert a MoGe point map into a 3D mesh.", "python_module": "comfy_extras.nodes_moge", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["moge", "mesh", "geometry", "point map"], "essentials_category": null, "has_intermediate_output": false}, "LoadMediaPipeFaceLandmarker": {"input": {"required": {"model_name": ["COMBO", {"tooltip": "Face detection model from models/detection/.", "multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["FACE_DETECTION_MODEL"], "output_is_list": [false], "output_name": ["FACE_DETECTION_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadMediaPipeFaceLandmarker", "display_name": "Load Face Detection Model (MediaPipe)", "description": "", "python_module": "comfy_extras.nodes_mediapipe", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face", "facial", "mediapipe", "face landmark", "face mesh", "blazeface", "face detection"], "essentials_category": null, "has_intermediate_output": false}, "MediaPipeFaceLandmarker": {"input": {"required": {"face_detection_model": ["FACE_DETECTION_MODEL", {}], "image": ["IMAGE", {}], "detector_variant": ["COMBO", {"tooltip": "Face detector range. 'short' is tuned for close-up faces (within ~2 m of the camera); 'full' covers farther / smaller faces (up to ~5 m) but is slower. 'both' runs both detectors and keeps whichever found more faces per frame (~2\u00d7 detection cost).", "default": "short", "multiselect": false, "options": ["short", "full", "both"]}], "num_faces": ["INT", {"tooltip": "Maximum faces to return per frame. 0 = no cap (return all detected).", "default": 1, "min": 0, "max": 16, "step": 1}], "min_confidence": ["FLOAT", {"tooltip": "BlazeFace score threshold. Lower to catch small/occluded faces.", "advanced": true, "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "missing_frame_fallback": ["COMBO", {"tooltip": "Per-frame behaviour when detection fails in a batch. 'empty' leaves the frame faceless. 'previous' copies the most recent successful detection. 'interpolate' lerps landmarks/bbox/blendshapes between bracketing successful frames. Multi-face: pairs faces across frames by greedy bbox-centre NN.", "advanced": true, "default": "empty", "multiselect": false, "options": ["empty", "previous", "interpolate"]}]}}, "input_order": {"required": ["face_detection_model", "image", "detector_variant", "num_faces", "min_confidence", "missing_frame_fallback"]}, "is_input_list": false, "output": ["FACE_LANDMARKS", "BOUNDING_BOX"], "output_is_list": [false, false], "output_name": ["face_landmarks", "bboxes"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "MediaPipeFaceLandmarker", "display_name": "Detect Face Landmarks (MediaPipe)", "description": "Detects facial landmarks using MediaPipe model.", "python_module": "comfy_extras.nodes_mediapipe", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face", "facial", "mediapipe", "face landmark", "face mesh", "blazeface", "face detection"], "essentials_category": null, "has_intermediate_output": false}, "MediaPipeFaceMeshVisualize": {"input": {"required": {"face_landmarks": ["FACE_LANDMARKS", {}], "connections": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "'all' = oval+eyes+brows+lips+irises+nose. 'fill' = solid face_oval polygon (silhouette mask). 'custom' = toggle each feature individually (including 'tesselation', the full 2547-edge wireframe).", "options": [{"key": "all", "inputs": {"required": {}}}, {"key": "fill", "inputs": {"required": {}}}, {"key": "custom", "inputs": {"required": {"face_oval": ["BOOLEAN", {"tooltip": "Draw the 'face_oval' connection set.", "default": true}], "lips": ["BOOLEAN", {"tooltip": "Draw the 'lips' connection set.", "default": true}], "left_eye": ["BOOLEAN", {"tooltip": "Draw the 'left_eye' connection set.", "default": true}], "right_eye": ["BOOLEAN", {"tooltip": "Draw the 'right_eye' connection set.", "default": true}], "left_eyebrow": ["BOOLEAN", {"tooltip": "Draw the 'left_eyebrow' connection set.", "default": true}], "right_eyebrow": ["BOOLEAN", {"tooltip": "Draw the 'right_eyebrow' connection set.", "default": true}], "irises": ["BOOLEAN", {"tooltip": "Draw the 'irises' connection set.", "default": true}], "nose": ["BOOLEAN", {"tooltip": "Draw the 'nose' connection set.", "default": true}], "tesselation": ["BOOLEAN", {"tooltip": "Draw the 'tesselation' connection set.", "default": false}]}}}]}], "color": ["COLOR", {"default": "#00ff00", "socketless": true}], "thickness": ["INT", {"tooltip": "Edge line thickness in pixels. 0 disables edge drawing.", "default": 1, "min": 0, "max": 8, "step": 1}], "point_size": ["INT", {"tooltip": "Landmark dot radius in pixels. 0 disables point drawing.", "default": 2, "min": 0, "max": 16, "step": 1}]}, "optional": {"image": ["IMAGE", {"tooltip": "If not connected, a black canvas will be used."}]}}, "input_order": {"required": ["face_landmarks", "connections", "color", "thickness", "point_size"], "optional": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MediaPipeFaceMeshVisualize", "display_name": "Visualize Face Landmarks (MediaPipe)", "description": "Draws face landmarks mesh on the input image.", "python_module": "comfy_extras.nodes_mediapipe", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face", "facial", "mediapipe", "face landmark", "face mesh", "blazeface", "face detection", "visualize"], "essentials_category": null, "has_intermediate_output": false}, "MediaPipeFaceMask": {"input": {"required": {"face_landmarks": ["FACE_LANDMARKS", {}], "regions": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "'all' = union of face_oval+lips+eyes+irises (which collapses to face_oval since it encloses the rest). 'custom' = toggle each region individually for combos like lips+eyes.", "options": [{"key": "all", "inputs": {"required": {}}}, {"key": "custom", "inputs": {"required": {"face_oval": ["BOOLEAN", {"tooltip": "Include the 'face_oval' region in the mask.", "default": true}], "lips": ["BOOLEAN", {"tooltip": "Include the 'lips' region in the mask.", "default": false}], "left_eye": ["BOOLEAN", {"tooltip": "Include the 'left_eye' region in the mask.", "default": false}], "right_eye": ["BOOLEAN", {"tooltip": "Include the 'right_eye' region in the mask.", "default": false}], "irises": ["BOOLEAN", {"tooltip": "Include the 'irises' region in the mask.", "default": false}]}}}]}]}}, "input_order": {"required": ["face_landmarks", "regions"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "MediaPipeFaceMask", "display_name": "Draw Face Mask (MediaPipe)", "description": "Draws a mask from face landmarks.", "python_module": "comfy_extras.nodes_mediapipe", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face", "facial", "mediapipe", "face mask", "blazeface", "face detection", "visualize"], "essentials_category": null, "has_intermediate_output": false}, "SplatToFile3D": {"input": {"required": {"splat": ["SPLAT", {}], "format": ["COMBO", {"tooltip": "ply: standard 3D Gaussian Splat with full spherical harmonics. ksplat: mkkellogg SplatBuffer (level 0, uncompressed), base color only spz: Niantic gzip-compressed (~10x smaller), base color only ", "multiselect": false, "options": ["ply", "ksplat", "spz"]}]}}, "input_order": {"required": ["splat", "format"]}, "is_input_list": false, "output": ["FILE_3D"], "output_is_list": [false], "output_name": ["model_3d"], "output_tooltips": [null], "output_matchtypes": null, "name": "SplatToFile3D", "display_name": "Create 3D File (from Splat)", "description": "Serialize a gaussian splat to a File3D object for Save / Preview 3D nodes. Supports one item per batch only.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["gaussian to ply", "splat to file", "export gaussian"], "essentials_category": null, "has_intermediate_output": false}, "File3DToSplat": {"input": {"required": {"model_3d": ["FILE_3D,FILE_3D_PLY,FILE_3D_SPLAT,FILE_3D_KSPLAT,FILE_3D_SPZ", {"tooltip": "A gaussian splat 3D file"}]}}, "input_order": {"required": ["model_3d"]}, "is_input_list": false, "output": ["SPLAT"], "output_is_list": [false], "output_name": ["splat"], "output_tooltips": [null], "output_matchtypes": null, "name": "File3DToSplat", "display_name": "Get Splat", "description": "Parse a splat File3D into a gaussian splat. Inverse of Create 3D File (from Splat). Supported format:  PLY, SPLAT, KSPLAT, SPZ. PLY carries full spherical harmonics, the other formats are base color only. Format is auto-detected from the file contents.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["load splat", "ply to splat", "import splat", "file to splat"], "essentials_category": null, "has_intermediate_output": false}, "RenderSplat": {"input": {"required": {"splat": ["SPLAT", {}], "width": ["INT", {"default": 1024, "min": 64, "max": 2048, "step": 8}], "height": ["INT", {"default": 1024, "min": 64, "max": 2048, "step": 8}], "frames": ["INT", {"tooltip": "-1, 0, 1 = single still image; >1 = turntable, the camera orbits over a full 360 turn (works with any camera_info). Negative value orbits the other way.", "default": 1, "min": -240, "max": 240}], "splat_scale": ["FLOAT", {"tooltip": "Multiplier on each splat's projected footprint (lower = crisper points, higher = softer/fuller surface).", "advanced": true, "default": 1.0, "min": 0.1, "max": 5.0, "step": 0.05}], "sharpen": ["FLOAT", {"tooltip": "Sharpen overlapping splats: 1.0 = physically-correct blend; higher biases each pixel toward its dominant (nearest) splat for crisper texture, without shrinking splats or opening gaps. Non-physical above 1.", "default": 2.0, "min": 1.0, "max": 8.0, "step": 0.5}], "headlight_shading": ["FLOAT", {"tooltip": "Diffuse shading from a light at the camera (headlight), using the splat surfel normals: darkens surfaces that turn away from view to reveal form/curvature. 0 = flat albedo, 1 = strongest shading.", "advanced": true, "default": 0.0, "min": 0.0, "max": 3.0, "step": 0.05}], "opacity_threshold": ["FLOAT", {"tooltip": "Cull gaussians with opacity below this (removes faint floaters).", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "render_style": ["COMBO", {"tooltip": "What the image output shows: color, clay (neutral-albedo shaded), depth (near=bright), normal (OpenGL normal map).", "multiselect": false, "options": ["color", "clay", "depth", "normal"]}], "background": ["COLOR", {"default": "#000000", "socketless": true}]}, "optional": {"bg_image": ["IMAGE", {"tooltip": "Optional background plate composited behind the splat (overrides the solid background colour). Resized to the render size; a batch is used per frame, a single image for all. color/clay only."}], "camera_info": ["LOAD3D_CAMERA", {"tooltip": "Camera to render from - a Load3D / Preview3D camera or a Create Camera Info node. If empty, the splat is auto-framed from a default 3/4 view."}]}}, "input_order": {"required": ["splat", "width", "height", "frames", "splat_scale", "sharpen", "headlight_shading", "opacity_threshold", "render_style", "background"], "optional": ["bg_image", "camera_info"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["image", "mask"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "RenderSplat", "display_name": "Render Splat", "description": "Render a gaussian splat as an image with an anisotropic EWA rasterizer (oriented elliptical splats, antialiased, depth-sorted front-to-back). The camera comes from a camera_info input (Load / Preview 3D, or a Create Camera Info node); leave it empty to auto-frame the splat. Set frames greater than 1 for a turntable batch of images to feed a Video node.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["splat to image", "render splat", "gaussian turntable"], "essentials_category": null, "has_intermediate_output": false}, "CreateCameraInfo": {"input": {"required": {"mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "How to define the camera: orbit angles, an explicit position, or a position + quaternion.", "options": [{"key": "orbit", "inputs": {"required": {"yaw": ["FLOAT", {"default": 35.0, "min": -360.0, "max": 360.0, "step": 1.0}], "pitch": ["FLOAT", {"default": 30.0, "min": -89.0, "max": 89.0, "step": 1.0}], "distance": ["FLOAT", {"tooltip": "Camera distance from the target.", "default": 4.0, "min": 0.01, "max": 1000.0, "step": 0.01}]}}}, {"key": "look_at", "inputs": {"required": {"position_x": ["FLOAT", {"tooltip": "Camera position in world space (right-handed, Y-up).", "default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "position_y": ["FLOAT", {"default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "position_z": ["FLOAT", {"default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}]}}}, {"key": "quaternion", "inputs": {"required": {"position_x": ["FLOAT", {"tooltip": "Camera position in world space (right-handed, Y-up).", "default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "position_y": ["FLOAT", {"default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "position_z": ["FLOAT", {"default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "quat_x": ["FLOAT", {"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.001}], "quat_y": ["FLOAT", {"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.001}], "quat_z": ["FLOAT", {"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.001}], "quat_w": ["FLOAT", {"tooltip": "Camera world-rotation quaternion (three.js: looks down local -Z). Normalized for you.", "default": 1.0, "min": -1.0, "max": 1.0, "step": 0.001}]}}}]}], "target_x": ["FLOAT", {"tooltip": "Look-at point (orbit pivot / aim). In orbit mode, move it to pan/translate the whole camera. Ignored in quaternion mode. Defaults to the origin.", "advanced": true, "default": 0.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "target_y": ["FLOAT", {"advanced": true, "default": 0.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "target_z": ["FLOAT", {"advanced": true, "default": 0.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "roll": ["FLOAT", {"tooltip": "Camera roll about the view axis, degrees.", "default": 0.0, "min": -180.0, "max": 180.0, "step": 1.0}], "fov": ["FLOAT", {"tooltip": "Vertical field of view in degrees.", "default": 35.0, "min": 1.0, "max": 120.0, "step": 1.0}], "zoom": ["FLOAT", {"tooltip": "Digital zoom (focal-length multiplier). >1 zooms in without moving the camera.", "default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}], "camera_type": ["COMBO", {"tooltip": "Projection used by Render Splat: perspective (foreshortening) or orthographic (parallel).", "multiselect": false, "options": ["perspective", "orthographic"]}]}}, "input_order": {"required": ["mode", "target_x", "target_y", "target_z", "roll", "fov", "zoom", "camera_type"]}, "is_input_list": false, "output": ["LOAD3D_CAMERA"], "output_is_list": [false], "output_name": ["camera_info"], "output_tooltips": [null], "output_matchtypes": null, "name": "CreateCameraInfo", "display_name": "Create Camera Info", "description": "Build a camera_infoMode 'orbit' aims with yaw/pitch/distance around the target; 'look_at' places the camera at world position. Coordinates are the viewer's world space (right-handed,Y-up).", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["camera position", "make camera info", "orbit camera", "look at camera"], "essentials_category": null, "has_intermediate_output": false}, "TransformSplat": {"input": {"required": {"splat": ["SPLAT", {}], "translate_x": ["FLOAT", {"default": 0.0, "min": -100.0, "max": 100.0, "step": 0.01}], "translate_y": ["FLOAT", {"default": 0.0, "min": -100.0, "max": 100.0, "step": 0.01}], "translate_z": ["FLOAT", {"default": 0.0, "min": -100.0, "max": 100.0, "step": 0.01}], "rotate_x": ["FLOAT", {"default": 0.0, "min": -360.0, "max": 360.0, "step": 1.0}], "rotate_y": ["FLOAT", {"default": 0.0, "min": -360.0, "max": 360.0, "step": 1.0}], "rotate_z": ["FLOAT", {"default": 0.0, "min": -360.0, "max": 360.0, "step": 1.0}], "scale_x": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}], "scale_y": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}], "scale_z": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["splat", "translate_x", "translate_y", "translate_z", "rotate_x", "rotate_y", "rotate_z", "scale_x", "scale_y", "scale_z"]}, "is_input_list": false, "output": ["SPLAT"], "output_is_list": [false], "output_name": ["splat"], "output_tooltips": [null], "output_matchtypes": null, "name": "TransformSplat", "display_name": "Transform Splat", "description": "Translate, rotate, and scale a gaussian splat. Non-uniform scale also reshapes every individual splat, slower process.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["move splat", "rotate splat", "scale splat", "gaussian transform"], "essentials_category": null, "has_intermediate_output": false}, "GetSplatCount": {"input": {"required": {"splat": ["SPLAT", {}]}, "hidden": {"unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["splat"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["SPLAT", "INT"], "output_is_list": [false, false], "output_name": ["splat", "count"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "GetSplatCount", "display_name": "Get Splat Count", "description": "Returns the number of splats summed across the batch.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["splat count", "gaussian count", "number of splats", "splat info"], "essentials_category": null, "has_intermediate_output": false}, "MergeSplat": {"input": {"required": {"splats": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"splat": ["SPLAT", {}]}}, "prefix": "splat", "min": 2, "max": 32}}]}}, "input_order": {"required": ["splats"]}, "is_input_list": false, "output": ["SPLAT"], "output_is_list": [false], "output_name": ["splat"], "output_tooltips": [null], "output_matchtypes": null, "name": "MergeSplat", "display_name": "Merge Splats", "description": "Concatenate any number of gaussian splats into one. Unioning several decodes of the same latent at different seeds densifies the surface, this can improve surface quality when meshing.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["union splat", "densify gaussian", "combine splat", "merge gaussian"], "essentials_category": null, "has_intermediate_output": false}, "SplatToMesh": {"input": {"required": {"splat": ["SPLAT", {}], "resolution": ["INT", {"tooltip": "Density-grid resolution along the longest axis. Higher = finer surface, more VRAM/time (grows with resolution^3).", "default": 384, "min": 64, "max": 768, "step": 16}], "kernel": ["INT", {"tooltip": "Max splat half-width in voxels. Each gaussian is rasterized over a window sized to its own 3-sigma, capped here - small surfels stay cheap, large ones aren't truncated. Raise if sparse splats leave gaps.", "default": 5, "min": 1, "max": 8}], "smooth": ["INT", {"tooltip": "Taubin mesh-smoothing iterations. Smooths the surface without shrinking it (volume-preserving), unlike blurring the density. 0 = raw surface.", "advanced": true, "default": 0, "min": 0, "max": 60}], "level": ["FLOAT", {"tooltip": "Iso-surface level. Auto-picked by Otsu; this biases it (1.0 = auto, lower = fatter/more-connected surface, higher = thinner/tighter).", "default": 0.4, "min": 0.0, "max": 2.0, "step": 0.01}], "min_component": ["INT", {"tooltip": "Drop connected components smaller than this many vertices (0 = keep all). Removes detached floater blobs and the inner shell of the double wall.", "advanced": true, "default": 500, "min": 0, "max": 100000, "step": 50}], "min_opacity": ["FLOAT", {"tooltip": "Ignore gaussians fainter than this before meshing.", "advanced": true, "default": 0.02, "min": 0.0, "max": 1.0, "step": 0.01}], "color_sharpen": ["FLOAT", {"tooltip": "Crisp up the vertex texture: 1.0 = physically-correct blend; higher biases each voxel's colour toward its dominant gaussian instead of averaging neighbours (de-smears the texture). Colour only - geometry is unchanged.", "default": 2.0, "min": 1.0, "max": 8.0, "step": 0.5}]}}, "input_order": {"required": ["splat", "resolution", "kernel", "smooth", "level", "min_component", "min_opacity", "color_sharpen"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["mesh"], "output_tooltips": [null], "output_matchtypes": null, "name": "SplatToMesh", "display_name": "Extract Mesh from Splat", "description": "Extract a coloured mesh from a gaussian splat.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["splat to mesh", "gaussian surface nets", "splat surface", "mesh splat"], "essentials_category": null, "has_intermediate_output": false}, "TripoSplatPreprocessImage": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {}], "erode_radius": ["INT", {"tooltip": "Erode the alpha matte by this pixel radius before cropping (avoids border bleed).", "default": 1, "min": 0, "max": 16}], "size": ["INT", {"tooltip": "Square image size. The model is trained at 1024; other sizes run but are off-distribution.", "default": 1024, "min": 256, "max": 4096, "step": 16}]}}, "input_order": {"required": ["image", "mask", "erode_radius", "size"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["image"], "output_tooltips": [null], "output_matchtypes": null, "name": "TripoSplatPreprocessImage", "display_name": "TripoSplat Preprocess Image", "description": "Crop center each image to a square canvas on a black background and add padding.", "python_module": "comfy_extras.nodes_triposplat", "category": "3d/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoSplatConditioning": {"input": {"required": {"clip_vision": ["CLIP_VISION", {"tooltip": "DINOv3 ViT-H/16+ image encoder"}], "vae": ["VAE", {"tooltip": "Flux2 VAE"}], "image": ["IMAGE", {}]}}, "input_order": {"required": ["clip_vision", "vae", "image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, "The fixed size noise target (latent +camera)."], "output_matchtypes": null, "name": "TripoSplatConditioning", "display_name": "TripoSplat Conditioning", "description": "Encode the image with DINOv3 and the Flux2 VAE into TripoSplat positive/negative conditioning, and create the fixed size noise target (latent + camera) for the KSampler", "python_module": "comfy_extras.nodes_triposplat", "category": "3d/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VAEDecodeTripoSplat": {"input": {"required": {"samples": ["LATENT", {}], "vae": ["VAE", {"tooltip": "TripoSplat VAE decoder"}], "num_gaussians": ["INT", {"tooltip": "Number of gaussians to produce (rounded to a multiple of 32). 262144 matches the octree's point density; higher oversamples the same points (denser, but no new detail) and costs proportionally more VRAM/time.", "default": 262144, "min": 32768, "max": 1048576, "step": 32}], "seed": ["INT", {"tooltip": "Seeds the octree point sampler (global RNG) for deterministic decodes.", "default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["samples", "vae", "num_gaussians", "seed"]}, "is_input_list": false, "output": ["SPLAT"], "output_is_list": [false], "output_name": ["splat"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEDecodeTripoSplat", "display_name": "TripoSplat Decode", "description": "Decode the sampled TripoSplat latent into a 3D gaussian splat. Modify the number of gaussians to vary the density.", "python_module": "comfy_extras.nodes_triposplat", "category": "3d/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoSplatSamplingPreview": {"input": {"required": {"model": ["MODEL", {}], "vae": ["VAE", {"tooltip": "TripoSplat VAE decoder"}], "octree_level": ["INT", {"tooltip": "Octree depth for the preview decode (lower = cheaper/coarser).", "advanced": true, "default": 5, "min": 2, "max": 8}], "num_gaussians": ["INT", {"tooltip": "Number of gaussians to produce for the preview (rounded to a multiple of 32).", "default": 16384, "min": 1024, "max": 262144, "step": 32}], "yaw": ["FLOAT", {"tooltip": "Preview camera yaw in degrees.", "advanced": true, "default": 90.0, "min": -360.0, "max": 360.0, "step": 1.0}], "pitch": ["FLOAT", {"tooltip": "Preview camera pitch in degrees.", "advanced": true, "default": 15.0, "min": -89.0, "max": 89.0, "step": 1.0}], "point_size": ["INT", {"tooltip": "Maximum splat radius in pixels. Each gaussian is sized from its scale and capped here; lower = finer/pointier, higher = chunkier.", "default": 3, "min": 1, "max": 16}]}}, "input_order": {"required": ["model", "vae", "octree_level", "num_gaussians", "yaw", "pitch", "point_size"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "TripoSplatSamplingPreview", "display_name": "TripoSplat Sampling Preview", "description": "Patch the TripoSplat model for the standard Ksampler node to show a live decoded gaussian splat preview at each step.", "python_module": "comfy_extras.nodes_triposplat", "category": "3d/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ClaudeNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text input to the model.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The Claude model used to generate the response.", "options": [{"key": "Opus 4.7", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "reasoning_effort": ["COMBO", {"tooltip": "Extended thinking effort. 'off' disables reasoning.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "Opus 4.6", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "reasoning_effort": ["COMBO", {"tooltip": "Extended thinking effort. 'off' disables reasoning.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "Sonnet 4.6", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "reasoning_effort": ["COMBO", {"tooltip": "Extended thinking effort. 'off' disables reasoning.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "Sonnet 4.5", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "reasoning_effort": ["COMBO", {"tooltip": "Extended thinking effort. 'off' disables reasoning.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "Haiku 4.5", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 20 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate the model's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "seed", "images"], "optional": ["system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "ClaudeNode", "display_name": "Anthropic Claude", "description": "Generate text responses with Anthropic's Claude models. Provide a text prompt and optionally one or more images for multimodal context.", "python_module": "comfy_api_nodes.nodes_anthropic", "category": "partner/text/Anthropic", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $m := widgets.model;\n                  $contains($m, \"opus\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.005, 0.025],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"sonnet\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.003, 0.015],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"haiku\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.001, 0.005],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : {\"type\":\"text\", \"text\":\"Token-based\"}\n                )\n                "}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "BeebleSwitchXVideoEdit": {"input": {"required": {"video": ["VIDEO", {}], "prompt": ["STRING", {"tooltip": "Text description of the desired output (max 2000 chars). At least one of 'prompt' or 'reference_image' is required.", "default": "", "multiline": true}], "alpha_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Controls how SwitchX decides what to keep vs. regenerate. 'auto' isolates the main subject automatically. 'fill' regenerates the entire frame while preserving geometry. 'select' propagates a first-frame keyframe across the clip. 'custom' uses a per-frame alpha matte you provide.", "options": [{"key": "auto", "inputs": {"required": {}}}, {"key": "fill", "inputs": {"required": {}}}, {"key": "select", "inputs": {"required": {"alpha_keyframe": ["MASK", {"tooltip": "First-frame keyframe mask. Beeble propagates this across the video."}]}}}, {"key": "custom", "inputs": {"required": {"alpha_mask": ["MASK", {"tooltip": "Per-frame grayscale mask covering the entire video. Must have the same frame count as the source. Connect a MASK output from SAM3_TrackToMask or similar."}]}}}]}], "max_resolution": ["COMBO", {"tooltip": "Maximum output resolution.", "default": "1080p", "multiselect": false, "options": ["1080p", "720p"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"reference_image": ["IMAGE", {"tooltip": "Reference image whose look (background, lighting, costume) the result should adopt. At least one of 'reference_image' or 'prompt' is required."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["video", "prompt", "alpha_mode", "max_resolution", "seed"], "optional": ["reference_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO", "VIDEO"], "output_is_list": [false, false], "output_name": ["video", "alpha"], "output_tooltips": [null, "The alpha matte Beeble used. Empty for 'fill' mode, which has no separate matte."], "output_matchtypes": null, "name": "BeebleSwitchXVideoEdit", "display_name": "Beeble SwitchX Video Edit", "description": "Edit a video with Beeble SwitchX. Switches anything in the scene (background, lighting, costume) while preserving the original subject's pixels and motion. Provide a reference image and/or text prompt to describe the new look. Max 240 frames, max ~2.77MP per frame.", "python_module": "comfy_api_nodes.nodes_beeble", "category": "partner/video/Beeble", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "max_resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $rate := widgets.max_resolution = \"1080p\" ? 0.429 : 0.143;\n                  {\"type\":\"usd\",\"usd\": $rate, \"format\":{\"suffix\":\"/30 frames\"}}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BeebleSwitchXImageEdit": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Text description of the desired output (max 2000 chars). At least one of 'prompt' or 'reference_image' is required.", "default": "", "multiline": true}], "alpha_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Controls how SwitchX decides what to keep vs. regenerate. 'auto' isolates the main subject automatically. 'fill' regenerates the entire frame while preserving geometry. 'select' propagates a first-frame keyframe across the clip. 'custom' uses a per-frame alpha matte you provide.", "options": [{"key": "auto", "inputs": {"required": {}}}, {"key": "fill", "inputs": {"required": {}}}, {"key": "select", "inputs": {"required": {"alpha_keyframe": ["MASK", {"tooltip": "Grayscale keyframe mask."}]}}}, {"key": "custom", "inputs": {"required": {"alpha_mask": ["MASK", {"tooltip": "Grayscale mask to apply."}]}}}]}], "max_resolution": ["COMBO", {"tooltip": "Maximum output resolution.", "default": "1080p", "multiselect": false, "options": ["1080p", "720p"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"reference_image": ["IMAGE", {"tooltip": "Reference image whose look (background, lighting, costume) the result should adopt. At least one of 'reference_image' or 'prompt' is required."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "prompt", "alpha_mode", "max_resolution", "seed"], "optional": ["reference_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["image", "alpha"], "output_tooltips": [null, "The alpha matte Beeble used. Empty for 'fill' mode, which has no separate matte."], "output_matchtypes": null, "name": "BeebleSwitchXImageEdit", "display_name": "Beeble SwitchX Image Edit", "description": "Edit a single image with Beeble SwitchX. Switches anything in the scene (background, lighting, costume) while preserving the original subject's pixels. Provide a reference image and/or text prompt to describe the new look. Max ~2.77MP.", "python_module": "comfy_api_nodes.nodes_beeble", "category": "partner/image/Beeble", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "max_resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $rate := widgets.max_resolution = \"1080p\" ? 0.429 : 0.143;\n                  {\"type\":\"usd\",\"usd\": $rate}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxProUltraImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "aspect_ratio": ["STRING", {"tooltip": "Aspect ratio of image; must be between 1:4 and 4:1.", "default": "16:9", "multiline": false}], "raw": ["BOOLEAN", {"tooltip": "When True, generate less processed, more natural-looking images.", "default": false}]}, "optional": {"image_prompt": ["IMAGE", {}], "image_prompt_strength": ["FLOAT", {"tooltip": "Blend between the prompt and the image prompt.", "default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "prompt_upsampling", "seed", "aspect_ratio", "raw"], "optional": ["image_prompt", "image_prompt_strength"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxProUltraImageNode", "display_name": "Flux 1.1 [pro] Ultra Image", "description": "Generates images using Flux Pro 1.1 Ultra via api based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.06}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKontextProImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation - specify what and how to edit.", "default": "", "multiline": true}], "aspect_ratio": ["STRING", {"tooltip": "Aspect ratio of image; must be between 1:4 and 4:1.", "default": "16:9", "multiline": false}], "guidance": ["FLOAT", {"tooltip": "Guidance strength for the image generation process", "default": 3.0, "min": 0.1, "max": 99.0, "step": 0.1}], "steps": ["INT", {"tooltip": "Number of steps for the image generation process", "default": 50, "min": 1, "max": 150}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 1234, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}]}, "optional": {"input_image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "guidance", "steps", "seed", "prompt_upsampling"], "optional": ["input_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxKontextProImageNode", "display_name": "Flux.1 Kontext [pro] Image", "description": "Edits images using Flux.1 Kontext [pro] via api based on prompt and aspect ratio.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKontextMaxImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation - specify what and how to edit.", "default": "", "multiline": true}], "aspect_ratio": ["STRING", {"tooltip": "Aspect ratio of image; must be between 1:4 and 4:1.", "default": "16:9", "multiline": false}], "guidance": ["FLOAT", {"tooltip": "Guidance strength for the image generation process", "default": 3.0, "min": 0.1, "max": 99.0, "step": 0.1}], "steps": ["INT", {"tooltip": "Number of steps for the image generation process", "default": 50, "min": 1, "max": 150}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 1234, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}]}, "optional": {"input_image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "guidance", "steps", "seed", "prompt_upsampling"], "optional": ["input_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxKontextMaxImageNode", "display_name": "Flux.1 Kontext [max] Image", "description": "Edits images using Flux.1 Kontext [pro] via api based on prompt and aspect ratio.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxProExpandNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}], "top": ["INT", {"tooltip": "Number of pixels to expand at the top of the image", "default": 0, "min": 0, "max": 2048}], "bottom": ["INT", {"tooltip": "Number of pixels to expand at the bottom of the image", "default": 0, "min": 0, "max": 2048}], "left": ["INT", {"tooltip": "Number of pixels to expand at the left of the image", "default": 0, "min": 0, "max": 2048}], "right": ["INT", {"tooltip": "Number of pixels to expand at the right of the image", "default": 0, "min": 0, "max": 2048}], "guidance": ["FLOAT", {"tooltip": "Guidance strength for the image generation process", "default": 60, "min": 1.5, "max": 100}], "steps": ["INT", {"tooltip": "Number of steps for the image generation process", "default": 50, "min": 15, "max": 50}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "prompt", "prompt_upsampling", "top", "bottom", "left", "right", "guidance", "steps", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxProExpandNode", "display_name": "Flux.1 Expand Image", "description": "Outpaints image based on prompt.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.05}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxProFillNode": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}], "guidance": ["FLOAT", {"tooltip": "Guidance strength for the image generation process", "default": 60, "min": 1.5, "max": 100}], "steps": ["INT", {"tooltip": "Number of steps for the image generation process", "default": 50, "min": 15, "max": 50}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "mask", "prompt", "prompt_upsampling", "guidance", "steps", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxProFillNode", "display_name": "Flux.1 Fill Image", "description": "Inpaints image based on mask and prompt.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.05}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxEraseNode": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {"tooltip": "White areas are removed; black areas are preserved."}], "dilate_pixels": ["INT", {"tooltip": "Expands the mask boundaries to ensure clean coverage of the object's edges.", "default": 10, "min": 0, "max": 25}]}, "optional": {"seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "mask", "dilate_pixels"], "optional": ["seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxEraseNode", "display_name": "Flux Erase Image", "description": "Removes the masked object from an image and reconstructs the background. Paint the mask over what you want to erase.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"range_usd\",\"min_usd\":0.03,\"max_usd\":0.06,\"format\":{\"approximate\":true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxVTONode": {"input": {"required": {"person": ["IMAGE", {"tooltip": "Image of the person to dress."}], "garment": ["IMAGE", {"tooltip": "Image of the garment to apply."}], "prompt": ["STRING", {"tooltip": "Optional natural-language styling instruction (e.g. how the garment should fit).", "default": "", "multiline": true}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["person", "garment", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxVTONode", "display_name": "Flux Virtual Try-On", "description": "Virtual try-on: dresses the person in the provided garment.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"range_usd\",\"min_usd\":0.0375,\"max_usd\":0.075,\"format\":{\"approximate\":true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Flux2ProImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation or edit", "default": "", "multiline": true}], "width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 32}], "height": ["INT", {"default": 768, "min": 256, "max": 2048, "step": 32}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation.", "advanced": true, "default": true}]}, "optional": {"images": ["IMAGE", {"tooltip": "Up to 9 images to be used as references."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "width", "height", "seed", "prompt_upsampling"], "optional": ["images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Flux2ProImageNode", "display_name": "Flux.2 [pro] Image", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "width", "type": "INT"}, {"name": "height", "type": "INT"}], "inputs": ["images"], "input_groups": []}, "expr": "\n    (\n      $MP := 1024 * 1024;\n      $outMP := $max([1, $floor(((widgets.width * widgets.height) + $MP - 1) / $MP)]);\n      $outputCost := 0.03 + 0.015 * ($outMP - 1);\n      inputs.images.connected\n        ? {\n            \"type\":\"range_usd\",\n            \"min_usd\": $outputCost + 0.015,\n            \"max_usd\": $outputCost + 0.12,\n            \"format\": { \"approximate\": true }\n          }\n        : {\"type\":\"usd\",\"usd\": $outputCost}\n    )\n    "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Flux2MaxImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation or edit", "default": "", "multiline": true}], "width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 32}], "height": ["INT", {"default": 768, "min": 256, "max": 2048, "step": 32}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation.", "advanced": true, "default": true}]}, "optional": {"images": ["IMAGE", {"tooltip": "Up to 9 images to be used as references."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "width", "height", "seed", "prompt_upsampling"], "optional": ["images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Flux2MaxImageNode", "display_name": "Flux.2 [max] Image", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "width", "type": "INT"}, {"name": "height", "type": "INT"}], "inputs": ["images"], "input_groups": []}, "expr": "\n    (\n      $MP := 1024 * 1024;\n      $outMP := $max([1, $floor(((widgets.width * widgets.height) + $MP - 1) / $MP)]);\n      $outputCost := 0.07 + 0.03 * ($outMP - 1);\n\n      inputs.images.connected\n        ? {\n            \"type\":\"range_usd\",\n            \"min_usd\": $outputCost + 0.03,\n            \"max_usd\": $outputCost + 0.24,\n            \"format\": { \"approximate\": true }\n          }\n        : {\"type\":\"usd\",\"usd\": $outputCost}\n    )\n    "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Flux2ImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation or edit", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Flux.2 [pro]", "inputs": {"required": {"width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 32}], "height": ["INT", {"default": 768, "min": 256, "max": 2048, "step": 32}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image generation. Up to 8 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}, {"key": "Flux.2 [max]", "inputs": {"required": {"width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 32}], "height": ["INT", {"default": 768, "min": 256, "max": 2048, "step": 32}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image generation. Up to 8 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}]}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Flux2ImageNode", "display_name": "Flux.2 Image", "description": "Generate images via Flux.2 [pro] or Flux.2 [max] from a prompt and optional reference images.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.width", "type": "INT"}, {"name": "model.height", "type": "INT"}], "inputs": [], "input_groups": ["model.images"]}, "expr": "\n                (\n                  $isMax := widgets.model = \"flux.2 [max]\";\n                  $MP := 1024 * 1024;\n                  $w := $lookup(widgets, \"model.width\");\n                  $h := $lookup(widgets, \"model.height\");\n                  $outMP := $max([1, $floor((($w * $h) + $MP - 1) / $MP)]);\n                  $outputCost := $isMax\n                    ? (0.07 + 0.03 * ($outMP - 1))\n                    : (0.03 + 0.015 * ($outMP - 1));\n                  $refMin := $isMax ? 0.03 : 0.015;\n                  $refMax := $isMax ? 0.24 : 0.12;\n                  $hasRefs := $lookup(inputGroups, \"model.images\") > 0;\n                  $hasRefs\n                    ? {\n                        \"type\": \"range_usd\",\n                        \"min_usd\": $outputCost + $refMin,\n                        \"max_usd\": $outputCost + $refMax,\n                        \"format\": { \"approximate\": true }\n                      }\n                    : {\"type\": \"usd\", \"usd\": $outputCost}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaImageEditNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["FIBO"]}], "image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Instruction to edit image", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"default": "", "multiline": true}], "structured_prompt": ["STRING", {"tooltip": "A string containing the structured edit prompt in JSON format. Use this instead of usual prompt for precise, programmatic control.", "default": "", "multiline": true}], "seed": ["INT", {"default": 1, "min": 1, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "guidance_scale": ["FLOAT", {"tooltip": "Higher value makes the image follow the prompt more closely.", "default": 3, "min": 3, "max": 5, "step": 0.01, "display": "number"}], "steps": ["INT", {"default": 50, "min": 20, "max": 50, "step": 1, "display": "number"}], "moderation": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Moderation settings", "options": [{"key": "false", "inputs": {"required": {}}}, {"key": "true", "inputs": {"required": {"prompt_content_moderation": ["BOOLEAN", {"default": false}], "visual_input_moderation": ["BOOLEAN", {"default": false}], "visual_output_moderation": ["BOOLEAN", {"default": true}]}}}]}]}, "optional": {"mask": ["MASK", {"tooltip": "If omitted, the edit applies to the entire image."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "image", "prompt", "negative_prompt", "structured_prompt", "seed", "guidance_scale", "steps", "moderation"], "optional": ["mask"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [false, false], "output_name": ["IMAGE", "structured_prompt"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "BriaImageEditNode", "display_name": "Bria FIBO Image Edit", "description": "Edit images using Bria latest model", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/image/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.04}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaRemoveImageBackground": {"input": {"required": {"image": ["IMAGE", {}], "moderation": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Moderation settings", "options": [{"key": "false", "inputs": {"required": {}}}, {"key": "true", "inputs": {"required": {"visual_input_moderation": ["BOOLEAN", {"default": false}], "visual_output_moderation": ["BOOLEAN", {"default": true}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "moderation", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "BriaRemoveImageBackground", "display_name": "Bria Remove Image Background", "description": "Remove the background from an image using Bria RMBG 2.0.", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/image/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.018}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaRemoveVideoBackground": {"input": {"required": {"video": ["VIDEO", {}], "background_color": ["COMBO", {"tooltip": "Background color for the output video.", "multiselect": false, "options": ["Black", "White", "Gray", "Red", "Green", "Blue", "Yellow", "Cyan", "Magenta", "Orange"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["video", "background_color", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "BriaRemoveVideoBackground", "display_name": "Bria Remove Video Background", "description": "Remove the background from a video using Bria. ", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/video/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.14,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaVideoGreenScreen": {"input": {"required": {"video": ["VIDEO", {}], "green_shade": ["COMBO", {"tooltip": "Solid chroma-key shade applied behind the foreground: broadcast_green (#00B140), chroma_green (#00FF00), or blue_screen (#0000FF).", "multiselect": false, "options": ["broadcast_green", "chroma_green", "blue_screen"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["video", "green_shade", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "BriaVideoGreenScreen", "display_name": "Bria Video Green Screen", "description": "Replace a video's background with a solid chroma-key screen using Bria.", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/video/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.14,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaTransparentVideoBackground": {"input": {"required": {"video": ["VIDEO", {}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["video", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["images", "mask"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "BriaTransparentVideoBackground", "display_name": "Bria Remove Video Background (Transparent)", "description": "Remove the background from a video using Bria and return the cut-out frames plus an alpha mask. Connect both to a compositing node, or feed them to Save WEBM to write a transparent video.", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/video/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.14,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceImageNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["seedream-3-0-t2i-250415"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the image", "multiline": true}], "size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below", "multiselect": false, "options": ["1024x1024 (1:1)", "864x1152 (3:4)", "1152x864 (4:3)", "1280x720 (16:9)", "720x1280 (9:16)", "832x1248 (2:3)", "1248x832 (3:2)", "1512x648 (21:9)", "2048x2048 (1:1)", "Custom"]}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 1024, "min": 512, "max": 2048, "step": 64}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 1024, "min": 512, "max": 2048, "step": 64}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "guidance_scale": ["FLOAT", {"tooltip": "Higher value makes the image follow the prompt more closely", "default": 2.5, "min": 1.0, "max": 10.0, "step": 0.01, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the image", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt", "size_preset", "width", "height"], "optional": ["seed", "guidance_scale", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceImageNode", "display_name": "ByteDance Image", "description": "Generate images using ByteDance models via api based on prompt", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/image/ByteDance", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.03}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceSeedreamNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["seedream 5.0 lite", "seedream-4-5-251128", "seedream-4-0-250828"]}], "prompt": ["STRING", {"tooltip": "Text prompt for creating or editing an image.", "default": "", "multiline": true}], "size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below.", "multiselect": false, "options": ["2048x2048 (1:1)", "2304x1728 (4:3)", "1728x2304 (3:4)", "2560x1440 (16:9)", "1440x2560 (9:16)", "2496x1664 (3:2)", "1664x2496 (2:3)", "3024x1296 (21:9)", "3072x3072 (1:1)", "4096x4096 (1:1)", "Custom"]}]}, "optional": {"image": ["IMAGE", {"tooltip": "Input image(s) for image-to-image generation. Reference image(s) for single or multi-reference generation."}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 6240, "step": 2}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 4992, "step": 2}], "sequential_image_generation": ["COMBO", {"tooltip": "Group image generation mode. 'disabled' generates a single image. 'auto' lets the model decide whether to generate multiple related images (e.g., story scenes, character variations).", "multiselect": false, "options": ["disabled", "auto"]}], "max_images": ["INT", {"tooltip": "Maximum number of images to generate when sequential_image_generation='auto'. Total images (input + generated) cannot exceed 15.", "default": 1, "min": 1, "max": 15, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the image.", "advanced": true, "default": false}], "fail_on_partial": ["BOOLEAN", {"tooltip": "If enabled, abort execution if any requested images are missing or return an error.", "advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt", "size_preset"], "optional": ["image", "width", "height", "sequential_image_generation", "max_images", "seed", "watermark", "fail_on_partial"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceSeedreamNode", "display_name": "ByteDance Seedream 4.5 & 5.0", "description": "Unified text-to-image generation and precise single-sentence editing at up to 4K resolution.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/image/ByteDance", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $price := $contains(widgets.model, \"5.0 lite\") ? 0.035 :\n                            $contains(widgets.model, \"4-5\") ? 0.04 : 0.03;\n                  {\n                    \"type\":\"usd\",\n                    \"usd\": $price,\n                    \"format\": { \"suffix\":\" x images/Run\", \"approximate\": true }\n                  }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceSeedreamNodeV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for creating or editing an image.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "seedream 5.0 lite", "inputs": {"required": {"size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below.", "multiselect": false, "options": ["(2K) 2048x2048 (1:1)", "(2K) 1728x2304 (3:4)", "(2K) 2304x1728 (4:3)", "(2K) 2848x1600 (16:9)", "(2K) 1600x2848 (9:16)", "(2K) 1664x2496 (2:3)", "(2K) 2496x1664 (3:2)", "(2K) 3136x1344 (21:9)", "(3K) 3072x3072 (1:1)", "(3K) 2592x3456 (3:4)", "(3K) 3456x2592 (4:3)", "(3K) 4096x2304 (16:9)", "(3K) 2304x4096 (9:16)", "(3K) 2496x3744 (2:3)", "(3K) 3744x2496 (3:2)", "(3K) 4704x2016 (21:9)", "(4K) 4096x4096 (1:1)", "(4K) 3520x4704 (3:4)", "(4K) 4704x3520 (4:3)", "(4K) 5504x3040 (16:9)", "(4K) 3040x5504 (9:16)", "(4K) 3328x4992 (2:3)", "(4K) 4992x3328 (3:2)", "(4K) 6240x2656 (21:9)", "Custom"]}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 6240, "step": 2}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 4992, "step": 2}], "max_images": ["INT", {"tooltip": "Maximum number of images to generate. With 1, exactly one image is produced. With >1, the model generates between 1 and max_images related images (e.g., story scenes, character variations). Total images (input + generated) cannot exceed 15.", "default": 1, "min": 1, "max": 14, "step": 1, "display": "number"}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image or multi-reference generation. Up to 14 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14"], "min": 0}}], "fail_on_partial": ["BOOLEAN", {"tooltip": "If enabled, abort execution if any requested images are missing or return an error.", "advanced": true, "default": false}]}}}, {"key": "seedream-4-5-251128", "inputs": {"required": {"size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below.", "multiselect": false, "options": ["(2K) 2048x2048 (1:1)", "(2K) 1728x2304 (3:4)", "(2K) 2304x1728 (4:3)", "(2K) 2848x1600 (16:9)", "(2K) 1600x2848 (9:16)", "(2K) 1664x2496 (2:3)", "(2K) 2496x1664 (3:2)", "(2K) 3136x1344 (21:9)", "(4K) 4096x4096 (1:1)", "(4K) 3520x4704 (3:4)", "(4K) 4704x3520 (4:3)", "(4K) 5504x3040 (16:9)", "(4K) 3040x5504 (9:16)", "(4K) 3328x4992 (2:3)", "(4K) 4992x3328 (3:2)", "(4K) 6240x2656 (21:9)", "Custom"]}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 6240, "step": 2}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 4992, "step": 2}], "max_images": ["INT", {"tooltip": "Maximum number of images to generate. With 1, exactly one image is produced. With >1, the model generates between 1 and max_images related images (e.g., story scenes, character variations). Total images (input + generated) cannot exceed 15.", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image or multi-reference generation. Up to 10 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}], "fail_on_partial": ["BOOLEAN", {"tooltip": "If enabled, abort execution if any requested images are missing or return an error.", "advanced": true, "default": false}]}}}, {"key": "seedream-4-0-250828", "inputs": {"required": {"size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below.", "multiselect": false, "options": ["(1K) 1024x1024 (1:1)", "(1K) 864x1152 (3:4)", "(1K) 1152x864 (4:3)", "(1K) 1312x736 (16:9)", "(1K) 736x1312 (9:16)", "(1K) 832x1248 (2:3)", "(1K) 1248x832 (3:2)", "(1K) 1568x672 (21:9)", "(2K) 2048x2048 (1:1)", "(2K) 1728x2304 (3:4)", "(2K) 2304x1728 (4:3)", "(2K) 2848x1600 (16:9)", "(2K) 1600x2848 (9:16)", "(2K) 1664x2496 (2:3)", "(2K) 2496x1664 (3:2)", "(2K) 3136x1344 (21:9)", "(4K) 4096x4096 (1:1)", "(4K) 3520x4704 (3:4)", "(4K) 4704x3520 (4:3)", "(4K) 5504x3040 (16:9)", "(4K) 3040x5504 (9:16)", "(4K) 3328x4992 (2:3)", "(4K) 4992x3328 (3:2)", "(4K) 6240x2656 (21:9)", "Custom"]}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 6240, "step": 2}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 4992, "step": 2}], "max_images": ["INT", {"tooltip": "Maximum number of images to generate. With 1, exactly one image is produced. With >1, the model generates between 1 and max_images related images (e.g., story scenes, character variations). Total images (input + generated) cannot exceed 15.", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image or multi-reference generation. Up to 10 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}], "fail_on_partial": ["BOOLEAN", {"tooltip": "If enabled, abort execution if any requested images are missing or return an error.", "advanced": true, "default": false}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the image.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceSeedreamNodeV2", "display_name": "ByteDance Seedream 4.5 & 5.0", "description": "Unified text-to-image generation and precise single-sentence editing at up to 4K resolution.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/image/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $price := $contains(widgets.model, \"5.0 lite\") ? 0.035 :\n                            $contains(widgets.model, \"4-5\") ? 0.04 : 0.03;\n                  {\n                    \"type\":\"usd\",\n                    \"usd\": $price,\n                    \"format\": { \"suffix\":\" x images/Run\", \"approximate\": true }\n                  }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceTextToVideoNode": {"input": {"required": {"model": ["COMBO", {"default": "seedance-1-0-pro-fast-251015", "multiselect": false, "options": ["seedance-1-5-pro-251215", "seedance-1-0-pro-250528", "seedance-1-0-lite-t2v-250428", "seedance-1-0-pro-fast-251015"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the video.", "multiline": true}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 5, "min": 3, "max": 12, "step": 1, "display": "slider"}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "camera_fixed": ["BOOLEAN", {"tooltip": "Specifies whether to fix the camera. The platform appends an instruction to fix the camera to your prompt, but does not guarantee the actual effect.", "advanced": true, "default": false}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the video.", "advanced": true, "default": false}], "generate_audio": ["BOOLEAN", {"tooltip": "This parameter is ignored for any model except seedance-1-5-pro.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt", "resolution", "aspect_ratio", "duration"], "optional": ["seed", "camera_fixed", "watermark", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceTextToVideoNode", "display_name": "ByteDance Text to Video", "description": "Generate video using ByteDance models via api based on prompt", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n    (\n      $priceByModel := {\n        \"seedance-1-5-pro\": {\n          \"480p\":[0.12,0.12],\n          \"720p\":[0.26,0.26],\n          \"1080p\":[0.58,0.59]\n        },\n        \"seedance-1-0-pro\": {\n          \"480p\":[0.23,0.24],\n          \"720p\":[0.51,0.56],\n          \"1080p\":[1.18,1.22]\n        },\n        \"seedance-1-0-pro-fast\": {\n          \"480p\":[0.09,0.1],\n          \"720p\":[0.21,0.23],\n          \"1080p\":[0.47,0.49]\n        },\n        \"seedance-1-0-lite\": {\n          \"480p\":[0.17,0.18],\n          \"720p\":[0.37,0.41],\n          \"1080p\":[0.85,0.88]\n        }\n      };\n      $model := widgets.model;\n      $modelKey :=\n        $contains($model, \"seedance-1-5-pro\")      ? \"seedance-1-5-pro\" :\n        $contains($model, \"seedance-1-0-pro-fast\") ? \"seedance-1-0-pro-fast\" :\n        $contains($model, \"seedance-1-0-pro\")      ? \"seedance-1-0-pro\" :\n        \"seedance-1-0-lite\";\n      $resolution := widgets.resolution;\n      $resKey :=\n        $contains($resolution, \"1080\") ? \"1080p\" :\n        $contains($resolution, \"720\")  ? \"720p\" :\n        \"480p\";\n      $modelPrices := $lookup($priceByModel, $modelKey);\n      $baseRange := $lookup($modelPrices, $resKey);\n      $min10s := $baseRange[0];\n      $max10s := $baseRange[1];\n      $scale := widgets.duration / 10;\n      $audioMultiplier := ($modelKey = \"seedance-1-5-pro\" and widgets.generate_audio) ? 2 : 1;\n      $minCost := $min10s * $scale * $audioMultiplier;\n      $maxCost := $max10s * $scale * $audioMultiplier;\n      ($minCost = $maxCost)\n        ? {\"type\":\"usd\",\"usd\": $minCost, \"format\": { \"approximate\": true }}\n        : {\"type\":\"range_usd\",\"min_usd\": $minCost, \"max_usd\": $maxCost, \"format\": { \"approximate\": true }}\n    )\n    "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceImageToVideoNode": {"input": {"required": {"model": ["COMBO", {"default": "seedance-1-0-pro-fast-251015", "multiselect": false, "options": ["seedance-1-5-pro-251215", "seedance-1-0-pro-250528", "seedance-1-0-lite-i2v-250428", "seedance-1-0-pro-fast-251015"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the video.", "multiline": true}], "image": ["IMAGE", {"tooltip": "First frame to be used for the video."}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["adaptive", "16:9", "4:3", "1:1", "3:4", "9:16", "21:9"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 5, "min": 3, "max": 12, "step": 1, "display": "slider"}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "camera_fixed": ["BOOLEAN", {"tooltip": "Specifies whether to fix the camera. The platform appends an instruction to fix the camera to your prompt, but does not guarantee the actual effect.", "advanced": true, "default": false}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the video.", "advanced": true, "default": false}], "generate_audio": ["BOOLEAN", {"tooltip": "This parameter is ignored for any model except seedance-1-5-pro.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt", "image", "resolution", "aspect_ratio", "duration"], "optional": ["seed", "camera_fixed", "watermark", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceImageToVideoNode", "display_name": "ByteDance Image to Video", "description": "Generate video using ByteDance models via api based on image and prompt", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n    (\n      $priceByModel := {\n        \"seedance-1-5-pro\": {\n          \"480p\":[0.12,0.12],\n          \"720p\":[0.26,0.26],\n          \"1080p\":[0.58,0.59]\n        },\n        \"seedance-1-0-pro\": {\n          \"480p\":[0.23,0.24],\n          \"720p\":[0.51,0.56],\n          \"1080p\":[1.18,1.22]\n        },\n        \"seedance-1-0-pro-fast\": {\n          \"480p\":[0.09,0.1],\n          \"720p\":[0.21,0.23],\n          \"1080p\":[0.47,0.49]\n        },\n        \"seedance-1-0-lite\": {\n          \"480p\":[0.17,0.18],\n          \"720p\":[0.37,0.41],\n          \"1080p\":[0.85,0.88]\n        }\n      };\n      $model := widgets.model;\n      $modelKey :=\n        $contains($model, \"seedance-1-5-pro\")      ? \"seedance-1-5-pro\" :\n        $contains($model, \"seedance-1-0-pro-fast\") ? \"seedance-1-0-pro-fast\" :\n        $contains($model, \"seedance-1-0-pro\")      ? \"seedance-1-0-pro\" :\n        \"seedance-1-0-lite\";\n      $resolution := widgets.resolution;\n      $resKey :=\n        $contains($resolution, \"1080\") ? \"1080p\" :\n        $contains($resolution, \"720\")  ? \"720p\" :\n        \"480p\";\n      $modelPrices := $lookup($priceByModel, $modelKey);\n      $baseRange := $lookup($modelPrices, $resKey);\n      $min10s := $baseRange[0];\n      $max10s := $baseRange[1];\n      $scale := widgets.duration / 10;\n      $audioMultiplier := ($modelKey = \"seedance-1-5-pro\" and widgets.generate_audio) ? 2 : 1;\n      $minCost := $min10s * $scale * $audioMultiplier;\n      $maxCost := $max10s * $scale * $audioMultiplier;\n      ($minCost = $maxCost)\n        ? {\"type\":\"usd\",\"usd\": $minCost, \"format\": { \"approximate\": true }}\n        : {\"type\":\"range_usd\",\"min_usd\": $minCost, \"max_usd\": $maxCost, \"format\": { \"approximate\": true }}\n    )\n    "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceFirstLastFrameNode": {"input": {"required": {"model": ["COMBO", {"default": "seedance-1-0-lite-i2v-250428", "multiselect": false, "options": ["seedance-1-5-pro-251215", "seedance-1-0-pro-250528", "seedance-1-0-lite-i2v-250428"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the video.", "multiline": true}], "first_frame": ["IMAGE", {"tooltip": "First frame to be used for the video."}], "last_frame": ["IMAGE", {"tooltip": "Last frame to be used for the video."}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["adaptive", "16:9", "4:3", "1:1", "3:4", "9:16", "21:9"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 5, "min": 3, "max": 12, "step": 1, "display": "slider"}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "camera_fixed": ["BOOLEAN", {"tooltip": "Specifies whether to fix the camera. The platform appends an instruction to fix the camera to your prompt, but does not guarantee the actual effect.", "advanced": true, "default": false}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the video.", "advanced": true, "default": false}], "generate_audio": ["BOOLEAN", {"tooltip": "This parameter is ignored for any model except seedance-1-5-pro.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt", "first_frame", "last_frame", "resolution", "aspect_ratio", "duration"], "optional": ["seed", "camera_fixed", "watermark", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceFirstLastFrameNode", "display_name": "ByteDance First-Last-Frame to Video", "description": "Generate video using prompt and first and last frames.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n    (\n      $priceByModel := {\n        \"seedance-1-5-pro\": {\n          \"480p\":[0.12,0.12],\n          \"720p\":[0.26,0.26],\n          \"1080p\":[0.58,0.59]\n        },\n        \"seedance-1-0-pro\": {\n          \"480p\":[0.23,0.24],\n          \"720p\":[0.51,0.56],\n          \"1080p\":[1.18,1.22]\n        },\n        \"seedance-1-0-pro-fast\": {\n          \"480p\":[0.09,0.1],\n          \"720p\":[0.21,0.23],\n          \"1080p\":[0.47,0.49]\n        },\n        \"seedance-1-0-lite\": {\n          \"480p\":[0.17,0.18],\n          \"720p\":[0.37,0.41],\n          \"1080p\":[0.85,0.88]\n        }\n      };\n      $model := widgets.model;\n      $modelKey :=\n        $contains($model, \"seedance-1-5-pro\")      ? \"seedance-1-5-pro\" :\n        $contains($model, \"seedance-1-0-pro-fast\") ? \"seedance-1-0-pro-fast\" :\n        $contains($model, \"seedance-1-0-pro\")      ? \"seedance-1-0-pro\" :\n        \"seedance-1-0-lite\";\n      $resolution := widgets.resolution;\n      $resKey :=\n        $contains($resolution, \"1080\") ? \"1080p\" :\n        $contains($resolution, \"720\")  ? \"720p\" :\n        \"480p\";\n      $modelPrices := $lookup($priceByModel, $modelKey);\n      $baseRange := $lookup($modelPrices, $resKey);\n      $min10s := $baseRange[0];\n      $max10s := $baseRange[1];\n      $scale := widgets.duration / 10;\n      $audioMultiplier := ($modelKey = \"seedance-1-5-pro\" and widgets.generate_audio) ? 2 : 1;\n      $minCost := $min10s * $scale * $audioMultiplier;\n      $maxCost := $max10s * $scale * $audioMultiplier;\n      ($minCost = $maxCost)\n        ? {\"type\":\"usd\",\"usd\": $minCost, \"format\": { \"approximate\": true }}\n        : {\"type\":\"range_usd\",\"min_usd\": $minCost, \"max_usd\": $maxCost, \"format\": { \"approximate\": true }}\n    )\n    "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceImageReferenceNode": {"input": {"required": {"model": ["COMBO", {"default": "seedance-1-0-lite-i2v-250428", "multiselect": false, "options": ["seedance-1-0-pro-250528", "seedance-1-0-lite-i2v-250428"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the video.", "multiline": true}], "images": ["IMAGE", {"tooltip": "One to four images."}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["adaptive", "16:9", "4:3", "1:1", "3:4", "9:16", "21:9"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 5, "min": 3, "max": 12, "step": 1, "display": "slider"}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the video.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt", "images", "resolution", "aspect_ratio", "duration"], "optional": ["seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceImageReferenceNode", "display_name": "ByteDance Reference Images to Video", "description": "Generate video using prompt and reference images.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $priceByModel := {\n                    \"seedance-1-0-pro\": {\n                      \"480p\":[0.23,0.24],\n                      \"720p\":[0.51,0.56]\n                    },\n                    \"seedance-1-0-lite\": {\n                      \"480p\":[0.17,0.18],\n                      \"720p\":[0.37,0.41]\n                    }\n                  };\n                  $model := widgets.model;\n                  $modelKey :=\n                    $contains($model, \"seedance-1-0-pro\")  ? \"seedance-1-0-pro\" :\n                    \"seedance-1-0-lite\";\n                  $resolution := widgets.resolution;\n                  $resKey :=\n                    $contains($resolution, \"720\") ? \"720p\" :\n                    \"480p\";\n                  $modelPrices := $lookup($priceByModel, $modelKey);\n                  $baseRange := $lookup($modelPrices, $resKey);\n                  $min10s := $baseRange[0];\n                  $max10s := $baseRange[1];\n                  $scale := widgets.duration / 10;\n                  $minCost := $min10s * $scale;\n                  $maxCost := $max10s * $scale;\n                  ($minCost = $maxCost)\n                    ? {\"type\":\"usd\",\"usd\": $minCost}\n                    : {\"type\":\"range_usd\",\"min_usd\": $minCost, \"max_usd\": $maxCost}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDance2TextToVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Seedance 2.0 for maximum quality; Seedance 2.0 Fast for speed optimization.", "options": [{"key": "Seedance 2.0", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "16:9", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}]}}}, {"key": "Seedance 2.0 Fast", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "16:9", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add a watermark to the video.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDance2TextToVideoNode", "display_name": "ByteDance Seedance 2.0 Text to Video", "description": "Generate video using Seedance 2.0 models based on a text prompt.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $rate480 := 10044;\n                  $rate720 := 21600;\n                  $rate1080 := 48800;\n                  $m := widgets.model;\n                  $pricePer1K := $contains($m, \"fast\") ? 0.008008 : 0.01001;\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $dur := $lookup(widgets, \"model.duration\");\n                  $rate := $res = \"1080p\" ? $rate1080 :\n                           $res = \"720p\"  ? $rate720 :\n                                            $rate480;\n                  $cost := $dur * $rate * $pricePer1K / 1000;\n                  {\"type\": \"usd\", \"usd\": $cost, \"format\": {\"approximate\": true}}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDance2FirstLastFrameNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Seedance 2.0 for maximum quality; Seedance 2.0 Fast for speed optimization.", "options": [{"key": "Seedance 2.0", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "adaptive", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}]}}}, {"key": "Seedance 2.0 Fast", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "adaptive", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add a watermark to the video.", "advanced": true, "default": false}]}, "optional": {"first_frame": ["IMAGE", {"tooltip": "First frame image for the video."}], "last_frame": ["IMAGE", {"tooltip": "Last frame image for the video."}], "first_frame_asset_id": ["STRING", {"tooltip": "Seedance asset_id to use as the first frame. Mutually exclusive with the first_frame image input.", "default": "", "multiline": false}], "last_frame_asset_id": ["STRING", {"tooltip": "Seedance asset_id to use as the last frame. Mutually exclusive with the last_frame image input.", "default": "", "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "seed", "watermark"], "optional": ["first_frame", "last_frame", "first_frame_asset_id", "last_frame_asset_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDance2FirstLastFrameNode", "display_name": "ByteDance Seedance 2.0 First-Last-Frame to Video", "description": "Generate video using Seedance 2.0 from a first frame image and optional last frame image.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $rate480 := 10044;\n                  $rate720 := 21600;\n                  $rate1080 := 48800;\n                  $m := widgets.model;\n                  $pricePer1K := $contains($m, \"fast\") ? 0.008008 : 0.01001;\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $dur := $lookup(widgets, \"model.duration\");\n                  $rate := $res = \"1080p\" ? $rate1080 :\n                           $res = \"720p\"  ? $rate720 :\n                                            $rate480;\n                  $cost := $dur * $rate * $pricePer1K / 1000;\n                  {\"type\": \"usd\", \"usd\": $cost, \"format\": {\"approximate\": true}}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDance2ReferenceNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Seedance 2.0 for maximum quality; Seedance 2.0 Fast for speed optimization.", "options": [{"key": "Seedance 2.0", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "adaptive", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9"], "min": 0}}], "reference_videos": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3"], "min": 0}}], "reference_audios": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_audio": ["AUDIO", {}]}}, "names": ["audio_1", "audio_2", "audio_3"], "min": 0}}], "reference_assets": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_asset": ["STRING", {"forceInput": true, "multiline": false}]}}, "names": ["asset_1", "asset_2", "asset_3", "asset_4", "asset_5", "asset_6", "asset_7", "asset_8", "asset_9"], "min": 0}}]}, "optional": {"auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale reference videos that exceed the model's pixel budget for the selected resolution. Aspect ratio is preserved; videos already within limits are untouched.", "default": true}], "auto_upscale": ["BOOLEAN", {"tooltip": "Automatically upscale reference videos that are below the model's minimum pixel count for the selected resolution. Aspect ratio is preserved; videos already meeting the minimum are untouched. Note: upscaling a low-resolution source does not add real detail and may produce lower-quality generations.", "advanced": true, "default": false}]}}}, {"key": "Seedance 2.0 Fast", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "adaptive", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9"], "min": 0}}], "reference_videos": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3"], "min": 0}}], "reference_audios": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_audio": ["AUDIO", {}]}}, "names": ["audio_1", "audio_2", "audio_3"], "min": 0}}], "reference_assets": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_asset": ["STRING", {"forceInput": true, "multiline": false}]}}, "names": ["asset_1", "asset_2", "asset_3", "asset_4", "asset_5", "asset_6", "asset_7", "asset_8", "asset_9"], "min": 0}}]}, "optional": {"auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale reference videos that exceed the model's pixel budget for the selected resolution. Aspect ratio is preserved; videos already within limits are untouched.", "default": true}], "auto_upscale": ["BOOLEAN", {"tooltip": "Automatically upscale reference videos that are below the model's minimum pixel count for the selected resolution. Aspect ratio is preserved; videos already meeting the minimum are untouched. Note: upscaling a low-resolution source does not add real detail and may produce lower-quality generations.", "advanced": true, "default": false}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add a watermark to the video.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDance2ReferenceNode", "display_name": "ByteDance Seedance 2.0 Reference to Video", "description": "Generate, edit, or extend video using Seedance 2.0 with reference images, videos, and audio. Supports multimodal reference, video editing, and video extension.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": ["model.reference_videos"]}, "expr": "\n                (\n                  $rate480 := 10044;\n                  $rate720 := 21600;\n                  $rate1080 := 48800;\n                  $m := widgets.model;\n                  $hasVideo := $lookup(inputGroups, \"model.reference_videos\") > 0;\n                  $noVideoPricePer1K := $contains($m, \"fast\") ? 0.008008 : 0.01001;\n                  $videoPricePer1K := $contains($m, \"fast\") ? 0.004719 : 0.006149;\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $dur := $lookup(widgets, \"model.duration\");\n                  $rate := $res = \"1080p\" ? $rate1080 :\n                           $res = \"720p\"  ? $rate720 :\n                                            $rate480;\n                  $noVideoCost := $dur * $rate * $noVideoPricePer1K / 1000;\n                  $minVideoFactor := $ceil($dur * 5 / 3);\n                  $minVideoCost := $minVideoFactor * $rate * $videoPricePer1K / 1000;\n                  $maxVideoCost := (15 + $dur) * $rate * $videoPricePer1K / 1000;\n                  $hasVideo\n                    ? {\n                        \"type\": \"range_usd\",\n                        \"min_usd\": $minVideoCost,\n                        \"max_usd\": $maxVideoCost,\n                        \"format\": {\"approximate\": true}\n                      }\n                    : {\n                        \"type\": \"usd\",\n                        \"usd\": $noVideoCost,\n                        \"format\": {\"approximate\": true}\n                      }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceCreateImageAsset": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Image to register as a personal asset."}], "group_id": ["STRING", {"tooltip": "Reuse an existing Seedance asset group ID to skip repeated human verification for the same person. Leave empty to run real-person authentication in the browser and create a new group.", "default": "", "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "group_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "STRING"], "output_is_list": [false, false], "output_name": ["asset_id", "group_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ByteDanceCreateImageAsset", "display_name": "ByteDance Create Image Asset", "description": "Create a Seedance 2.0 personal image asset. Uploads the input image and registers it in the given asset group. If group_id is empty, runs a real-person H5 authentication flow to create a new group before adding the asset.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/image/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceCreateVideoAsset": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Video to register as a personal asset."}], "group_id": ["STRING", {"tooltip": "Reuse an existing Seedance asset group ID to skip repeated human verification for the same person. Leave empty to run real-person authentication in the browser and create a new group.", "default": "", "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["video", "group_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "STRING"], "output_is_list": [false, false], "output_name": ["asset_id", "group_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ByteDanceCreateVideoAsset", "display_name": "ByteDance Create Video Asset", "description": "Create a Seedance 2.0 personal video asset. Uploads the input video and registers it in the given asset group. If group_id is empty, runs a real-person H5 authentication flow to create a new group before adding the asset.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceSeedNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text input to the model.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The Seed model used to generate the response.", "options": [{"key": "Seed 2.0 Pro", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 20 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video(s) to use as context for the model. Up to 4 videos.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, higher values are more random.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}]}}}, {"key": "Seed 2.0 Lite", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 20 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video(s) to use as context for the model. Up to 4 videos.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, higher values are more random.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}]}}}, {"key": "Seed 2.0 Mini", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 20 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video(s) to use as context for the model. Up to 4 videos.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, higher values are more random.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate the model's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceSeedNode", "display_name": "ByteDance Seed", "description": "Generate text responses with ByteDance's Seed 2.0 models. Provide a text prompt and optionally one or more images or videos for multimodal context.", "python_module": "comfy_api_nodes.nodes_bytedance_llm", "category": "partner/text/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $m := widgets.model;\n                  $contains($m, \"mini\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.00025, 0.0009],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"lite\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.0003, 0.002],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"pro\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.0005, 0.003],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : {\"type\":\"text\", \"text\":\"Token-based\"}\n                )\n                "}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "ElevenLabsSpeechToText": {"input": {"required": {"audio": ["AUDIO", {"tooltip": "Audio to transcribe."}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for transcription.", "options": [{"key": "scribe_v2", "inputs": {"required": {"tag_audio_events": ["BOOLEAN", {"tooltip": "Annotate sounds like (laughter), (music), etc. in transcript.", "default": false}], "diarize": ["BOOLEAN", {"tooltip": "Annotate which speaker is talking.", "default": false}], "diarization_threshold": ["FLOAT", {"tooltip": "Speaker separation sensitivity. Lower values are more sensitive to speaker changes.", "default": 0.22, "min": 0.1, "max": 0.4, "step": 0.01, "display": "slider"}], "temperature": ["FLOAT", {"tooltip": "Randomness control. 0.0 uses model default. Higher values increase randomness.", "default": 0.0, "min": 0.0, "max": 2.0, "step": 0.01, "display": "slider"}], "timestamps_granularity": ["COMBO", {"tooltip": "Timing precision for transcript words.", "default": "word", "multiselect": false, "options": ["word", "character", "none"]}]}}}]}], "language_code": ["STRING", {"tooltip": "ISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection.", "default": "", "multiline": false}], "num_speakers": ["INT", {"tooltip": "Maximum number of speakers to predict. Set to 0 for automatic detection.", "default": 0, "min": 0, "max": 32, "display": "slider"}], "seed": ["INT", {"tooltip": "Seed for reproducibility (determinism not guaranteed).", "default": 1, "min": 0, "max": 2147483647}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["audio", "model", "language_code", "num_speakers", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["text", "language_code", "words_json"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "ElevenLabsSpeechToText", "display_name": "ElevenLabs Speech to Text", "description": "Transcribe audio to text. Supports automatic language detection, speaker diarization, and audio event tagging.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.0073,\"format\":{\"approximate\":true,\"suffix\":\"/minute\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsVoiceSelector": {"input": {"required": {"voice": ["COMBO", {"tooltip": "Choose a voice from the predefined ElevenLabs voices.", "multiselect": false, "options": ["Roger (male, american)", "Sarah (female, american)", "Laura (female, american)", "Charlie (male, australian)", "George (male, british)", "Callum (male, american)", "River (neutral, american)", "Harry (male, american)", "Liam (male, american)", "Alice (female, british)", "Matilda (female, american)", "Will (male, american)", "Jessica (female, american)", "Eric (male, american)", "Bella (female, american)", "Chris (male, american)", "Brian (male, american)", "Daniel (male, british)", "Lily (female, british)", "Adam (male, american)", "Bill (male, american)"]}]}}, "input_order": {"required": ["voice"]}, "is_input_list": false, "output": ["ELEVENLABS_VOICE"], "output_is_list": [false], "output_name": ["voice"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsVoiceSelector", "display_name": "ElevenLabs Voice Selector", "description": "Select a predefined ElevenLabs voice for text-to-speech generation.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsTextToSpeech": {"input": {"required": {"voice": ["ELEVENLABS_VOICE", {"tooltip": "Voice to use for speech synthesis. Connect from Voice Selector or Instant Voice Clone."}], "text": ["STRING", {"tooltip": "The text to convert to speech.", "default": "", "multiline": true}], "stability": ["FLOAT", {"tooltip": "Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "apply_text_normalization": ["COMBO", {"tooltip": "Text normalization mode. 'auto' lets the system decide, 'on' always applies normalization, 'off' skips it.", "multiselect": false, "options": ["auto", "on", "off"]}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for text-to-speech.", "options": [{"key": "eleven_multilingual_v2", "inputs": {"required": {"speed": ["FLOAT", {"tooltip": "Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.", "default": 1.0, "min": 0.7, "max": 1.3, "step": 0.01, "display": "slider"}], "similarity_boost": ["FLOAT", {"tooltip": "Similarity boost. Higher values make the voice more similar to the original.", "default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "use_speaker_boost": ["BOOLEAN", {"tooltip": "Boost similarity to the original speaker voice.", "default": false}], "style": ["FLOAT", {"tooltip": "Style exaggeration. Higher values increase stylistic expression but may reduce stability.", "default": 0.0, "min": 0.0, "max": 0.2, "step": 0.01, "display": "slider"}]}}}, {"key": "eleven_v3", "inputs": {"required": {"speed": ["FLOAT", {"tooltip": "Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.", "default": 1.0, "min": 0.7, "max": 1.3, "step": 0.01, "display": "slider"}], "similarity_boost": ["FLOAT", {"tooltip": "Similarity boost. Higher values make the voice more similar to the original.", "default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}]}}}]}], "language_code": ["STRING", {"tooltip": "ISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection.", "default": "", "multiline": false}], "seed": ["INT", {"tooltip": "Seed for reproducibility (determinism not guaranteed).", "default": 1, "min": 0, "max": 2147483647}], "output_format": ["COMBO", {"tooltip": "Audio output format.", "multiselect": false, "options": ["mp3_44100_192", "opus_48000_192"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["voice", "text", "stability", "apply_text_normalization", "model", "language_code", "seed", "output_format"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsTextToSpeech", "display_name": "ElevenLabs Text to Speech", "description": "Convert text to speech.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.24,\"format\":{\"approximate\":true,\"suffix\":\"/1K chars\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsAudioIsolation": {"input": {"required": {"audio": ["AUDIO", {"tooltip": "Audio to process for background noise removal."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsAudioIsolation", "display_name": "ElevenLabs Voice Isolation", "description": "Remove background noise from audio, isolating vocals or speech.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.24,\"format\":{\"approximate\":true,\"suffix\":\"/minute\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsTextToSoundEffects": {"input": {"required": {"text": ["STRING", {"tooltip": "Text description of the sound effect to generate.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for sound effect generation.", "options": [{"key": "eleven_sfx_v2", "inputs": {"required": {"duration": ["FLOAT", {"tooltip": "Duration of generated sound in seconds.", "default": 5.0, "min": 0.5, "max": 30.0, "step": 0.1, "display": "slider"}], "loop": ["BOOLEAN", {"tooltip": "Create a smoothly looping sound effect.", "default": false}], "prompt_influence": ["FLOAT", {"tooltip": "How closely generation follows the prompt. Higher values make the sound follow the text more closely.", "default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}]}}}]}], "output_format": ["COMBO", {"tooltip": "Audio output format.", "multiselect": false, "options": ["mp3_44100_192", "opus_48000_192"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["text", "model", "output_format"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsTextToSoundEffects", "display_name": "ElevenLabs Text to Sound Effects", "description": "Generate sound effects from text descriptions.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.14,\"format\":{\"approximate\":true,\"suffix\":\"/minute\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsInstantVoiceClone": {"input": {"required": {"files": ["COMFY_AUTOGROW_V3", {"tooltip": "Audio recordings for voice cloning.", "template": {"input": {"required": {"audio": ["AUDIO", {}]}}, "prefix": "audio", "min": 1, "max": 8}}], "remove_background_noise": ["BOOLEAN", {"tooltip": "Remove background noise from voice samples using audio isolation.", "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["files", "remove_background_noise"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["ELEVENLABS_VOICE"], "output_is_list": [false], "output_name": ["voice"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsInstantVoiceClone", "display_name": "ElevenLabs Instant Voice Clone", "description": "Create a cloned voice from audio samples. Provide 1-8 audio recordings of the voice to clone.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.15}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsSpeechToSpeech": {"input": {"required": {"voice": ["ELEVENLABS_VOICE", {"tooltip": "Target voice for the transformation. Connect from Voice Selector or Instant Voice Clone."}], "audio": ["AUDIO", {"tooltip": "Source audio to transform."}], "stability": ["FLOAT", {"tooltip": "Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for speech-to-speech transformation.", "options": [{"key": "eleven_multilingual_sts_v2", "inputs": {"required": {"speed": ["FLOAT", {"tooltip": "Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.", "default": 1.0, "min": 0.7, "max": 1.3, "step": 0.01, "display": "slider"}], "similarity_boost": ["FLOAT", {"tooltip": "Similarity boost. Higher values make the voice more similar to the original.", "default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "use_speaker_boost": ["BOOLEAN", {"tooltip": "Boost similarity to the original speaker voice.", "default": false}], "style": ["FLOAT", {"tooltip": "Style exaggeration. Higher values increase stylistic expression but may reduce stability.", "default": 0.0, "min": 0.0, "max": 0.2, "step": 0.01, "display": "slider"}]}}}, {"key": "eleven_english_sts_v2", "inputs": {"required": {"speed": ["FLOAT", {"tooltip": "Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.", "default": 1.0, "min": 0.7, "max": 1.3, "step": 0.01, "display": "slider"}], "similarity_boost": ["FLOAT", {"tooltip": "Similarity boost. Higher values make the voice more similar to the original.", "default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "use_speaker_boost": ["BOOLEAN", {"tooltip": "Boost similarity to the original speaker voice.", "default": false}], "style": ["FLOAT", {"tooltip": "Style exaggeration. Higher values increase stylistic expression but may reduce stability.", "default": 0.0, "min": 0.0, "max": 0.2, "step": 0.01, "display": "slider"}]}}}]}], "output_format": ["COMBO", {"tooltip": "Audio output format.", "multiselect": false, "options": ["mp3_44100_192", "opus_48000_192"]}], "seed": ["INT", {"tooltip": "Seed for reproducibility.", "default": 0, "min": 0, "max": 4294967295}], "remove_background_noise": ["BOOLEAN", {"tooltip": "Remove background noise from input audio using audio isolation.", "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["voice", "audio", "stability", "model", "output_format", "seed", "remove_background_noise"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsSpeechToSpeech", "display_name": "ElevenLabs Speech to Speech", "description": "Transform speech from one voice to another while preserving the original content and emotion.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.24,\"format\":{\"approximate\":true,\"suffix\":\"/minute\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsTextToDialogue": {"input": {"required": {"stability": ["FLOAT", {"tooltip": "Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.5, "display": "slider"}], "apply_text_normalization": ["COMBO", {"tooltip": "Text normalization mode. 'auto' lets the system decide, 'on' always applies normalization, 'off' skips it.", "multiselect": false, "options": ["auto", "on", "off"]}], "model": ["COMBO", {"tooltip": "Model to use for dialogue generation.", "multiselect": false, "options": ["eleven_v3"]}], "inputs": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Number of dialogue entries.", "options": [{"key": "1", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "2", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "3", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "4", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "5", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "6", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "7", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}], "text7": ["STRING", {"tooltip": "Text content for dialogue entry 7.", "default": "", "multiline": true}], "voice7": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 7. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "8", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}], "text7": ["STRING", {"tooltip": "Text content for dialogue entry 7.", "default": "", "multiline": true}], "voice7": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 7. Connect from Voice Selector or Instant Voice Clone."}], "text8": ["STRING", {"tooltip": "Text content for dialogue entry 8.", "default": "", "multiline": true}], "voice8": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 8. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "9", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}], "text7": ["STRING", {"tooltip": "Text content for dialogue entry 7.", "default": "", "multiline": true}], "voice7": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 7. Connect from Voice Selector or Instant Voice Clone."}], "text8": ["STRING", {"tooltip": "Text content for dialogue entry 8.", "default": "", "multiline": true}], "voice8": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 8. Connect from Voice Selector or Instant Voice Clone."}], "text9": ["STRING", {"tooltip": "Text content for dialogue entry 9.", "default": "", "multiline": true}], "voice9": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 9. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "10", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}], "text7": ["STRING", {"tooltip": "Text content for dialogue entry 7.", "default": "", "multiline": true}], "voice7": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 7. Connect from Voice Selector or Instant Voice Clone."}], "text8": ["STRING", {"tooltip": "Text content for dialogue entry 8.", "default": "", "multiline": true}], "voice8": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 8. Connect from Voice Selector or Instant Voice Clone."}], "text9": ["STRING", {"tooltip": "Text content for dialogue entry 9.", "default": "", "multiline": true}], "voice9": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 9. Connect from Voice Selector or Instant Voice Clone."}], "text10": ["STRING", {"tooltip": "Text content for dialogue entry 10.", "default": "", "multiline": true}], "voice10": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 10. Connect from Voice Selector or Instant Voice Clone."}]}}}]}], "language_code": ["STRING", {"tooltip": "ISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection.", "default": "", "multiline": false}], "seed": ["INT", {"tooltip": "Seed for reproducibility.", "default": 1, "min": 0, "max": 4294967295}], "output_format": ["COMBO", {"tooltip": "Audio output format.", "multiselect": false, "options": ["mp3_44100_192", "opus_48000_192"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["stability", "apply_text_normalization", "model", "inputs", "language_code", "seed", "output_format"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsTextToDialogue", "display_name": "ElevenLabs Text to Dialogue", "description": "Generate multi-speaker dialogue from text. Each dialogue entry has its own text and voice.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.24,\"format\":{\"approximate\":true,\"suffix\":\"/1K chars\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text inputs to the model, used to generate a response. You can include detailed instructions, questions, or context for the model.", "default": "", "multiline": true}], "model": ["COMBO", {"tooltip": "The Gemini model to use for generating responses.", "default": "gemini-3-1-pro", "multiselect": false, "options": ["gemini-2.5-pro-preview-05-06", "gemini-2.5-flash-preview-04-17", "gemini-2.5-pro", "gemini-2.5-flash", "gemini-3-pro-preview", "gemini-3-1-pro", "gemini-3-1-flash-lite"]}], "seed": ["INT", {"tooltip": "When seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node."}], "audio": ["AUDIO", {"tooltip": "Optional audio to use as context for the model."}], "video": ["VIDEO", {"tooltip": "Optional video to use as context for the model."}], "files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}], "system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["images", "audio", "video", "files", "system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "GeminiNode", "display_name": "Google Gemini", "description": "Generate text responses with Google's Gemini AI model. You can provide multiple types of inputs (text, images, audio, video) as context for generating more relevant and meaningful responses.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/text/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $m := widgets.model;\n                  $contains($m, \"gemini-2.5-flash\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.0003, 0.0025],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\"}\n                  }\n                  : $contains($m, \"gemini-2.5-pro\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.00125, 0.01],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : ($contains($m, \"gemini-3-pro-preview\") or $contains($m, \"gemini-3-1-pro\")) ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.002, 0.012],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"gemini-3-1-flash-lite\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.00025, 0.0015],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : {\"type\":\"text\", \"text\":\"Token-based\"}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for generation", "default": "", "multiline": true}], "model": ["COMBO", {"tooltip": "The Gemini model to use for generating responses.", "default": "gemini-2.5-flash-image", "multiselect": false, "options": ["gemini-2.5-flash-image-preview", "gemini-2.5-flash-image"]}], "seed": ["INT", {"tooltip": "When seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node."}], "files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}], "aspect_ratio": ["COMBO", {"tooltip": "Defaults to matching the output image size to that of your input image, or otherwise generates 1:1 squares.", "default": "auto", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"]}], "response_modalities": ["COMBO", {"tooltip": "Choose 'IMAGE' for image-only output, or 'IMAGE+TEXT' to return both the generated image and a text response.", "advanced": true, "multiselect": false, "options": ["IMAGE+TEXT", "IMAGE"]}], "system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input\u2014regardless of format, intent, or abstraction\u2014as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests.", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["images", "files", "aspect_ratio", "response_modalities", "system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [false, false], "output_name": ["IMAGE", "STRING"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "GeminiImageNode", "display_name": "Nano Banana (Google Gemini Image)", "description": "Edit images synchronously via Google API.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/image/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.039,\"format\":{\"suffix\":\"/Image (1K)\",\"approximate\":true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiImage2Node": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt describing the image to generate or the edits to apply. Include any constraints, styles, or details the model should follow.", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["gemini-3-pro-image-preview", "Nano Banana 2 (Gemini 3.1 Flash Image)"]}], "seed": ["INT", {"tooltip": "When the seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "aspect_ratio": ["COMBO", {"tooltip": "If set to 'auto', matches your input image's aspect ratio; if no image is provided, a 16:9 square is usually generated.", "default": "auto", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"]}], "resolution": ["COMBO", {"tooltip": "Target output resolution. For 2K/4K the native Gemini upscaler is used.", "multiselect": false, "options": ["1K", "2K", "4K"]}], "response_modalities": ["COMBO", {"tooltip": "Choose 'IMAGE' for image-only output, or 'IMAGE+TEXT' to return both the generated image and a text response.", "advanced": true, "multiselect": false, "options": ["IMAGE+TEXT", "IMAGE"]}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional reference image(s). To include multiple images, use the Batch Images node (up to 14)."}], "files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}], "system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input\u2014regardless of format, intent, or abstraction\u2014as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests.", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "seed", "aspect_ratio", "resolution", "response_modalities"], "optional": ["images", "files", "system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [false, false], "output_name": ["IMAGE", "STRING"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "GeminiImage2Node", "display_name": "Nano Banana Pro (Google Gemini Image)", "description": "Generate or edit images synchronously via Google Vertex API.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/image/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n    (\n      $m := widgets.model;\n      $r := widgets.resolution;\n      $isFlash := $contains($m, \"nano banana 2\");\n      $flashPrices := {\"1k\": 0.0696, \"2k\": 0.1014, \"4k\": 0.154};\n      $proPrices := {\"1k\": 0.134, \"2k\": 0.134, \"4k\": 0.24};\n      $prices := $isFlash ? $flashPrices : $proPrices;\n      {\"type\":\"usd\",\"usd\": $lookup($prices, $r), \"format\":{\"suffix\":\"/Image\",\"approximate\":true}}\n    )\n    "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiNanoBanana2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt describing the image to generate or the edits to apply. Include any constraints, styles, or details the model should follow.", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["Nano Banana 2 (Gemini 3.1 Flash Image)"]}], "seed": ["INT", {"tooltip": "When the seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "aspect_ratio": ["COMBO", {"tooltip": "If set to 'auto', matches your input image's aspect ratio; if no image is provided, a 16:9 square is usually generated.", "default": "auto", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"]}], "resolution": ["COMBO", {"tooltip": "Target output resolution. For 2K/4K the native Gemini upscaler is used.", "multiselect": false, "options": ["1K", "2K", "4K"]}], "response_modalities": ["COMBO", {"advanced": true, "multiselect": false, "options": ["IMAGE", "IMAGE+TEXT"]}], "thinking_level": ["COMBO", {"multiselect": false, "options": ["MINIMAL", "HIGH"]}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional reference image(s). To include multiple images, use the Batch Images node (up to 14)."}], "files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}], "system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input\u2014regardless of format, intent, or abstraction\u2014as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests.", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "seed", "aspect_ratio", "resolution", "response_modalities", "thinking_level"], "optional": ["images", "files", "system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE", "STRING", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["IMAGE", "STRING", "thought_image"], "output_tooltips": [null, null, "First image from the model's thinking process. Only available with thinking_level HIGH and IMAGE+TEXT modality."], "output_matchtypes": null, "name": "GeminiNanoBanana2", "display_name": "Nano Banana 2", "description": "Generate or edit images synchronously via Google Vertex API.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/image/Gemini", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n    (\n      $m := widgets.model;\n      $r := widgets.resolution;\n      $isFlash := $contains($m, \"nano banana 2\");\n      $flashPrices := {\"1k\": 0.0696, \"2k\": 0.1014, \"4k\": 0.154};\n      $proPrices := {\"1k\": 0.134, \"2k\": 0.134, \"4k\": 0.24};\n      $prices := $isFlash ? $flashPrices : $proPrices;\n      {\"type\":\"usd\",\"usd\": $lookup($prices, $r), \"format\":{\"suffix\":\"/Image\",\"approximate\":true}}\n    )\n    "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiNanoBanana2V2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt describing the image to generate or the edits to apply. Include any constraints, styles, or details the model should follow.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Nano Banana 2 (Gemini 3.1 Flash Image)", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "If set to 'auto', matches your input image's aspect ratio; if no image is provided, a 16:9 square is usually generated.", "default": "auto", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9", "1:4", "4:1", "8:1", "1:8"]}], "resolution": ["COMBO", {"tooltip": "Target output resolution. For 2K/4K the native Gemini upscaler is used.", "multiselect": false, "options": ["1K", "2K", "4K"]}], "thinking_level": ["COMBO", {"multiselect": false, "options": ["MINIMAL", "HIGH"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s). Up to 14 images total.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14"], "min": 0}}]}, "optional": {"files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}]}}}]}], "seed": ["INT", {"tooltip": "When the seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "response_modalities": ["COMBO", {"advanced": true, "multiselect": false, "options": ["IMAGE", "IMAGE+TEXT"]}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input\u2014regardless of format, intent, or abstraction\u2014as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests.", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "seed", "response_modalities"], "optional": ["system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE", "STRING", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["IMAGE", "STRING", "thought_image"], "output_tooltips": [null, null, "First image from the model's thinking process. Only available with thinking_level HIGH and IMAGE+TEXT modality."], "output_matchtypes": null, "name": "GeminiNanoBanana2V2", "display_name": "Nano Banana 2", "description": "Generate or edit images synchronously via Google Vertex API.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/image/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $r := $lookup(widgets, \"model.resolution\");\n                  $prices := {\"1k\": 0.0696, \"2k\": 0.1014, \"4k\": 0.154};\n                  {\"type\":\"usd\",\"usd\": $lookup($prices, $r), \"format\":{\"suffix\":\"/Image\",\"approximate\":true}}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiInputFiles": {"input": {"required": {"file": ["COMBO", {"tooltip": "Input files to include as context for the model. Only accepts text (.txt) and PDF (.pdf) files for now.", "multiselect": false, "options": []}]}, "optional": {"GEMINI_INPUT_FILES": ["GEMINI_INPUT_FILES", {"tooltip": "An optional additional file(s) to batch together with the file loaded from this node. Allows chaining of input files so that a single message can include multiple input files."}]}}, "input_order": {"required": ["file"], "optional": ["GEMINI_INPUT_FILES"]}, "is_input_list": false, "output": ["GEMINI_INPUT_FILES"], "output_is_list": [false], "output_name": ["GEMINI_INPUT_FILES"], "output_tooltips": [null], "output_matchtypes": null, "name": "GeminiInputFiles", "display_name": "Gemini Input Files", "description": "Loads and prepares input files to include as inputs for Gemini LLM nodes. The files will be read by the Gemini model when generating a response. The contents of the text file count toward the token limit. \ud83d\udec8 TIP: Can be chained together with other Gemini Input File nodes.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/text/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokImageNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["grok-imagine-image-quality", "grok-imagine-image-pro", "grok-imagine-image"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the image", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1"]}], "number_of_images": ["INT", {"tooltip": "Number of images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt", "aspect_ratio", "number_of_images", "seed"], "optional": ["resolution"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokImageNode", "display_name": "Grok Image", "description": "Generate images using Grok based on a text prompt", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/image/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "number_of_images", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $rate := widgets.model = \"grok-imagine-image-quality\"\n                    ? (widgets.resolution = \"1k\" ? 0.05 : 0.07)\n                    : ($contains(widgets.model, \"pro\") ? 0.07 : 0.02);\n                  {\"type\":\"usd\",\"usd\": $rate * widgets.number_of_images}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokImageEditNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["grok-imagine-image-quality", "grok-imagine-image-pro", "grok-imagine-image"]}], "image": ["IMAGE", {"display_name": "images"}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the image", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}], "number_of_images": ["INT", {"tooltip": "Number of edited images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"aspect_ratio": ["COMBO", {"tooltip": "Only allowed when multiple images are connected to the image input.", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "image", "prompt", "resolution", "number_of_images", "seed"], "optional": ["aspect_ratio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokImageEditNode", "display_name": "Grok Image Edit", "description": "Modify an existing image based on a text prompt", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/image/Grok", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "number_of_images", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $isQualityModel := widgets.model = \"grok-imagine-image-quality\";\n                  $isPro := $contains(widgets.model, \"pro\");\n                  $rate := $isQualityModel\n                    ? (widgets.resolution = \"1k\" ? 0.05 : 0.07)\n                    : ($isPro ? 0.07 : 0.02);\n                  $base := $isQualityModel ? 0.01 : 0.002;\n                  $output := $rate * widgets.number_of_images;\n                  $isPro\n                    ? {\"type\":\"usd\",\"usd\": $base + $output}\n                    : {\"type\":\"range_usd\",\"min_usd\": $base + $output, \"max_usd\": 3 * $base + $output}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokImageEditNodeV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "The text prompt used to generate the image", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "grok-imagine-image-quality", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference image(s) to edit. Up to 3 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3"], "min": 1}}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}], "number_of_images": ["INT", {"tooltip": "Number of edited images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "aspect_ratio": ["COMBO", {"tooltip": "Only allowed when multiple images are connected.", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1"]}]}}}, {"key": "grok-imagine-image-pro", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference image to edit.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1"], "min": 1}}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}], "number_of_images": ["INT", {"tooltip": "Number of edited images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}]}}}, {"key": "grok-imagine-image", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference image(s) to edit. Up to 3 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3"], "min": 1}}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}], "number_of_images": ["INT", {"tooltip": "Number of edited images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "aspect_ratio": ["COMBO", {"tooltip": "Only allowed when multiple images are connected.", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1"]}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokImageEditNodeV2", "display_name": "Grok Image Edit", "description": "Modify an existing image based on a text prompt", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/image/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.number_of_images", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $isQualityModel := widgets.model = \"grok-imagine-image-quality\";\n                  $isPro := $contains(widgets.model, \"pro\");\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $n := $lookup(widgets, \"model.number_of_images\");\n                  $rate := $isQualityModel\n                    ? ($res = \"1k\" ? 0.05 : 0.07)\n                    : ($isPro ? 0.07 : 0.02);\n                  $base := $isQualityModel ? 0.01 : 0.002;\n                  $output := $rate * $n;\n                  $isPro\n                    ? {\"type\":\"usd\",\"usd\": $base + $output}\n                    : {\"type\":\"range_usd\",\"min_usd\": $base + $output, \"max_usd\": 3 * $base + $output}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "grok-imagine-video-1.5 currently always requires an input image.", "multiselect": false, "options": ["grok-imagine-video", "grok-imagine-video-1.5"]}], "prompt": ["STRING", {"tooltip": "Text description of the desired video.", "multiline": true}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["auto", "16:9", "4:3", "3:2", "1:1", "2:3", "3:4", "9:16"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 6, "min": 1, "max": 15, "step": 1, "display": "slider"}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"image": ["IMAGE", {"tooltip": "Optional starting image for grok-imagine-video. Required for grok-imagine-video-1.5."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt", "resolution", "aspect_ratio", "duration", "seed"], "optional": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokVideoNode", "display_name": "Grok Video", "description": "Generate video from a prompt or an image", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/video/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": ["image"], "input_groups": []}, "expr": "\n                (\n                  $is15 := $contains(widgets.model, \"1.5\");\n                  $rate := $is15\n                    ? (widgets.resolution = \"720p\" ? 0.2002 : 0.1144)\n                    : (widgets.resolution = \"720p\" ? 0.07 : 0.05);\n                  $imgCost := $is15 ? 0.0143 : 0.002;\n                  $base := $rate * widgets.duration;\n                  {\"type\":\"usd\",\"usd\": inputs.image.connected ? $base + $imgCost : $base}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokVideoReferenceNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the desired video.", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The model to use for video generation.", "options": [{"key": "grok-imagine-video", "inputs": {"required": {"reference_images": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 7 reference images to guide the video generation.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "reference_", "min": 1, "max": 7}}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["16:9", "4:3", "3:2", "1:1", "2:3", "3:4", "9:16"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 6, "min": 2, "max": 10, "step": 1, "display": "slider"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokVideoReferenceNode", "display_name": "Grok Reference-to-Video", "description": "Generate video guided by reference images as style and content references.", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/video/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": ["model.reference_images"]}, "expr": "\n                (\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $dur := $lookup(widgets, \"model.duration\");\n                  $refs := $lookup(inputGroups, \"model.reference_images\");\n                  $rate := $res = \"720p\" ? 0.07 : 0.05;\n                  $price := ($rate * $dur + 0.002 * $refs) * 1.43;\n                  {\"type\":\"usd\",\"usd\": $price}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokVideoEditNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["grok-imagine-video"]}], "prompt": ["STRING", {"tooltip": "Text description of the desired video.", "multiline": true}], "video": ["VIDEO", {"tooltip": "Maximum supported duration is 8.7 seconds and 50MB file size."}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt", "video", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokVideoEditNode", "display_name": "Grok Video Edit", "description": "Edit an existing video based on a text prompt.", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/video/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.06, \"format\": {\"suffix\": \"/sec\", \"approximate\": true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokVideoExtendNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of what should happen next in the video.", "multiline": true}], "video": ["VIDEO", {"tooltip": "Source video to extend. MP4 format, 2-15 seconds."}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The model to use for video extension.", "options": [{"key": "grok-imagine-video", "inputs": {"required": {"duration": ["INT", {"tooltip": "Length of the extension in seconds.", "default": 8, "min": 2, "max": 10, "step": 1, "display": "slider"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "video", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokVideoExtendNode", "display_name": "Grok Video Extend", "description": "Extend an existing video with a seamless continuation based on a text prompt.", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/video/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $dur := $lookup(widgets, \"model.duration\");\n                  {\n                    \"type\": \"range_usd\",\n                    \"min_usd\": (0.02 + 0.05 * $dur) * 1.43,\n                    \"max_usd\": (0.15 + 0.05 * $dur) * 1.43\n                  }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HitPawGeneralImageEnhance": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["generative_portrait", "generative"]}], "image": ["IMAGE", {}], "upscale_factor": ["COMBO", {"multiselect": false, "options": [1, 2, 4]}], "auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale input image if output would exceed the limit.", "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "image", "upscale_factor", "auto_downscale"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "HitPawGeneralImageEnhance", "display_name": "HitPaw General Image Enhance", "description": "Upscale low-resolution images to super-resolution, eliminate artifacts and noise. Maximum output: 32 megapixels.", "python_module": "comfy_api_nodes.nodes_hitpaw", "category": "partner/image/HitPaw", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $prices := {\n                    \"generative_portrait\": {\"min\": 0.02, \"max\": 0.06},\n                    \"generative\": {\"min\": 0.05, \"max\": 0.15}\n                  };\n                  $price := $lookup($prices, widgets.model);\n                  {\n                    \"type\": \"range_usd\",\n                    \"min_usd\": $price.min,\n                    \"max_usd\": $price.max\n                  }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HitPawVideoEnhance": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Portrait Restore Model (1x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "Portrait Restore Model (2x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "General Restore Model (1x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "General Restore Model (2x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "General Restore Model (4x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "Ultra HD Model (2x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "Generative Model (1x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD"]}]}}}]}], "video": ["VIDEO", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "video"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HitPawVideoEnhance", "display_name": "HitPaw Video Enhance", "description": "Upscale low-resolution videos to high resolution, eliminate artifacts and noise. Prices shown are per second of video.", "python_module": "comfy_api_nodes.nodes_hitpaw", "category": "partner/video/HitPaw", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $m := $lookup(widgets, \"model\");\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $standard_model_prices := {\n                    \"original\": {\"min\": 0.01, \"max\": 0.198},\n                    \"720p\": {\"min\": 0.01, \"max\": 0.06},\n                    \"1080p\": {\"min\": 0.015, \"max\": 0.09},\n                    \"2k/qhd\": {\"min\": 0.02, \"max\": 0.117},\n                    \"4k/uhd\": {\"min\": 0.025, \"max\": 0.152},\n                    \"8k\": {\"min\": 0.033, \"max\": 0.198}\n                  };\n                  $ultra_hd_model_prices := {\n                    \"original\": {\"min\": 0.015, \"max\": 0.264},\n                    \"720p\": {\"min\": 0.015, \"max\": 0.092},\n                    \"1080p\": {\"min\": 0.02, \"max\": 0.12},\n                    \"2k/qhd\": {\"min\": 0.026, \"max\": 0.156},\n                    \"4k/uhd\": {\"min\": 0.034, \"max\": 0.203},\n                    \"8k\": {\"min\": 0.044, \"max\": 0.264}\n                  };\n                  $generative_model_prices := {\n                    \"original\": {\"min\": 0.015, \"max\": 0.338},\n                    \"720p\": {\"min\": 0.008, \"max\": 0.090},\n                    \"1080p\": {\"min\": 0.05, \"max\": 0.15},\n                    \"2k/qhd\": {\"min\": 0.038, \"max\": 0.225},\n                    \"4k/uhd\": {\"min\": 0.056, \"max\": 0.338}\n                  };\n                  $prices := $contains($m, \"ultra hd\") ? $ultra_hd_model_prices :\n                             $contains($m, \"generative\") ? $generative_model_prices :\n                             $standard_model_prices;\n                  $price := $lookup($prices, $res);\n                  {\n                    \"type\": \"range_usd\",\n                    \"min_usd\": $price.min,\n                    \"max_usd\": $price.max,\n                    \"format\": {\"approximate\": true, \"suffix\": \"/second\"}\n                  }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TencentTextToModelNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "The LowPoly option is unavailable for the `3.1` model.", "multiselect": false, "options": ["3.0", "3.1"]}], "prompt": ["STRING", {"tooltip": "Supports up to 1024 characters.", "default": "", "multiline": true}], "face_count": ["INT", {"default": 500000, "min": 3000, "max": 1500000}], "generate_type": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Normal", "inputs": {"required": {"pbr": ["BOOLEAN", {"default": false}]}}}, {"key": "LowPoly", "inputs": {"required": {"polygon_type": ["COMBO", {"multiselect": false, "options": ["triangle", "quadrilateral"]}], "pbr": ["BOOLEAN", {"default": false}]}}}, {"key": "Geometry", "inputs": {"required": {}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "prompt", "face_count", "generate_type", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB", "FILE_3D_OBJ", "IMAGE"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "GLB", "OBJ", "texture_image"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "TencentTextToModelNode", "display_name": "Hunyuan3D: Text to Model", "description": "", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "generate_type", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "generate_type.pbr", "type": "BOOLEAN"}, {"name": "face_count", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $base := widgets.generate_type = \"normal\" ? 25 : widgets.generate_type = \"lowpoly\" ? 30 : 15;\n                  $pbr := $lookup(widgets, \"generate_type.pbr\") ? 10 : 0;\n                  $face := widgets.face_count != 500000 ? 10 : 0;\n                  {\"type\":\"usd\",\"usd\": ($base + $pbr + $face) * 0.02}\n                )\n                "}, "search_aliases": null, "essentials_category": "3D", "has_intermediate_output": false}, "TencentImageToModelNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "The LowPoly option is unavailable for the `3.1` model.", "multiselect": false, "options": ["3.0", "3.1"]}], "image": ["IMAGE", {}], "face_count": ["INT", {"default": 500000, "min": 3000, "max": 1500000}], "generate_type": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Normal", "inputs": {"required": {"pbr": ["BOOLEAN", {"default": false}]}}}, {"key": "LowPoly", "inputs": {"required": {"polygon_type": ["COMBO", {"multiselect": false, "options": ["triangle", "quadrilateral"]}], "pbr": ["BOOLEAN", {"default": false}]}}}, {"key": "Geometry", "inputs": {"required": {}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "optional": {"image_left": ["IMAGE", {}], "image_right": ["IMAGE", {}], "image_back": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "image", "face_count", "generate_type", "seed"], "optional": ["image_left", "image_right", "image_back"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB", "FILE_3D_OBJ", "IMAGE", "IMAGE", "IMAGE", "IMAGE"], "output_is_list": [false, false, false, false, false, false, false], "output_name": ["model_file", "GLB", "OBJ", "texture_image", "optional_metallic", "optional_normal", "optional_roughness"], "output_tooltips": [null, null, null, null, null, null, null], "output_matchtypes": null, "name": "TencentImageToModelNode", "display_name": "Hunyuan3D: Image(s) to Model", "description": "", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "generate_type", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "generate_type.pbr", "type": "BOOLEAN"}, {"name": "face_count", "type": "INT"}], "inputs": ["image_left", "image_right", "image_back"], "input_groups": []}, "expr": "\n                (\n                  $base := widgets.generate_type = \"normal\" ? 25 : widgets.generate_type = \"lowpoly\" ? 30 : 15;\n                  $multiview := (\n                    inputs.image_left.connected or inputs.image_right.connected or inputs.image_back.connected\n                  ) ? 10 : 0;\n                  $pbr := $lookup(widgets, \"generate_type.pbr\") ? 10 : 0;\n                  $face := widgets.face_count != 500000 ? 10 : 0;\n                  {\"type\":\"usd\",\"usd\": ($base + $multiview + $pbr + $face) * 0.02}\n                )\n                "}, "search_aliases": null, "essentials_category": "3D", "has_intermediate_output": false}, "TencentModelTo3DUVNode": {"input": {"required": {"model_3d": ["FILE_3D_GLB,FILE_3D_OBJ,FILE_3D_FBX,FILE_3D", {"tooltip": "Input 3D model (GLB, OBJ, or FBX)"}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 1, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model_3d", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["FILE_3D_OBJ", "FILE_3D_FBX", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["OBJ", "FBX", "uv_image"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TencentModelTo3DUVNode", "display_name": "Hunyuan3D: Model to UV", "description": "Perform UV unfolding on a 3D model to generate UV texture. Input model must have less than 30000 faces.", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Tencent3DTextureEditNode": {"input": {"required": {"model_3d": ["FILE_3D_FBX,FILE_3D", {"tooltip": "3D model in FBX format. Model should have less than 100000 faces."}], "prompt": ["STRING", {"tooltip": "Describes texture editing. Supports up to 1024 UTF-8 characters.", "default": "", "multiline": true}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model_3d", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["FILE_3D_GLB", "FILE_3D_OBJ", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["GLB", "OBJ", "texture_image"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "Tencent3DTextureEditNode", "display_name": "Hunyuan3D: 3D Texture Edit", "description": "After inputting the 3D model, perform 3D model texture redrawing.", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.6}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Tencent3DPartNode": {"input": {"required": {"model_3d": ["FILE_3D_FBX,FILE_3D", {"tooltip": "3D model in FBX format. Model should have less than 30000 faces."}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model_3d", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["FILE_3D_FBX"], "output_is_list": [false], "output_name": ["FBX"], "output_tooltips": [null], "output_matchtypes": null, "name": "Tencent3DPartNode", "display_name": "Hunyuan3D: 3D Part", "description": "Automatically perform component identification and generation based on the model structure.", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.6}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TencentSmartTopologyNode": {"input": {"required": {"model_3d": ["FILE_3D_GLB,FILE_3D_OBJ,FILE_3D", {"tooltip": "Input 3D model (GLB or OBJ)"}], "polygon_type": ["COMBO", {"tooltip": "Surface composition type.", "multiselect": false, "options": ["triangle", "quadrilateral"]}], "face_level": ["COMBO", {"tooltip": "Polygon reduction level.", "multiselect": false, "options": ["medium", "high", "low"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model_3d", "polygon_type", "face_level", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["FILE_3D_OBJ"], "output_is_list": [false], "output_name": ["OBJ"], "output_tooltips": [null], "output_matchtypes": null, "name": "TencentSmartTopologyNode", "display_name": "Hunyuan3D: Smart Topology", "description": "Perform smart retopology on a 3D model. Supports GLB/OBJ formats; max 200MB; recommended for high-poly models.", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":1.0}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "IdeogramV1": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "turbo": ["BOOLEAN", {"tooltip": "Whether to use turbo mode (faster generation, potentially lower quality)", "default": false}]}, "optional": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio for image generation.", "default": "1:1", "multiselect": false, "options": ["1:1", "4:3", "3:4", "16:9", "9:16", "2:1", "1:2", "3:2", "2:3", "4:5", "5:4"]}], "magic_prompt_option": ["COMBO", {"tooltip": "Determine if MagicPrompt should be used in generation", "advanced": true, "default": "AUTO", "multiselect": false, "options": ["AUTO", "ON", "OFF"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "negative_prompt": ["STRING", {"tooltip": "Description of what to exclude from the image", "default": "", "multiline": true}], "num_images": ["INT", {"default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "turbo"], "optional": ["aspect_ratio", "magic_prompt_option", "seed", "negative_prompt", "num_images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "IdeogramV1", "display_name": "Ideogram V1", "description": "Generates images using the Ideogram V1 model.", "python_module": "comfy_api_nodes.nodes_ideogram", "category": "partner/image/Ideogram", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "num_images", "type": "INT"}, {"name": "turbo", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $n := widgets.num_images;\n                  $base := (widgets.turbo = true) ? 0.0286 : 0.0858;\n                  {\"type\":\"usd\",\"usd\": $round($base * $n, 2)}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "IdeogramV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "turbo": ["BOOLEAN", {"tooltip": "Whether to use turbo mode (faster generation, potentially lower quality)", "default": false}]}, "optional": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio for image generation. Ignored if resolution is not set to AUTO.", "default": "1:1", "multiselect": false, "options": ["1:1", "4:3", "3:4", "16:9", "9:16", "2:1", "1:2", "3:2", "2:3", "4:5", "5:4"]}], "resolution": ["COMBO", {"tooltip": "The resolution for image generation. If not set to AUTO, this overrides the aspect_ratio setting.", "default": "Auto", "multiselect": false, "options": ["Auto", "512 x 1536", "576 x 1408", "576 x 1472", "576 x 1536", "640 x 1024", "640 x 1344", "640 x 1408", "640 x 1472", "640 x 1536", "704 x 1152", "704 x 1216", "704 x 1280", "704 x 1344", "704 x 1408", "704 x 1472", "720 x 1280", "736 x 1312", "768 x 1024", "768 x 1088", "768 x 1152", "768 x 1216", "768 x 1232", "768 x 1280", "768 x 1344", "832 x 960", "832 x 1024", "832 x 1088", "832 x 1152", "832 x 1216", "832 x 1248", "864 x 1152", "896 x 960", "896 x 1024", "896 x 1088", "896 x 1120", "896 x 1152", "960 x 832", "960 x 896", "960 x 1024", "960 x 1088", "1024 x 640", "1024 x 768", "1024 x 832", "1024 x 896", "1024 x 960", "1024 x 1024", "1088 x 768", "1088 x 832", "1088 x 896", "1088 x 960", "1120 x 896", "1152 x 704", "1152 x 768", "1152 x 832", "1152 x 864", "1152 x 896", "1216 x 704", "1216 x 768", "1216 x 832", "1232 x 768", "1248 x 832", "1280 x 704", "1280 x 720", "1280 x 768", "1280 x 800", "1312 x 736", "1344 x 640", "1344 x 704", "1344 x 768", "1408 x 576", "1408 x 640", "1408 x 704", "1472 x 576", "1472 x 640", "1472 x 704", "1536 x 512", "1536 x 576", "1536 x 640"]}], "magic_prompt_option": ["COMBO", {"tooltip": "Determine if MagicPrompt should be used in generation", "advanced": true, "default": "AUTO", "multiselect": false, "options": ["AUTO", "ON", "OFF"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "style_type": ["COMBO", {"tooltip": "Style type for generation (V2 only)", "advanced": true, "default": "NONE", "multiselect": false, "options": ["AUTO", "GENERAL", "REALISTIC", "DESIGN", "RENDER_3D", "ANIME"]}], "negative_prompt": ["STRING", {"tooltip": "Description of what to exclude from the image", "default": "", "multiline": true}], "num_images": ["INT", {"default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "turbo"], "optional": ["aspect_ratio", "resolution", "magic_prompt_option", "seed", "style_type", "negative_prompt", "num_images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "IdeogramV2", "display_name": "Ideogram V2", "description": "Generates images using the Ideogram V2 model.", "python_module": "comfy_api_nodes.nodes_ideogram", "category": "partner/image/Ideogram", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "num_images", "type": "INT"}, {"name": "turbo", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $n := widgets.num_images;\n                  $base := (widgets.turbo = true) ? 0.0715 : 0.1144;\n                  {\"type\":\"usd\",\"usd\": $round($base * $n, 2)}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "IdeogramV3": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation or editing", "default": "", "multiline": true}]}, "optional": {"image": ["IMAGE", {"tooltip": "Optional reference image for image editing."}], "mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced)"}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio for image generation. Ignored if resolution is not set to Auto.", "default": "1:1", "multiselect": false, "options": ["1:3", "3:1", "1:2", "2:1", "9:16", "16:9", "10:16", "16:10", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "1:1"]}], "resolution": ["COMBO", {"tooltip": "The resolution for image generation. If not set to Auto, this overrides the aspect_ratio setting.", "default": "Auto", "multiselect": false, "options": ["Auto", "512x1536", "576x1408", "576x1472", "576x1536", "640x1344", "640x1408", "640x1472", "640x1536", "704x1152", "704x1216", "704x1280", "704x1344", "704x1408", "704x1472", "736x1312", "768x1088", "768x1216", "768x1280", "768x1344", "800x1280", "832x960", "832x1024", "832x1088", "832x1152", "832x1216", "832x1248", "864x1152", "896x960", "896x1024", "896x1088", "896x1120", "896x1152", "960x832", "960x896", "960x1024", "960x1088", "1024x832", "1024x896", "1024x960", "1024x1024", "1088x768", "1088x832", "1088x896", "1088x960", "1120x896", "1152x704", "1152x832", "1152x864", "1152x896", "1216x704", "1216x768", "1216x832", "1248x832", "1280x704", "1280x768", "1280x800", "1312x736", "1344x640", "1344x704", "1344x768", "1408x576", "1408x640", "1408x704", "1472x576", "1472x640", "1472x704", "1536x512", "1536x576", "1536x640"]}], "magic_prompt_option": ["COMBO", {"tooltip": "Determine if MagicPrompt should be used in generation", "advanced": true, "default": "AUTO", "multiselect": false, "options": ["AUTO", "ON", "OFF"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "num_images": ["INT", {"default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}], "rendering_speed": ["COMBO", {"tooltip": "Controls the trade-off between generation speed and quality", "advanced": true, "default": "DEFAULT", "multiselect": false, "options": ["DEFAULT", "TURBO", "QUALITY"]}], "character_image": ["IMAGE", {"tooltip": "Image to use as character reference."}], "character_mask": ["MASK", {"tooltip": "Optional mask for character reference image."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt"], "optional": ["image", "mask", "aspect_ratio", "resolution", "magic_prompt_option", "seed", "num_images", "rendering_speed", "character_image", "character_mask"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "IdeogramV3", "display_name": "Ideogram V3", "description": "Generates images using the Ideogram V3 model. Supports both regular image generation from text prompts and image editing with mask.", "python_module": "comfy_api_nodes.nodes_ideogram", "category": "partner/image/Ideogram", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "rendering_speed", "type": "COMBO"}, {"name": "num_images", "type": "INT"}], "inputs": ["character_image"], "input_groups": []}, "expr": "\n                (\n                  $n := widgets.num_images;\n                  $speed := widgets.rendering_speed;\n                  $hasChar := inputs.character_image.connected;\n                  $base :=\n                    $contains($speed,\"quality\") ? ($hasChar ? 0.286 : 0.1287) :\n                    $contains($speed,\"default\") ? ($hasChar ? 0.2145 : 0.0858) :\n                    $contains($speed,\"turbo\") ? ($hasChar ? 0.143 : 0.0429) :\n                    0.0858;\n                  {\"type\":\"usd\",\"usd\": $round($base * $n, 2)}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "IdeogramV4": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the image generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "Auto", "multiselect": false, "options": ["Auto", "2048x2048 (1:1)", "1440x2880 (1:2)", "2880x1440 (2:1)", "1664x2496 (2:3)", "2496x1664 (3:2)", "1792x2240 (4:5)", "2240x1792 (5:4)", "1440x2560 (9:16)", "2560x1440 (16:9)", "1600x2560 (5:8)", "2560x1600 (8:5)", "1728x2304 (3:4)", "2304x1728 (4:3)", "1296x3168 (9:22)", "3168x1296 (22:9)", "1152x2944 (9:23)", "2944x1152 (23:9)", "1248x3328 (3:8)", "3328x1248 (8:3)", "1280x3072 (5:12)", "3072x1280 (12:5)"]}], "rendering_speed": ["COMBO", {"tooltip": "Controls the trade-off between generation speed and quality.", "default": "DEFAULT", "multiselect": false, "options": ["DEFAULT", "TURBO", "QUALITY"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "resolution", "rendering_speed", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "IdeogramV4", "display_name": "Ideogram V4", "description": "Generates images using the Ideogram 4.0 model from a text prompt.", "python_module": "comfy_api_nodes.nodes_ideogram", "category": "partner/image/Ideogram", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "rendering_speed", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $speed := widgets.rendering_speed;\n                  $price :=\n                    $contains($speed,\"turbo\") ? 0.0429 :\n                    $contains($speed,\"quality\") ? 0.143 :\n                    0.0858;\n                  {\"type\":\"usd\",\"usd\": $price}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingCameraControls": {"input": {"required": {"camera_control_type": ["COMBO", {"multiselect": false, "options": ["simple", "down_back", "forward_up", "right_turn_forward", "left_turn_forward"]}], "horizontal_movement": ["FLOAT", {"tooltip": "Controls camera's movement along horizontal axis (x-axis). Negative indicates left, positive indicates right", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "vertical_movement": ["FLOAT", {"tooltip": "Controls camera's movement along vertical axis (y-axis). Negative indicates downward, positive indicates upward.", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "pan": ["FLOAT", {"tooltip": "Controls camera's rotation in vertical plane (x-axis). Negative indicates downward rotation, positive indicates upward rotation.", "default": 0.5, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "tilt": ["FLOAT", {"tooltip": "Controls camera's rotation in horizontal plane (y-axis). Negative indicates left rotation, positive indicates right rotation.", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "roll": ["FLOAT", {"tooltip": "Controls camera's rolling amount (z-axis). Negative indicates counterclockwise, positive indicates clockwise.", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "zoom": ["FLOAT", {"tooltip": "Controls change in camera's focal length. Negative indicates narrower field of view, positive indicates wider field of view.", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}]}}, "input_order": {"required": ["camera_control_type", "horizontal_movement", "vertical_movement", "pan", "tilt", "roll", "zoom"]}, "is_input_list": false, "output": ["CAMERA_CONTROL"], "output_is_list": [false], "output_name": ["camera_control"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingCameraControls", "display_name": "Kling Camera Controls", "description": "Allows specifying configuration options for Kling Camera Controls and motion control effects.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingTextToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "mode": ["COMBO", {"tooltip": "The configuration to use for the video generation following the format: mode / duration / model_name.", "default": "pro mode / 5s duration / kling-v2-5-turbo", "multiselect": false, "options": ["standard mode / 5s duration / kling-v1-6", "standard mode / 10s duration / kling-v1-6", "pro mode / 5s duration / kling-v2-master", "pro mode / 10s duration / kling-v2-master", "standard mode / 5s duration / kling-v2-master", "standard mode / 10s duration / kling-v2-master", "pro mode / 5s duration / kling-v2-1-master", "pro mode / 10s duration / kling-v2-1-master", "pro mode / 5s duration / kling-v2-5-turbo", "pro mode / 10s duration / kling-v2-5-turbo"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "negative_prompt", "cfg_scale", "aspect_ratio", "mode"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingTextToVideoNode", "display_name": "Kling Text to Video", "description": "Kling Text to Video Node", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $m := widgets.mode;\n                  $contains($m,\"v2-5-turbo\")\n                    ? ($contains($m,\"10\") ? {\"type\":\"usd\",\"usd\":0.7} : {\"type\":\"usd\",\"usd\":0.35})\n                    : $contains($m,\"v2-1-master\")\n                      ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":2.8} : {\"type\":\"usd\",\"usd\":1.4})\n                      : $contains($m,\"v2-master\")\n                        ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":2.8} : {\"type\":\"usd\",\"usd\":1.4})\n                        : $contains($m,\"v1-6\")\n                          ? (\n                              $contains($m,\"pro\")\n                                ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n                                : ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.56} : {\"type\":\"usd\",\"usd\":0.28})\n                            )\n                          : $contains($m,\"v1\")\n                            ? (\n                                $contains($m,\"pro\")\n                                  ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n                                  : ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.28} : {\"type\":\"usd\",\"usd\":0.14})\n                              )\n                            : {\"type\":\"usd\",\"usd\":0.14}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingImage2VideoNode": {"input": {"required": {"start_frame": ["IMAGE", {"tooltip": "The reference image used to generate the video."}], "prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "model_name": ["COMBO", {"default": "kling-v2-master", "multiselect": false, "options": ["kling-v1", "kling-v1-5", "kling-v1-6", "kling-v2-master", "kling-v2-1", "kling-v2-1-master", "kling-v2-5-turbo"]}], "cfg_scale": ["FLOAT", {"default": 0.8, "min": 0.0, "max": 1.0}], "mode": ["COMBO", {"default": "std", "multiselect": false, "options": ["std", "pro"]}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["COMBO", {"default": "5", "multiselect": false, "options": ["5", "10"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["start_frame", "prompt", "negative_prompt", "model_name", "cfg_scale", "mode", "aspect_ratio", "duration"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingImage2VideoNode", "display_name": "Kling Image(First Frame) to Video", "description": "", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $mode := widgets.mode;\n                  $model := widgets.model_name;\n                  $dur := widgets.duration;\n                  $contains($model,\"v2-5-turbo\")\n                    ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.7} : {\"type\":\"usd\",\"usd\":0.35})\n                    : ($contains($model,\"v2-1-master\") or $contains($model,\"v2-master\"))\n                      ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":2.8} : {\"type\":\"usd\",\"usd\":1.4})\n                      : ($contains($model,\"v2-1\") or $contains($model,\"v1-6\") or $contains($model,\"v1-5\"))\n                        ? (\n                            $contains($mode,\"pro\")\n                              ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n                              : ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.56} : {\"type\":\"usd\",\"usd\":0.28})\n                          )\n                        : $contains($model,\"v1\")\n                          ? (\n                              $contains($mode,\"pro\")\n                                ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n                                : ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.28} : {\"type\":\"usd\",\"usd\":0.14})\n                            )\n                          : {\"type\":\"usd\",\"usd\":0.14}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingCameraControlI2VNode": {"input": {"required": {"start_frame": ["IMAGE", {"tooltip": "Reference Image - URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1. Base64 should not include data:image prefix."}], "prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 0.75, "min": 0.0, "max": 1.0}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "camera_control": ["CAMERA_CONTROL", {"tooltip": "Can be created using the Kling Camera Controls node. Controls the camera movement and motion during the video generation."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["start_frame", "prompt", "negative_prompt", "cfg_scale", "aspect_ratio", "camera_control"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingCameraControlI2VNode", "display_name": "Kling Image to Video (Camera Control)", "description": "Transform still images into cinematic videos with professional camera movements that simulate real-world cinematography. Control virtual camera actions including zoom, rotation, pan, tilt, and first-person view, while maintaining focus on your original image.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.49}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingCameraControlT2VNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 0.75, "min": 0.0, "max": 1.0}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "camera_control": ["CAMERA_CONTROL", {"tooltip": "Can be created using the Kling Camera Controls node. Controls the camera movement and motion during the video generation."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "negative_prompt", "cfg_scale", "aspect_ratio", "camera_control"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingCameraControlT2VNode", "display_name": "Kling Text to Video (Camera Control)", "description": "Transform text into cinematic videos with professional camera movements that simulate real-world cinematography. Control virtual camera actions including zoom, rotation, pan, tilt, and first-person view, while maintaining focus on your original text.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.14}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingStartEndFrameNode": {"input": {"required": {"start_frame": ["IMAGE", {"tooltip": "Reference Image - URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1. Base64 should not include data:image prefix."}], "end_frame": ["IMAGE", {"tooltip": "Reference Image - End frame control. URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px. Base64 should not include data:image prefix."}], "prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "mode": ["COMBO", {"tooltip": "The configuration to use for the video generation following the format: mode / duration / model_name.", "default": "pro mode / 5s duration / kling-v2-5-turbo", "multiselect": false, "options": ["pro mode / 5s duration / kling-v1-5", "pro mode / 10s duration / kling-v1-5", "pro mode / 5s duration / kling-v1-6", "pro mode / 10s duration / kling-v1-6", "pro mode / 5s duration / kling-v2-1", "pro mode / 10s duration / kling-v2-1", "pro mode / 5s duration / kling-v2-5-turbo", "pro mode / 10s duration / kling-v2-5-turbo"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["start_frame", "end_frame", "prompt", "negative_prompt", "cfg_scale", "aspect_ratio", "mode"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingStartEndFrameNode", "display_name": "Kling Start-End Frame to Video", "description": "Generate a video sequence that transitions between your provided start and end images. The node creates all frames in between, producing a smooth transformation from the first frame to the last.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $m := widgets.mode;\n                  $contains($m,\"v2-5-turbo\")\n                    ? ($contains($m,\"10\") ? {\"type\":\"usd\",\"usd\":0.7} : {\"type\":\"usd\",\"usd\":0.35})\n                    : $contains($m,\"v2-1\")\n                      ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n                      : $contains($m,\"v2-master\")\n                        ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":2.8} : {\"type\":\"usd\",\"usd\":1.4})\n                        : $contains($m,\"v1-6\")\n                          ? (\n                              $contains($m,\"pro\")\n                                ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n                                : ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.56} : {\"type\":\"usd\",\"usd\":0.28})\n                            )\n                          : $contains($m,\"v1\")\n                            ? (\n                                $contains($m,\"pro\")\n                                  ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n                                  : ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.28} : {\"type\":\"usd\",\"usd\":0.14})\n                              )\n                            : {\"type\":\"usd\",\"usd\":0.14}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingVideoExtendNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Positive text prompt for guiding the video extension", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt for elements to avoid in the extended video", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0}], "video_id": ["STRING", {"tooltip": "The ID of the video to be extended. Supports videos generated by text-to-video, image-to-video, and previous video extension operations. Cannot exceed 3 minutes total duration after extension.", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "negative_prompt", "cfg_scale", "video_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingVideoExtendNode", "display_name": "Kling Video Extend", "description": "Kling Video Extend Node. Extend videos made by other Kling nodes. The video_id is created by using other Kling Nodes.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.28}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingLipSyncAudioToVideoNode": {"input": {"required": {"video": ["VIDEO", {}], "audio": ["AUDIO", {}], "voice_language": ["COMBO", {"default": "en", "multiselect": false, "options": ["zh", "en"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["video", "audio", "voice_language"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingLipSyncAudioToVideoNode", "display_name": "Kling Lip Sync Video with Audio", "description": "Kling Lip Sync Audio to Video Node. Syncs mouth movements in a video file to the audio content of an audio file. When using, ensure that the audio contains clearly distinguishable vocals and that the video contains a distinct face. The audio file should not be larger than 5MB. The video file should not be larger than 100MB, should have height/width between 720px and 1920px, and should be between 2s and 10s in length.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.1,\"format\":{\"approximate\":true}}"}, "search_aliases": null, "essentials_category": "Video Generation", "has_intermediate_output": false}, "KlingLipSyncTextToVideoNode": {"input": {"required": {"video": ["VIDEO", {}], "text": ["STRING", {"tooltip": "Text Content for Lip-Sync Video Generation. Required when mode is text2video. Maximum length is 120 characters.", "multiline": true}], "voice": ["COMBO", {"default": "Melody", "multiselect": false, "options": ["Melody", "Sunny", "Sage", "Ace", "Blossom", "Peppy", "Dove", "Shine", "Anchor", "Lyric", "Tender", "Siren", "Zippy", "Bud", "Sprite", "Candy", "Beacon", "Rock", "Titan", "Grace", "Helen", "Lore", "Crag", "Prattle", "Hearth", "The Reader", "Commercial Lady", "\u9633\u5149\u5c11\u5e74", "\u61c2\u4e8b\u5c0f\u5f1f", "\u8fd0\u52a8\u5c11\u5e74", "\u9752\u6625\u5c11\u5973", "\u6e29\u67d4\u5c0f\u59b9", "\u5143\u6c14\u5c11\u5973", "\u9633\u5149\u7537\u751f", "\u5e7d\u9ed8\u5c0f\u54e5", "\u6587\u827a\u5c0f\u54e5", "\u751c\u7f8e\u90bb\u5bb6", "\u6e29\u67d4\u59d0\u59d0", "\u804c\u573a\u5973\u9752", "\u6d3b\u6cfc\u7537\u7ae5", "\u4fcf\u76ae\u5973\u7ae5", "\u7a33\u91cd\u8001\u7238", "\u6e29\u67d4\u5988\u5988", "\u4e25\u8083\u4e0a\u53f8", "\u4f18\u96c5\u8d35\u5987", "\u6148\u7965\u7237\u7237", "\u5520\u53e8\u7237\u7237", "\u5520\u53e8\u5976\u5976", "\u548c\u853c\u5976\u5976", "\u4e1c\u5317\u8001\u94c1", "\u91cd\u5e86\u5c0f\u4f19", "\u56db\u5ddd\u59b9\u5b50", "\u6f6e\u6c55\u5927\u53d4", "\u53f0\u6e7e\u7537\u751f", "\u897f\u5b89\u638c\u67dc", "\u5929\u6d25\u59d0\u59d0", "\u65b0\u95fb\u64ad\u62a5\u7537", "\u8bd1\u5236\u7247\u7537", "\u6492\u5a07\u5973\u53cb", "\u5200\u7247\u70df\u55d3", "\u4e56\u5de7\u6b63\u592a"]}], "voice_speed": ["FLOAT", {"tooltip": "Speech Rate. Valid range: 0.8~2.0, accurate to one decimal place.", "advanced": true, "default": 1, "min": 0.8, "max": 2.0, "display": "slider"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["video", "text", "voice", "voice_speed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingLipSyncTextToVideoNode", "display_name": "Kling Lip Sync Video with Text", "description": "Kling Lip Sync Text to Video Node. Syncs mouth movements in a video file to a text prompt. The video file should not be larger than 100MB, should have height/width between 720px and 1920px, and should be between 2s and 10s in length.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.1,\"format\":{\"approximate\":true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingVirtualTryOnNode": {"input": {"required": {"human_image": ["IMAGE", {}], "cloth_image": ["IMAGE", {}], "model_name": ["COMBO", {"default": "kolors-virtual-try-on-v1", "multiselect": false, "options": ["kolors-virtual-try-on-v1", "kolors-virtual-try-on-v1-5"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["human_image", "cloth_image", "model_name"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingVirtualTryOnNode", "display_name": "Kling Virtual Try On", "description": "Kling Virtual Try On Node. Input a human image and a cloth image to try on the cloth on the human. You can merge multiple clothing item pictures into one image with a white background.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/image/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.7}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingImageGenerationNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "image_type": ["COMBO", {"advanced": true, "multiselect": false, "options": ["subject", "face"]}], "image_fidelity": ["FLOAT", {"tooltip": "Reference intensity for user-uploaded images", "advanced": true, "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "human_fidelity": ["FLOAT", {"tooltip": "Subject reference similarity", "advanced": true, "default": 0.45, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3", "kling-v2", "kling-v1-5"]}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "3:2", "2:3", "21:9"]}], "n": ["INT", {"tooltip": "Number of generated images", "default": 1, "min": 1, "max": 9}]}, "optional": {"image": ["IMAGE", {}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "negative_prompt", "image_type", "image_fidelity", "human_fidelity", "model_name", "aspect_ratio", "n"], "optional": ["image", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingImageGenerationNode", "display_name": "Kling 3.0 Image", "description": "Kling Image Generation Node. Generate an image from a text prompt with an optional reference image.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/image/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model_name", "type": "COMBO"}, {"name": "n", "type": "INT"}], "inputs": ["image"], "input_groups": []}, "expr": "\n                (\n                  $m := widgets.model_name;\n                  $base :=\n                    $contains($m,\"kling-v1-5\")\n                      ? (inputs.image.connected ? 0.028 : 0.014)\n                      : $contains($m,\"kling-v3\") ? 0.028 : 0.014;\n                  {\"type\":\"usd\",\"usd\": $base * widgets.n}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingSingleImageVideoEffectNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": " Reference Image. URL or Base64 encoded string (without data:image prefix). File size cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1"}], "effect_scene": ["COMBO", {"multiselect": false, "options": ["bloombloom", "dizzydizzy", "fuzzyfuzzy", "squish", "expansion"]}], "model_name": ["COMBO", {"multiselect": false, "options": ["kling-v1-6"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5", "10"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "effect_scene", "model_name", "duration"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingSingleImageVideoEffectNode", "display_name": "Kling Video Effects", "description": "Achieve different special effects when generating a video based on the effect_scene.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "effect_scene", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  ($contains(widgets.effect_scene,\"dizzydizzy\") or $contains(widgets.effect_scene,\"bloombloom\"))\n                    ? {\"type\":\"usd\",\"usd\":0.49}\n                    : {\"type\":\"usd\",\"usd\":0.28}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingDualCharacterVideoEffectNode": {"input": {"required": {"image_left": ["IMAGE", {"tooltip": "Left side image"}], "image_right": ["IMAGE", {"tooltip": "Right side image"}], "effect_scene": ["COMBO", {"multiselect": false, "options": ["hug", "kiss", "heart_gesture"]}], "model_name": ["COMBO", {"default": "kling-v1", "multiselect": false, "options": ["kling-v1", "kling-v1-5", "kling-v1-6"]}], "mode": ["COMBO", {"default": "std", "multiselect": false, "options": ["std", "pro"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5", "10"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image_left", "image_right", "effect_scene", "model_name", "mode", "duration"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "duration"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "KlingDualCharacterVideoEffectNode", "display_name": "Kling Dual Character Video Effects", "description": "Achieve different special effects when generating a video based on the effect_scene. First image will be positioned on left side, second on right side of the composite.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $mode := widgets.mode;\n                  $model := widgets.model_name;\n                  $dur := widgets.duration;\n                  ($contains($model,\"v1-6\") or $contains($model,\"v1-5\"))\n                    ? (\n                        $contains($mode,\"pro\")\n                          ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n                          : ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.56} : {\"type\":\"usd\",\"usd\":0.28})\n                      )\n                    : $contains($model,\"v1\")\n                      ? (\n                          $contains($mode,\"pro\")\n                            ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n                            : ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.28} : {\"type\":\"usd\",\"usd\":0.14})\n                        )\n                      : {\"type\":\"usd\",\"usd\":0.14}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProTextToVideoNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions. Ignored when storyboards are enabled.", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}]}, "optional": {"resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}], "storyboards": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generate a series of video segments with individual prompts and durations. Ignored for o1 model.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "1 storyboard", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "2 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "3 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "4 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "5 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "6 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_6_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 6. Max 512 characters.", "default": "", "multiline": true}], "storyboard_6_duration": ["INT", {"tooltip": "Duration for storyboard segment 6 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}]}], "generate_audio": ["BOOLEAN", {"default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model_name", "prompt", "aspect_ratio", "duration"], "optional": ["resolution", "storyboards", "generate_audio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProTextToVideoNode", "display_name": "Kling 3.0 Omni Text to Video", "description": "Use text prompts to generate videos with the latest Kling model.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $res := widgets.resolution;\n                  $mode := $res = \"4k\" ? \"4k\" : ($res = \"720p\" ? \"std\" : \"pro\");\n                  $isV3 := $contains(widgets.model_name, \"v3\");\n                  $audio := $isV3 and widgets.generate_audio;\n                  $rates := $audio\n                    ? {\"std\": 0.112, \"pro\": 0.14, \"4k\": 0.42}\n                    : {\"std\": 0.084, \"pro\": 0.112, \"4k\": 0.42};\n                  {\"type\":\"usd\",\"usd\": $lookup($rates, $mode) * widgets.duration}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProFirstLastFrameNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions. Ignored when storyboards are enabled.", "multiline": true}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}], "first_frame": ["IMAGE", {}]}, "optional": {"end_frame": ["IMAGE", {"tooltip": "An optional end frame for the video. This cannot be used simultaneously with 'reference_images'. Does not work with storyboards."}], "reference_images": ["IMAGE", {"tooltip": "Up to 6 additional reference images."}], "resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}], "storyboards": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generate a series of video segments with individual prompts and durations. Only supported for kling-v3-omni.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "1 storyboard", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "2 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "3 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "4 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "5 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "6 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_6_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 6. Max 512 characters.", "default": "", "multiline": true}], "storyboard_6_duration": ["INT", {"tooltip": "Duration for storyboard segment 6 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}]}], "generate_audio": ["BOOLEAN", {"tooltip": "Generate audio for the video. Only supported for kling-v3-omni.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model_name", "prompt", "duration", "first_frame"], "optional": ["end_frame", "reference_images", "resolution", "storyboards", "generate_audio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProFirstLastFrameNode", "display_name": "Kling 3.0 Omni First-Last-Frame to Video", "description": "Use a start frame, an optional end frame, or reference images with the latest Kling model.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $res := widgets.resolution;\n                  $mode := $res = \"4k\" ? \"4k\" : ($res = \"720p\" ? \"std\" : \"pro\");\n                  $isV3 := $contains(widgets.model_name, \"v3\");\n                  $audio := $isV3 and widgets.generate_audio;\n                  $rates := $audio\n                    ? {\"std\": 0.112, \"pro\": 0.14, \"4k\": 0.42}\n                    : {\"std\": 0.084, \"pro\": 0.112, \"4k\": 0.42};\n                  {\"type\":\"usd\",\"usd\": $lookup($rates, $mode) * widgets.duration}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProImageToVideoNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions. Ignored when storyboards are enabled.", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}], "reference_images": ["IMAGE", {"tooltip": "Up to 7 reference images."}]}, "optional": {"resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}], "storyboards": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generate a series of video segments with individual prompts and durations. Only supported for kling-v3-omni.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "1 storyboard", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "2 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "3 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "4 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "5 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "6 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_6_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 6. Max 512 characters.", "default": "", "multiline": true}], "storyboard_6_duration": ["INT", {"tooltip": "Duration for storyboard segment 6 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}]}], "generate_audio": ["BOOLEAN", {"tooltip": "Generate audio for the video. Only supported for kling-v3-omni.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model_name", "prompt", "aspect_ratio", "duration", "reference_images"], "optional": ["resolution", "storyboards", "generate_audio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProImageToVideoNode", "display_name": "Kling 3.0 Omni Image to Video", "description": "Use up to 7 reference images to generate a video with the latest Kling model.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $res := widgets.resolution;\n                  $mode := $res = \"4k\" ? \"4k\" : ($res = \"720p\" ? \"std\" : \"pro\");\n                  $isV3 := $contains(widgets.model_name, \"v3\");\n                  $audio := $isV3 and widgets.generate_audio;\n                  $rates := $audio\n                    ? {\"std\": 0.112, \"pro\": 0.14, \"4k\": 0.42}\n                    : {\"std\": 0.084, \"pro\": 0.112, \"4k\": 0.42};\n                  {\"type\":\"usd\",\"usd\": $lookup($rates, $mode) * widgets.duration}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProVideoToVideoNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions.", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["INT", {"default": 3, "min": 3, "max": 10, "display": "slider"}], "reference_video": ["VIDEO", {"tooltip": "Video to use as a reference."}], "keep_original_sound": ["BOOLEAN", {"default": true}]}, "optional": {"reference_images": ["IMAGE", {"tooltip": "Up to 4 additional reference images."}], "resolution": ["COMBO", {"multiselect": false, "options": ["1080p", "720p"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model_name", "prompt", "aspect_ratio", "duration", "reference_video", "keep_original_sound"], "optional": ["reference_images", "resolution", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProVideoToVideoNode", "display_name": "Kling 3.0 Omni Video to Video", "description": "Use a video and up to 4 reference images to generate a video with the latest Kling model.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $mode := (widgets.resolution = \"720p\") ? \"std\" : \"pro\";\n                  $rates := {\"std\": 0.126, \"pro\": 0.168};\n                  {\"type\":\"usd\",\"usd\": $lookup($rates, $mode) * widgets.duration}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProEditVideoNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions.", "multiline": true}], "video": ["VIDEO", {"tooltip": "Video for editing. The output video length will be the same."}], "keep_original_sound": ["BOOLEAN", {"default": true}]}, "optional": {"reference_images": ["IMAGE", {"tooltip": "Up to 4 additional reference images."}], "resolution": ["COMBO", {"multiselect": false, "options": ["1080p", "720p"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model_name", "prompt", "video", "keep_original_sound"], "optional": ["reference_images", "resolution", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProEditVideoNode", "display_name": "Kling 3.0 Omni Edit Video", "description": "Edit an existing video with the latest model from Kling.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $mode := (widgets.resolution = \"720p\") ? \"std\" : \"pro\";\n                  $rates := {\"std\": 0.126, \"pro\": 0.168};\n                  {\"type\":\"usd\",\"usd\": $lookup($rates, $mode), \"format\":{\"suffix\":\"/second\"}}\n                )\n                "}, "search_aliases": null, "essentials_category": "Video Generation", "has_intermediate_output": false}, "KlingOmniProImageNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-image-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the image content. This can include both positive and negative descriptions.", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K", "4K"]}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "3:2", "2:3", "21:9"]}], "series_amount": ["COMBO", {"tooltip": "Generate a series of images. Not supported for kling-image-o1.", "multiselect": false, "options": ["disabled", "2", "3", "4", "5", "6", "7", "8", "9"]}]}, "optional": {"reference_images": ["IMAGE", {"tooltip": "Up to 10 additional reference images."}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model_name", "prompt", "resolution", "aspect_ratio", "series_amount"], "optional": ["reference_images", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProImageNode", "display_name": "Kling 3.0 Omni Image", "description": "Create or edit images with the latest model from Kling.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/image/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}, {"name": "series_amount", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $prices := {\"1k\": 0.028, \"2k\": 0.028, \"4k\": 0.056};\n                  $base := $lookup($prices, widgets.resolution);\n                  $isO1 := widgets.model_name = \"kling-image-o1\";\n                  $mult := ($isO1 or widgets.series_amount = \"disabled\") ? 1 : $number(widgets.series_amount);\n                  {\"type\":\"usd\",\"usd\": $base * $mult}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingTextToVideoWithAudio": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v2-6"]}], "prompt": ["STRING", {"tooltip": "Positive text prompt.", "multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["pro"]}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "generate_audio": ["BOOLEAN", {"advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model_name", "prompt", "mode", "aspect_ratio", "duration", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingTextToVideoWithAudio", "display_name": "Kling 2.6 Text to Video with Audio", "description": "", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.07 * widgets.duration * (widgets.generate_audio ? 2 : 1)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingImageToVideoWithAudio": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v2-6"]}], "start_frame": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Positive text prompt.", "multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["pro"]}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "generate_audio": ["BOOLEAN", {"advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model_name", "start_frame", "prompt", "mode", "duration", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingImageToVideoWithAudio", "display_name": "Kling 2.6 Image(First Frame) to Video with Audio", "description": "", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.07 * widgets.duration * (widgets.generate_audio ? 2 : 1)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingMotionControl": {"input": {"required": {"prompt": ["STRING", {"multiline": true}], "reference_image": ["IMAGE", {}], "reference_video": ["VIDEO", {"tooltip": "Motion reference video used to drive movement/expression.\nDuration limits depend on character_orientation:\n - image: 3\u201310s (max 10s)\n - video: 3\u201330s (max 30s)"}], "keep_original_sound": ["BOOLEAN", {"default": true}], "character_orientation": ["COMBO", {"tooltip": "Controls where the character's facing/orientation comes from.\nvideo: movements, expressions, camera moves, and orientation follow the motion reference video (other details via prompt).\nimage: movements and expressions still follow the motion reference video, but the character orientation matches the reference image (camera/other details via prompt).", "multiselect": false, "options": ["video", "image"]}], "mode": ["COMBO", {"multiselect": false, "options": ["pro", "std"]}]}, "optional": {"model": ["COMBO", {"multiselect": false, "options": ["kling-v3", "kling-v2-6"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "reference_image", "reference_video", "keep_original_sound", "character_orientation", "mode"], "optional": ["model"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingMotionControl", "display_name": "Kling Motion Control", "description": "", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}, {"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $prices := {\n                    \"kling-v3\": {\"std\": 0.126, \"pro\": 0.168},\n                    \"kling-v2-6\": {\"std\": 0.07, \"pro\": 0.112}\n                  };\n                  $modelPrices := $lookup($prices, widgets.model);\n                  {\"type\":\"usd\",\"usd\": $lookup($modelPrices, widgets.mode), \"format\":{\"suffix\":\"/second\"}}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingVideoNode": {"input": {"required": {"multi_shot": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generate a series of video segments with individual prompts and durations.", "options": [{"key": "disabled", "inputs": {"required": {"prompt": ["STRING", {"default": "", "multiline": true}], "negative_prompt": ["STRING", {"default": "", "multiline": true}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}]}}}, {"key": "1 storyboard", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "2 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "3 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "4 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "5 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "6 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_6_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 6. Max 512 characters.", "default": "", "multiline": true}], "storyboard_6_duration": ["INT", {"tooltip": "Duration for storyboard segment 6 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}]}], "generate_audio": ["BOOLEAN", {"default": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model and generation settings.", "options": [{"key": "kling-v3", "inputs": {"required": {"resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}], "aspect_ratio": ["COMBO", {"tooltip": "Ignored in image-to-video mode.", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "optional": {"start_frame": ["IMAGE", {"tooltip": "Optional start frame image. When connected, switches to image-to-video mode."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["multi_shot", "generate_audio", "model", "seed"], "optional": ["start_frame"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingVideoNode", "display_name": "Kling 3.0 Video", "description": "Generate videos with Kling V3. Supports text-to-video and image-to-video with optional storyboard multi-prompt and audio generation.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model.resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}, {"name": "multi_shot", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "multi_shot.duration", "type": "INT"}, {"name": "multi_shot.storyboard_1_duration", "type": "INT"}, {"name": "multi_shot.storyboard_2_duration", "type": "INT"}, {"name": "multi_shot.storyboard_3_duration", "type": "INT"}, {"name": "multi_shot.storyboard_4_duration", "type": "INT"}, {"name": "multi_shot.storyboard_5_duration", "type": "INT"}, {"name": "multi_shot.storyboard_6_duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $rates := {\n                    \"4k\": {\"off\": 0.42, \"on\": 0.42},\n                    \"1080p\": {\"off\": 0.112, \"on\": 0.168},\n                    \"720p\": {\"off\": 0.084, \"on\": 0.126}\n                  };\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $audio := widgets.generate_audio ? \"on\" : \"off\";\n                  $rate := $lookup($lookup($rates, $res), $audio);\n                  $ms := widgets.multi_shot;\n                  $isSb := $ms != \"disabled\";\n                  $n := $isSb ? $number($substring($ms, 0, 1)) : 0;\n                  $d1 := $lookup(widgets, \"multi_shot.storyboard_1_duration\");\n                  $d2 := $n >= 2 ? $lookup(widgets, \"multi_shot.storyboard_2_duration\") : 0;\n                  $d3 := $n >= 3 ? $lookup(widgets, \"multi_shot.storyboard_3_duration\") : 0;\n                  $d4 := $n >= 4 ? $lookup(widgets, \"multi_shot.storyboard_4_duration\") : 0;\n                  $d5 := $n >= 5 ? $lookup(widgets, \"multi_shot.storyboard_5_duration\") : 0;\n                  $d6 := $n >= 6 ? $lookup(widgets, \"multi_shot.storyboard_6_duration\") : 0;\n                  $dur := $isSb ? $d1 + $d2 + $d3 + $d4 + $d5 + $d6 : $lookup(widgets, \"multi_shot.duration\");\n                  {\"type\":\"usd\",\"usd\": $rate * $dur}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingFirstLastFrameNode": {"input": {"required": {"prompt": ["STRING", {"default": "", "multiline": true}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}], "first_frame": ["IMAGE", {}], "end_frame": ["IMAGE", {}], "generate_audio": ["BOOLEAN", {"default": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model and generation settings.", "options": [{"key": "kling-v3", "inputs": {"required": {"resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "duration", "first_frame", "end_frame", "generate_audio", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingFirstLastFrameNode", "display_name": "Kling 3.0 First-Last-Frame to Video", "description": "Generate videos with Kling V3 using first and last frames.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model.resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}, {"name": "duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $rates := {\n                    \"4k\": {\"off\": 0.42, \"on\": 0.42},\n                    \"1080p\": {\"off\": 0.112, \"on\": 0.168},\n                    \"720p\": {\"off\": 0.084, \"on\": 0.126}\n                  };\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $audio := widgets.generate_audio ? \"on\" : \"off\";\n                  $rate := $lookup($lookup($rates, $res), $audio);\n                  {\"type\":\"usd\",\"usd\": $rate * widgets.duration}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingAvatarNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Avatar reference image. Width and height must be at least 300px. Aspect ratio must be between 1:2.5 and 2.5:1."}], "sound_file": ["AUDIO", {"tooltip": "Audio input. Must be between 2 and 300 seconds in duration."}], "mode": ["COMBO", {"multiselect": false, "options": ["std", "pro"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "optional": {"prompt": ["STRING", {"tooltip": "Optional prompt to define avatar actions, emotions, and camera movements.", "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "sound_file", "mode", "seed"], "optional": ["prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingAvatarNode", "display_name": "Kling Avatar 2.0", "description": "Generate broadcast-style digital human videos from a single photo and an audio file.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $prices := {\"std\": 0.056, \"pro\": 0.112};\n                  {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.mode), \"format\":{\"suffix\":\"/second\"}}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Krea2ImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the image.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Krea 2 Medium is best for expressive illustrations; Krea 2 Large is best for expressive photorealism.", "options": [{"key": "Krea 2 Medium", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output aspect ratio.", "multiselect": false, "options": ["1:1", "4:3", "3:2", "16:9", "2.35:1", "4:5", "2:3", "9:16"]}], "resolution": ["COMBO", {"tooltip": "Resolution scale.", "multiselect": false, "options": ["1K"]}], "creativity": ["COMBO", {"tooltip": "Prompt interpretation strength: raw stays closest to the prompt; high is most creative.", "default": "medium", "multiselect": false, "options": ["raw", "low", "medium", "high"]}]}, "optional": {"moodboard_id": ["STRING", {"tooltip": "Optional Krea moodboard UUID (e.g. from the Krea website). Leave empty to disable. Only one moodboard is supported per request.", "default": "", "multiline": false}], "moodboard_strength": ["FLOAT", {"tooltip": "Moodboard influence; ignored when moodboard_id is empty.", "default": 0.35, "min": -0.5, "max": 1.5, "step": 0.05}], "style_reference": ["KREA_STYLE_REF", {"tooltip": "Optional chain of style references (max 10) from Krea 2 Style Reference nodes."}]}}}, {"key": "Krea 2 Medium Turbo", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output aspect ratio.", "multiselect": false, "options": ["1:1", "4:3", "3:2", "16:9", "2.35:1", "4:5", "2:3", "9:16"]}], "resolution": ["COMBO", {"tooltip": "Resolution scale.", "multiselect": false, "options": ["1K"]}], "creativity": ["COMBO", {"tooltip": "Prompt interpretation strength: raw stays closest to the prompt; high is most creative.", "default": "medium", "multiselect": false, "options": ["raw", "low", "medium", "high"]}]}, "optional": {"moodboard_id": ["STRING", {"tooltip": "Optional Krea moodboard UUID (e.g. from the Krea website). Leave empty to disable. Only one moodboard is supported per request.", "default": "", "multiline": false}], "moodboard_strength": ["FLOAT", {"tooltip": "Moodboard influence; ignored when moodboard_id is empty.", "default": 0.35, "min": -0.5, "max": 1.5, "step": 0.05}], "style_reference": ["KREA_STYLE_REF", {"tooltip": "Optional chain of style references (max 10) from Krea 2 Style Reference nodes."}]}}}, {"key": "Krea 2 Large", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output aspect ratio.", "multiselect": false, "options": ["1:1", "4:3", "3:2", "16:9", "2.35:1", "4:5", "2:3", "9:16"]}], "resolution": ["COMBO", {"tooltip": "Resolution scale.", "multiselect": false, "options": ["1K"]}], "creativity": ["COMBO", {"tooltip": "Prompt interpretation strength: raw stays closest to the prompt; high is most creative.", "default": "medium", "multiselect": false, "options": ["raw", "low", "medium", "high"]}]}, "optional": {"moodboard_id": ["STRING", {"tooltip": "Optional Krea moodboard UUID (e.g. from the Krea website). Leave empty to disable. Only one moodboard is supported per request.", "default": "", "multiline": false}], "moodboard_strength": ["FLOAT", {"tooltip": "Moodboard influence; ignored when moodboard_id is empty.", "default": 0.35, "min": -0.5, "max": 1.5, "step": 0.05}], "style_reference": ["KREA_STYLE_REF", {"tooltip": "Optional chain of style references (max 10) from Krea 2 Style Reference nodes."}]}}}]}], "seed": ["INT", {"tooltip": "Random seed for reproducibility.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Krea2ImageNode", "display_name": "Krea 2 Image", "description": "Generate images via Krea 2 \u2014 pick Medium (expressive illustrations) or Large (expressive photorealism). Supports an optional moodboard and up to 10 chained image style references.", "python_module": "comfy_api_nodes.nodes_krea", "category": "partner/image/Krea", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.moodboard_id", "type": "STRING"}], "inputs": ["model.style_reference"], "input_groups": []}, "expr": "\n                (\n                  $rates := {\n                    \"krea 2 medium turbo\": {\"text\": 0.015, \"style\": 0.0175, \"moodboard\": 0.02},\n                    \"krea 2 medium\": {\"text\": 0.03, \"style\": 0.035, \"moodboard\": 0.04},\n                    \"krea 2 large\": {\"text\": 0.06, \"style\": 0.065, \"moodboard\": 0.07}\n                  };\n                  $r := $lookup($rates, widgets.model);\n                  $hasMoodboard := $length($lookup(widgets, \"model.moodboard_id\")) > 0;\n                  $hasStyle := $lookup(inputs, \"model.style_reference\").connected;\n                  $usd := $hasMoodboard ? $r.moodboard : ($hasStyle ? $r.style : $r.text);\n                  {\"type\":\"usd\",\"usd\": $usd}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Krea2StyleReferenceNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Reference image whose style influences the generation."}], "strength": ["FLOAT", {"tooltip": "Reference strength; negative values invert the style influence.", "default": 1.0, "min": -2.0, "max": 2.0, "step": 0.05}]}, "optional": {"style_reference": ["KREA_STYLE_REF", {"tooltip": "Optional incoming chain of style references; this node appends one more."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "strength"], "optional": ["style_reference"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["KREA_STYLE_REF"], "output_is_list": [false], "output_name": ["style_reference"], "output_tooltips": [null], "output_matchtypes": null, "name": "Krea2StyleReferenceNode", "display_name": "Krea 2 Style Reference", "description": "Add an image style reference to a Krea 2 generation. Chain multiple Krea 2 Style Reference nodes (max 10) and feed the final `style_reference` output into Krea 2 Image. Each image is uploaded to ComfyAPI storage and passed as URL.", "python_module": "comfy_api_nodes.nodes_krea", "category": "partner/image/Krea", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LtxvApiTextToVideo": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["LTX-2 (Pro)", "LTX-2 (Fast)"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "duration": ["COMBO", {"default": 8, "multiselect": false, "options": [6, 8, 10, 12, 14, 16, 18, 20]}], "resolution": ["COMBO", {"multiselect": false, "options": ["1920x1080", "2560x1440", "3840x2160"]}], "fps": ["COMBO", {"default": 25, "multiselect": false, "options": [25, 50]}]}, "optional": {"generate_audio": ["BOOLEAN", {"tooltip": "When true, the generated video will include AI-generated audio matching the scene.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt", "duration", "resolution", "fps"], "optional": ["generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LtxvApiTextToVideo", "display_name": "LTXV Text To Video", "description": "Professional-quality videos with customizable duration and resolution.", "python_module": "comfy_api_nodes.nodes_ltxv", "category": "partner/video/LTXV", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n    (\n      $prices := {\n        \"ltx-2 (pro)\": {\"1920x1080\":0.06,\"2560x1440\":0.12,\"3840x2160\":0.24},\n        \"ltx-2 (fast)\": {\"1920x1080\":0.04,\"2560x1440\":0.08,\"3840x2160\":0.16}\n      };\n      $modelPrices := $lookup($prices, $lowercase(widgets.model));\n      $pps := $lookup($modelPrices, widgets.resolution);\n      {\"type\":\"usd\",\"usd\": $pps * widgets.duration}\n    )\n    "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LtxvApiImageToVideo": {"input": {"required": {"image": ["IMAGE", {"tooltip": "First frame to be used for the video."}], "model": ["COMBO", {"multiselect": false, "options": ["LTX-2 (Pro)", "LTX-2 (Fast)"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "duration": ["COMBO", {"default": 8, "multiselect": false, "options": [6, 8, 10, 12, 14, 16, 18, 20]}], "resolution": ["COMBO", {"multiselect": false, "options": ["1920x1080", "2560x1440", "3840x2160"]}], "fps": ["COMBO", {"default": 25, "multiselect": false, "options": [25, 50]}]}, "optional": {"generate_audio": ["BOOLEAN", {"tooltip": "When true, the generated video will include AI-generated audio matching the scene.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "model", "prompt", "duration", "resolution", "fps"], "optional": ["generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LtxvApiImageToVideo", "display_name": "LTXV Image To Video", "description": "Professional-quality videos with customizable duration and resolution based on start image.", "python_module": "comfy_api_nodes.nodes_ltxv", "category": "partner/video/LTXV", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n    (\n      $prices := {\n        \"ltx-2 (pro)\": {\"1920x1080\":0.06,\"2560x1440\":0.12,\"3840x2160\":0.24},\n        \"ltx-2 (fast)\": {\"1920x1080\":0.04,\"2560x1440\":0.08,\"3840x2160\":0.16}\n      };\n      $modelPrices := $lookup($prices, $lowercase(widgets.model));\n      $pps := $lookup($modelPrices, widgets.resolution);\n      {\"type\":\"usd\",\"usd\": $pps * widgets.duration}\n    )\n    "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["photon-1", "photon-flash-1"]}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["1:1", "16:9", "9:16", "4:3", "3:4", "21:9", "9:21"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "style_image_weight": ["FLOAT", {"tooltip": "Weight of style image. Ignored if no style_image provided.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"image_luma_ref": ["LUMA_REF", {"tooltip": "Luma Reference node connection to influence generation with input images; up to 4 images can be considered."}], "style_image": ["IMAGE", {"tooltip": "Style reference image; only 1 image will be used."}], "character_image": ["IMAGE", {"tooltip": "Character reference images; can be a batch of multiple, up to 4 images can be considered."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "aspect_ratio", "seed", "style_image_weight"], "optional": ["image_luma_ref", "style_image", "character_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageNode", "display_name": "Luma Text to Image", "description": "Generates images synchronously based on prompt and aspect ratio.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $m := widgets.model;\n                  $contains($m,\"photon-flash-1\")\n                    ? {\"type\":\"usd\",\"usd\":0.0027}\n                    : $contains($m,\"photon-1\")\n                      ? {\"type\":\"usd\",\"usd\":0.0104}\n                      : {\"type\":\"usd\",\"usd\":0.0246}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageModifyNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "image_weight": ["FLOAT", {"tooltip": "Weight of the image; the closer to 1.0, the less the image will be modified.", "default": 0.1, "min": 0.0, "max": 0.98, "step": 0.01}], "model": ["COMBO", {"multiselect": false, "options": ["photon-1", "photon-flash-1"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "prompt", "image_weight", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageModifyNode", "display_name": "Luma Image to Image", "description": "Modifies images synchronously based on prompt and aspect ratio.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $m := widgets.model;\n                  $contains($m,\"photon-flash-1\")\n                    ? {\"type\":\"usd\",\"usd\":0.0027}\n                    : $contains($m,\"photon-1\")\n                      ? {\"type\":\"usd\",\"usd\":0.0104}\n                      : {\"type\":\"usd\",\"usd\":0.0246}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["ray-2", "ray-flash-2", "ray-1-6"]}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["1:1", "16:9", "9:16", "4:3", "3:4", "21:9", "9:21"]}], "resolution": ["COMBO", {"default": "540p", "multiselect": false, "options": ["540p", "720p", "1080p", "4k"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5s", "9s"]}], "loop": ["BOOLEAN", {"default": false}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"luma_concepts": ["LUMA_CONCEPTS", {"tooltip": "Optional Camera Concepts to dictate camera motion via the Luma Concepts node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "aspect_ratio", "resolution", "duration", "loop", "seed"], "optional": ["luma_concepts"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaVideoNode", "display_name": "Luma Text to Video", "description": "Generates videos synchronously based on prompt and output_size.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n    (\n      $p := {\n        \"ray-flash-2\": {\n          \"5s\": {\"4k\":3.13,\"1080p\":0.79,\"720p\":0.34,\"540p\":0.2},\n          \"9s\": {\"4k\":5.65,\"1080p\":1.42,\"720p\":0.61,\"540p\":0.36}\n        },\n        \"ray-2\": {\n          \"5s\": {\"4k\":9.11,\"1080p\":2.27,\"720p\":1.02,\"540p\":0.57},\n          \"9s\": {\"4k\":16.4,\"1080p\":4.1,\"720p\":1.83,\"540p\":1.03}\n        }\n      };\n\n      $m := widgets.model;\n      $d := widgets.duration;\n      $r := widgets.resolution;\n\n      $modelKey :=\n        $contains($m,\"ray-flash-2\") ? \"ray-flash-2\" :\n        $contains($m,\"ray-2\") ? \"ray-2\" :\n        $contains($m,\"ray-1-6\") ? \"ray-1-6\" :\n        \"other\";\n\n      $durKey := $contains($d,\"5s\") ? \"5s\" : $contains($d,\"9s\") ? \"9s\" : \"\";\n      $resKey :=\n        $contains($r,\"4k\") ? \"4k\" :\n        $contains($r,\"1080p\") ? \"1080p\" :\n        $contains($r,\"720p\") ? \"720p\" :\n        $contains($r,\"540p\") ? \"540p\" : \"\";\n\n      $modelPrices := $lookup($p, $modelKey);\n      $durPrices := $lookup($modelPrices, $durKey);\n      $v := $lookup($durPrices, $resKey);\n\n      $price :=\n        ($modelKey = \"ray-1-6\") ? 0.5 :\n        ($modelKey = \"other\") ? 0.79 :\n        ($exists($v) ? $v : 0.79);\n\n      {\"type\":\"usd\",\"usd\": $price}\n    )\n    "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["ray-2", "ray-flash-2", "ray-1-6"]}], "resolution": ["COMBO", {"default": "540p", "multiselect": false, "options": ["540p", "720p", "1080p", "4k"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5s", "9s"]}], "loop": ["BOOLEAN", {"default": false}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"first_image": ["IMAGE", {"tooltip": "First frame of generated video."}], "last_image": ["IMAGE", {"tooltip": "Last frame of generated video."}], "luma_concepts": ["LUMA_CONCEPTS", {"tooltip": "Optional Camera Concepts to dictate camera motion via the Luma Concepts node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "resolution", "duration", "loop", "seed"], "optional": ["first_image", "last_image", "luma_concepts"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageToVideoNode", "display_name": "Luma Image to Video", "description": "Generates videos synchronously based on prompt, input images, and output_size.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n    (\n      $p := {\n        \"ray-flash-2\": {\n          \"5s\": {\"4k\":3.13,\"1080p\":0.79,\"720p\":0.34,\"540p\":0.2},\n          \"9s\": {\"4k\":5.65,\"1080p\":1.42,\"720p\":0.61,\"540p\":0.36}\n        },\n        \"ray-2\": {\n          \"5s\": {\"4k\":9.11,\"1080p\":2.27,\"720p\":1.02,\"540p\":0.57},\n          \"9s\": {\"4k\":16.4,\"1080p\":4.1,\"720p\":1.83,\"540p\":1.03}\n        }\n      };\n\n      $m := widgets.model;\n      $d := widgets.duration;\n      $r := widgets.resolution;\n\n      $modelKey :=\n        $contains($m,\"ray-flash-2\") ? \"ray-flash-2\" :\n        $contains($m,\"ray-2\") ? \"ray-2\" :\n        $contains($m,\"ray-1-6\") ? \"ray-1-6\" :\n        \"other\";\n\n      $durKey := $contains($d,\"5s\") ? \"5s\" : $contains($d,\"9s\") ? \"9s\" : \"\";\n      $resKey :=\n        $contains($r,\"4k\") ? \"4k\" :\n        $contains($r,\"1080p\") ? \"1080p\" :\n        $contains($r,\"720p\") ? \"720p\" :\n        $contains($r,\"540p\") ? \"540p\" : \"\";\n\n      $modelPrices := $lookup($p, $modelKey);\n      $durPrices := $lookup($modelPrices, $durKey);\n      $v := $lookup($durPrices, $resKey);\n\n      $price :=\n        ($modelKey = \"ray-1-6\") ? 0.5 :\n        ($modelKey = \"other\") ? 0.79 :\n        ($exists($v) ? $v : 0.79);\n\n      {\"type\":\"usd\",\"usd\": $price}\n    )\n    "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaReferenceNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Image to use as reference."}], "weight": ["FLOAT", {"tooltip": "Weight of image reference.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"luma_ref": ["LUMA_REF", {}]}}, "input_order": {"required": ["image", "weight"], "optional": ["luma_ref"]}, "is_input_list": false, "output": ["LUMA_REF"], "output_is_list": [false], "output_name": ["luma_ref"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaReferenceNode", "display_name": "Luma Reference", "description": "Holds an image and weight for use with Luma Generate Image node.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaConceptsNode": {"input": {"required": {"concept1": ["COMBO", {"multiselect": false, "options": ["None", "truck_left", "pan_right", "pedestal_down", "low_angle", "pedestal_up", "selfie", "pan_left", "roll_right", "zoom_in", "over_the_shoulder", "orbit_right", "orbit_left", "static", "tiny_planet", "high_angle", "bolt_cam", "dolly_zoom", "overhead", "zoom_out", "handheld", "roll_left", "pov", "aerial_drone", "push_in", "crane_down", "truck_right", "tilt_down", "elevator_doors", "tilt_up", "ground_level", "pull_out", "aerial", "crane_up", "eye_level"]}], "concept2": ["COMBO", {"multiselect": false, "options": ["None", "truck_left", "pan_right", "pedestal_down", "low_angle", "pedestal_up", "selfie", "pan_left", "roll_right", "zoom_in", "over_the_shoulder", "orbit_right", "orbit_left", "static", "tiny_planet", "high_angle", "bolt_cam", "dolly_zoom", "overhead", "zoom_out", "handheld", "roll_left", "pov", "aerial_drone", "push_in", "crane_down", "truck_right", "tilt_down", "elevator_doors", "tilt_up", "ground_level", "pull_out", "aerial", "crane_up", "eye_level"]}], "concept3": ["COMBO", {"multiselect": false, "options": ["None", "truck_left", "pan_right", "pedestal_down", "low_angle", "pedestal_up", "selfie", "pan_left", "roll_right", "zoom_in", "over_the_shoulder", "orbit_right", "orbit_left", "static", "tiny_planet", "high_angle", "bolt_cam", "dolly_zoom", "overhead", "zoom_out", "handheld", "roll_left", "pov", "aerial_drone", "push_in", "crane_down", "truck_right", "tilt_down", "elevator_doors", "tilt_up", "ground_level", "pull_out", "aerial", "crane_up", "eye_level"]}], "concept4": ["COMBO", {"multiselect": false, "options": ["None", "truck_left", "pan_right", "pedestal_down", "low_angle", "pedestal_up", "selfie", "pan_left", "roll_right", "zoom_in", "over_the_shoulder", "orbit_right", "orbit_left", "static", "tiny_planet", "high_angle", "bolt_cam", "dolly_zoom", "overhead", "zoom_out", "handheld", "roll_left", "pov", "aerial_drone", "push_in", "crane_down", "truck_right", "tilt_down", "elevator_doors", "tilt_up", "ground_level", "pull_out", "aerial", "crane_up", "eye_level"]}]}, "optional": {"luma_concepts": ["LUMA_CONCEPTS", {"tooltip": "Optional Camera Concepts to add to the ones chosen here."}]}}, "input_order": {"required": ["concept1", "concept2", "concept3", "concept4"], "optional": ["luma_concepts"]}, "is_input_list": false, "output": ["LUMA_CONCEPTS"], "output_is_list": [false], "output_name": ["luma_concepts"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaConceptsNode", "display_name": "Luma Concepts", "description": "Camera Concepts for use with Luma Text to Video and Luma Image to Video nodes.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageNode2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the desired image. 1\u20136000 characters.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for generation.", "options": [{"key": "uni-1", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output image aspect ratio. 'auto' lets the model pick based on the prompt.", "default": "auto", "multiselect": false, "options": ["auto", "3:1", "2:1", "16:9", "3:2", "1:1", "2:3", "9:16", "1:2", "1:3"]}], "style": ["COMBO", {"tooltip": "Style preset. 'auto' picks based on the prompt; 'manga' applies a manga/anime aesthetic and requires a portrait aspect ratio (2:3, 9:16, 1:2, 1:3).", "default": "auto", "multiselect": false, "options": ["auto", "manga"]}], "web_search": ["BOOLEAN", {"tooltip": "Search the web for visual references before generating.", "default": false}]}, "optional": {"image_ref": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 9 reference images for style/content guidance.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9"], "min": 0}}]}}}, {"key": "uni-1-max", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output image aspect ratio. 'auto' lets the model pick based on the prompt.", "default": "auto", "multiselect": false, "options": ["auto", "3:1", "2:1", "16:9", "3:2", "1:1", "2:3", "9:16", "1:2", "1:3"]}], "style": ["COMBO", {"tooltip": "Style preset. 'auto' picks based on the prompt; 'manga' applies a manga/anime aesthetic and requires a portrait aspect ratio (2:3, 9:16, 1:2, 1:3).", "default": "auto", "multiselect": false, "options": ["auto", "manga"]}], "web_search": ["BOOLEAN", {"tooltip": "Search the web for visual references before generating.", "default": false}]}, "optional": {"image_ref": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 9 reference images for style/content guidance.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9"], "min": 0}}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageNode2", "display_name": "Luma UNI-1 Image", "description": "Generate images from text using the Luma UNI-1 model.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": ["model.image_ref"]}, "expr": "\n                (\n                  $m := widgets.model;\n                  $refs := $lookup(inputGroups, \"model.image_ref\");\n                  $base := $m = \"uni-1-max\" ? 0.1 : 0.0404;\n                  {\"type\":\"usd\",\"usd\": $round($base + 0.003 * $refs, 4)}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageEditNode2": {"input": {"required": {"source": ["IMAGE", {"tooltip": "Source image to edit."}], "prompt": ["STRING", {"tooltip": "Description of the desired edit. 1\u20136000 characters.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for editing.", "options": [{"key": "uni-1", "inputs": {"required": {"style": ["COMBO", {"tooltip": "Style preset. 'auto' picks based on the prompt; 'manga' applies a manga/anime aesthetic and requires a portrait aspect ratio (2:3, 9:16, 1:2, 1:3).", "default": "auto", "multiselect": false, "options": ["auto", "manga"]}], "web_search": ["BOOLEAN", {"tooltip": "Search the web for visual references before generating.", "default": false}]}, "optional": {"image_ref": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 8 reference images for style/content guidance.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}, {"key": "uni-1-max", "inputs": {"required": {"style": ["COMBO", {"tooltip": "Style preset. 'auto' picks based on the prompt; 'manga' applies a manga/anime aesthetic and requires a portrait aspect ratio (2:3, 9:16, 1:2, 1:3).", "default": "auto", "multiselect": false, "options": ["auto", "manga"]}], "web_search": ["BOOLEAN", {"tooltip": "Search the web for visual references before generating.", "default": false}]}, "optional": {"image_ref": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 8 reference images for style/content guidance.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["source", "prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageEditNode2", "display_name": "Luma UNI-1 Image Edit", "description": "Edit an existing image with a text prompt using the Luma UNI-1 model.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": ["model.image_ref"]}, "expr": "\n                (\n                  $m := widgets.model;\n                  $refs := $lookup(inputGroups, \"model.image_ref\");\n                  $base := $m = \"uni-1-max\" ? 0.103 : 0.0434;\n                  {\"type\":\"usd\",\"usd\": $round($base + 0.003 * $refs, 4)}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageUpscalerCreativeNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"default": "", "multiline": true}], "scale_factor": ["COMBO", {"multiselect": false, "options": ["2x", "4x", "8x", "16x"]}], "optimized_for": ["COMBO", {"multiselect": false, "options": ["standard", "soft_portraits", "hard_portraits", "art_n_illustration", "videogame_assets", "nature_n_landscapes", "films_n_photography", "3d_renders", "science_fiction_n_horror"]}], "creativity": ["INT", {"default": 0, "min": -10, "max": 10, "display": "slider"}], "hdr": ["INT", {"tooltip": "The level of definition and detail.", "default": 0, "min": -10, "max": 10, "display": "slider"}], "resemblance": ["INT", {"tooltip": "The level of resemblance to the original image.", "default": 0, "min": -10, "max": 10, "display": "slider"}], "fractality": ["INT", {"tooltip": "The strength of the prompt and intricacy per square pixel.", "default": 0, "min": -10, "max": 10, "display": "slider"}], "engine": ["COMBO", {"advanced": true, "multiselect": false, "options": ["automatic", "magnific_illusio", "magnific_sharpy", "magnific_sparkle"]}], "auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale input image if output would exceed maximum pixel limit.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "prompt", "scale_factor", "optimized_for", "creativity", "hdr", "resemblance", "fractality", "engine", "auto_downscale"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageUpscalerCreativeNode", "display_name": "Magnific Image Upscale (Creative)", "description": "Prompt\u2011guided enhancement, stylization, and 2x/4x/8x/16x upscaling. Maximum output: 25.3 megapixels.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "scale_factor", "type": "COMBO"}, {"name": "auto_downscale", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $ad := widgets.auto_downscale;\n                  $mins := $ad\n                    ? {\"2x\": 0.172, \"4x\": 0.343, \"8x\": 0.515, \"16x\": 0.515}\n                    : {\"2x\": 0.172, \"4x\": 0.343, \"8x\": 0.515, \"16x\": 0.844};\n                  $maxs := {\"2x\": 0.515, \"4x\": 0.844, \"8x\": 1.015, \"16x\": 1.187};\n                  {\n                    \"type\": \"range_usd\",\n                    \"min_usd\": $lookup($mins, widgets.scale_factor),\n                    \"max_usd\": $lookup($maxs, widgets.scale_factor),\n                    \"format\": { \"approximate\": true }\n                  }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageUpscalerPreciseV2Node": {"input": {"required": {"image": ["IMAGE", {}], "scale_factor": ["COMBO", {"multiselect": false, "options": ["2x", "4x", "8x", "16x"]}], "flavor": ["COMBO", {"tooltip": "Processing style: sublime for general use, photo for photographs, photo_denoiser for noisy photos.", "multiselect": false, "options": ["sublime", "photo", "photo_denoiser"]}], "sharpen": ["INT", {"tooltip": "Image sharpness intensity. Higher values increase edge definition and clarity.", "default": 7, "min": 0, "max": 100, "display": "slider"}], "smart_grain": ["INT", {"tooltip": "Intelligent grain/texture enhancement to prevent the image from looking too smooth or artificial.", "default": 7, "min": 0, "max": 100, "display": "slider"}], "ultra_detail": ["INT", {"tooltip": "Controls fine detail, textures, and micro-details added during upscaling.", "default": 30, "min": 0, "max": 100, "display": "slider"}], "auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale input image if output would exceed maximum resolution.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "scale_factor", "flavor", "sharpen", "smart_grain", "ultra_detail", "auto_downscale"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageUpscalerPreciseV2Node", "display_name": "Magnific Image Upscale (Precise V2)", "description": "High-fidelity upscaling with fine control over sharpness, grain, and detail. Maximum output: 10060\u00d710060 pixels.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "scale_factor", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $mins := {\"2x\": 0.172, \"4x\": 0.343, \"8x\": 0.515, \"16x\": 0.844};\n                  $maxs := {\"2x\": 2.045, \"4x\": 2.545, \"8x\": 2.889, \"16x\": 3.06};\n                  {\n                    \"type\": \"range_usd\",\n                    \"min_usd\": $lookup($mins, widgets.scale_factor),\n                    \"max_usd\": $lookup($maxs, widgets.scale_factor),\n                    \"format\": { \"approximate\": true }\n                  }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageStyleTransferNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The image to apply style transfer to."}], "reference_image": ["IMAGE", {"tooltip": "The reference image to extract style from."}], "prompt": ["STRING", {"default": "", "multiline": true}], "style_strength": ["INT", {"tooltip": "Percentage of style strength.", "default": 100, "min": 0, "max": 100, "display": "slider"}], "structure_strength": ["INT", {"tooltip": "Maintains the structure of the original image.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "flavor": ["COMBO", {"tooltip": "Style transfer flavor.", "multiselect": false, "options": ["faithful", "gen_z", "psychedelia", "detaily", "clear", "donotstyle", "donotstyle_sharp"]}], "engine": ["COMBO", {"tooltip": "Processing engine selection.", "advanced": true, "multiselect": false, "options": ["balanced", "definio", "illusio", "3d_cartoon", "colorful_anime", "caricature", "real", "super_real", "softy"]}], "portrait_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Enable portrait mode for facial enhancements.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"portrait_style": ["COMBO", {"tooltip": "Visual style applied to portrait images.", "multiselect": false, "options": ["standard", "pop", "super_pop"]}], "portrait_beautifier": ["COMBO", {"tooltip": "Facial beautification intensity on portraits.", "multiselect": false, "options": ["none", "beautify_face", "beautify_face_max"]}]}}}]}], "fixed_generation": ["BOOLEAN", {"tooltip": "When disabled, expect each generation to introduce a degree of randomness, leading to more diverse outcomes.", "advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "reference_image", "prompt", "style_strength", "structure_strength", "flavor", "engine", "portrait_mode", "fixed_generation"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageStyleTransferNode", "display_name": "Magnific Image Style Transfer", "description": "Transfer the style from a reference image to your input image.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.11}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageRelightNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The image to relight."}], "prompt": ["STRING", {"tooltip": "Descriptive guidance for lighting. Supports emphasis notation (1-1.4).", "default": "", "multiline": true}], "light_transfer_strength": ["INT", {"tooltip": "Intensity of light transfer application.", "default": 100, "min": 0, "max": 100, "display": "slider"}], "style": ["COMBO", {"tooltip": "Stylistic output preference.", "multiselect": false, "options": ["standard", "darker_but_realistic", "clean", "smooth", "brighter", "contrasted_n_hdr", "just_composition"]}], "interpolate_from_original": ["BOOLEAN", {"tooltip": "Restricts generation freedom to match original more closely.", "advanced": true, "default": false}], "change_background": ["BOOLEAN", {"tooltip": "Modifies background based on prompt/reference.", "advanced": true, "default": true}], "preserve_details": ["BOOLEAN", {"tooltip": "Maintains texture and fine details from original.", "advanced": true, "default": true}], "advanced_settings": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Fine-tuning options for advanced lighting control.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"whites": ["INT", {"tooltip": "Adjusts the brightest tones in the image.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "blacks": ["INT", {"tooltip": "Adjusts the darkest tones in the image.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "brightness": ["INT", {"tooltip": "Overall brightness adjustment.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "contrast": ["INT", {"tooltip": "Contrast adjustment.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "saturation": ["INT", {"tooltip": "Color saturation adjustment.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "engine": ["COMBO", {"tooltip": "Processing engine selection.", "multiselect": false, "options": ["automatic", "balanced", "cool", "real", "illusio", "fairy", "colorful_anime", "hard_transform", "softy"]}], "transfer_light_a": ["COMBO", {"tooltip": "The intensity of light transfer.", "multiselect": false, "options": ["automatic", "low", "medium", "normal", "high", "high_on_faces"]}], "transfer_light_b": ["COMBO", {"tooltip": "Also modifies light transfer intensity. Can be combined with the previous control for varied effects.", "multiselect": false, "options": ["automatic", "composition", "straight", "smooth_in", "smooth_out", "smooth_both", "reverse_both", "soft_in", "soft_out", "soft_mid", "style_shift", "strong_shift"]}], "fixed_generation": ["BOOLEAN", {"tooltip": "Ensures consistent output with the same settings.", "default": true}]}}}]}]}, "optional": {"reference_image": ["IMAGE", {"tooltip": "Optional reference image to transfer lighting from."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "prompt", "light_transfer_strength", "style", "interpolate_from_original", "change_background", "preserve_details", "advanced_settings"], "optional": ["reference_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageRelightNode", "display_name": "Magnific Image Relight", "description": "Relight an image with lighting adjustments and optional reference-based light transfer.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.11}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageSkinEnhancerNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The portrait image to enhance."}], "sharpen": ["INT", {"tooltip": "Sharpening intensity level.", "default": 0, "min": 0, "max": 100, "display": "slider"}], "smart_grain": ["INT", {"tooltip": "Smart grain intensity level.", "default": 2, "min": 0, "max": 100, "display": "slider"}], "mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Processing mode: creative for artistic enhancement, faithful for preserving original appearance, flexible for targeted optimization.", "options": [{"key": "creative", "inputs": {"required": {}}}, {"key": "faithful", "inputs": {"required": {"skin_detail": ["INT", {"tooltip": "Skin detail enhancement level.", "default": 80, "min": 0, "max": 100, "display": "slider"}]}}}, {"key": "flexible", "inputs": {"required": {"optimized_for": ["COMBO", {"tooltip": "Enhancement optimization target.", "multiselect": false, "options": ["enhance_skin", "improve_lighting", "enhance_everything", "transform_to_real", "no_make_up"]}]}}}]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "sharpen", "smart_grain", "mode"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageSkinEnhancerNode", "display_name": "Magnific Image Skin Enhancer", "description": "Skin enhancement for portraits with multiple processing modes.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $rates := {\"creative\": 0.29, \"faithful\": 0.37, \"flexible\": 0.45};\n                  {\"type\":\"usd\",\"usd\": $lookup($rates, widgets.mode)}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyTextToModelNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "style": ["COMBO", {"multiselect": false, "options": ["realistic", "sculpture"]}], "should_remesh": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "When set to false, returns an unprocessed triangular mesh.", "options": [{"key": "true", "inputs": {"required": {"topology": ["COMBO", {"multiselect": false, "options": ["triangle", "quad"]}], "target_polycount": ["INT", {"default": 300000, "min": 100, "max": 300000, "display": "number"}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "symmetry_mode": ["COMBO", {"advanced": true, "multiselect": false, "options": ["auto", "on", "off"]}], "pose_mode": ["COMBO", {"tooltip": "Specify the pose mode for the generated model.", "advanced": true, "multiselect": false, "options": ["", "A-pose", "T-pose"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "prompt", "style", "should_remesh", "symmetry_mode", "pose_mode", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyTextToModelNode", "display_name": "Meshy: Text to Model", "description": "", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.8}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyRefineNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "meshy_task_id": ["MESHY_TASK_ID", {}], "enable_pbr": ["BOOLEAN", {"tooltip": "Generate PBR Maps (metallic, roughness, normal) in addition to the base color. Note: this should be set to false when using Sculpture style, as Sculpture style generates its own set of PBR maps.", "advanced": true, "default": false}], "texture_prompt": ["STRING", {"tooltip": "Provide a text prompt to guide the texturing process. Maximum 600 characters. Cannot be used at the same time as 'texture_image'.", "default": "", "multiline": true}]}, "optional": {"texture_image": ["IMAGE", {"tooltip": "Only one of 'texture_image' or 'texture_prompt' may be used at the same time."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "meshy_task_id", "enable_pbr", "texture_prompt"], "optional": ["texture_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyRefineNode", "display_name": "Meshy: Refine Draft Model", "description": "Refine a previously created draft model.", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyImageToModelNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "image": ["IMAGE", {}], "should_remesh": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "When set to false, returns an unprocessed triangular mesh.", "options": [{"key": "true", "inputs": {"required": {"topology": ["COMBO", {"multiselect": false, "options": ["triangle", "quad"]}], "target_polycount": ["INT", {"default": 300000, "min": 100, "max": 300000, "display": "number"}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "symmetry_mode": ["COMBO", {"multiselect": false, "options": ["auto", "on", "off"]}], "should_texture": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Determines whether textures are generated. Setting it to false skips the texture phase and returns a mesh without textures.", "options": [{"key": "true", "inputs": {"required": {"enable_pbr": ["BOOLEAN", {"tooltip": "Generate PBR Maps (metallic, roughness, normal) in addition to the base color.", "default": false}], "texture_prompt": ["STRING", {"tooltip": "Provide a text prompt to guide the texturing process. Maximum 600 characters. Cannot be used at the same time as 'texture_image'.", "default": "", "multiline": true}]}, "optional": {"texture_image": ["IMAGE", {"tooltip": "Only one of 'texture_image' or 'texture_prompt' may be used at the same time."}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "pose_mode": ["COMBO", {"tooltip": "Specify the pose mode for the generated model.", "advanced": true, "multiselect": false, "options": ["", "A-pose", "T-pose"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "image", "should_remesh", "symmetry_mode", "should_texture", "pose_mode", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyImageToModelNode", "display_name": "Meshy: Image to Model", "description": "", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "should_texture", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $prices := {\"true\": 1.2, \"false\": 0.8};\n                  {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.should_texture)}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyMultiImageToModelNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 2, "max": 4}}], "should_remesh": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "When set to false, returns an unprocessed triangular mesh.", "options": [{"key": "true", "inputs": {"required": {"topology": ["COMBO", {"multiselect": false, "options": ["triangle", "quad"]}], "target_polycount": ["INT", {"default": 300000, "min": 100, "max": 300000, "display": "number"}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "symmetry_mode": ["COMBO", {"advanced": true, "multiselect": false, "options": ["auto", "on", "off"]}], "should_texture": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Determines whether textures are generated. Setting it to false skips the texture phase and returns a mesh without textures.", "options": [{"key": "true", "inputs": {"required": {"enable_pbr": ["BOOLEAN", {"tooltip": "Generate PBR Maps (metallic, roughness, normal) in addition to the base color.", "default": false}], "texture_prompt": ["STRING", {"tooltip": "Provide a text prompt to guide the texturing process. Maximum 600 characters. Cannot be used at the same time as 'texture_image'.", "default": "", "multiline": true}]}, "optional": {"texture_image": ["IMAGE", {"tooltip": "Only one of 'texture_image' or 'texture_prompt' may be used at the same time."}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "pose_mode": ["COMBO", {"tooltip": "Specify the pose mode for the generated model.", "advanced": true, "multiselect": false, "options": ["", "A-pose", "T-pose"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "images", "should_remesh", "symmetry_mode", "should_texture", "pose_mode", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyMultiImageToModelNode", "display_name": "Meshy: Multi-Image to Model", "description": "", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "should_texture", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $prices := {\"true\": 0.6, \"false\": 0.2};\n                  {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.should_texture)}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyRigModelNode": {"input": {"required": {"meshy_task_id": ["MESHY_TASK_ID", {}], "height_meters": ["FLOAT", {"tooltip": "The approximate height of the character model in meters. This aids in scaling and rigging accuracy.", "default": 1.7, "min": 0.1, "max": 15.0}]}, "optional": {"texture_image": ["IMAGE", {"tooltip": "The model's UV-unwrapped base color texture image."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["meshy_task_id", "height_meters"], "optional": ["texture_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_RIGGED_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "rig_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyRigModelNode", "display_name": "Meshy: Rig Model", "description": "Provides a rigged character in standard formats. Auto-rigging is currently not suitable for untextured meshes, non-humanoid assets, or humanoid assets with unclear limb and body structure.", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyAnimateModelNode": {"input": {"required": {"rig_task_id": ["MESHY_RIGGED_TASK_ID", {}], "action_id": ["INT", {"tooltip": "Visit https://docs.meshy.ai/en/api/animation-library for a list of available values.", "default": 0, "min": 0, "max": 696}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["rig_task_id", "action_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false], "output_name": ["model_file", "GLB", "FBX"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "MeshyAnimateModelNode", "display_name": "Meshy: Animate Model", "description": "Apply a specific animation action to a previously rigged character.", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.12}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyTextureNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "meshy_task_id": ["MESHY_TASK_ID", {}], "enable_original_uv": ["BOOLEAN", {"tooltip": "Use the original UV of the model instead of generating new UVs. When enabled, Meshy preserves existing textures from the uploaded model. If the model has no original UV, the quality of the output might not be as good.", "advanced": true, "default": true}], "pbr": ["BOOLEAN", {"advanced": true, "default": false}], "text_style_prompt": ["STRING", {"tooltip": "Describe your desired texture style of the object using text. Maximum 600 characters.Maximum 600 characters. Cannot be used at the same time as 'image_style'.", "default": "", "multiline": true}]}, "optional": {"image_style": ["IMAGE", {"tooltip": "A 2d image to guide the texturing process. Can not be used at the same time with 'text_style_prompt'."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "meshy_task_id", "enable_original_uv", "pbr", "text_style_prompt"], "optional": ["image_style"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyTextureNode", "display_name": "Meshy: Texture Model", "description": "", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MinimaxTextToVideoNode": {"input": {"required": {"prompt_text": ["STRING", {"tooltip": "Text prompt to guide the video generation", "default": "", "multiline": true}], "model": ["COMBO", {"tooltip": "Model to use for video generation", "default": "T2V-01", "multiselect": false, "options": ["T2V-01", "T2V-01-Director"]}]}, "optional": {"seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "step": 1, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt_text", "model"], "optional": ["seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "MinimaxTextToVideoNode", "display_name": "MiniMax Text to Video", "description": "Generates videos synchronously based on a prompt, and optional parameters.", "python_module": "comfy_api_nodes.nodes_minimax", "category": "partner/video/MiniMax", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.43}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MinimaxImageToVideoNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Image to use as first frame of video generation"}], "prompt_text": ["STRING", {"tooltip": "Text prompt to guide the video generation", "default": "", "multiline": true}], "model": ["COMBO", {"tooltip": "Model to use for video generation", "default": "I2V-01", "multiselect": false, "options": ["I2V-01-Director", "I2V-01", "I2V-01-live"]}]}, "optional": {"seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "step": 1, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "prompt_text", "model"], "optional": ["seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "MinimaxImageToVideoNode", "display_name": "MiniMax Image to Video", "description": "Generates videos synchronously based on an image and prompt, and optional parameters.", "python_module": "comfy_api_nodes.nodes_minimax", "category": "partner/video/MiniMax", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.43}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MinimaxHailuoVideoNode": {"input": {"required": {"prompt_text": ["STRING", {"tooltip": "Text prompt to guide the video generation.", "default": "", "multiline": true}]}, "optional": {"seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "step": 1, "control_after_generate": true}], "first_frame_image": ["IMAGE", {"tooltip": "Optional image to use as the first frame to generate a video."}], "prompt_optimizer": ["BOOLEAN", {"tooltip": "Optimize prompt to improve generation quality when needed.", "default": true}], "duration": ["COMBO", {"tooltip": "The length of the output video in seconds.", "default": 6, "multiselect": false, "options": [6, 10]}], "resolution": ["COMBO", {"tooltip": "The dimensions of the video display. 1080p is 1920x1080, 768p is 1366x768.", "default": "768P", "multiselect": false, "options": ["768P", "1080P"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt_text"], "optional": ["seed", "first_frame_image", "prompt_optimizer", "duration", "resolution"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "MinimaxHailuoVideoNode", "display_name": "MiniMax Hailuo Video", "description": "Generates videos from prompt, with optional start frame using the new MiniMax Hailuo-02 model.", "python_module": "comfy_api_nodes.nodes_minimax", "category": "partner/video/MiniMax", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $prices := {\n                    \"768p\": {\"6\": 0.28, \"10\": 0.56},\n                    \"1080p\": {\"6\": 0.49}\n                  };\n                  $resPrices := $lookup($prices, $lowercase(widgets.resolution));\n                  $price := $lookup($resPrices, $string(widgets.duration));\n                  {\"type\":\"usd\",\"usd\": $price ? $price : 0.43}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIDalle2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for DALL\u00b7E", "default": "", "multiline": true}]}, "optional": {"seed": ["INT", {"tooltip": "not implemented yet in backend", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "size": ["COMBO", {"tooltip": "Image size", "default": "1024x1024", "multiselect": false, "options": ["256x256", "512x512", "1024x1024"]}], "n": ["INT", {"tooltip": "How many images to generate", "default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}], "image": ["IMAGE", {"tooltip": "Optional reference image for image editing."}], "mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced)"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt"], "optional": ["seed", "size", "n", "image", "mask"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIDalle2", "display_name": "OpenAI DALL\u00b7E 2", "description": "Generates images synchronously via OpenAI's DALL\u00b7E 2 endpoint.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/image/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "size", "type": "COMBO"}, {"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $size := widgets.size;\n                  $nRaw := widgets.n;\n                  $n := ($nRaw != null and $nRaw != 0) ? $nRaw : 1;\n\n                  $base :=\n                    $contains($size, \"256x256\") ? 0.016 :\n                    $contains($size, \"512x512\") ? 0.018 :\n                    0.02;\n\n                  {\"type\":\"usd\",\"usd\": $round($base * $n, 3)}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIDalle3": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for DALL\u00b7E", "default": "", "multiline": true}]}, "optional": {"seed": ["INT", {"tooltip": "not implemented yet in backend", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "quality": ["COMBO", {"tooltip": "Image quality", "default": "standard", "multiselect": false, "options": ["standard", "hd"]}], "style": ["COMBO", {"tooltip": "Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images.", "default": "natural", "multiselect": false, "options": ["natural", "vivid"]}], "size": ["COMBO", {"tooltip": "Image size", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1024x1792", "1792x1024"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt"], "optional": ["seed", "quality", "style", "size"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIDalle3", "display_name": "OpenAI DALL\u00b7E 3", "description": "Generates images synchronously via OpenAI's DALL\u00b7E 3 endpoint.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/image/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "size", "type": "COMBO"}, {"name": "quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $size := widgets.size;\n                  $q := widgets.quality;\n                  $hd := $contains($q, \"hd\");\n\n                  $price :=\n                    $contains($size, \"1024x1024\")\n                      ? ($hd ? 0.08 : 0.04)\n                      : (($contains($size, \"1792x1024\") or $contains($size, \"1024x1792\"))\n                          ? ($hd ? 0.12 : 0.08)\n                          : 0.04);\n\n                  {\"type\":\"usd\",\"usd\": $price}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIGPTImage1": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for GPT Image", "default": "", "multiline": true}]}, "optional": {"seed": ["INT", {"tooltip": "not implemented yet in backend", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "quality": ["COMBO", {"tooltip": "Image quality, affects cost and generation time.", "default": "low", "multiselect": false, "options": ["low", "medium", "high"]}], "background": ["COMBO", {"tooltip": "Return image with or without background", "default": "auto", "multiselect": false, "options": ["auto", "opaque", "transparent"]}], "size": ["COMBO", {"tooltip": "Image size. Select 'Custom' to use the custom width and height (GPT Image 2 only).", "default": "auto", "multiselect": false, "options": ["auto", "1024x1024", "1024x1536", "1536x1024", "2048x2048", "2048x1152", "1152x2048", "3840x2160", "2160x3840", "Custom"]}], "n": ["INT", {"tooltip": "How many images to generate", "default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}], "image": ["IMAGE", {"tooltip": "Optional reference image for image editing."}], "mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced)"}], "model": ["COMBO", {"default": "gpt-image-2", "multiselect": false, "options": ["gpt-image-1", "gpt-image-1.5", "gpt-image-2"]}], "custom_width": ["INT", {"tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16 (GPT Image 2 only).", "default": 1024, "min": 1024, "max": 3840, "step": 16}], "custom_height": ["INT", {"tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16 (GPT Image 2 only).", "default": 1024, "min": 1024, "max": 3840, "step": 16}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt"], "optional": ["seed", "quality", "background", "size", "n", "image", "mask", "model", "custom_width", "custom_height"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIGPTImage1", "display_name": "OpenAI GPT Image 2", "description": "Generates images synchronously via OpenAI's GPT Image endpoint.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/image/OpenAI", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "quality", "type": "COMBO"}, {"name": "n", "type": "INT"}, {"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $ranges := {\n                    \"gpt-image-1\": {\n                      \"low\":    [0.011, 0.02],\n                      \"medium\": [0.042, 0.07],\n                      \"high\":   [0.167, 0.25]\n                    },\n                    \"gpt-image-1.5\": {\n                      \"low\":    [0.009, 0.02],\n                      \"medium\": [0.034, 0.062],\n                      \"high\":   [0.133, 0.22]\n                    },\n                    \"gpt-image-2\": {\n                      \"low\":    [0.0048, 0.019],\n                      \"medium\": [0.041, 0.168],\n                      \"high\":   [0.165, 0.67]\n                    }\n                  };\n                  $range := $lookup($lookup($ranges, widgets.model), widgets.quality);\n                  $nRaw := widgets.n;\n                  $n := ($nRaw != null and $nRaw != 0) ? $nRaw : 1;\n                  ($n = 1)\n                    ? {\"type\":\"range_usd\",\"min_usd\": $range[0], \"max_usd\": $range[1], \"format\": {\"approximate\": true}}\n                    : {\n                        \"type\":\"range_usd\",\n                        \"min_usd\": $range[0] * $n,\n                        \"max_usd\": $range[1] * $n,\n                        \"format\": { \"suffix\": \"/Run\", \"approximate\": true }\n                      }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIGPTImageNodeV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for GPT Image", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "gpt-image-2", "inputs": {"required": {"size": ["COMBO", {"tooltip": "Image size. Select 'Custom' to use the custom width and height.", "default": "auto", "multiselect": false, "options": ["auto", "1024x1024", "1024x1536", "1536x1024", "2048x2048", "2048x1152", "1152x2048", "3840x2160", "2160x3840", "Custom"]}], "custom_width": ["INT", {"tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16.", "default": 1024, "min": 1024, "max": 3840, "step": 16}], "custom_height": ["INT", {"tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16.", "default": 1024, "min": 1024, "max": 3840, "step": 16}], "background": ["COMBO", {"tooltip": "Return image with or without background.", "default": "auto", "multiselect": false, "options": ["auto", "opaque"]}], "quality": ["COMBO", {"tooltip": "Image quality, affects cost and generation time.", "default": "low", "multiselect": false, "options": ["low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image editing. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}]}, "optional": {"mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced). Requires exactly one reference image."}]}}}, {"key": "gpt-image-1.5", "inputs": {"required": {"size": ["COMBO", {"tooltip": "Image size.", "default": "auto", "multiselect": false, "options": ["auto", "1024x1024", "1024x1536", "1536x1024"]}], "background": ["COMBO", {"tooltip": "Return image with or without background.", "default": "auto", "multiselect": false, "options": ["auto", "opaque", "transparent"]}], "quality": ["COMBO", {"tooltip": "Image quality, affects cost and generation time.", "default": "low", "multiselect": false, "options": ["low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image editing. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}]}, "optional": {"mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced). Requires exactly one reference image."}]}}}, {"key": "gpt-image-1", "inputs": {"required": {"size": ["COMBO", {"tooltip": "Image size.", "default": "auto", "multiselect": false, "options": ["auto", "1024x1024", "1024x1536", "1536x1024"]}], "background": ["COMBO", {"tooltip": "Return image with or without background.", "default": "auto", "multiselect": false, "options": ["auto", "opaque", "transparent"]}], "quality": ["COMBO", {"tooltip": "Image quality, affects cost and generation time.", "default": "low", "multiselect": false, "options": ["low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image editing. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}]}, "optional": {"mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced). Requires exactly one reference image."}]}}}]}], "n": ["INT", {"tooltip": "How many images to generate", "default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "not implemented yet in backend", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "n", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIGPTImageNodeV2", "display_name": "OpenAI GPT Image 2", "description": "Generates images via OpenAI's GPT Image endpoint.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/image/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.quality", "type": "COMBO"}, {"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $ranges := {\n                    \"gpt-image-1\": {\n                      \"low\":    [0.011, 0.02],\n                      \"medium\": [0.042, 0.07],\n                      \"high\":   [0.167, 0.25]\n                    },\n                    \"gpt-image-1.5\": {\n                      \"low\":    [0.009, 0.02],\n                      \"medium\": [0.034, 0.062],\n                      \"high\":   [0.133, 0.22]\n                    },\n                    \"gpt-image-2\": {\n                      \"low\":    [0.0048, 0.019],\n                      \"medium\": [0.041, 0.168],\n                      \"high\":   [0.165, 0.67]\n                    }\n                  };\n                  $range := $lookup($lookup($ranges, widgets.model), $lookup(widgets, \"model.quality\"));\n                  $nRaw := widgets.n;\n                  $n := ($nRaw != null and $nRaw != 0) ? $nRaw : 1;\n                  ($n = 1)\n                    ? {\"type\":\"range_usd\",\"min_usd\": $range[0], \"max_usd\": $range[1], \"format\": {\"approximate\": true}}\n                    : {\n                        \"type\":\"range_usd\",\n                        \"min_usd\": $range[0] * $n,\n                        \"max_usd\": $range[1] * $n,\n                        \"format\": { \"suffix\": \"/Run\", \"approximate\": true }\n                      }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIChatNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text inputs to the model, used to generate a response.", "default": "", "multiline": true}], "persist_context": ["BOOLEAN", {"tooltip": "This parameter is deprecated and has no effect.", "advanced": true, "default": false}], "model": ["COMBO", {"tooltip": "The model used to generate the response", "multiselect": false, "options": ["gpt-5.5-pro", "gpt-5.5", "gpt-5", "gpt-5-mini", "gpt-5-nano", "gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", "o4-mini", "o3", "o1-pro", "o1"]}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node."}], "files": ["OPENAI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the OpenAI Chat Input Files node."}], "advanced_options": ["OPENAI_CHAT_CONFIG", {"tooltip": "Optional configuration for the model. Accepts inputs from the OpenAI Chat Advanced Options node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "persist_context", "model"], "optional": ["images", "files", "advanced_options"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIChatNode", "display_name": "OpenAI ChatGPT", "description": "Generate text responses from an OpenAI model.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/text/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $m := widgets.model;\n                  $contains($m, \"o4-mini\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.0011, 0.0044],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"o1-pro\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.15, 0.6],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"o1\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.015, 0.06],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"o3-mini\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.0011, 0.0044],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"o3\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.01, 0.04],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"gpt-4.1-nano\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.0001, 0.0004],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"gpt-4.1-mini\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.0004, 0.0016],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"gpt-4.1\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.002, 0.008],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"gpt-5.5-pro\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.03, 0.18],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"gpt-5.5\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.005, 0.03],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"gpt-5-nano\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.00005, 0.0004],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"gpt-5-mini\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.00025, 0.002],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : $contains($m, \"gpt-5\") ? {\n                    \"type\": \"list_usd\",\n                    \"usd\": [0.00125, 0.01],\n                    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n                  }\n                  : {\"type\": \"text\", \"text\": \"Token-based\"}\n                )\n                "}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "OpenAIInputFiles": {"input": {"required": {"file": ["COMBO", {"tooltip": "Input files to include as context for the model. Only accepts text (.txt) and PDF (.pdf) files for now.", "multiselect": false, "options": []}]}, "optional": {"OPENAI_INPUT_FILES": ["OPENAI_INPUT_FILES", {"tooltip": "An optional additional file(s) to batch together with the file loaded from this node. Allows chaining of input files so that a single message can include multiple input files."}]}}, "input_order": {"required": ["file"], "optional": ["OPENAI_INPUT_FILES"]}, "is_input_list": false, "output": ["OPENAI_INPUT_FILES"], "output_is_list": [false], "output_name": ["OPENAI_INPUT_FILES"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIInputFiles", "display_name": "OpenAI ChatGPT Input Files", "description": "Loads and prepares input files (text, pdf, etc.) to include as inputs for the OpenAI Chat Node. The files will be read by the OpenAI model when generating a response. \ud83d\udec8 TIP: Can be chained together with other OpenAI Input File nodes.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/text/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIChatConfig": {"input": {"required": {"truncation": ["COMBO", {"tooltip": "The truncation strategy to use for the model response. auto: If the context of this response and previous ones exceeds the model's context window size, the model will truncate the response to fit the context window by dropping input items in the middle of the conversation.disabled: If a model response will exceed the context window size for a model, the request will fail with a 400 error", "advanced": true, "default": "auto", "multiselect": false, "options": ["auto", "disabled"]}]}, "optional": {"max_output_tokens": ["INT", {"tooltip": "An upper bound for the number of tokens that can be generated for a response, including visible output tokens", "advanced": true, "default": 4096, "min": 16, "max": 16384}], "instructions": ["STRING", {"tooltip": "Instructions for the model on how to generate the response", "multiline": true}]}}, "input_order": {"required": ["truncation"], "optional": ["max_output_tokens", "instructions"]}, "is_input_list": false, "output": ["OPENAI_CHAT_CONFIG"], "output_is_list": [false], "output_name": ["OPENAI_CHAT_CONFIG"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIChatConfig", "display_name": "OpenAI ChatGPT Advanced Options", "description": "Allows specifying advanced configuration options for the OpenAI Chat Nodes.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/text/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenRouterLLMNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text input to the model.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The OpenRouter model used to generate the response.", "options": [{"key": "anthropic/claude-opus-4.7", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "openai/gpt-5.5-pro", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "openai/gpt-5.5", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "google/gemini-3.5-flash", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference video(s) \u2014 up to 4. Sent as URLs.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}]}}}, {"key": "x-ai/grok-4.20", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "x-ai/grok-4.3", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "deepseek/deepseek-v4-pro", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "deepseek/deepseek-v4-flash", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "deepseek/deepseek-v3.2", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "qwen/qwen3.6-max-preview", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "qwen/qwen3.6-plus", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 10. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference video(s) \u2014 up to 4. Sent as URLs.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}]}}}, {"key": "qwen/qwen3.6-flash", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 10. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference video(s) \u2014 up to 4. Sent as URLs.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}]}}}, {"key": "mistralai/mistral-large-2512", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 8. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}, {"key": "mistralai/mistral-medium-3-5", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 8. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}, {"key": "z-ai/glm-4.6", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "z-ai/glm-5", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "moonshotai/kimi-k2.6", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 10. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}]}}}, {"key": "moonshotai/kimi-k2-thinking", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "perplexity/sonar-pro", "inputs": {"required": {"search_context_size": ["COMBO", {"tooltip": "How much web search context to retrieve. Larger = more grounded but slower/pricier.", "advanced": true, "default": "medium", "multiselect": false, "options": ["low", "medium", "high"]}]}}}, {"key": "perplexity/sonar-reasoning-pro", "inputs": {"required": {"search_context_size": ["COMBO", {"tooltip": "How much web search context to retrieve. Larger = more grounded but slower/pricier.", "advanced": true, "default": "medium", "multiselect": false, "options": ["low", "medium", "high"]}], "reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "perplexity/sonar-deep-research", "inputs": {"required": {"search_context_size": ["COMBO", {"tooltip": "How much web search context to retrieve. Larger = more grounded but slower/pricier.", "advanced": true, "default": "medium", "multiselect": false, "options": ["low", "medium", "high"]}], "reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}]}], "seed": ["INT", {"tooltip": "Seed for sampling. Set to 0 to omit. Most models treat this as a hint only.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate the model's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenRouterLLMNode", "display_name": "OpenRouter LLM", "description": "Generate text responses through OpenRouter. Routes to a curated set of popular models from xAI, DeepSeek, Qwen, Mistral, Z.AI (GLM), Moonshot (Kimi), and Perplexity Sonar.", "python_module": "comfy_api_nodes.nodes_openrouter", "category": "partner/text/OpenRouter", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "(\n  $rates := {\n  \"anthropic/claude-opus-4.7\": [0.005, 0.025],\n  \"openai/gpt-5.5-pro\": [0.03, 0.18],\n  \"openai/gpt-5.5\": [0.005, 0.03],\n  \"google/gemini-3.5-flash\": [0.0015, 0.009],\n  \"x-ai/grok-4.20\": [0.00125, 0.0025],\n  \"x-ai/grok-4.3\": [0.00125, 0.0025],\n  \"deepseek/deepseek-v4-pro\": [0.000435, 0.00087],\n  \"deepseek/deepseek-v4-flash\": [0.000112, 0.000224],\n  \"deepseek/deepseek-v3.2\": [0.000252, 0.000378],\n  \"qwen/qwen3.6-max-preview\": [0.00104, 0.00624],\n  \"qwen/qwen3.6-plus\": [0.000325, 0.00195],\n  \"qwen/qwen3.6-flash\": [0.0001875, 0.001125],\n  \"mistralai/mistral-large-2512\": [0.0005, 0.0015],\n  \"mistralai/mistral-medium-3-5\": [0.0015, 0.0075],\n  \"z-ai/glm-4.6\": [0.00043, 0.00174],\n  \"z-ai/glm-5\": [0.0006, 0.00192],\n  \"moonshotai/kimi-k2.6\": [0.00073, 0.00349],\n  \"moonshotai/kimi-k2-thinking\": [0.0006, 0.0025],\n  \"perplexity/sonar-pro\": [0.003, 0.015],\n  \"perplexity/sonar-reasoning-pro\": [0.002, 0.008],\n  \"perplexity/sonar-deep-research\": [0.002, 0.008]\n  };\n  $r := $lookup($rates, widgets.model);\n  $r ? {\n    \"type\": \"list_usd\",\n    \"usd\": $r,\n    \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n  } : {\"type\": \"text\", \"text\": \"Token-based\"}\n)"}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "PixverseTextToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16"]}], "quality": ["COMBO", {"default": "540p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration_seconds": ["COMBO", {"multiselect": false, "options": [5, 8]}], "motion_mode": ["COMBO", {"multiselect": false, "options": ["normal", "fast"]}], "seed": ["INT", {"tooltip": "Seed for video generation.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "multiline": true}], "pixverse_template": ["PIXVERSE_TEMPLATE", {"tooltip": "An optional template to influence style of generation, created by the PixVerse Template node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "quality", "duration_seconds", "motion_mode", "seed"], "optional": ["negative_prompt", "pixverse_template"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "PixverseTextToVideoNode", "display_name": "PixVerse Text to Video", "description": "Generates videos based on prompt and output_size.", "python_module": "comfy_api_nodes.nodes_pixverse", "category": "partner/video/PixVerse", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration_seconds", "type": "COMBO"}, {"name": "quality", "type": "COMBO"}, {"name": "motion_mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n    (\n      $prices := {\n        \"5\": {\n          \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n          \"720p\": {\"normal\": 0.6, \"fast\": 1.2},\n          \"540p\": {\"normal\": 0.45, \"fast\": 0.9},\n          \"360p\": {\"normal\": 0.45, \"fast\": 0.9}\n        },\n        \"8\": {\n          \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n          \"720p\": {\"normal\": 1.2, \"fast\": 1.2},\n          \"540p\": {\"normal\": 0.9, \"fast\": 1.2},\n          \"360p\": {\"normal\": 0.9, \"fast\": 1.2}\n        }\n      };\n      $durPrices := $lookup($prices, $string(widgets.duration_seconds));\n      $qualityPrices := $lookup($durPrices, widgets.quality);\n      $price := $lookup($qualityPrices, widgets.motion_mode);\n      {\"type\":\"usd\",\"usd\": $price ? $price : 0.9}\n    )\n    "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PixverseImageToVideoNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "quality": ["COMBO", {"default": "540p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration_seconds": ["COMBO", {"multiselect": false, "options": [5, 8]}], "motion_mode": ["COMBO", {"multiselect": false, "options": ["normal", "fast"]}], "seed": ["INT", {"tooltip": "Seed for video generation.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "multiline": true}], "pixverse_template": ["PIXVERSE_TEMPLATE", {"tooltip": "An optional template to influence style of generation, created by the PixVerse Template node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "prompt", "quality", "duration_seconds", "motion_mode", "seed"], "optional": ["negative_prompt", "pixverse_template"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "PixverseImageToVideoNode", "display_name": "PixVerse Image to Video", "description": "Generates videos based on prompt and output_size.", "python_module": "comfy_api_nodes.nodes_pixverse", "category": "partner/video/PixVerse", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration_seconds", "type": "COMBO"}, {"name": "quality", "type": "COMBO"}, {"name": "motion_mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n    (\n      $prices := {\n        \"5\": {\n          \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n          \"720p\": {\"normal\": 0.6, \"fast\": 1.2},\n          \"540p\": {\"normal\": 0.45, \"fast\": 0.9},\n          \"360p\": {\"normal\": 0.45, \"fast\": 0.9}\n        },\n        \"8\": {\n          \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n          \"720p\": {\"normal\": 1.2, \"fast\": 1.2},\n          \"540p\": {\"normal\": 0.9, \"fast\": 1.2},\n          \"360p\": {\"normal\": 0.9, \"fast\": 1.2}\n        }\n      };\n      $durPrices := $lookup($prices, $string(widgets.duration_seconds));\n      $qualityPrices := $lookup($durPrices, widgets.quality);\n      $price := $lookup($qualityPrices, widgets.motion_mode);\n      {\"type\":\"usd\",\"usd\": $price ? $price : 0.9}\n    )\n    "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PixverseTransitionVideoNode": {"input": {"required": {"first_frame": ["IMAGE", {}], "last_frame": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "quality": ["COMBO", {"default": "540p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration_seconds": ["COMBO", {"multiselect": false, "options": [5, 8]}], "motion_mode": ["COMBO", {"multiselect": false, "options": ["normal", "fast"]}], "seed": ["INT", {"tooltip": "Seed for video generation.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["first_frame", "last_frame", "prompt", "quality", "duration_seconds", "motion_mode", "seed"], "optional": ["negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "PixverseTransitionVideoNode", "display_name": "PixVerse Transition Video", "description": "Generates videos based on prompt and output_size.", "python_module": "comfy_api_nodes.nodes_pixverse", "category": "partner/video/PixVerse", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration_seconds", "type": "COMBO"}, {"name": "quality", "type": "COMBO"}, {"name": "motion_mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n    (\n      $prices := {\n        \"5\": {\n          \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n          \"720p\": {\"normal\": 0.6, \"fast\": 1.2},\n          \"540p\": {\"normal\": 0.45, \"fast\": 0.9},\n          \"360p\": {\"normal\": 0.45, \"fast\": 0.9}\n        },\n        \"8\": {\n          \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n          \"720p\": {\"normal\": 1.2, \"fast\": 1.2},\n          \"540p\": {\"normal\": 0.9, \"fast\": 1.2},\n          \"360p\": {\"normal\": 0.9, \"fast\": 1.2}\n        }\n      };\n      $durPrices := $lookup($prices, $string(widgets.duration_seconds));\n      $qualityPrices := $lookup($durPrices, widgets.quality);\n      $price := $lookup($qualityPrices, widgets.motion_mode);\n      {\"type\":\"usd\",\"usd\": $price ? $price : 0.9}\n    )\n    "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PixverseTemplateNode": {"input": {"required": {"template": ["COMBO", {"multiselect": false, "options": ["Microwave", "Suit Swagger", "Anything, Robot", "Subject 3 Fever", "kiss kiss"]}]}}, "input_order": {"required": ["template"]}, "is_input_list": false, "output": ["PIXVERSE_TEMPLATE"], "output_is_list": [false], "output_name": ["pixverse_template"], "output_tooltips": [null], "output_matchtypes": null, "name": "PixverseTemplateNode", "display_name": "PixVerse Template", "description": "", "python_module": "comfy_api_nodes.nodes_pixverse", "category": "partner/video/PixVerse", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "QuiverTextToSVGNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the desired SVG output.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for SVG generation.", "options": [{"key": "arrow-1.1", "inputs": {"required": {"temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}, {"key": "arrow-1.1-max", "inputs": {"required": {"temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}, {"key": "arrow-preview", "inputs": {"required": {"temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"instructions": ["STRING", {"tooltip": "Additional style or formatting guidance.", "advanced": true, "default": "", "multiline": true}], "reference_images": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 4 reference images to guide the generation.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "ref_", "min": 0, "max": 4}}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["instructions", "reference_images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "QuiverTextToSVGNode", "display_name": "Quiver Text to SVG", "description": "Generate an SVG from a text prompt using Quiver AI.", "python_module": "comfy_api_nodes.nodes_quiver", "category": "partner/image/Quiver", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $contains(widgets.model, \"max\")\n                    ? {\"type\":\"usd\",\"usd\":0.3575}\n                    : $contains(widgets.model, \"preview\")\n                      ? {\"type\":\"usd\",\"usd\":0.429}\n                      : {\"type\":\"usd\",\"usd\":0.286}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "QuiverImageToSVGNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Input image to vectorize."}], "auto_crop": ["BOOLEAN", {"tooltip": "Automatically crop to the dominant subject.", "advanced": true, "default": false}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for SVG vectorization.", "options": [{"key": "arrow-1.1", "inputs": {"required": {"target_size": ["INT", {"tooltip": "Square resize target in pixels.", "advanced": true, "default": 1024, "min": 128, "max": 4096}], "temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}, {"key": "arrow-1.1-max", "inputs": {"required": {"target_size": ["INT", {"tooltip": "Square resize target in pixels.", "advanced": true, "default": 1024, "min": 128, "max": 4096}], "temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}, {"key": "arrow-preview", "inputs": {"required": {"target_size": ["INT", {"tooltip": "Square resize target in pixels.", "advanced": true, "default": 1024, "min": 128, "max": 4096}], "temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "auto_crop", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "QuiverImageToSVGNode", "display_name": "Quiver Image to SVG", "description": "Vectorize a raster image into SVG using Quiver AI.", "python_module": "comfy_api_nodes.nodes_quiver", "category": "partner/image/Quiver", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $contains(widgets.model, \"max\")\n                    ? {\"type\":\"usd\",\"usd\":0.3575}\n                    : $contains(widgets.model, \"preview\")\n                      ? {\"type\":\"usd\",\"usd\":0.429}\n                      : {\"type\":\"usd\",\"usd\":0.286}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftTextToImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1365x1024", "1024x1365", "1536x1024", "1024x1536", "1820x1024", "1024x1820", "1024x2048", "2048x1024", "1434x1024", "1024x1434", "1024x1280", "1280x1024", "1024x1707", "1707x1024"]}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_style": ["RECRAFT_V3_STYLE", {}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}], "recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "size", "n", "seed"], "optional": ["recraft_style", "negative_prompt", "recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftTextToImageNode", "display_name": "Recraft Text to Image", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": $round(0.04 * widgets.n, 2)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftImageToImageNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "strength": ["FLOAT", {"tooltip": "Defines the difference with the original image, should lie in [0, 1], where 0 means almost identical, and 1 means miserable similarity.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_style": ["RECRAFT_V3_STYLE", {}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}], "recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "prompt", "n", "strength", "seed"], "optional": ["recraft_style", "negative_prompt", "recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftImageToImageNode", "display_name": "Recraft Image to Image", "description": "Modify image based on prompt and strength.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": $round(0.04 * widgets.n, 2)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftImageInpaintingNode": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_style": ["RECRAFT_V3_STYLE", {}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "mask", "prompt", "n", "seed"], "optional": ["recraft_style", "negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftImageInpaintingNode", "display_name": "Recraft Image Inpainting", "description": "Modify image based on prompt and mask.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": $round(0.04 * widgets.n, 2)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftTextToVectorNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "substyle": ["COMBO", {"multiselect": false, "options": ["None", "bold_stroke", "chemistry", "colored_stencil", "contour_pop_art", "cosmics", "cutout", "depressive", "editorial", "emotional_flat", "engraving", "infographical", "line_art", "line_circuit", "linocut", "marker_outline", "mosaic", "naivector", "roundish_flat", "seamless", "segmented_colors", "sharp_contrast", "thin", "vector_photo", "vivid_shapes"]}], "size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1365x1024", "1024x1365", "1536x1024", "1024x1536", "1820x1024", "1024x1820", "1024x2048", "2048x1024", "1434x1024", "1024x1434", "1024x1280", "1280x1024", "1024x1707", "1707x1024"]}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}], "recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "substyle", "size", "n", "seed"], "optional": ["negative_prompt", "recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftTextToVectorNode", "display_name": "Recraft Text to Vector", "description": "Generates SVG synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": $round(0.08 * widgets.n, 2)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftVectorizeImageNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftVectorizeImageNode", "display_name": "Recraft Vectorize Image", "description": "Generates SVG synchronously from an input image.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.01}"}, "search_aliases": null, "essentials_category": "Image Tools", "has_intermediate_output": false}, "RecraftRemoveBackgroundNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "RecraftRemoveBackgroundNode", "display_name": "Recraft Remove Background", "description": "Remove background from image, and return processed image and mask.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.01}"}, "search_aliases": null, "essentials_category": "Image Tools", "has_intermediate_output": false}, "RecraftReplaceBackgroundNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_style": ["RECRAFT_V3_STYLE", {}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "prompt", "n", "seed"], "optional": ["recraft_style", "negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftReplaceBackgroundNode", "display_name": "Recraft Replace Background", "description": "Replace background on image, based on provided prompt.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.04}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftCrispUpscaleNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftCrispUpscaleNode", "display_name": "Recraft Crisp Upscale Image", "description": "Upscale image synchronously.\nEnhances a given raster image using \u2018crisp upscale\u2019 tool, increasing image resolution, making the image sharper and cleaner.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.004}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftCreativeUpscaleNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftCreativeUpscaleNode", "display_name": "Recraft Creative Upscale Image", "description": "Upscale image synchronously.\nEnhances a given raster image using \u2018creative upscale\u2019 tool, boosting resolution with a focus on refining small details and faces.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.25}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftStyleV3RealisticImage": {"input": {"required": {"substyle": ["COMBO", {"multiselect": false, "options": ["None", "b_and_w", "enterprise", "evening_light", "faded_nostalgia", "forest_life", "hard_flash", "hdr", "motion_blur", "mystic_naturalism", "natural_light", "natural_tones", "organic_calm", "real_life_glow", "retro_realism", "retro_snapshot", "studio_portrait", "urban_drama", "village_realism", "warm_folk"]}]}}, "input_order": {"required": ["substyle"]}, "is_input_list": false, "output": ["RECRAFT_V3_STYLE"], "output_is_list": [false], "output_name": ["recraft_style"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftStyleV3RealisticImage", "display_name": "Recraft Style - Realistic Image", "description": "Select realistic_image style and optional substyle.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftStyleV3DigitalIllustration": {"input": {"required": {"substyle": ["COMBO", {"multiselect": false, "options": ["None", "2d_art_poster", "2d_art_poster_2", "antiquarian", "bold_fantasy", "child_book", "child_books", "cover", "crosshatch", "digital_engraving", "engraving_color", "expressionism", "freehand_details", "grain", "grain_20", "graphic_intensity", "hand_drawn", "hand_drawn_outline", "handmade_3d", "hard_comics", "infantile_sketch", "long_shadow", "modern_folk", "multicolor", "neon_calm", "noir", "nostalgic_pastel", "outline_details", "pastel_gradient", "pastel_sketch", "pixel_art", "plastic", "pop_art", "pop_renaissance", "seamless", "street_art", "tablet_sketch", "urban_glow", "urban_sketching", "vanilla_dreams", "young_adult_book", "young_adult_book_2"]}]}}, "input_order": {"required": ["substyle"]}, "is_input_list": false, "output": ["RECRAFT_V3_STYLE"], "output_is_list": [false], "output_name": ["recraft_style"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftStyleV3DigitalIllustration", "display_name": "Recraft Style - Digital Illustration", "description": "Select realistic_image style and optional substyle.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftStyleV3LogoRaster": {"input": {"required": {"substyle": ["COMBO", {"multiselect": false, "options": ["emblem_graffiti", "emblem_pop_art", "emblem_punk", "emblem_stamp", "emblem_vintage"]}]}}, "input_order": {"required": ["substyle"]}, "is_input_list": false, "output": ["RECRAFT_V3_STYLE"], "output_is_list": [false], "output_name": ["recraft_style"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftStyleV3LogoRaster", "display_name": "Recraft Style - Logo Raster", "description": "Select realistic_image style and optional substyle.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftStyleV3InfiniteStyleLibrary": {"input": {"required": {"style_id": ["STRING", {"tooltip": "UUID of style from Infinite Style Library.", "default": "", "multiline": false}]}}, "input_order": {"required": ["style_id"]}, "is_input_list": false, "output": ["RECRAFT_V3_STYLE"], "output_is_list": [false], "output_name": ["recraft_style"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftStyleV3InfiniteStyleLibrary", "display_name": "Recraft Style - Infinite Style Library", "description": "Choose style based on preexisting UUID from Recraft's Infinite Style Library.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftCreateStyleNode": {"input": {"required": {"style": ["COMBO", {"tooltip": "The base style of the generated images.", "multiselect": false, "options": ["realistic_image", "digital_illustration"]}], "images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 1, "max": 5}}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["style", "images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["style_id"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftCreateStyleNode", "display_name": "Recraft Create Style", "description": "Create a custom style from reference images. Upload 1-5 images to use as style references. Total size of all images is limited to 5 MB.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.04}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftColorRGB": {"input": {"required": {"r": ["INT", {"tooltip": "Red value of color.", "default": 0, "min": 0, "max": 255}], "g": ["INT", {"tooltip": "Green value of color.", "default": 0, "min": 0, "max": 255}], "b": ["INT", {"tooltip": "Blue value of color.", "default": 0, "min": 0, "max": 255}]}, "optional": {"recraft_color": ["RECRAFT_COLOR", {}]}}, "input_order": {"required": ["r", "g", "b"], "optional": ["recraft_color"]}, "is_input_list": false, "output": ["RECRAFT_COLOR"], "output_is_list": [false], "output_name": ["recraft_color"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftColorRGB", "display_name": "Recraft Color RGB", "description": "Create Recraft Color by choosing specific RGB values.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftControls": {"input": {"required": {}, "optional": {"colors": ["RECRAFT_COLOR", {}], "background_color": ["RECRAFT_COLOR", {}]}}, "input_order": {"required": [], "optional": ["colors", "background_color"]}, "is_input_list": false, "output": ["RECRAFT_CONTROLS"], "output_is_list": [false], "output_name": ["recraft_controls"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftControls", "display_name": "Recraft Controls", "description": "Create Recraft Controls for customizing Recraft generation.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftV4TextToImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation. Maximum 10,000 characters.", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The model to use for generation.", "options": [{"key": "recraftv4", "inputs": {"required": {"size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1536x768", "768x1536", "1280x832", "832x1280", "1216x896", "896x1216", "1152x896", "896x1152", "832x1344", "1280x896", "896x1280", "1344x768", "768x1344"]}]}}}, {"key": "recraftv4_pro", "inputs": {"required": {"size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "2048x2048", "multiselect": false, "options": ["2048x2048", "3072x1536", "1536x3072", "2560x1664", "1664x2560", "2432x1792", "1792x2432", "2304x1792", "1792x2304", "1664x2688", "1434x1024", "1024x1434", "2560x1792", "1792x2560"]}]}}}]}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "negative_prompt", "model", "n", "seed"], "optional": ["recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftV4TextToImageNode", "display_name": "Recraft V4 Text to Image", "description": "Generates images using Recraft V4 or V4 Pro models.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                    $prices := {\"recraftv4\": 0.04, \"recraftv4_pro\": 0.25};\n                    {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.model) * widgets.n}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftV4TextToVectorNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation. Maximum 10,000 characters.", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The model to use for generation.", "options": [{"key": "recraftv4", "inputs": {"required": {"size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1536x768", "768x1536", "1280x832", "832x1280", "1216x896", "896x1216", "1152x896", "896x1152", "832x1344", "1280x896", "896x1280", "1344x768", "768x1344"]}]}}}, {"key": "recraftv4_pro", "inputs": {"required": {"size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "2048x2048", "multiselect": false, "options": ["2048x2048", "3072x1536", "1536x3072", "2560x1664", "1664x2560", "2432x1792", "1792x2432", "2304x1792", "1792x2304", "1664x2688", "1434x1024", "1024x1434", "2560x1792", "1792x2560"]}]}}}]}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "negative_prompt", "model", "n", "seed"], "optional": ["recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftV4TextToVectorNode", "display_name": "Recraft V4 Text to Vector", "description": "Generates SVG using Recraft V4 or V4 Pro models.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                    $prices := {\"recraftv4\": 0.08, \"recraftv4_pro\": 0.30};\n                    {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.model) * widgets.n}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReveImageCreateNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the desired image. Maximum 2560 characters.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model version to use for generation.", "options": [{"key": "reve-create@20250915", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["3:2", "16:9", "9:16", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}]}], "upscale": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Upscale the generated image. May add additional cost.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"upscale_factor": ["INT", {"tooltip": "Upscale factor (2x, 3x, or 4x).", "default": 2, "min": 2, "max": 4, "step": 1}]}}}]}], "remove_background": ["BOOLEAN", {"tooltip": "Remove the background from the generated image. May add additional cost.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "upscale", "remove_background", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReveImageCreateNode", "display_name": "Reve Image Create", "description": "Generate images from text descriptions using Reve.", "python_module": "comfy_api_nodes.nodes_reve", "category": "partner/image/Reve", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "upscale", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale.upscale_factor", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                    $factor := $lookup(widgets, \"upscale.upscale_factor\");\n                    $fmt := {\"approximate\": true, \"note\": \"(base)\"};\n                    widgets.upscale = \"enabled\" ? (\n                        $factor = 4 ? {\"type\": \"usd\", \"usd\": 0.0762, \"format\": $fmt}\n                        : $factor = 3 ? {\"type\": \"usd\", \"usd\": 0.0591, \"format\": $fmt}\n                        : {\"type\": \"usd\", \"usd\": 0.0457, \"format\": $fmt}\n                    ) : {\"type\": \"usd\", \"usd\": 0.03432, \"format\": $fmt}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReveImageEditNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The image to edit."}], "edit_instruction": ["STRING", {"tooltip": "Text description of how to edit the image. Maximum 2560 characters.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model version to use for editing.", "options": [{"key": "reve-edit@20250915", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["auto", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}, {"key": "reve-edit-fast@20251030", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["auto", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}]}], "upscale": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Upscale the generated image. May add additional cost.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"upscale_factor": ["INT", {"tooltip": "Upscale factor (2x, 3x, or 4x).", "default": 2, "min": 2, "max": 4, "step": 1}]}}}]}], "remove_background": ["BOOLEAN", {"tooltip": "Remove the background from the generated image. May add additional cost.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "edit_instruction", "model", "upscale", "remove_background", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReveImageEditNode", "display_name": "Reve Image Edit", "description": "Edit images using natural language instructions with Reve.", "python_module": "comfy_api_nodes.nodes_reve", "category": "partner/image/Reve", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale.upscale_factor", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                    $fmt := {\"approximate\": true, \"note\": \"(base)\"};\n                    $isFast := $contains(widgets.model, \"fast\");\n                    $enabled := widgets.upscale = \"enabled\";\n                    $factor := $lookup(widgets, \"upscale.upscale_factor\");\n                    $isFast\n                        ? {\"type\": \"usd\", \"usd\": 0.01001, \"format\": $fmt}\n                        : $enabled ? (\n                            $factor = 4 ? {\"type\": \"usd\", \"usd\": 0.0991, \"format\": $fmt}\n                            : $factor = 3 ? {\"type\": \"usd\", \"usd\": 0.0819, \"format\": $fmt}\n                            : {\"type\": \"usd\", \"usd\": 0.0686, \"format\": $fmt}\n                        ) : {\"type\": \"usd\", \"usd\": 0.0572, \"format\": $fmt}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReveImageRemixNode": {"input": {"required": {"reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image_", "min": 1, "max": 6}}], "prompt": ["STRING", {"tooltip": "Text description of the desired image. May include XML img tags to reference specific images by index, e.g. <img>0</img>, <img>1</img>, etc.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model version to use for remixing.", "options": [{"key": "reve-remix@20250915", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["auto", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}, {"key": "reve-remix-fast@20251030", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["auto", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}]}], "upscale": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Upscale the generated image. May add additional cost.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"upscale_factor": ["INT", {"tooltip": "Upscale factor (2x, 3x, or 4x).", "default": 2, "min": 2, "max": 4, "step": 1}]}}}]}], "remove_background": ["BOOLEAN", {"tooltip": "Remove the background from the generated image. May add additional cost.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["reference_images", "prompt", "model", "upscale", "remove_background", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReveImageRemixNode", "display_name": "Reve Image Remix", "description": "Combine reference images with text prompts to create new images using Reve.", "python_module": "comfy_api_nodes.nodes_reve", "category": "partner/image/Reve", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale.upscale_factor", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                    $fmt := {\"approximate\": true, \"note\": \"(base)\"};\n                    $isFast := $contains(widgets.model, \"fast\");\n                    $enabled := widgets.upscale = \"enabled\";\n                    $factor := $lookup(widgets, \"upscale.upscale_factor\");\n                    $isFast\n                        ? {\"type\": \"usd\", \"usd\": 0.01001, \"format\": $fmt}\n                        : $enabled ? (\n                            $factor = 4 ? {\"type\": \"usd\", \"usd\": 0.0991, \"format\": $fmt}\n                            : $factor = 3 ? {\"type\": \"usd\", \"usd\": 0.0819, \"format\": $fmt}\n                            : {\"type\": \"usd\", \"usd\": 0.0686, \"format\": $fmt}\n                        ) : {\"type\": \"usd\", \"usd\": 0.0572, \"format\": $fmt}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Regular": {"input": {"required": {"Images": ["IMAGE", {}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}], "Material_Type": ["COMBO", {"default": "PBR", "multiselect": false, "options": ["PBR", "Shaded"]}], "Polygon_count": ["COMBO", {"default": "18K-Quad", "multiselect": false, "options": ["4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "200K-Triangle"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["Images"], "optional": ["Seed", "Material_Type", "Polygon_count"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Regular", "display_name": "Rodin 3D Generate - Regular Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Detail": {"input": {"required": {"Images": ["IMAGE", {}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}], "Material_Type": ["COMBO", {"default": "PBR", "multiselect": false, "options": ["PBR", "Shaded"]}], "Polygon_count": ["COMBO", {"default": "18K-Quad", "multiselect": false, "options": ["4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "200K-Triangle"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["Images"], "optional": ["Seed", "Material_Type", "Polygon_count"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Detail", "display_name": "Rodin 3D Generate - Detail Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Smooth": {"input": {"required": {"Images": ["IMAGE", {}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}], "Material_Type": ["COMBO", {"default": "PBR", "multiselect": false, "options": ["PBR", "Shaded"]}], "Polygon_count": ["COMBO", {"default": "18K-Quad", "multiselect": false, "options": ["4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "200K-Triangle"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["Images"], "optional": ["Seed", "Material_Type", "Polygon_count"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Smooth", "display_name": "Rodin 3D Generate - Smooth Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Sketch": {"input": {"required": {"Images": ["IMAGE", {}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["Images"], "optional": ["Seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Sketch", "display_name": "Rodin 3D Generate - Sketch Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Gen2": {"input": {"required": {"Images": ["IMAGE", {}], "TAPose": ["BOOLEAN", {"advanced": true, "default": false}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}], "Material_Type": ["COMBO", {"default": "PBR", "multiselect": false, "options": ["PBR", "Shaded"]}], "Polygon_count": ["COMBO", {"default": "500K-Triangle", "multiselect": false, "options": ["4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "2K-Triangle", "20K-Triangle", "150K-Triangle", "500K-Triangle"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["Images", "TAPose"], "optional": ["Seed", "Material_Type", "Polygon_count"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Gen2", "display_name": "Rodin 3D Generate - Gen-2 Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Gen25_Image": {"input": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "1-5 images. The first image is used for materials when multi-view.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 1, "max": 5}}], "mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generation mode. Regular = balanced. Fast = 1K-20K faces for rapid prototyping. Extreme-High = 20K-2M faces with optional micro details.", "options": [{"key": "Regular", "inputs": {"required": {"tier": ["COMBO", {"tooltip": "Quality tier. Higher tiers produce higher-fidelity geometry.", "default": "Gen-2.5-High", "multiselect": false, "options": ["Gen-2.5-Low", "Gen-2.5-Medium", "Gen-2.5-High"]}], "polygon_count": ["COMBO", {"tooltip": "Preset face count. 'Default' uses the server's default for the selected tier.", "default": "Default", "multiselect": false, "options": ["Default", "4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "2K-Triangle", "20K-Triangle", "150K-Triangle", "500K-Triangle", "1M-Triangle"]}], "creative": ["BOOLEAN", {"tooltip": "Creative mode (Medium/High only). Enhances generative robustness.", "default": false}]}}}, {"key": "Fast", "inputs": {"required": {"tier": ["COMBO", {"default": "Gen-2.5-Low", "multiselect": false, "options": ["Gen-2.5-Extreme-Low", "Gen-2.5-Low", "Gen-2.5-Medium", "Gen-2.5-High"]}], "mesh_faces": ["INT", {"tooltip": "Mesh face count (1K-20K in Fast mode).", "default": 20000, "min": 1000, "max": 20000, "display": "number"}]}}}, {"key": "Extreme-High", "inputs": {"required": {"mesh_mode": ["COMBO", {"default": "Raw", "multiselect": false, "options": ["Raw", "Quad"]}], "mesh_faces": ["INT", {"tooltip": "Mesh face count. Raw mode: 20K-2M. Quad mode: keep under 200K (upstream may reject higher values).", "default": 1000000, "min": 20000, "max": 2000000, "display": "number"}], "is_micro": ["BOOLEAN", {"tooltip": "Enable micro detail (Extreme-High only).", "default": false}], "creative": ["BOOLEAN", {"tooltip": "Creative mode. Enhances generative robustness.", "default": false}]}}}]}], "material": ["COMBO", {"default": "Shaded", "multiselect": false, "options": ["PBR", "Shaded", "All", "None"]}], "geometry_file_format": ["COMBO", {"default": "glb", "multiselect": false, "options": ["glb", "fbx", "obj", "stl"]}]}, "optional": {"texture_mode": ["COMBO", {"tooltip": "Texture quality preset. 'Default' uses the server's default for the selected tier.", "default": "Default", "multiselect": false, "options": ["Default", "legacy", "extreme-low", "low", "medium", "high"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 65535, "control_after_generate": true, "display": "number"}], "TAPose": ["BOOLEAN", {"tooltip": "T/A pose for human-like models.", "advanced": true, "default": false}], "hd_texture": ["BOOLEAN", {"tooltip": "High-quality texture enhancement.", "advanced": true, "default": false}], "texture_delight": ["BOOLEAN", {"tooltip": "Remove baked lighting from textures.", "advanced": true, "default": false}], "use_original_alpha": ["BOOLEAN", {"tooltip": "Preserve image transparency.", "advanced": true, "default": false}], "addon_highpack": ["BOOLEAN", {"tooltip": "HighPack addon: 4K textures and ~16x faces in Quad mode.", "advanced": true, "default": false}], "bbox_width": ["INT", {"tooltip": "Bounding-box width (Y axis). Set to 0 with the others to skip bbox.", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "bbox_height": ["INT", {"tooltip": "Bounding-box height (Z axis).", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "bbox_length": ["INT", {"tooltip": "Bounding-box length (X axis).", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "height_cm": ["INT", {"tooltip": "Approximate model height in centimeters (0 to skip).", "advanced": true, "default": 0, "min": 0, "max": 10000, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["images", "mode", "material", "geometry_file_format"], "optional": ["texture_mode", "seed", "TAPose", "hd_texture", "texture_delight", "use_original_alpha", "addon_highpack", "bbox_width", "bbox_height", "bbox_length", "height_cm"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["FILE_3D"], "output_is_list": [false], "output_name": ["model_file"], "output_tooltips": [null], "output_matchtypes": null, "name": "Rodin3D_Gen25_Image", "display_name": "Rodin 3D Gen-2.5 - Image to 3D", "description": "Generate a 3D model from 1-5 reference images via Rodin Gen-2.5. Pick a mode (Fast / Regular / Extreme-High) to tune quality vs. cost.", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "addon_highpack", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n(\n  $baseCredits := widgets.mode = \"extreme-high\" ? 1.0 : 0.5;\n  $addonCredits := widgets.addon_highpack ? 1.0 : 0.0;\n  $total := ($baseCredits * 1.5) + ($addonCredits * 0.8);\n  {\"type\":\"usd\",\"usd\": $total}\n)\n"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Gen25_Text": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the 3D model.", "default": "", "multiline": true}], "mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generation mode. Regular = balanced. Fast = 1K-20K faces for rapid prototyping. Extreme-High = 20K-2M faces with optional micro details.", "options": [{"key": "Regular", "inputs": {"required": {"tier": ["COMBO", {"tooltip": "Quality tier. Higher tiers produce higher-fidelity geometry.", "default": "Gen-2.5-High", "multiselect": false, "options": ["Gen-2.5-Low", "Gen-2.5-Medium", "Gen-2.5-High"]}], "polygon_count": ["COMBO", {"tooltip": "Preset face count. 'Default' uses the server's default for the selected tier.", "default": "Default", "multiselect": false, "options": ["Default", "4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "2K-Triangle", "20K-Triangle", "150K-Triangle", "500K-Triangle", "1M-Triangle"]}], "creative": ["BOOLEAN", {"tooltip": "Creative mode (Medium/High only). Enhances generative robustness.", "default": false}]}}}, {"key": "Fast", "inputs": {"required": {"tier": ["COMBO", {"default": "Gen-2.5-Low", "multiselect": false, "options": ["Gen-2.5-Extreme-Low", "Gen-2.5-Low", "Gen-2.5-Medium", "Gen-2.5-High"]}], "mesh_faces": ["INT", {"tooltip": "Mesh face count (1K-20K in Fast mode).", "default": 20000, "min": 1000, "max": 20000, "display": "number"}]}}}, {"key": "Extreme-High", "inputs": {"required": {"mesh_mode": ["COMBO", {"default": "Raw", "multiselect": false, "options": ["Raw", "Quad"]}], "mesh_faces": ["INT", {"tooltip": "Mesh face count. Raw mode: 20K-2M. Quad mode: keep under 200K (upstream may reject higher values).", "default": 1000000, "min": 20000, "max": 2000000, "display": "number"}], "is_micro": ["BOOLEAN", {"tooltip": "Enable micro detail (Extreme-High only).", "default": false}], "creative": ["BOOLEAN", {"tooltip": "Creative mode. Enhances generative robustness.", "default": false}]}}}]}], "material": ["COMBO", {"default": "Shaded", "multiselect": false, "options": ["PBR", "Shaded", "All", "None"]}], "geometry_file_format": ["COMBO", {"default": "glb", "multiselect": false, "options": ["glb", "fbx", "obj", "stl"]}]}, "optional": {"texture_mode": ["COMBO", {"tooltip": "Texture quality preset. 'Default' uses the server's default for the selected tier.", "default": "Default", "multiselect": false, "options": ["Default", "legacy", "extreme-low", "low", "medium", "high"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 65535, "control_after_generate": true, "display": "number"}], "TAPose": ["BOOLEAN", {"tooltip": "T/A pose for human-like models.", "advanced": true, "default": false}], "hd_texture": ["BOOLEAN", {"tooltip": "High-quality texture enhancement.", "advanced": true, "default": false}], "texture_delight": ["BOOLEAN", {"tooltip": "Remove baked lighting from textures.", "advanced": true, "default": false}], "addon_highpack": ["BOOLEAN", {"tooltip": "HighPack addon: 4K textures and ~16x faces in Quad mode.", "advanced": true, "default": false}], "bbox_width": ["INT", {"tooltip": "Bounding-box width (Y axis). Set to 0 with the others to skip bbox.", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "bbox_height": ["INT", {"tooltip": "Bounding-box height (Z axis).", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "bbox_length": ["INT", {"tooltip": "Bounding-box length (X axis).", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "height_cm": ["INT", {"tooltip": "Approximate model height in centimeters (0 to skip).", "advanced": true, "default": 0, "min": 0, "max": 10000, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "mode", "material", "geometry_file_format"], "optional": ["texture_mode", "seed", "TAPose", "hd_texture", "texture_delight", "addon_highpack", "bbox_width", "bbox_height", "bbox_length", "height_cm"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["FILE_3D"], "output_is_list": [false], "output_name": ["model_file"], "output_tooltips": [null], "output_matchtypes": null, "name": "Rodin3D_Gen25_Text", "display_name": "Rodin 3D Gen-2.5 - Text to 3D", "description": "Generate a 3D model from a text prompt via Rodin Gen-2.5. Pick a mode (Fast / Regular / Extreme-High) to tune quality vs. cost.", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "addon_highpack", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n(\n  $baseCredits := widgets.mode = \"extreme-high\" ? 1.0 : 0.5;\n  $addonCredits := widgets.addon_highpack ? 1.0 : 0.0;\n  $total := ($baseCredits * 1.5) + ($addonCredits * 0.8);\n  {\"type\":\"usd\",\"usd\": $total}\n)\n"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayFirstLastFrameNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the generation", "default": "", "multiline": true}], "start_frame": ["IMAGE", {"tooltip": "Start frame to be used for the video"}], "end_frame": ["IMAGE", {"tooltip": "End frame to be used for the video. Supported for gen3a_turbo only."}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "ratio": ["COMBO", {"multiselect": false, "options": ["768:1280", "1280:768"]}], "seed": ["INT", {"tooltip": "Random seed for generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "start_frame", "end_frame", "duration", "ratio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayFirstLastFrameNode", "display_name": "Runway First-Last-Frame to Video", "description": "Upload first and last keyframes, draft a prompt, and generate a video. More complex transitions, such as cases where the Last frame is completely different from the First frame, may benefit from the longer 10s duration. This would give the generation more time to smoothly transition between the two inputs. Before diving in, review these best practices to ensure that your input selections will set your generation up for success: https://help.runwayml.com/hc/en-us/articles/34170748696595-Creating-with-Keyframes-on-Gen-3.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.0715 * widgets.duration}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayImageToVideoNodeGen3a": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the generation", "default": "", "multiline": true}], "start_frame": ["IMAGE", {"tooltip": "Start frame to be used for the video"}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "ratio": ["COMBO", {"multiselect": false, "options": ["768:1280", "1280:768"]}], "seed": ["INT", {"tooltip": "Random seed for generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "start_frame", "duration", "ratio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayImageToVideoNodeGen3a", "display_name": "Runway Image to Video (Gen3a Turbo)", "description": "Generate a video from a single starting frame using Gen3a Turbo model. Before diving in, review these best practices to ensure that your input selections will set your generation up for success: https://help.runwayml.com/hc/en-us/articles/33927968552339-Creating-with-Act-One-on-Gen-3-Alpha-and-Turbo.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.0715 * widgets.duration}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayImageToVideoNodeGen4": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the generation", "default": "", "multiline": true}], "start_frame": ["IMAGE", {"tooltip": "Start frame to be used for the video"}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "ratio": ["COMBO", {"multiselect": false, "options": ["1280:720", "720:1280", "1104:832", "832:1104", "960:960", "1584:672"]}], "seed": ["INT", {"tooltip": "Random seed for generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "start_frame", "duration", "ratio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayImageToVideoNodeGen4", "display_name": "Runway Image to Video (Gen4 Turbo)", "description": "Generate a video from a single starting frame using Gen4 Turbo model. Before diving in, review these best practices to ensure that your input selections will set your generation up for success: https://help.runwayml.com/hc/en-us/articles/37327109429011-Creating-with-Gen-4-Video.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.0715 * widgets.duration}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayTextToImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the generation", "default": "", "multiline": true}], "ratio": ["COMBO", {"multiselect": false, "options": ["1920:1080", "1080:1920", "1024:1024", "1360:768", "1080:1080", "1168:880", "1440:1080", "1080:1440", "1808:768", "2112:912"]}]}, "optional": {"reference_image": ["IMAGE", {"tooltip": "Optional reference image to guide the generation"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "ratio"], "optional": ["reference_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayTextToImageNode", "display_name": "Runway Text to Image", "description": "Generate an image from a text prompt using Runway's Gen 4 model. You can also include reference image to guide the generation.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/image/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.11}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SoniloVideoToMusic": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Input video to generate music from. Maximum duration: 6 minutes."}], "prompt": ["STRING", {"tooltip": "Optional text prompt to guide music generation. Leave empty for best quality - the model will fully analyze the video content.", "default": "", "multiline": true}], "seed": ["INT", {"tooltip": "Seed for reproducibility. Currently ignored by the Sonilo service but kept for graph consistency.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["video", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "SoniloVideoToMusic", "display_name": "Sonilo Video to Music", "description": "Generate music from video content using Sonilo's AI model. Analyzes the video and creates matching music.", "python_module": "comfy_api_nodes.nodes_sonilo", "category": "partner/audio/Sonilo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.009,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SoniloTextToMusic": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt describing the music to generate.", "default": "", "multiline": true}], "duration": ["INT", {"tooltip": "Target duration in seconds. Set to 0 to let the model infer the duration from the prompt. Maximum: 6 minutes.", "default": 0, "min": 0, "max": 360}], "seed": ["INT", {"tooltip": "Seed for reproducibility. Currently ignored by the Sonilo service but kept for graph consistency.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "duration", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "SoniloTextToMusic", "display_name": "Sonilo Text to Music", "description": "Generate music from a text prompt using Sonilo's AI model. Leave duration at 0 to let the model infer it from the prompt.", "python_module": "comfy_api_nodes.nodes_sonilo", "category": "partner/audio/Sonilo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  widgets.duration > 0\n                    ? {\"type\":\"usd\",\"usd\": 0.005 * widgets.duration}\n                    : {\"type\":\"usd\",\"usd\": 0.005, \"format\":{\"suffix\":\"/second\"}}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIVideoSora2": {"input": {"required": {"model": ["COMBO", {"default": "sora-2", "multiselect": false, "options": ["sora-2", "sora-2-pro"]}], "prompt": ["STRING", {"tooltip": "Guiding text; may be empty if an input image is present.", "default": "", "multiline": true}], "size": ["COMBO", {"default": "1280x720", "multiselect": false, "options": ["720x1280", "1280x720", "1024x1792", "1792x1024"]}], "duration": ["COMBO", {"default": 8, "multiselect": false, "options": [4, 8, 12]}]}, "optional": {"image": ["IMAGE", {}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt", "size", "duration"], "optional": ["image", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIVideoSora2", "display_name": "OpenAI Sora - Video (DEPRECATED)", "description": "OpenAI video and audio generation.\n\nDEPRECATION NOTICE: OpenAI will stop serving the Sora v2 API in September 2026. This node will be removed from ComfyUI at that time.", "python_module": "comfy_api_nodes.nodes_sora", "category": "partner/video/Sora", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "size", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $m := widgets.model;\n                  $size := widgets.size;\n                  $dur := widgets.duration;\n                  $isPro := $contains($m, \"sora-2-pro\");\n                  $isSora2 := $contains($m, \"sora-2\");\n                  $isProSize := ($size = \"1024x1792\" or $size = \"1792x1024\");\n                  $perSec :=\n                    $isPro ? ($isProSize ? 0.5 : 0.3) :\n                    $isSora2 ? 0.1 :\n                    ($isProSize ? 0.5 : 0.1);\n                  {\"type\":\"usd\",\"usd\": $round($perSec * $dur, 2)}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityStableImageUltraNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defineselements, colors, and subjects will lead to better results. To control the weight of a given word use the format `(word:weight)`,where `word` is the word you'd like to control the weight of and `weight`is a value between 0 and 1. For example: `The sky was a crisp (blue:0.3) and (green:0.8)`would convey a sky that was blue and green, but more green than blue.", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of generated image.", "default": "1:1", "multiselect": false, "options": ["1:1", "16:9", "9:16", "3:2", "2:3", "5:4", "4:5", "21:9", "9:21"]}], "style_preset": ["COMBO", {"tooltip": "Optional desired style of generated image.", "advanced": true, "multiselect": false, "options": ["None", "3d-model", "analog-film", "anime", "cinematic", "comic-book", "digital-art", "enhance", "fantasy-art", "isometric", "line-art", "low-poly", "modeling-compound", "neon-punk", "origami", "photographic", "pixel-art", "tile-texture"]}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"image": ["IMAGE", {}], "negative_prompt": ["STRING", {"tooltip": "A blurb of text describing what you do not wish to see in the output image. This is an advanced feature.", "advanced": true, "default": "", "forceInput": true, "multiline": false}], "image_denoise": ["FLOAT", {"tooltip": "Denoise of input image; 0.0 yields image identical to input, 1.0 is as if no image was provided at all.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "style_preset", "seed"], "optional": ["image", "negative_prompt", "image_denoise"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityStableImageUltraNode", "display_name": "Stability AI Stable Image Ultra", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.08}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityStableImageSD_3_5Node": {"input": {"required": {"prompt": ["STRING", {"tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defines elements, colors, and subjects will lead to better results.", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["sd3.5-large", "sd3.5-medium"]}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of generated image.", "default": "1:1", "multiselect": false, "options": ["1:1", "16:9", "9:16", "3:2", "2:3", "5:4", "4:5", "21:9", "9:21"]}], "style_preset": ["COMBO", {"tooltip": "Optional desired style of generated image.", "advanced": true, "multiselect": false, "options": ["None", "3d-model", "analog-film", "anime", "cinematic", "comic-book", "digital-art", "enhance", "fantasy-art", "isometric", "line-art", "low-poly", "modeling-compound", "neon-punk", "origami", "photographic", "pixel-art", "tile-texture"]}], "cfg_scale": ["FLOAT", {"tooltip": "How strictly the diffusion process adheres to the prompt text (higher values keep your image closer to your prompt)", "default": 4.0, "min": 1.0, "max": 10.0, "step": 0.1}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"image": ["IMAGE", {}], "negative_prompt": ["STRING", {"tooltip": "Keywords of what you do not wish to see in the output image. This is an advanced feature.", "advanced": true, "default": "", "forceInput": true, "multiline": false}], "image_denoise": ["FLOAT", {"tooltip": "Denoise of input image; 0.0 yields image identical to input, 1.0 is as if no image was provided at all.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "model", "aspect_ratio", "style_preset", "cfg_scale", "seed"], "optional": ["image", "negative_prompt", "image_denoise"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityStableImageSD_3_5Node", "display_name": "Stability AI Stable Diffusion 3.5 Image", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $contains(widgets.model,\"large\")\n                    ? {\"type\":\"usd\",\"usd\":0.065}\n                    : {\"type\":\"usd\",\"usd\":0.035}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityUpscaleConservativeNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defines elements, colors, and subjects will lead to better results.", "default": "", "multiline": true}], "creativity": ["FLOAT", {"tooltip": "Controls the likelihood of creating additional details not heavily conditioned by the init image.", "default": 0.35, "min": 0.2, "max": 0.5, "step": 0.01}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Keywords of what you do not wish to see in the output image. This is an advanced feature.", "advanced": true, "default": "", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "prompt", "creativity", "seed"], "optional": ["negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityUpscaleConservativeNode", "display_name": "Stability AI Upscale Conservative", "description": "Upscale image with minimal alterations to 4K resolution.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityUpscaleCreativeNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defines elements, colors, and subjects will lead to better results.", "default": "", "multiline": true}], "creativity": ["FLOAT", {"tooltip": "Controls the likelihood of creating additional details not heavily conditioned by the init image.", "default": 0.3, "min": 0.1, "max": 0.5, "step": 0.01}], "style_preset": ["COMBO", {"tooltip": "Optional desired style of generated image.", "advanced": true, "multiselect": false, "options": ["None", "3d-model", "analog-film", "anime", "cinematic", "comic-book", "digital-art", "enhance", "fantasy-art", "isometric", "line-art", "low-poly", "modeling-compound", "neon-punk", "origami", "photographic", "pixel-art", "tile-texture"]}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Keywords of what you do not wish to see in the output image. This is an advanced feature.", "advanced": true, "default": "", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "prompt", "creativity", "style_preset", "seed"], "optional": ["negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityUpscaleCreativeNode", "display_name": "Stability AI Upscale Creative", "description": "Upscale image with minimal alterations to 4K resolution.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.6}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityUpscaleFastNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityUpscaleFastNode", "display_name": "Stability AI Upscale Fast", "description": "Quickly upscales an image via Stability API call to 4x its original size; intended for upscaling low-quality/compressed images.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.02}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityTextToAudio": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["stable-audio-2.5"]}], "prompt": ["STRING", {"default": "", "multiline": true}]}, "optional": {"duration": ["INT", {"tooltip": "Controls the duration in seconds of the generated audio.", "default": 190, "min": 1, "max": 190, "step": 1}], "seed": ["INT", {"tooltip": "The random seed used for generation.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}], "steps": ["INT", {"tooltip": "Controls the number of sampling steps.", "advanced": true, "default": 8, "min": 4, "max": 8, "step": 1}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt"], "optional": ["duration", "seed", "steps"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityTextToAudio", "display_name": "Stability AI Text To Audio", "description": "Generates high-quality music and sound effects from text descriptions.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/audio/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": "Audio", "has_intermediate_output": false}, "StabilityAudioToAudio": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["stable-audio-2.5"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "audio": ["AUDIO", {"tooltip": "Audio must be between 6 and 190 seconds long."}]}, "optional": {"duration": ["INT", {"tooltip": "Controls the duration in seconds of the generated audio.", "default": 190, "min": 1, "max": 190, "step": 1}], "seed": ["INT", {"tooltip": "The random seed used for generation.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}], "steps": ["INT", {"tooltip": "Controls the number of sampling steps.", "advanced": true, "default": 8, "min": 4, "max": 8, "step": 1}], "strength": ["FLOAT", {"tooltip": "Parameter controls how much influence the audio parameter has on the generated audio.", "default": 1, "min": 0.01, "max": 1.0, "step": 0.01, "display": "slider"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt", "audio"], "optional": ["duration", "seed", "steps", "strength"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityAudioToAudio", "display_name": "Stability AI Audio To Audio", "description": "Transforms existing audio samples into new high-quality compositions using text instructions.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/audio/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityAudioInpaint": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["stable-audio-2.5"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "audio": ["AUDIO", {"tooltip": "Audio must be between 6 and 190 seconds long."}]}, "optional": {"duration": ["INT", {"tooltip": "Controls the duration in seconds of the generated audio.", "default": 190, "min": 1, "max": 190, "step": 1}], "seed": ["INT", {"tooltip": "The random seed used for generation.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}], "steps": ["INT", {"tooltip": "Controls the number of sampling steps.", "advanced": true, "default": 8, "min": 4, "max": 8, "step": 1}], "mask_start": ["INT", {"advanced": true, "default": 30, "min": 0, "max": 190, "step": 1}], "mask_end": ["INT", {"advanced": true, "default": 190, "min": 0, "max": 190, "step": 1}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt", "audio"], "optional": ["duration", "seed", "steps", "mask_start", "mask_end"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityAudioInpaint", "display_name": "Stability AI Audio Inpaint", "description": "Transforms part of existing audio sample using text instructions.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/audio/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TopazImageEnhance": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["Reimagine"]}], "image": ["IMAGE", {}]}, "optional": {"prompt": ["STRING", {"tooltip": "Optional text prompt for creative upscaling guidance.", "default": "", "multiline": true}], "subject_detection": ["COMBO", {"advanced": true, "multiselect": false, "options": ["All", "Foreground", "Background"]}], "face_enhancement": ["BOOLEAN", {"tooltip": "Enhance faces (if present) during processing.", "advanced": true, "default": true}], "face_enhancement_creativity": ["FLOAT", {"tooltip": "Set the creativity level for face enhancement.", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}], "face_enhancement_strength": ["FLOAT", {"tooltip": "Controls how sharp enhanced faces are relative to the background.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}], "crop_to_fill": ["BOOLEAN", {"tooltip": "By default, the image is letterboxed when the output aspect ratio differs. Enable to crop the image to fill the output dimensions.", "advanced": true, "default": false}], "output_width": ["INT", {"tooltip": "Zero value means to calculate automatically (usually it will be original size or output_height if specified).", "advanced": true, "default": 0, "min": 0, "max": 32000, "step": 1, "display": "number"}], "output_height": ["INT", {"tooltip": "Zero value means to output in the same height as original or output width.", "advanced": true, "default": 0, "min": 0, "max": 32000, "step": 1, "display": "number"}], "creativity": ["INT", {"default": 3, "min": 1, "max": 9, "step": 1, "display": "slider"}], "face_preservation": ["BOOLEAN", {"tooltip": "Preserve subjects' facial identity.", "advanced": true, "default": true}], "color_preservation": ["BOOLEAN", {"tooltip": "Preserve the original colors.", "advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "image"], "optional": ["prompt", "subject_detection", "face_enhancement", "face_enhancement_creativity", "face_enhancement_strength", "crop_to_fill", "output_width", "output_height", "creativity", "face_preservation", "color_preservation"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "TopazImageEnhance", "display_name": "Topaz Image Enhance", "description": "Industry-standard upscaling and image enhancement.", "python_module": "comfy_api_nodes.nodes_topaz", "category": "partner/image/Topaz", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TopazVideoEnhance": {"input": {"required": {"video": ["VIDEO", {}], "upscaler_enabled": ["BOOLEAN", {"default": true}], "upscaler_model": ["COMBO", {"multiselect": false, "options": ["Starlight (Astra) Fast", "Starlight (Astra) Creative", "Starlight Precise 2.5"]}], "upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}]}, "optional": {"upscaler_creativity": ["COMBO", {"tooltip": "Creativity level (applies only to Starlight (Astra) Creative).", "advanced": true, "default": "low", "multiselect": false, "options": ["low", "middle", "high"]}], "interpolation_enabled": ["BOOLEAN", {"default": false}], "interpolation_model": ["COMBO", {"advanced": true, "default": "apo-8", "multiselect": false, "options": ["apo-8"]}], "interpolation_slowmo": ["INT", {"tooltip": "Slow-motion factor applied to the input video. For example, 2 makes the output twice as slow and doubles the duration.", "advanced": true, "default": 1, "min": 1, "max": 16, "display": "number"}], "interpolation_frame_rate": ["INT", {"tooltip": "Output frame rate.", "default": 60, "min": 15, "max": 240, "display": "number"}], "interpolation_duplicate": ["BOOLEAN", {"tooltip": "Analyze the input for duplicate frames and remove them.", "advanced": true, "default": false}], "interpolation_duplicate_threshold": ["FLOAT", {"tooltip": "Detection sensitivity for duplicate frames.", "advanced": true, "default": 0.01, "min": 0.001, "max": 0.1, "step": 0.001, "display": "number"}], "dynamic_compression_level": ["COMBO", {"tooltip": "CQP level.", "advanced": true, "default": "Low", "multiselect": false, "options": ["Low", "Mid", "High"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["video", "upscaler_enabled", "upscaler_model", "upscaler_resolution"], "optional": ["upscaler_creativity", "interpolation_enabled", "interpolation_model", "interpolation_slowmo", "interpolation_frame_rate", "interpolation_duplicate", "interpolation_duplicate_threshold", "dynamic_compression_level"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "TopazVideoEnhance", "display_name": "Topaz Video Enhance (Legacy)", "description": "Breathe new life into video with powerful upscaling and recovery technology.", "python_module": "comfy_api_nodes.nodes_topaz", "category": "partner/video/Topaz", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TopazVideoEnhanceV2": {"input": {"required": {"video": ["VIDEO", {}], "upscaler_model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Astra 2", "inputs": {"required": {"upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}], "creativity": ["FLOAT", {"tooltip": "Creative strength of the upscale.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.1, "display": "slider"}], "prompt": ["STRING", {"tooltip": "Optional descriptive (not instructive) scene prompt.Capping input at 450 frames (~15s @ 30fps) when set.", "default": "", "multiline": true}], "sharp": ["FLOAT", {"tooltip": "Pre-enhance sharpness: 0.0=Gaussian blur, 0.5=passthrough (default), 1.0=USM sharpening.", "advanced": true, "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "realism": ["FLOAT", {"tooltip": "Pulls output toward photographic realism.Leave at 0 for the model default.", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}]}}}, {"key": "Starlight (Astra) Fast", "inputs": {"required": {"upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}]}}}, {"key": "Starlight (Astra) Creative", "inputs": {"required": {"upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}], "creativity": ["COMBO", {"tooltip": "Creative strength of the upscale.", "default": "low", "multiselect": false, "options": ["low", "middle", "high"]}]}}}, {"key": "Starlight Precise 2.5", "inputs": {"required": {"upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}]}}}, {"key": "Disabled", "inputs": {"required": {}}}]}], "interpolation_model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Disabled", "inputs": {"required": {}}}, {"key": "apo-8", "inputs": {"required": {"interpolation_frame_rate": ["INT", {"tooltip": "Output frame rate.", "default": 60, "min": 15, "max": 240, "display": "number"}], "interpolation_slowmo": ["INT", {"tooltip": "Slow-motion factor applied to the input video. For example, 2 makes the output twice as slow and doubles the duration.", "advanced": true, "default": 1, "min": 1, "max": 16, "display": "number"}], "interpolation_duplicate": ["BOOLEAN", {"tooltip": "Analyze the input for duplicate frames and remove them.", "advanced": true, "default": false}], "interpolation_duplicate_threshold": ["FLOAT", {"tooltip": "Detection sensitivity for duplicate frames.", "advanced": true, "default": 0.01, "min": 0.001, "max": 0.1, "step": 0.001, "display": "number"}]}}}]}]}, "optional": {"dynamic_compression_level": ["COMBO", {"tooltip": "CQP level.", "default": "Low", "multiselect": false, "options": ["Low", "Mid", "High"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["video", "upscaler_model", "interpolation_model"], "optional": ["dynamic_compression_level"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "TopazVideoEnhanceV2", "display_name": "Topaz Video Enhance", "description": "Breathe new life into video with powerful upscaling and recovery technology.", "python_module": "comfy_api_nodes.nodes_topaz", "category": "partner/video/Topaz", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "upscaler_model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscaler_model.upscaler_resolution", "type": "COMBO"}, {"name": "interpolation_model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $model := $lookup(widgets, \"upscaler_model\");\n                  $res := $lookup(widgets, \"upscaler_model.upscaler_resolution\");\n                  $interp := $lookup(widgets, \"interpolation_model\");\n                  $is4k := $contains($res, \"4k\");\n                  $hasInterp := $interp != \"disabled\";\n                  $rates := {\n                    \"starlight (astra) fast\":     {\"hd\": 0.43, \"uhd\": 0.85},\n                    \"starlight precise 2.5\":      {\"hd\": 0.70, \"uhd\": 1.54},\n                    \"astra 2\":                    {\"hd\": 1.72, \"uhd\": 2.85},\n                    \"starlight (astra) creative\": {\"hd\": 2.25, \"uhd\": 3.99}\n                  };\n                  $surcharge := $is4k ? 0.28 : 0.14;\n                  $entry := $lookup($rates, $model);\n                  $base := $is4k ? $entry.uhd : $entry.hd;\n                  $hi := $base + ($hasInterp ? $surcharge : 0);\n                  $model = \"disabled\"\n                    ? {\"type\":\"text\",\"text\":\"Interpolation only\"}\n                    : ($hasInterp\n                        ? {\"type\":\"text\",\"text\":\"~\" & $string($base) & \"\u2013\" & $string($hi) & \" credits/src frame\"}\n                        : {\"type\":\"text\",\"text\":\"~\" & $string($base) & \" credits/src frame\"})\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoTextToModelNode": {"input": {"required": {"prompt": ["STRING", {"multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"multiline": true}], "model_version": ["COMBO", {"default": "v2.5-20250123", "multiselect": false, "options": ["v3.1-20260211", "v3.0-20250812", "v2.5-20250123", "v2.0-20240919", "v1.4-20240625"]}], "style": ["COMBO", {"default": "None", "multiselect": false, "options": ["person:person2cartoon", "animal:venom", "object:clay", "object:steampunk", "object:christmas", "object:barbie", "gold", "ancient_bronze", "None"]}], "texture": ["BOOLEAN", {"default": true}], "pbr": ["BOOLEAN", {"default": true}], "image_seed": ["INT", {"advanced": true, "default": 42}], "model_seed": ["INT", {"advanced": true, "default": 42}], "texture_seed": ["INT", {"advanced": true, "default": 42}], "texture_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "face_limit": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 2000000}], "quad": ["BOOLEAN", {"advanced": true, "default": false}], "geometry_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["prompt"], "optional": ["negative_prompt", "model_version", "style", "texture", "pbr", "image_seed", "model_seed", "texture_seed", "texture_quality", "face_limit", "quad", "geometry_quality"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoTextToModelNode", "display_name": "Tripo: Text to Model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model_version", "type": "COMBO"}, {"name": "texture", "type": "BOOLEAN"}, {"name": "pbr", "type": "BOOLEAN"}, {"name": "quad", "type": "BOOLEAN"}, {"name": "texture_quality", "type": "COMBO"}, {"name": "geometry_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $isV14 := $contains(widgets.model_version,\"v1.4\");\n                  $isV3OrLater := $contains(widgets.model_version,\"v3.\");\n                  $withTexture := widgets.texture or widgets.pbr;\n                  $isHdTexture := (widgets.texture_quality = \"detailed\");\n                  $isDetailedGeometry := (widgets.geometry_quality = \"detailed\");\n                  $credits := $isV14 ? 20 : (\n                    ($withTexture ? 20 : 10)\n                    + (widgets.quad ? 5 : 0)\n                    + ($isHdTexture ? 10 : 0)\n                    + (($isDetailedGeometry and $isV3OrLater) ? 20 : 0)\n                  );\n                  {\"type\":\"usd\",\"usd\": $round($credits * 0.01, 2), \"format\": {\"approximate\": true}}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoImageToModelNode": {"input": {"required": {"image": ["IMAGE", {}]}, "optional": {"model_version": ["COMBO", {"tooltip": "The model version to use for generation", "multiselect": false, "options": ["v3.1-20260211", "v3.0-20250812", "v2.5-20250123", "v2.0-20240919", "v1.4-20240625"]}], "style": ["COMBO", {"default": "None", "multiselect": false, "options": ["person:person2cartoon", "animal:venom", "object:clay", "object:steampunk", "object:christmas", "object:barbie", "gold", "ancient_bronze", "None"]}], "texture": ["BOOLEAN", {"default": true}], "pbr": ["BOOLEAN", {"default": true}], "model_seed": ["INT", {"advanced": true, "default": 42}], "orientation": ["COMBO", {"advanced": true, "default": "default", "multiselect": false, "options": ["align_image", "default"]}], "texture_seed": ["INT", {"advanced": true, "default": 42}], "texture_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"advanced": true, "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "face_limit": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 500000}], "quad": ["BOOLEAN", {"advanced": true, "default": false}], "geometry_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["image"], "optional": ["model_version", "style", "texture", "pbr", "model_seed", "orientation", "texture_seed", "texture_quality", "texture_alignment", "face_limit", "quad", "geometry_quality"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoImageToModelNode", "display_name": "Tripo: Image to Model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model_version", "type": "COMBO"}, {"name": "texture", "type": "BOOLEAN"}, {"name": "pbr", "type": "BOOLEAN"}, {"name": "quad", "type": "BOOLEAN"}, {"name": "texture_quality", "type": "COMBO"}, {"name": "geometry_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $isV14 := $contains(widgets.model_version,\"v1.4\");\n                  $isV3OrLater := $contains(widgets.model_version,\"v3.\");\n                  $withTexture := widgets.texture or widgets.pbr;\n                  $isHdTexture := (widgets.texture_quality = \"detailed\");\n                  $isDetailedGeometry := (widgets.geometry_quality = \"detailed\");\n                  $credits := $isV14 ? 30 : (\n                    ($withTexture ? 30 : 20)\n                    + (widgets.quad ? 5 : 0)\n                    + ($isHdTexture ? 10 : 0)\n                    + (($isDetailedGeometry and $isV3OrLater) ? 20 : 0)\n                  );\n                  {\"type\":\"usd\",\"usd\": $round($credits * 0.01, 2), \"format\": {\"approximate\": true}}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoMultiviewToModelNode": {"input": {"required": {"image": ["IMAGE", {}]}, "optional": {"image_left": ["IMAGE", {}], "image_back": ["IMAGE", {}], "image_right": ["IMAGE", {}], "model_version": ["COMBO", {"tooltip": "The model version to use for generation", "multiselect": false, "options": ["v3.1-20260211", "v3.0-20250812", "v2.5-20250123", "v2.0-20240919", "v1.4-20240625"]}], "orientation": ["COMBO", {"advanced": true, "default": "default", "multiselect": false, "options": ["align_image", "default"]}], "texture": ["BOOLEAN", {"default": true}], "pbr": ["BOOLEAN", {"default": true}], "model_seed": ["INT", {"advanced": true, "default": 42}], "texture_seed": ["INT", {"advanced": true, "default": 42}], "texture_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"advanced": true, "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "face_limit": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 500000}], "quad": ["BOOLEAN", {"tooltip": "This parameter is deprecated and does nothing.", "advanced": true, "default": false}], "geometry_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["image"], "optional": ["image_left", "image_back", "image_right", "model_version", "orientation", "texture", "pbr", "model_seed", "texture_seed", "texture_quality", "texture_alignment", "face_limit", "quad", "geometry_quality"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoMultiviewToModelNode", "display_name": "Tripo: Multiview to Model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model_version", "type": "COMBO"}, {"name": "texture", "type": "BOOLEAN"}, {"name": "pbr", "type": "BOOLEAN"}, {"name": "texture_quality", "type": "COMBO"}, {"name": "geometry_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $isV14 := $contains(widgets.model_version,\"v1.4\");\n                  $isV3OrLater := $contains(widgets.model_version,\"v3.\");\n                  $withTexture := widgets.texture or widgets.pbr;\n                  $isHdTexture := (widgets.texture_quality = \"detailed\");\n                  $isDetailedGeometry := (widgets.geometry_quality = \"detailed\");\n                  $credits := $isV14 ? 30 : (\n                    ($withTexture ? 30 : 20)\n                    + ($isHdTexture ? 10 : 0)\n                    + (($isDetailedGeometry and $isV3OrLater) ? 20 : 0)\n                  );\n                  {\"type\":\"usd\",\"usd\": $round($credits * 0.01, 2), \"format\": {\"approximate\": true}}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoP1TextToModelNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Up to 1024 characters.", "multiline": true}], "output_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "\"Geometry only\" returns an untextured mesh. \"Textured\" adds color/PBR maps.", "options": [{"key": "Geometry only", "inputs": {"required": {}}}, {"key": "Textured", "inputs": {"required": {"pbr": ["BOOLEAN", {"tooltip": "Include PBR maps. When on, base texture is forced on too.", "default": true}], "texture_quality": ["COMBO", {"default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_seed": ["INT", {"advanced": true, "default": 42}]}}}]}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Up to 255 characters.", "multiline": true}], "image_seed": ["INT", {"advanced": true, "default": 42}], "face_limit": ["INT", {"tooltip": "Target face count, 48-20000. -1 lets Tripo pick adaptively.", "advanced": true, "default": -1, "min": -1, "max": 20000}], "model_seed": ["INT", {"advanced": true, "default": 42}], "auto_size": ["BOOLEAN", {"tooltip": "Scale the output to approximate real-world meters.", "advanced": true, "default": false}], "export_uv": ["BOOLEAN", {"tooltip": "UV unwrap during generation. Turn off for faster geometry-only runs.", "advanced": true, "default": true}], "compress_geometry": ["BOOLEAN", {"tooltip": "Apply geometry-based compression. Decompress before editing.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "output_mode"], "optional": ["negative_prompt", "image_seed", "face_limit", "model_seed", "auto_size", "export_uv", "compress_geometry"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoP1TextToModelNode", "display_name": "Tripo P1: Text to Model", "description": "Tripo P1 text-to-3D. Optimized for low-poly, game-ready meshes with stable topology.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "output_mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "output_mode.texture_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "(  $mode := widgets.output_mode;  $detailed := $lookup(widgets, \"output_mode.texture_quality\") = \"detailed\";  $credits := $mode = \"geometry only\" ? 30 : ($detailed ? 50 : 40);  {\"type\":\"usd\",\"usd\": $credits * 0.01, \"format\": {\"approximate\": true}})"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoP1ImageToModelNode": {"input": {"required": {"image": ["IMAGE", {}], "output_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "\"Geometry only\" returns an untextured mesh. \"Textured\" adds color/PBR maps.", "options": [{"key": "Geometry only", "inputs": {"required": {}}}, {"key": "Textured", "inputs": {"required": {"pbr": ["BOOLEAN", {"tooltip": "Include PBR maps. When on, base texture is forced on too.", "default": true}], "texture_quality": ["COMBO", {"default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"tooltip": "Prioritize visual fidelity to the source image, or alignment to the mesh geometry.", "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "orientation": ["COMBO", {"tooltip": "Rotate the output to match the source image. Only applies when textured.", "default": "default", "multiselect": false, "options": ["default", "align_image"]}], "texture_seed": ["INT", {"advanced": true, "default": 42}]}}}]}]}, "optional": {"enable_image_autofix": ["BOOLEAN", {"tooltip": "Pre-process the input image for better generation quality.", "advanced": true, "default": false}], "face_limit": ["INT", {"tooltip": "Target face count, 48-20000. -1 lets Tripo pick adaptively.", "advanced": true, "default": -1, "min": -1, "max": 20000}], "model_seed": ["INT", {"advanced": true, "default": 42}], "auto_size": ["BOOLEAN", {"tooltip": "Scale the output to approximate real-world meters.", "advanced": true, "default": false}], "export_uv": ["BOOLEAN", {"tooltip": "UV unwrap during generation. Turn off for faster geometry-only runs.", "advanced": true, "default": true}], "compress_geometry": ["BOOLEAN", {"tooltip": "Apply geometry-based compression. Decompress before editing.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "output_mode"], "optional": ["enable_image_autofix", "face_limit", "model_seed", "auto_size", "export_uv", "compress_geometry"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoP1ImageToModelNode", "display_name": "Tripo P1: Image to Model", "description": "Tripo P1 image-to-3D. Optimized for low-poly, game-ready meshes.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "output_mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "output_mode.texture_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "(  $mode := widgets.output_mode;  $detailed := $lookup(widgets, \"output_mode.texture_quality\") = \"detailed\";  $credits := $mode = \"geometry only\" ? 40 : ($detailed ? 60 : 50);  {\"type\":\"usd\",\"usd\": $credits * 0.01, \"format\": {\"approximate\": true}})"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoP1MultiviewToModelNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Front view (0\u00b0). Required."}], "output_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "\"Geometry only\" returns an untextured mesh. \"Textured\" adds color/PBR maps.", "options": [{"key": "Geometry only", "inputs": {"required": {}}}, {"key": "Textured", "inputs": {"required": {"pbr": ["BOOLEAN", {"tooltip": "Include PBR maps. When on, base texture is forced on too.", "default": true}], "texture_quality": ["COMBO", {"default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"tooltip": "Prioritize visual fidelity to the source image, or alignment to the mesh geometry.", "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "orientation": ["COMBO", {"tooltip": "Rotate the output to match the source image. Only applies when textured.", "default": "default", "multiselect": false, "options": ["default", "align_image"]}], "texture_seed": ["INT", {"advanced": true, "default": 42}]}}}]}]}, "optional": {"image_left": ["IMAGE", {"tooltip": "Left view (90\u00b0), i.e. the subject's left side."}], "image_back": ["IMAGE", {"tooltip": "Back view (180\u00b0)."}], "image_right": ["IMAGE", {"tooltip": "Right view (270\u00b0), i.e. the subject's right side."}], "face_limit": ["INT", {"tooltip": "Target face count, 48-20000. -1 lets Tripo pick adaptively.", "advanced": true, "default": -1, "min": -1, "max": 20000}], "model_seed": ["INT", {"advanced": true, "default": 42}], "auto_size": ["BOOLEAN", {"tooltip": "Scale the output to approximate real-world meters.", "advanced": true, "default": false}], "export_uv": ["BOOLEAN", {"tooltip": "UV unwrap during generation. Turn off for faster geometry-only runs.", "advanced": true, "default": true}], "compress_geometry": ["BOOLEAN", {"tooltip": "Apply geometry-based compression. Decompress before editing.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "output_mode"], "optional": ["image_left", "image_back", "image_right", "face_limit", "model_seed", "auto_size", "export_uv", "compress_geometry"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoP1MultiviewToModelNode", "display_name": "Tripo P1: Multiview to Model", "description": "Tripo P1 multiview-to-3D from 2-4 reference images in [front, left, back, right] order. Front is required; any combination of the other three may be omitted.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "output_mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "output_mode.texture_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "(  $mode := widgets.output_mode;  $detailed := $lookup(widgets, \"output_mode.texture_quality\") = \"detailed\";  $credits := $mode = \"geometry only\" ? 40 : ($detailed ? 60 : 50);  {\"type\":\"usd\",\"usd\": $credits * 0.01, \"format\": {\"approximate\": true}})"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoTextureNode": {"input": {"required": {"model_task_id": ["MODEL_TASK_ID", {}]}, "optional": {"texture": ["BOOLEAN", {"default": true}], "pbr": ["BOOLEAN", {"default": true}], "texture_seed": ["INT", {"advanced": true, "default": 42}], "texture_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"advanced": true, "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_task_id"], "optional": ["texture", "pbr", "texture_seed", "texture_quality", "texture_alignment"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoTextureNode", "display_name": "Tripo: Texture model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "texture_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $tq := widgets.texture_quality;\n                  {\"type\":\"usd\",\"usd\": ($contains($tq,\"detailed\") ? 0.2 : 0.1), \"format\": {\"approximate\": true}}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoRefineNode": {"input": {"required": {"model_task_id": ["MODEL_TASK_ID", {"tooltip": "Must be a v1.4 Tripo model"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_task_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoRefineNode", "display_name": "Tripo: Refine Draft model", "description": "Refine a draft model created by v1.4 Tripo models only.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.3, \"format\": {\"approximate\": true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoRigNode": {"input": {"required": {"original_model_task_id": ["MODEL_TASK_ID", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["original_model_task_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "RIG_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "rig task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoRigNode", "display_name": "Tripo: Rig model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.25, \"format\": {\"approximate\": true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoRetargetNode": {"input": {"required": {"original_model_task_id": ["RIG_TASK_ID", {}], "animation": ["COMBO", {"multiselect": false, "options": ["preset:idle", "preset:walk", "preset:run", "preset:dive", "preset:climb", "preset:jump", "preset:slash", "preset:shoot", "preset:hurt", "preset:fall", "preset:turn", "preset:quadruped:walk", "preset:hexapod:walk", "preset:octopod:walk", "preset:serpentine:march", "preset:aquatic:march"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["original_model_task_id", "animation"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "RETARGET_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "retarget task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoRetargetNode", "display_name": "Tripo: Retarget rigged model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.1, \"format\": {\"approximate\": true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoConversionNode": {"input": {"required": {"original_model_task_id": ["MODEL_TASK_ID,RIG_TASK_ID,RETARGET_TASK_ID", {}], "format": ["COMBO", {"multiselect": false, "options": ["GLTF", "USDZ", "FBX", "OBJ", "STL", "3MF"]}]}, "optional": {"quad": ["BOOLEAN", {"advanced": true, "default": false}], "face_limit": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 2000000}], "texture_size": ["INT", {"advanced": true, "default": 4096, "min": 128, "max": 4096}], "texture_format": ["COMBO", {"advanced": true, "default": "JPEG", "multiselect": false, "options": ["BMP", "DPX", "HDR", "JPEG", "OPEN_EXR", "PNG", "TARGA", "TIFF", "WEBP"]}], "force_symmetry": ["BOOLEAN", {"advanced": true, "default": false}], "flatten_bottom": ["BOOLEAN", {"advanced": true, "default": false}], "flatten_bottom_threshold": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0}], "pivot_to_center_bottom": ["BOOLEAN", {"advanced": true, "default": false}], "scale_factor": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0}], "with_animation": ["BOOLEAN", {"advanced": true, "default": false}], "pack_uv": ["BOOLEAN", {"advanced": true, "default": false}], "bake": ["BOOLEAN", {"advanced": true, "default": false}], "part_names": ["STRING", {"advanced": true, "default": "", "multiline": false}], "fbx_preset": ["COMBO", {"advanced": true, "default": "blender", "multiselect": false, "options": ["blender", "mixamo", "3dsmax"]}], "export_vertex_colors": ["BOOLEAN", {"advanced": true, "default": false}], "export_orientation": ["COMBO", {"advanced": true, "default": "default", "multiselect": false, "options": ["align_image", "default"]}], "animate_in_place": ["BOOLEAN", {"advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["original_model_task_id", "format"], "optional": ["quad", "face_limit", "texture_size", "texture_format", "force_symmetry", "flatten_bottom", "flatten_bottom_threshold", "pivot_to_center_bottom", "scale_factor", "with_animation", "pack_uv", "bake", "part_names", "fbx_preset", "export_vertex_colors", "export_orientation", "animate_in_place"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "TripoConversionNode", "display_name": "Tripo: Convert model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "quad", "type": "BOOLEAN"}, {"name": "face_limit", "type": "INT"}, {"name": "texture_size", "type": "INT"}, {"name": "texture_format", "type": "COMBO"}, {"name": "flatten_bottom", "type": "BOOLEAN"}, {"name": "flatten_bottom_threshold", "type": "FLOAT"}, {"name": "pivot_to_center_bottom", "type": "BOOLEAN"}, {"name": "scale_factor", "type": "FLOAT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                    $face := (widgets.face_limit != null) ? widgets.face_limit : -1;\n                    $texSize := (widgets.texture_size != null) ? widgets.texture_size : 4096;\n                    $flatThresh := (widgets.flatten_bottom_threshold != null) ? widgets.flatten_bottom_threshold : 0;\n                    $scale := (widgets.scale_factor != null) ? widgets.scale_factor : 1;\n                    $texFmt := (widgets.texture_format != \"\" ? widgets.texture_format : \"jpeg\");\n                    $advanced :=\n                      widgets.quad or\n                      widgets.flatten_bottom or\n                      widgets.pivot_to_center_bottom or\n                      ($face != -1) or\n                      ($texSize != 4096) or\n                      ($flatThresh != 0) or\n                      ($scale != 1) or\n                      ($texFmt != \"jpeg\");\n                    {\"type\":\"usd\",\"usd\": ($advanced ? 0.1 : 0.05), \"format\": {\"approximate\": true}}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VeoVideoGenerationNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the video", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video", "default": "16:9", "multiselect": false, "options": ["16:9", "9:16"]}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative text prompt to guide what to avoid in the video", "default": "", "multiline": true}], "duration_seconds": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 8, "step": 1, "display": "number"}], "enhance_prompt": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance", "advanced": true, "default": true}], "person_generation": ["COMBO", {"tooltip": "Whether to allow generating people in the video", "advanced": true, "default": "ALLOW", "multiselect": false, "options": ["ALLOW", "BLOCK"]}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}], "image": ["IMAGE", {"tooltip": "Optional reference image to guide video generation"}], "model": ["COMBO", {"tooltip": "Veo 2 model to use for video generation", "default": "veo-2.0-generate-001", "multiselect": false, "options": ["veo-2.0-generate-001"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "aspect_ratio"], "optional": ["negative_prompt", "duration_seconds", "enhance_prompt", "person_generation", "seed", "image", "model"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "VeoVideoGenerationNode", "display_name": "Google Veo 2 Video Generation", "description": "Generates videos from text prompts using Google's Veo 2 API", "python_module": "comfy_api_nodes.nodes_veo2", "category": "partner/video/Veo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration_seconds", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.5 * widgets.duration_seconds}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Veo3VideoGenerationNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the video", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video", "default": "16:9", "multiselect": false, "options": ["16:9", "9:16"]}]}, "optional": {"resolution": ["COMBO", {"tooltip": "Output video resolution. 4K is not available for veo-3.1-lite and veo-3.0 models.", "default": "720p", "multiselect": false, "options": ["720p", "1080p", "4k"]}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt to guide what to avoid in the video", "default": "", "multiline": true}], "duration_seconds": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 8, "min": 4, "max": 8, "step": 2, "display": "number"}], "enhance_prompt": ["BOOLEAN", {"tooltip": "This parameter is deprecated and ignored.", "advanced": true, "default": true}], "person_generation": ["COMBO", {"tooltip": "Whether to allow generating people in the video", "advanced": true, "default": "ALLOW", "multiselect": false, "options": ["ALLOW", "BLOCK"]}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}], "image": ["IMAGE", {"tooltip": "Optional reference image to guide video generation"}], "model": ["COMBO", {"tooltip": "Veo 3 model to use for video generation", "multiselect": false, "options": ["veo-3.1-generate", "veo-3.1-fast-generate", "veo-3.1-lite", "veo-3.0-generate-001", "veo-3.0-fast-generate-001"]}], "generate_audio": ["BOOLEAN", {"tooltip": "Generate audio for the video. Supported by all Veo 3 models.", "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "aspect_ratio"], "optional": ["resolution", "negative_prompt", "duration_seconds", "enhance_prompt", "person_generation", "seed", "image", "model", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Veo3VideoGenerationNode", "display_name": "Google Veo 3 Video Generation", "description": "Generates videos from text prompts using Google's Veo 3 API", "python_module": "comfy_api_nodes.nodes_veo2", "category": "partner/video/Veo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}, {"name": "resolution", "type": "COMBO"}, {"name": "duration_seconds", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $m := widgets.model;\n                  $r := widgets.resolution;\n                  $a := widgets.generate_audio;\n                  $seconds := widgets.duration_seconds;\n                  $pps :=\n                    $contains($m, \"lite\")\n                      ? ($r = \"1080p\" ? ($a ? 0.08 : 0.05) : ($a ? 0.05 : 0.03))\n                    : $contains($m, \"3.1-fast\")\n                      ? ($r = \"4k\" ? ($a ? 0.30 : 0.25) : $r = \"1080p\" ? ($a ? 0.12 : 0.10) : ($a ? 0.10 : 0.08))\n                    : $contains($m, \"3.1-generate\")\n                      ? ($r = \"4k\" ? ($a ? 0.60 : 0.40) : ($a ? 0.40 : 0.20))\n                    : $contains($m, \"3.0-fast\")\n                      ? ($a ? 0.15 : 0.10)\n                    : ($a ? 0.40 : 0.20);\n                  {\"type\":\"usd\",\"usd\": $pps * $seconds}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Veo3FirstLastFrameNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the video", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt to guide what to avoid in the video", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720p", "1080p", "4k"]}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video", "default": "16:9", "multiselect": false, "options": ["16:9", "9:16"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 8, "min": 4, "max": 8, "step": 2, "display": "slider"}], "seed": ["INT", {"tooltip": "Seed for video generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}], "first_frame": ["IMAGE", {"tooltip": "Start frame"}], "last_frame": ["IMAGE", {"tooltip": "End frame"}], "model": ["COMBO", {"multiselect": false, "options": ["veo-3.1-generate", "veo-3.1-fast-generate", "veo-3.1-lite"]}], "generate_audio": ["BOOLEAN", {"tooltip": "Generate audio for the video.", "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["prompt", "negative_prompt", "resolution", "aspect_ratio", "duration", "seed", "first_frame", "last_frame", "model", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Veo3FirstLastFrameNode", "display_name": "Google Veo 3 First-Last-Frame to Video", "description": "Generate video using prompt and first and last frames.", "python_module": "comfy_api_nodes.nodes_veo2", "category": "partner/video/Veo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $m := widgets.model;\n                  $r := widgets.resolution;\n                  $ga := widgets.generate_audio;\n                  $seconds := widgets.duration;\n                  $pps :=\n                    $contains($m, \"lite\")\n                      ? ($r = \"1080p\" ? ($ga ? 0.08 : 0.05) : ($ga ? 0.05 : 0.03))\n                    : $contains($m, \"fast\")\n                      ? ($r = \"4k\" ? ($ga ? 0.30 : 0.25) : $r = \"1080p\" ? ($ga ? 0.12 : 0.10) : ($ga ? 0.10 : 0.08))\n                    : ($r = \"4k\" ? ($ga ? 0.60 : 0.40) : ($ga ? 0.40 : 0.20));\n                  {\"type\":\"usd\",\"usd\": $pps * $seconds}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduTextToVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model name", "multiselect": false, "options": ["viduq1"]}], "prompt": ["STRING", {"tooltip": "A textual description for video generation", "multiline": true}]}, "optional": {"duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 5, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "resolution": ["COMBO", {"tooltip": "Supported values may vary by model & duration", "advanced": true, "multiselect": false, "options": ["1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt"], "optional": ["duration", "seed", "aspect_ratio", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduTextToVideoNode", "display_name": "Vidu Text To Video Generation", "description": "Generate video from a text prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduImageToVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model name", "multiselect": false, "options": ["viduq1"]}], "image": ["IMAGE", {"tooltip": "An image to be used as the start frame of the generated video"}]}, "optional": {"prompt": ["STRING", {"tooltip": "A textual description for video generation", "default": "", "multiline": true}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 5, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"tooltip": "Supported values may vary by model & duration", "advanced": true, "multiselect": false, "options": ["1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "image"], "optional": ["prompt", "duration", "seed", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduImageToVideoNode", "display_name": "Vidu Image To Video Generation", "description": "Generate video from image and optional prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduReferenceVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model name", "multiselect": false, "options": ["viduq1"]}], "images": ["IMAGE", {"tooltip": "Images to use as references to generate a video with consistent subjects (max 7 images)."}], "prompt": ["STRING", {"tooltip": "A textual description for video generation", "multiline": true}]}, "optional": {"duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 5, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "resolution": ["COMBO", {"tooltip": "Supported values may vary by model & duration", "advanced": true, "multiselect": false, "options": ["1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "images", "prompt"], "optional": ["duration", "seed", "aspect_ratio", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduReferenceVideoNode", "display_name": "Vidu Reference To Video Generation", "description": "Generate video from multiple images and a prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduStartEndToVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model name", "multiselect": false, "options": ["viduq1"]}], "first_frame": ["IMAGE", {"tooltip": "Start frame"}], "end_frame": ["IMAGE", {"tooltip": "End frame"}]}, "optional": {"prompt": ["STRING", {"tooltip": "A textual description for video generation", "multiline": true}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 5, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"tooltip": "Supported values may vary by model & duration", "advanced": true, "multiselect": false, "options": ["1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "first_frame", "end_frame"], "optional": ["prompt", "duration", "seed", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduStartEndToVideoNode", "display_name": "Vidu Start End To Video Generation", "description": "Generate a video from start and end frames and a prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu2TextToVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2"]}], "prompt": ["STRING", {"tooltip": "A textual description for video generation, with a maximum length of 2000 characters.", "multiline": true}], "duration": ["INT", {"default": 5, "min": 1, "max": 10, "step": 1, "display": "slider"}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "3:4", "4:3", "1:1"]}], "resolution": ["COMBO", {"advanced": true, "multiselect": false, "options": ["720p", "1080p"]}], "background_music": ["BOOLEAN", {"tooltip": "Whether to add background music to the generated video.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt", "duration", "seed", "aspect_ratio", "resolution", "background_music"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu2TextToVideoNode", "display_name": "Vidu2 Text-to-Video Generation", "description": "Generate video from a text prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $is1080 := widgets.resolution = \"1080p\";\n                  $base := $is1080 ? 0.1 : 0.075;\n                  $perSec := $is1080 ? 0.05 : 0.025;\n                  {\"type\":\"usd\",\"usd\": $base + $perSec * (widgets.duration - 1)}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu2ImageToVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2-pro-fast", "viduq2-pro", "viduq2-turbo"]}], "image": ["IMAGE", {"tooltip": "An image to be used as the start frame of the generated video."}], "prompt": ["STRING", {"tooltip": "An optional text prompt for video generation (max 2000 characters).", "default": "", "multiline": true}], "duration": ["INT", {"default": 5, "min": 1, "max": 10, "step": 1, "display": "slider"}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"advanced": true, "multiselect": false, "options": ["720p", "1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame.", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "image", "prompt", "duration", "seed", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu2ImageToVideoNode", "display_name": "Vidu2 Image-to-Video Generation", "description": "Generate a video from an image and an optional prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $m := widgets.model;\n                  $d := widgets.duration;\n                  $is1080 := widgets.resolution = \"1080p\";\n                  $contains($m, \"pro-fast\")\n                    ? (\n                        $base := $is1080 ? 0.08 : 0.04;\n                        $perSec := $is1080 ? 0.02 : 0.01;\n                        {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n                      )\n                    : $contains($m, \"pro\")\n                      ? (\n                          $base := $is1080 ? 0.275 : 0.075;\n                          $perSec := $is1080 ? 0.075 : 0.05;\n                          {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n                        )\n                      : $contains($m, \"turbo\")\n                        ? (\n                            $is1080\n                              ? {\"type\":\"usd\",\"usd\": 0.175 + 0.05 * ($d - 1)}\n                              : (\n                                  $d <= 1 ? {\"type\":\"usd\",\"usd\": 0.04}\n                                  : $d <= 2 ? {\"type\":\"usd\",\"usd\": 0.05}\n                                  : {\"type\":\"usd\",\"usd\": 0.05 + 0.05 * ($d - 2)}\n                                )\n                          )\n                        : {\"type\":\"usd\",\"usd\": 0.04}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu2ReferenceVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2"]}], "subjects": ["COMFY_AUTOGROW_V3", {"tooltip": "For each subject, provide up to 3 reference images (7 images total across all subjects). Reference them in prompts via @subject{subject_id}.", "template": {"input": {"required": {"reference_images": ["IMAGE", {}]}}, "names": ["subject1", "subject2", "subject3", "subject4", "subject5", "subject6", "subject7"], "min": 1}}], "prompt": ["STRING", {"tooltip": "When enabled, the video will include generated speech and background music based on the prompt.", "multiline": true}], "audio": ["BOOLEAN", {"tooltip": "When enabled video will contain generated speech and background music based on the prompt.", "advanced": true, "default": false}], "duration": ["INT", {"default": 5, "min": 1, "max": 10, "step": 1, "display": "slider"}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "4:3", "3:4", "1:1"]}], "resolution": ["COMBO", {"advanced": true, "multiselect": false, "options": ["720p", "1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame.", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "subjects", "prompt", "audio", "duration", "seed", "aspect_ratio", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu2ReferenceVideoNode", "display_name": "Vidu2 Reference-to-Video Generation", "description": "Generate a video from multiple reference images and a prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "audio", "type": "BOOLEAN"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $is1080 := widgets.resolution = \"1080p\";\n                  $base := $is1080 ? 0.375 : 0.125;\n                  $perSec := $is1080 ? 0.05 : 0.025;\n                  $audioCost := widgets.audio = true ? 0.075 : 0;\n                  {\"type\":\"usd\",\"usd\": $base + $perSec * (widgets.duration - 1) + $audioCost}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu2StartEndToVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2-pro-fast", "viduq2-pro", "viduq2-turbo"]}], "first_frame": ["IMAGE", {}], "end_frame": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt description (max 2000 characters).", "multiline": true}], "duration": ["INT", {"default": 5, "min": 2, "max": 8, "step": 1, "display": "slider"}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"advanced": true, "multiselect": false, "options": ["720p", "1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame.", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "first_frame", "end_frame", "prompt", "duration", "seed", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu2StartEndToVideoNode", "display_name": "Vidu2 Start/End Frame-to-Video Generation", "description": "Generate a video from a start frame, an end frame, and a prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $m := widgets.model;\n                  $d := widgets.duration;\n                  $is1080 := widgets.resolution = \"1080p\";\n                  $contains($m, \"pro-fast\")\n                    ? (\n                        $base := $is1080 ? 0.08 : 0.04;\n                        $perSec := $is1080 ? 0.02 : 0.01;\n                        {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n                      )\n                    : $contains($m, \"pro\")\n                      ? (\n                          $base := $is1080 ? 0.275 : 0.075;\n                          $perSec := $is1080 ? 0.075 : 0.05;\n                          {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n                        )\n                      : $contains($m, \"turbo\")\n                        ? (\n                            $is1080\n                              ? {\"type\":\"usd\",\"usd\": 0.175 + 0.05 * ($d - 1)}\n                              : (\n                                  $d <= 2 ? {\"type\":\"usd\",\"usd\": 0.05}\n                                  : {\"type\":\"usd\",\"usd\": 0.05 + 0.05 * ($d - 2)}\n                                )\n                          )\n                        : {\"type\":\"usd\",\"usd\": 0.04}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduExtendVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for video extension.", "options": [{"key": "viduq2-pro", "inputs": {"required": {"duration": ["INT", {"tooltip": "Duration of the extended video in seconds.", "default": 4, "min": 1, "max": 7, "step": 1, "display": "slider"}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}]}}}, {"key": "viduq2-turbo", "inputs": {"required": {"duration": ["INT", {"tooltip": "Duration of the extended video in seconds.", "default": 4, "min": 1, "max": 7, "step": 1, "display": "slider"}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}]}}}]}], "video": ["VIDEO", {"tooltip": "The source video to extend."}], "prompt": ["STRING", {"tooltip": "An optional text prompt for the extended video (max 2000 characters).", "default": "", "multiline": true}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"end_frame": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "video", "prompt", "seed"], "optional": ["end_frame"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduExtendVideoNode", "display_name": "Vidu Video Extension", "description": "Extend an existing video by generating additional frames.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $m := widgets.model;\n                  $d := $lookup(widgets, \"model.duration\");\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $contains($m, \"pro\")\n                    ? (\n                        $base := $lookup({\"720p\": 0.15, \"1080p\": 0.3}, $res);\n                        $perSec := $lookup({\"720p\": 0.05, \"1080p\": 0.075}, $res);\n                        {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n                      )\n                    : (\n                        $base := $lookup({\"720p\": 0.075, \"1080p\": 0.2}, $res);\n                        $perSec := $lookup({\"720p\": 0.025, \"1080p\": 0.05}, $res);\n                        {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n                      )\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduMultiFrameVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2-pro", "viduq2-turbo"]}], "start_image": ["IMAGE", {"tooltip": "The starting frame image. Aspect ratio must be between 1:4 and 4:1."}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"multiselect": false, "options": ["720p", "1080p"]}], "frames": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Number of keyframe transitions (2-9).", "options": [{"key": "2", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "3", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "4", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "5", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "6", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt6": ["STRING", {"tooltip": "Text prompt for frame 6 transition.", "default": "", "multiline": true}], "end_image6": ["IMAGE", {"tooltip": "End frame image for segment 6. Aspect ratio must be between 1:4 and 4:1."}], "duration6": ["INT", {"tooltip": "Duration for segment 6 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "7", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt6": ["STRING", {"tooltip": "Text prompt for frame 6 transition.", "default": "", "multiline": true}], "end_image6": ["IMAGE", {"tooltip": "End frame image for segment 6. Aspect ratio must be between 1:4 and 4:1."}], "duration6": ["INT", {"tooltip": "Duration for segment 6 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt7": ["STRING", {"tooltip": "Text prompt for frame 7 transition.", "default": "", "multiline": true}], "end_image7": ["IMAGE", {"tooltip": "End frame image for segment 7. Aspect ratio must be between 1:4 and 4:1."}], "duration7": ["INT", {"tooltip": "Duration for segment 7 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "8", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt6": ["STRING", {"tooltip": "Text prompt for frame 6 transition.", "default": "", "multiline": true}], "end_image6": ["IMAGE", {"tooltip": "End frame image for segment 6. Aspect ratio must be between 1:4 and 4:1."}], "duration6": ["INT", {"tooltip": "Duration for segment 6 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt7": ["STRING", {"tooltip": "Text prompt for frame 7 transition.", "default": "", "multiline": true}], "end_image7": ["IMAGE", {"tooltip": "End frame image for segment 7. Aspect ratio must be between 1:4 and 4:1."}], "duration7": ["INT", {"tooltip": "Duration for segment 7 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt8": ["STRING", {"tooltip": "Text prompt for frame 8 transition.", "default": "", "multiline": true}], "end_image8": ["IMAGE", {"tooltip": "End frame image for segment 8. Aspect ratio must be between 1:4 and 4:1."}], "duration8": ["INT", {"tooltip": "Duration for segment 8 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "9", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt6": ["STRING", {"tooltip": "Text prompt for frame 6 transition.", "default": "", "multiline": true}], "end_image6": ["IMAGE", {"tooltip": "End frame image for segment 6. Aspect ratio must be between 1:4 and 4:1."}], "duration6": ["INT", {"tooltip": "Duration for segment 6 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt7": ["STRING", {"tooltip": "Text prompt for frame 7 transition.", "default": "", "multiline": true}], "end_image7": ["IMAGE", {"tooltip": "End frame image for segment 7. Aspect ratio must be between 1:4 and 4:1."}], "duration7": ["INT", {"tooltip": "Duration for segment 7 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt8": ["STRING", {"tooltip": "Text prompt for frame 8 transition.", "default": "", "multiline": true}], "end_image8": ["IMAGE", {"tooltip": "End frame image for segment 8. Aspect ratio must be between 1:4 and 4:1."}], "duration8": ["INT", {"tooltip": "Duration for segment 8 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt9": ["STRING", {"tooltip": "Text prompt for frame 9 transition.", "default": "", "multiline": true}], "end_image9": ["IMAGE", {"tooltip": "End frame image for segment 9. Aspect ratio must be between 1:4 and 4:1."}], "duration9": ["INT", {"tooltip": "Duration for segment 9 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "start_image", "seed", "resolution", "frames"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduMultiFrameVideoNode", "display_name": "Vidu Multi-Frame Video Generation", "description": "Generate a video with multiple keyframe transitions.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}, {"name": "frames", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "frames.duration1", "type": "INT"}, {"name": "frames.duration2", "type": "INT"}, {"name": "frames.duration3", "type": "INT"}, {"name": "frames.duration4", "type": "INT"}, {"name": "frames.duration5", "type": "INT"}, {"name": "frames.duration6", "type": "INT"}, {"name": "frames.duration7", "type": "INT"}, {"name": "frames.duration8", "type": "INT"}, {"name": "frames.duration9", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $m := widgets.model;\n                  $n := $number(widgets.frames);\n                  $is1080 := widgets.resolution = \"1080p\";\n                  $d1 := $lookup(widgets, \"frames.duration1\");\n                  $d2 := $lookup(widgets, \"frames.duration2\");\n                  $d3 := $n >= 3 ? $lookup(widgets, \"frames.duration3\") : 0;\n                  $d4 := $n >= 4 ? $lookup(widgets, \"frames.duration4\") : 0;\n                  $d5 := $n >= 5 ? $lookup(widgets, \"frames.duration5\") : 0;\n                  $d6 := $n >= 6 ? $lookup(widgets, \"frames.duration6\") : 0;\n                  $d7 := $n >= 7 ? $lookup(widgets, \"frames.duration7\") : 0;\n                  $d8 := $n >= 8 ? $lookup(widgets, \"frames.duration8\") : 0;\n                  $d9 := $n >= 9 ? $lookup(widgets, \"frames.duration9\") : 0;\n                  $totalDuration := $d1 + $d2 + $d3 + $d4 + $d5 + $d6 + $d7 + $d8 + $d9;\n                  $contains($m, \"pro\")\n                    ? (\n                        $base := $is1080 ? 0.3 : 0.15;\n                        $perSec := $is1080 ? 0.075 : 0.05;\n                        {\"type\":\"usd\",\"usd\": $n * $base + $perSec * $totalDuration}\n                      )\n                    : (\n                        $base := $is1080 ? 0.2 : 0.075;\n                        $perSec := $is1080 ? 0.05 : 0.025;\n                        {\"type\":\"usd\",\"usd\": $n * $base + $perSec * $totalDuration}\n                      )\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu3TextToVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for video generation.", "options": [{"key": "viduq3-pro", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["16:9", "9:16", "3:4", "4:3", "1:1"]}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}, {"key": "viduq3-turbo", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["16:9", "9:16", "3:4", "4:3", "1:1"]}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}]}], "prompt": ["STRING", {"tooltip": "A textual description for video generation, with a maximum length of 2000 characters.", "multiline": true}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu3TextToVideoNode", "display_name": "Vidu Q3 Text-to-Video Generation", "description": "Generate video from a text prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $d := $lookup(widgets, \"model.duration\");\n                  $contains(widgets.model, \"turbo\")\n                    ? (\n                        $rate := $lookup({\"720p\": 0.06, \"1080p\": 0.08}, $res);\n                        {\"type\":\"usd\",\"usd\": $rate * $d}\n                      )\n                    : (\n                        $rate := $lookup({\"720p\": 0.15, \"1080p\": 0.16}, $res);\n                        {\"type\":\"usd\",\"usd\": $rate * $d}\n                      )\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu3ImageToVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for video generation.", "options": [{"key": "viduq3-pro", "inputs": {"required": {"resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p", "2K"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}, {"key": "viduq3-turbo", "inputs": {"required": {"resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}]}], "image": ["IMAGE", {"tooltip": "An image to be used as the start frame of the generated video."}], "prompt": ["STRING", {"tooltip": "An optional text prompt for video generation (max 2000 characters).", "default": "", "multiline": true}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "image", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu3ImageToVideoNode", "display_name": "Vidu Q3 Image-to-Video Generation", "description": "Generate a video from an image and an optional prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $d := $lookup(widgets, \"model.duration\");\n                  $contains(widgets.model, \"turbo\")\n                    ? (\n                        $rate := $lookup({\"720p\": 0.06, \"1080p\": 0.08}, $res);\n                        {\"type\":\"usd\",\"usd\": $rate * $d}\n                      )\n                    : (\n                        $rate := $lookup({\"720p\": 0.15, \"1080p\": 0.16, \"2k\": 0.2}, $res);\n                        {\"type\":\"usd\",\"usd\": $rate * $d}\n                      )\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu3StartEndToVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for video generation.", "options": [{"key": "viduq3-pro", "inputs": {"required": {"resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}, {"key": "viduq3-turbo", "inputs": {"required": {"resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}]}], "first_frame": ["IMAGE", {}], "end_frame": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt description (max 2000 characters).", "multiline": true}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "first_frame", "end_frame", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu3StartEndToVideoNode", "display_name": "Vidu Q3 Start/End Frame-to-Video Generation", "description": "Generate a video from a start frame, an end frame, and a prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $d := $lookup(widgets, \"model.duration\");\n                  $contains(widgets.model, \"turbo\")\n                    ? (\n                        $rate := $lookup({\"720p\": 0.06, \"1080p\": 0.08}, $res);\n                        {\"type\":\"usd\",\"usd\": $rate * $d}\n                      )\n                    : (\n                        $rate := $lookup({\"720p\": 0.15, \"1080p\": 0.16}, $res);\n                        {\"type\":\"usd\",\"usd\": $rate * $d}\n                      )\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanTextToImageApi": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model to use.", "multiselect": false, "options": ["wan2.5-t2i-preview"]}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "width": ["INT", {"default": 1024, "min": 768, "max": 1440, "step": 32}], "height": ["INT", {"default": 1024, "min": 768, "max": 1440, "step": 32}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt"], "optional": ["negative_prompt", "width", "height", "seed", "prompt_extend", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanTextToImageApi", "display_name": "Wan Text to Image", "description": "Generates an image based on a text prompt.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/image/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.03}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanImageToImageApi": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model to use.", "default": "wan2.5-i2i-preview", "multiselect": false, "options": ["wan2.5-i2i-preview"]}], "image": ["IMAGE", {"tooltip": "Single-image editing or multi-image fusion. Maximum 2 images."}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "image", "prompt"], "optional": ["negative_prompt", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanImageToImageApi", "display_name": "Wan Image to Image", "description": "Generates an image from one or two input images and a text prompt. The output image is currently fixed at 1.6 MP, and its aspect ratio matches the input image(s).", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/image/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.03}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanTextToVideoApi": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model to use.", "default": "wan2.6-t2v", "multiselect": false, "options": ["wan2.5-t2v-preview", "wan2.6-t2v"]}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "size": ["COMBO", {"default": "720p: 1:1 (960x960)", "multiselect": false, "options": ["480p: 1:1 (624x624)", "480p: 16:9 (832x480)", "480p: 9:16 (480x832)", "720p: 1:1 (960x960)", "720p: 16:9 (1280x720)", "720p: 9:16 (720x1280)", "720p: 4:3 (1088x832)", "720p: 3:4 (832x1088)", "1080p: 1:1 (1440x1440)", "1080p: 16:9 (1920x1080)", "1080p: 9:16 (1080x1920)", "1080p: 4:3 (1632x1248)", "1080p: 3:4 (1248x1632)"]}], "duration": ["INT", {"tooltip": "A 15-second duration is available only for the Wan 2.6 model.", "default": 5, "min": 5, "max": 15, "step": 5, "display": "number"}], "audio": ["AUDIO", {"tooltip": "Audio must contain a clear, loud voice, without extraneous noise or background music."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "generate_audio": ["BOOLEAN", {"tooltip": "If no audio input is provided, generate audio automatically.", "advanced": true, "default": false}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}], "shot_type": ["COMBO", {"tooltip": "Specifies the shot type for the generated video, that is, whether the video is a single continuous shot or multiple shots with cuts. This parameter takes effect only when prompt_extend is True.", "advanced": true, "multiselect": false, "options": ["single", "multi"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt"], "optional": ["negative_prompt", "size", "duration", "audio", "seed", "generate_audio", "prompt_extend", "watermark", "shot_type"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanTextToVideoApi", "display_name": "Wan Text to Video", "description": "Generates a video based on a text prompt.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "size", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $ppsTable := { \"480p\": 0.05, \"720p\": 0.1, \"1080p\": 0.15 };\n                  $resKey := $substringBefore(widgets.size, \":\");\n                  $pps := $lookup($ppsTable, $resKey);\n                  { \"type\": \"usd\", \"usd\": $round($pps * widgets.duration, 2) }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanImageToVideoApi": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model to use.", "default": "wan2.6-i2v", "multiselect": false, "options": ["wan2.5-i2v-preview", "wan2.6-i2v"]}], "image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "720P", "multiselect": false, "options": ["480P", "720P", "1080P"]}], "duration": ["INT", {"tooltip": "Duration 15 available only for WAN2.6 model.", "default": 5, "min": 5, "max": 15, "step": 5, "display": "number"}], "audio": ["AUDIO", {"tooltip": "Audio must contain a clear, loud voice, without extraneous noise or background music."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "generate_audio": ["BOOLEAN", {"tooltip": "If no audio input is provided, generate audio automatically.", "advanced": true, "default": false}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}], "shot_type": ["COMBO", {"tooltip": "Specifies the shot type for the generated video, that is, whether the video is a single continuous shot or multiple shots with cuts. This parameter takes effect only when prompt_extend is True.", "advanced": true, "multiselect": false, "options": ["single", "multi"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "image", "prompt"], "optional": ["negative_prompt", "resolution", "duration", "audio", "seed", "generate_audio", "prompt_extend", "watermark", "shot_type"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanImageToVideoApi", "display_name": "Wan Image to Video", "description": "Generates a video from the first frame and a text prompt.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $ppsTable := { \"480p\": 0.05, \"720p\": 0.1, \"1080p\": 0.15 };\n                  $pps := $lookup($ppsTable, widgets.resolution);\n                  { \"type\": \"usd\", \"usd\": $round($pps * widgets.duration, 2) }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanReferenceVideoApi": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["wan2.6-r2v"]}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese. Use identifiers such as `character1` and `character2` to refer to the reference characters.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "reference_videos": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_video": ["VIDEO", {}]}}, "names": ["character1", "character2", "character3"], "min": 1}}], "size": ["COMBO", {"multiselect": false, "options": ["720p: 1:1 (960x960)", "720p: 16:9 (1280x720)", "720p: 9:16 (720x1280)", "720p: 4:3 (1088x832)", "720p: 3:4 (832x1088)", "1080p: 1:1 (1440x1440)", "1080p: 16:9 (1920x1080)", "1080p: 9:16 (1080x1920)", "1080p: 4:3 (1632x1248)", "1080p: 3:4 (1248x1632)"]}], "duration": ["INT", {"default": 5, "min": 5, "max": 10, "step": 5, "display": "slider"}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "shot_type": ["COMBO", {"tooltip": "Specifies the shot type for the generated video, that is, whether the video is a single continuous shot or multiple shots with cuts.", "advanced": true, "multiselect": false, "options": ["single", "multi"]}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "prompt", "negative_prompt", "reference_videos", "size", "duration", "seed", "shot_type", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanReferenceVideoApi", "display_name": "Wan Reference to Video", "description": "Use the character and voice from input videos, combined with a prompt, to generate a new video that maintains character consistency.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "size", "type": "COMBO"}, {"name": "duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $rate := $contains(widgets.size, \"1080p\") ? 0.15 : 0.10;\n                  $inputMin := 2 * $rate;\n                  $inputMax := 5 * $rate;\n                  $outputPrice := widgets.duration * $rate;\n                  {\n                    \"type\": \"range_usd\",\n                    \"min_usd\": $inputMin + $outputPrice,\n                    \"max_usd\": $inputMax + $outputPrice\n                  }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2TextToVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-t2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["INT", {"default": 5, "min": 2, "max": 15, "step": 1, "display": "number"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "optional": {"audio": ["AUDIO", {"tooltip": "Audio for driving video generation (e.g., lip sync, beat-matched motion). Duration: 3s-30s. If not provided, the model automatically generates matching background music or sound effects."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "seed", "prompt_extend", "watermark"], "optional": ["audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2TextToVideoApi", "display_name": "Wan 2.7 Text to Video", "description": "Generates a video based on a text prompt using the Wan 2.7 model.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $dur := $lookup(widgets, \"model.duration\");\n                  $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n                  $pps := $lookup($ppsTable, $res);\n                  { \"type\": \"usd\", \"usd\": $pps * $dur }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2ImageToVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-i2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "duration": ["INT", {"default": 5, "min": 2, "max": 15, "step": 1, "display": "number"}]}}}]}], "first_frame": ["IMAGE", {"tooltip": "First frame image. The output aspect ratio is derived from this image."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "optional": {"last_frame": ["IMAGE", {"tooltip": "Last frame image. The model generates a video transitioning from first to last frame."}], "audio": ["AUDIO", {"tooltip": "Audio for driving video generation (e.g., lip sync, beat-matched motion). Duration: 2s-30s. If not provided, the model automatically generates matching background music or sound effects."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "first_frame", "seed", "prompt_extend", "watermark"], "optional": ["last_frame", "audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2ImageToVideoApi", "display_name": "Wan 2.7 Image to Video", "description": "Generate a video from a first-frame image, with optional last-frame image and audio.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $dur := $lookup(widgets, \"model.duration\");\n                  $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n                  $pps := $lookup($ppsTable, $res);\n                  { \"type\": \"usd\", \"usd\": $pps * $dur }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2VideoContinuationApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-i2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "duration": ["INT", {"tooltip": "Total output duration in seconds. The model generates continuation to fill the remaining time after the input clip.", "default": 5, "min": 2, "max": 15, "step": 1, "display": "number"}]}}}]}], "first_clip": ["VIDEO", {"tooltip": "Input video to continue from. Duration: 2s-10s. The output aspect ratio is derived from this video."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "optional": {"last_frame": ["IMAGE", {"tooltip": "Last frame image. The continuation will transition towards this frame."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "first_clip", "seed", "prompt_extend", "watermark"], "optional": ["last_frame"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2VideoContinuationApi", "display_name": "Wan 2.7 Video Continuation", "description": "Continue a video from where it left off, with optional last-frame control.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $dur := $lookup(widgets, \"model.duration\");\n                  $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n                  $pps := $lookup($ppsTable, $res);\n                  $outputPrice := $pps * $dur;\n                  {\n                    \"type\": \"range_usd\",\n                    \"min_usd\": 2 * $pps + $outputPrice,\n                    \"max_usd\": 5 * $pps + $outputPrice\n                  }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2VideoEditApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-videoedit", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Editing instructions or style transfer requirements.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio. If not changed, approximates the input video ratio.", "multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["COMBO", {"tooltip": "Output duration in seconds. 'auto' matches the input video duration. A specific value truncates from the start of the video.", "default": "auto", "multiselect": false, "options": ["auto", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4"], "min": 0}}]}}}]}], "video": ["VIDEO", {"tooltip": "The video to edit."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "audio_setting": ["COMBO", {"tooltip": "'auto': model decides whether to regenerate audio based on the prompt. 'origin': preserve the original audio from the input video.", "advanced": true, "default": "auto", "multiselect": false, "options": ["auto", "origin"]}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "video", "seed", "audio_setting", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2VideoEditApi", "display_name": "Wan 2.7 Video Edit", "description": "Edit a video using text instructions, reference images, or style transfer.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $dur := $lookup(widgets, \"model.duration\");\n                  $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n                  $pps := $lookup($ppsTable, $res);\n                  { \"type\": \"usd\", \"usd\": $pps, \"format\": { \"suffix\": \"/second\", \"note\": \"(input + output)\" } }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2ReferenceVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-r2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the video. Use identifiers such as 'character1' and 'character2' to refer to the reference characters.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["INT", {"default": 5, "min": 2, "max": 10, "step": 1, "display": "number"}], "reference_videos": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_video": ["VIDEO", {}]}}, "names": ["video1", "video2", "video3"], "min": 0}}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4", "image5"], "min": 0}}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2ReferenceVideoApi", "display_name": "Wan 2.7 Reference to Video", "description": "Generate a video featuring a person or object from reference materials. Supports single-character performances and multi-character interactions.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $dur := $lookup(widgets, \"model.duration\");\n                  $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n                  $pps := $lookup($ppsTable, $res);\n                  $outputPrice := $pps * $dur;\n                  {\n                    \"type\": \"range_usd\",\n                    \"min_usd\": $outputPrice,\n                    \"max_usd\": 5 * $pps + $outputPrice\n                  }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HappyHorseTextToVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "happyhorse-1.0-t2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HappyHorseTextToVideoApi", "display_name": "HappyHorse Text to Video", "description": "Generates a video based on a text prompt using the HappyHorse model.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $dur := $lookup(widgets, \"model.duration\");\n                  $ppsTable := { \"720p\": 0.14, \"1080p\": 0.24 };\n                  $pps := $lookup($ppsTable, $res);\n                  { \"type\": \"usd\", \"usd\": $pps * $dur }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HappyHorseImageToVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "happyhorse-1.0-i2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}]}}}]}], "first_frame": ["IMAGE", {"tooltip": "First frame image. The output aspect ratio is derived from this image."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "first_frame", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HappyHorseImageToVideoApi", "display_name": "HappyHorse Image to Video", "description": "Generate a video from a first-frame image using the HappyHorse model.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $dur := $lookup(widgets, \"model.duration\");\n                  $ppsTable := { \"720p\": 0.14, \"1080p\": 0.24 };\n                  $pps := $lookup($ppsTable, $res);\n                  { \"type\": \"usd\", \"usd\": $pps * $dur }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HappyHorseVideoEditApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "happyhorse-1.0-video-edit", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Editing instructions or style transfer requirements.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio. If not changed, approximates the input video ratio.", "multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4", "image5"], "min": 0}}]}}}]}], "video": ["VIDEO", {"tooltip": "The video to edit."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "video", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HappyHorseVideoEditApi", "display_name": "HappyHorse Video Edit", "description": "Edit a video using text instructions or reference images with the HappyHorse model. Output duration is 3-15s and matches the input video; inputs longer than 15s are truncated.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $ppsTable := { \"720p\": 0.14, \"1080p\": 0.24 };\n                  $pps := $lookup($ppsTable, $res);\n                  { \"type\": \"usd\", \"usd\": $pps, \"format\": { \"suffix\": \"/second\" } }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HappyHorseReferenceVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "happyhorse-1.0-r2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the video. Use identifiers such as 'character1' and 'character2' to refer to the reference characters.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4", "image5", "image6", "image7", "image8", "image9"], "min": 1}}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HappyHorseReferenceVideoApi", "display_name": "HappyHorse Reference to Video", "description": "Generate a video featuring a person or object from reference materials with the HappyHorse model. Supports single-character performances and multi-character interactions.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $res := $lookup(widgets, \"model.resolution\");\n                  $dur := $lookup(widgets, \"model.duration\");\n                  $ppsTable := { \"720p\": 0.14, \"1080p\": 0.24 };\n                  $pps := $lookup($ppsTable, $res);\n                  { \"type\": \"usd\", \"usd\": $pps * $dur }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WavespeedFlashVSRNode": {"input": {"required": {"video": ["VIDEO", {}], "target_resolution": ["COMBO", {"multiselect": false, "options": ["720p", "1080p", "2K", "4K"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["video", "target_resolution"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "WavespeedFlashVSRNode", "display_name": "FlashVSR Video Upscale", "description": "Fast, high-quality video upscaler that boosts resolution and restores clarity for low-resolution or blurry footage.", "python_module": "comfy_api_nodes.nodes_wavespeed", "category": "partner/video/WaveSpeed", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "target_resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $price_for_1sec := {\"720p\": 0.012, \"1080p\": 0.018, \"2k\": 0.024, \"4k\": 0.032};\n                  {\n                    \"type\":\"usd\",\n                    \"usd\": $lookup($price_for_1sec, widgets.target_resolution),\n                    \"format\":{\"suffix\": \"/second\", \"approximate\": true}\n                  }\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WavespeedImageUpscaleNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["SeedVR2", "Ultimate"]}], "image": ["IMAGE", {}], "target_resolution": ["COMBO", {"multiselect": false, "options": ["2K", "4K", "8K"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["model", "image", "target_resolution"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "WavespeedImageUpscaleNode", "display_name": "WaveSpeed Image Upscale", "description": "Boost image resolution and quality, upscaling photos to 4K or 8K for sharp, detailed results.", "python_module": "comfy_api_nodes.nodes_wavespeed", "category": "partner/image/WaveSpeed", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n                (\n                  $prices := {\"seedvr2\": 0.01, \"ultimate\": 0.06};\n                  {\"type\":\"usd\", \"usd\": $lookup($prices, widgets.model)}\n                )\n                "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AnyText": {"input": {"required": {"AnyText_Loader": ["AnyText_Loader", {"forceInput": true}], "prompt": ["STRING", {"default": "A raccoon stands in front of the blackboard with the words \"\u4f60\u597d\u5440~Hello!\" written on it.", "multiline": true}], "a_prompt": ["STRING", {"default": "best quality, extremely detailed,4k, HD, supper legible text,  clear text edges,  clear strokes, neat writing, no watermarks", "multiline": true}], "n_prompt": ["STRING", {"default": "low-res, bad anatomy, extra digit, fewer digits, cropped, worst quality, low quality, watermark, unreadable text, messy words, distorted text, disorganized writing, advertising picture", "multiline": true}], "mode": [["text-generation", "text-editing"], {"default": "text-generation"}], "sort_radio": [["\u2195", "\u2194"], {"default": "\u2194"}], "revise_pos": ["BOOLEAN", {"default": false}], "img_count": ["INT", {"default": 1, "min": 1, "max": 10}], "ddim_steps": ["INT", {"default": 20, "min": 2, "max": 100}], "seed": ["INT", {"default": 9999, "min": -1, "max": 99999999}], "nonEdit_random_gen_width": ["INT", {"default": 512, "min": 128, "max": 1920, "step": 64}], "nonEdit_random_gen_height": ["INT", {"default": 512, "min": 0, "max": 1920, "step": 64}], "Random_Gen": ["BOOLEAN", {"default": false}], "strength": ["FLOAT", {"default": 1.0, "min": -999999, "max": 9999999, "step": 0.01}], "cfg_scale": ["FLOAT", {"default": 9, "min": 0, "max": 99, "step": 0.1}], "eta": ["FLOAT", {"default": 0, "min": -999, "max": 999, "step": 0.1}], "device": ["STRING", {"default": "auto"}], "fp16": ["BOOLEAN", {"default": true}], "cpu_offload": ["BOOLEAN", {"default": false, "label_on": "model_to_cpu", "label_off": "unload_model"}], "all_to_device": ["BOOLEAN", {"default": false}]}, "optional": {"AnyText_images": ["IMAGE", {"forceInput": true}]}}, "input_order": {"required": ["AnyText_Loader", "prompt", "a_prompt", "n_prompt", "mode", "sort_radio", "revise_pos", "img_count", "ddim_steps", "seed", "nonEdit_random_gen_width", "nonEdit_random_gen_height", "Random_Gen", "strength", "cfg_scale", "eta", "device", "fp16", "cpu_offload", "all_to_device"], "optional": ["AnyText_images"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "AnyText", "display_name": "AnyText Geneation", "description": "", "python_module": "custom_nodes.ComfyUI-AnyText", "category": "ExtraModels/AnyText", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "AnyText_loader": {"input": {"required": {"font": [["Auto_DownLoad", ".cache", "SourceHanSansSC-Medium.otf"]], "ckpt_name": [["Auto_DownLoad", "FLUX1-dev\\ae.safetensors", "FLUX1-dev\\flux1-dev.safetensors", "FLUX1-dev\\text_encoder\\model.safetensors", "FLUX1-dev\\text_encoder_2\\model-00001-of-00002.safetensors", "FLUX1-dev\\text_encoder_2\\model-00002-of-00002.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00001-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00002-of-00003.safetensors", "FLUX1-dev\\transformer\\diffusion_pytorch_model-00003-of-00003.safetensors", "FLUX1-dev\\vae\\diffusion_pytorch_model.safetensors", "anytext_v1.1.safetensors", "anytext_v1.1\\pytorch_model.fp16.safetensors"]], "clip": [["Auto_DownLoad", "clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14", "put_clip_or_text_encoder_models_here", "t5xxl_fp8_e4m3fn.safetensors"]], "translator": [["utrobinmv/t5_translate_en_ru_zh_small_1024", "damo/nlp_csanmt_translation_zh2en"], {"default": "utrobinmv/t5_translate_en_ru_zh_small_1024"}]}}, "input_order": {"required": ["font", "ckpt_name", "clip", "translator"]}, "is_input_list": false, "output": ["AnyText_Loader"], "output_is_list": [false], "output_name": ["AnyText_Loader"], "name": "AnyText_loader", "display_name": "AnyText Loader", "description": "", "python_module": "custom_nodes.ComfyUI-AnyText", "category": "ExtraModels/AnyText", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "AnyText_Pose_IMG": {"input": {"required": {"image": [["000001 (1).png", "000001 (2).png", "000001 (3).png", "000001 (4).png", "000001.png", "000002 (1).png", "000002 (2).png", "000002 (3).png", "000002 (4).png", "000002.png", "000003 (1).png", "000003 (2).png", "000003 (3).png", "000003 (4).png", "000003.png", "000004 (1).png", "000004 (2).png", "000004 (3).png", "000004 (4).png", "000004.png", "000005 (1).png", "000005 (2).png", "000005 (3).png", "000005 (4).png", "000005.png", "000006 (1).png", "000006 (2).png", "000006 (3).png", "000006 (4).png", "000006.png", "000007 (1).png", "000007 (2).png", "000007 (3).png", "000007 (4).png", "000007.png", "000008 (1).png", "000008 (2).png", "000008 (3).png", "000008 (4).png", "000008.png", "000009 (1).png", "000009 (2).png", "000009 (3).png", "000009 (4).png", "000009.png", "000010 (1).png", "000010 (2).png", "000010 (3).png", "000010 (4).png", "000010.png", "000011 (1).png", "000011 (2).png", "000011 (3).png", "000011 (4).png", "000011.png", "000012 (1).png", "000012 (2).png", "000012 (3).png", "000012 (4).png", "000012.png", "000013 (1).png", "000013 (2).png", "000013 (3).png", "000013 (4).png", "000013.png", "000014 (1).png", "000014 (2).png", "000014 (3).png", "000014 (4).png", "000014.png", "000015 (1).png", "000015 (2).png", "000015 (3).png", "000015 (4).png", "000015.png", "000016 (1).png", "000016 (2).png", "000016 (3).png", "000016 (4).png", "000016.png", "000017 (1).png", "000017 (2).png", "000017 (3).png", "000017 (4).png", "000017.png", "000018 (1).png", "000018 (2).png", "000018 (3).png", "000018 (4).png", "000018.png", "000019 (1).png", "000019 (2).png", "000019 (3).png", "000019 (4).png", "000019.png", "000020 (1).png", "000020 (2).png", "000020 (3).png", "000020 (4).png", "000020.png", "000021 (1).png", "000021 (2).png", "000021 (3).png", "000021 (4).png", "000021.png", "000022 (1).png", "000022 (2).png", "000022 (3).png", "000022 (4).png", "000022.png", "000023 (1).png", "000023 (2).png", "000023 (3).png", "000023 (4).png", "000023.png", "000024 (1).png", "000024 (2).png", "000024 (3).png", "000024 (4).png", "000024.png", "000025 (1).png", "000025 (2).png", "000025 (3).png", "000025 (4).png", "000025.png", "000026 (1).png", "000026 (2).png", "000026 (3).png", "000026 (4).png", "000026.png", "000027 (1).png", "000027 (2).png", "000027 (3).png", "000027 (4).png", "000027.png", "000028 (1).png", "000028 (2).png", "000028 (3).png", "000028 (4).png", "000028.png", "000029 (1).png", "000029 (2).png", "000029 (3).png", "000029 (4).png", "000029.png", "000030 (1).png", "000030 (2).png", "000030 (3).png", "000030 (4).png", "000030.png", "000031 (1).png", "000031 (2).png", "000031 (3).png", "000031 (4).png", "000031.png", "000032 (1).png", "000032 (2).png", "000032 (3).png", "000032 (4).png", "000032.png", "000033 (1).png", "000033 (2).png", "000033 (3).png", "000033 (4).png", "000033.png", "000034 (1).png", "000034 (2).png", "000034 (3).png", "000034 (4).png", "000034.png", "000035 (1).png", "000035 (2).png", "000035 (3).png", "000035 (4).png", "000035.png", "000036 (1).png", "000036 (2).png", "000036 (3).png", "000036 (4).png", "000036.png", "000037 (1).png", "000037 (2).png", "000037 (3).png", "000037 (4).png", "000037.png", "000038 (1).png", "000038 (2).png", "000038 (3).png", "000038 (4).png", "000038.png", "000039 (1).png", "000039 (2).png", "000039 (3).png", "000039 (4).png", "000039.png", "000040 (1).png", "000040 (2).png", "000040 (3).png", "000040 (4).png", "000040.png", "000041 (1).png", "000041 (2).png", "000041 (3).png", "000041 (4).png", "000041.png", "000042 (1).png", "000042 (2).png", "000042 (3).png", "000042 (4).png", "000042.png", "000043 (1).png", "000043 (2).png", "000043 (3).png", "000043 (4).png", "000043.png", "000044 (1).png", "000044 (2).png", "000044 (3).png", "000044 (4).png", "000044.png", "000045 (1).png", "000045 (2).png", "000045 (3).png", "000045 (4).png", "000045.png", "000046 (1).png", "000046 (2).png", "000046 (3).png", "000046 (4).png", "000046.png", "000047 (1).png", "000047 (2).png", "000047 (3).png", "000047 (4).png", "000047.png", "000048 (1).png", "000048 (2).png", "000048 (3).png", "000048 (4).png", "000048.png", "000049 (1).png", "000049 (2).png", "000049 (3).png", "000049 (4).png", "000049.png", "000050 (1).png", "000050 (2).png", "000050 (3).png", "000050 (4).png", "000050.png", "000051 (1).png", "000051 (2).png", "000051 (3).png", "000051 (4).png", "000051.png", "000052 (1).png", "000052 (2).png", "000052 (3).png", "000052 (4).png", "000052.png", "000053 (1).png", "000053 (2).png", "000053 (3).png", "000053 (4).png", "000053.png", "000054 (1).png", "000054 (2).png", "000054 (3).png", "000054 (4).png", "000054.png", "000055 (1).png", "000055 (2).png", "000055 (3).png", "000055 (4).png", "000055.png", "000056 (1).png", "000056 (2).png", "000056 (3).png", "000056 (4).png", "000056.png", "000057 (1).png", "000057 (2).png", "000057 (3).png", "000057 (4).png", "000057.png", "000058 (1).png", "000058 (2).png", "000058 (3).png", "000058 (4).png", "000058.png", "000059 (1).png", "000059 (2).png", "000059 (3).png", "000059 (4).png", "000059.png", "000060 (1).png", "000060 (2).png", "000060 (3).png", "000060 (4).png", "000060.png", "000061 (1).png", "000061 (2).png", "000061 (3).png", "000061 (4).png", "000061.png", "000062 (1).png", "000062 (2).png", "000062 (3).png", "000062 (4).png", "000062.png", "000063 (1).png", "000063 (2).png", "000063 (3).png", "000063 (4).png", "000063.png", "000064 (1).png", "000064 (2).png", "000064 (3).png", "000064 (4).png", "000064.png", "000065 (1).png", "000065 (2).png", "000065 (3).png", "000065 (4).png", "000065.png", "000066 (1).png", "000066 (2).png", "000066 (3).png", "000066 (4).png", "000066.png", "000067 (1).png", "000067 (2).png", "000067 (3).png", "000067 (4).png", "000067.png", "000068 (1).png", "000068 (2).png", "000068 (3).png", "000068 (4).png", "000068.png", "000069 (1).png", "000069 (2).png", "000069 (3).png", "000069 (4).png", "000069.png", "000070 (1).png", "000070 (2).png", "000070 (3).png", "000070 (4).png", "000070.png", "000071 (1).png", "000071 (2).png", "000071 (3).png", "000071 (4).png", "000071.png", "000072 (1).png", "000072 (2).png", "000072 (3).png", "000072 (4).png", "000072.png", "000073 (1).png", "000073 (2).png", "000073 (3).png", "000073 (4).png", "000073.png", "000074 (1).png", "000074 (2).png", "000074 (3).png", "000074 (4).png", "000074.png", "000075 (1).png", "000075 (2).png", "000075 (3).png", "000075 (4).png", "000075.png", "000076 (1).png", "000076 (2).png", "000076 (3).png", "000076 (4).png", "000076.png", "000077 (1).png", "000077 (2).png", "000077 (3).png", "000077 (4).png", "000077.png", "000078 (1).png", "000078 (2).png", "000078 (3).png", "000078 (4).png", "000078.png", "000079 (1).png", "000079 (2).png", "000079 (3).png", "000079 (4).png", "000079.png", "000080 (1).png", "000080 (2).png", "000080 (3).png", "000080 (4).png", "000080.png", "000081 (1).png", "000081 (2).png", "000081 (3).png", "000081 (4).png", "000081.png", "000082 (1).png", "000082 (2).png", "000082 (3).png", "000082 (4).png", "000082.png", "000083 (1).png", "000083 (2).png", "000083 (3).png", "000083 (4).png", "000083.png", "000084 (1).png", "000084 (2).png", "000084 (3).png", "000084 (4).png", "000084.png", "000085 (1).png", "000085 (2).png", "000085 (3).png", "000085 (4).png", "000085.png", "000086 (1).png", "000086 (2).png", "000086 (3).png", "000086 (4).png", "000086.png", "000087 (1).png", "000087 (2).png", "000087 (3).png", "000087 (4).png", "000087.png", "000088 (1).png", "000088 (2).png", "000088 (3).png", "000088 (4).png", "000088.png", "000089 (1).png", "000089 (2).png", "000089 (3).png", "000089 (4).png", "000089.png", "000090 (1).png", "000090 (2).png", "000090 (3).png", "000090 (4).png", "000090.png", "000091 (1).png", "000091 (2).png", "000091 (3).png", "000091 (4).png", "000091.png", "000092 (1).png", "000092 (2).png", "000092 (3).png", "000092 (4).png", "000092.png", "000093 (1).png", "000093 (2).png", "000093 (3).png", "000093 (4).png", "000093.png", "000094 (1).png", "000094 (2).png", "000094 (3).png", "000094 (4).png", "000094.png", "000095 (1).png", "000095 (2).png", "000095 (3).png", "000095 (4).png", "000095.png", "000096 (1).png", "000096 (2).png", "000096 (3).png", "000096 (4).png", "000096.png", "000097 (1).png", "000097 (2).png", "000097 (3).png", "000097 (4).png", "000097.png", "000098 (1).png", "000098 (2).png", "000098 (3).png", "000098 (4).png", "000098.png", "000099 (1).png", "000099 (2).png", "000099 (3).png", "000099 (4).png", "000099.png", "000100 (1).png", "000100 (2).png", "000100 (3).png", "000100 (4).png", "000100.png", "000101 (1).png", "000101 (2).png", "000101 (3).png", "000101 (4).png", "000101.png", "000102 (1).png", "000102 (2).png", "000102 (3).png", "000102 (4).png", "000102.png", "000103 (1).png", "000103 (2).png", "000103 (3).png", "000103 (4).png", "000103.png", "000104 (1).png", "000104 (2).png", "000104 (3).png", "000104 (4).png", "000104.png", "000105 (1).png", "000105 (2).png", "000105 (3).png", "000105 (4).png", "000105.png", "000106 (1).png", "000106 (2).png", "000106 (3).png", "000106 (4).png", "000106.png", "000107 (1).png", "000107 (2).png", "000107 (3).png", "000107 (4).png", "000107.png", "000108 (1).png", "000108 (2).png", "000108 (3).png", "000108 (4).png", "000108.png", "000109 (1).png", "000109 (2).png", "000109 (3).png", "000109 (4).png", "000109.png", "000110 (1).png", "000110 (2).png", "000110 (3).png", "000110 (4).png", "000110.png", "000111 (1).png", "000111 (2).png", "000111 (3).png", "000111 (4).png", "000111.png", "000112 (1).png", "000112 (2).png", "000112 (3).png", "000112 (4).png", "000112.png", "000113 (1).png", "000113 (2).png", "000113 (3).png", "000113 (4).png", "000113.png", "000114 (1).png", "000114 (2).png", "000114 (3).png", "000114 (4).png", "000114.png", "000115 (1).png", "000115 (2).png", "000115 (3).png", "000115 (4).png", "000115.png", "000116 (1).png", "000116 (2).png", "000116 (3).png", "000116 (4).png", "000116.png", "000117 (1).png", "000117 (2).png", "000117 (3).png", "000117 (4).png", "000117.png", "000118 (1).png", "000118 (2).png", "000118 (3).png", "000118 (4).png", "000118.png", "000119 (1).png", "000119 (2).png", "000119 (3).png", "000119 (4).png", "000119.png", "000120 (1).png", "000120 (2).png", "000120 (3).png", "000120 (4).png", "000120.png", "000121 (1).png", "000121 (2).png", "000121 (3).png", "000121 (4).png", "000121.png", "000122 (1).png", "000122 (2).png", "000122 (3).png", "000122 (4).png", "000122.png", "000123 (1).png", "000123 (2).png", "000123 (3).png", "000123 (4).png", "000123.png", "000124 (1).png", "000124 (2).png", "000124 (3).png", "000124 (4).png", "000124.png", "000125 (1).png", "000125 (2).png", "000125 (3).png", "000125 (4).png", "000125.png", "000126 (1).png", "000126 (2).png", "000126 (3).png", "000126 (4).png", "000126.png", "000127 (1).png", "000127 (2).png", "000127 (3).png", "000127 (4).png", "000127.png", "000128 (1).png", "000128 (2).png", "000128 (3).png", "000128 (4).png", "000128.png", "000129 (1).png", "000129 (2).png", "000129 (3).png", "000129 (4).png", "000129.png", "000130 (1).png", "000130 (2).png", "000130 (3).png", "000130 (4).png", "000130.png", "000131 (1).png", "000131 (2).png", "000131 (3).png", "000131 (4).png", "000131.png", "000132 (1).png", "000132 (2).png", "000132 (3).png", "000132 (4).png", "000132.png", "000133 (1).png", "000133 (2).png", "000133 (3).png", "000133 (4).png", "000133.png", "000134 (1).png", "000134 (2).png", "000134 (3).png", "000134 (4).png", "000134.png", "000135 (1).png", "000135 (2).png", "000135 (3).png", "000135 (4).png", "000135.png", "000136 (1).png", "000136 (2).png", "000136 (3).png", "000136 (4).png", "000136.png", "000137 (1).png", "000137 (2).png", "000137 (3).png", "000137.png", "000138 (1).png", "000138 (2).png", "000138 (3).png", "000138.png", "000139 (1).png", "000139 (2).png", "000139 (3).png", "000139.png", "000140 (1).png", "000140 (2).png", "000140 (3).png", "000140.png", "000141 (1).png", "000141 (2).png", "000141 (3).png", "000141.png", "000142 (1).png", "000142 (2).png", "000142 (3).png", "000142.png", "000143 (1).png", "000143 (2).png", "000143 (3).png", "000143.png", "000144 (1).png", "000144 (2).png", "000144 (3).png", "000144.png", "000145 (1).png", "000145 (2).png", "000145 (3).png", "000145.png", "000146 (1).png", "000146 (2).png", "000146 (3).png", "000146.png", "000147 (1).png", "000147 (2).png", "000147 (3).png", "000147.png", "000148 (1).png", "000148 (2).png", "000148 (3).png", "000148.png", "000149 (1).png", "000149 (2).png", "000149 (3).png", "000149.png", "000150 (1).png", "000150 (2).png", "000150 (3).png", "000150.png", "000151 (1).png", "000151 (2).png", "000151 (3).png", "000151.png", "000152 (1).png", "000152 (2).png", "000152 (3).png", "000152.png", "000153 (1).png", "000153 (2).png", "000153 (3).png", "000153.png", "000154 (1).png", "000154 (2).png", "000154 (3).png", "000154.png", "000155 (1).png", "000155 (2).png", "000155 (3).png", "000155.png", "000156 (1).png", "000156 (2).png", "000156 (3).png", "000156.png", "000157 (1).png", "000157 (2).png", "000157 (3).png", "000157.png", "000158 (1).png", "000158 (2).png", "000158 (3).png", "000158.png", "000159 (1).png", "000159 (2).png", "000159 (3).png", "000159.png", "000160 (1).png", "000160 (2).png", "000160 (3).png", "000160.png", "000161 (1).png", "000161 (2).png", "000161 (3).png", "000161.png", "000162 (1).png", "000162 (2).png", "000162 (3).png", "000162.png", "000163 (1).png", "000163 (2).png", "000163 (3).png", "000163.png", "000164 (1).png", "000164 (2).png", "000164 (3).png", "000164.png", "000165 (1).png", "000165 (2).png", "000165 (3).png", "000165.png", "000166 (1).png", "000166 (2).png", "000166 (3).png", "000166.png", "000167 (1).png", "000167 (2).png", "000167 (3).png", "000167.png", "000168 (1).png", "000168 (2).png", "000168 (3).png", "000168.png", "000169 (1).png", "000169 (2).png", "000169 (3).png", "000169.png", "000170 (1).png", "000170 (2).png", "000170 (3).png", "000170.png", "000171 (1).png", "000171 (2).png", "000171 (3).png", "000171.png", "000172 (1).png", "000172 (2).png", "000172 (3).png", "000172.png", "000173 (1).png", "000173 (2).png", "000173 (3).png", "000173.png", "000174 (1).png", "000174 (2).png", "000174 (3).png", "000174.png", "000175 (1).png", "000175 (2).png", "000175 (3).png", "000175.png", "000176 (1).png", "000176 (2).png", "000176 (3).png", "000176.png", "000177 (1).png", "000177 (2).png", "000177 (3).png", "000177.png", "000178 (1).png", "000178 (2).png", "000178 (3).png", "000178.png", "000179 (1).png", "000179 (2).png", "000179 (3).png", "000179.png", "000180 (1).png", "000180 (2).png", "000180 (3).png", "000180.png", "000181 (1).png", "000181 (2).png", "000181 (3).png", "000181.png", "000182 (1).png", "000182 (2).png", "000182 (3).png", "000182.png", "000183 (1).png", "000183 (2).png", "000183 (3).png", "000183.png", "000184 (1).png", "000184 (2).png", "000184 (3).png", "000184.png", "000185 (1).png", "000185 (2).png", "000185 (3).png", "000185.png", "000186 (1).png", "000186 (2).png", "000186 (3).png", "000186.png", "000187 (1).png", "000187 (2).png", "000187 (3).png", "000187.png", "000188 (1).png", "000188 (2).png", "000188 (3).png", "000188.png", "000189 (1).png", "000189 (2).png", "000189 (3).png", "000189.png", "000190 (1).png", "000190 (2).png", "000190 (3).png", "000190.png", "000191 (1).png", "000191 (2).png", "000191 (3).png", "000191.png", "000192 (1).png", "000192 (2).png", "000192 (3).png", "000192.png", "000193 (1).png", "000193 (2).png", "000193 (3).png", "000193.png", "000194 (1).png", "000194 (2).png", "000194 (3).png", "000194.png", "000195 (1).png", "000195 (2).png", "000195 (3).png", "000195.png", "000196 (1).png", "000196 (2).png", "000196 (3).png", "000196.png", "000197 (1).png", "000197 (2).png", "000197 (3).png", "000197.png", "000198 (1).png", "000198 (2).png", "000198 (3).png", "000198.png", "000199 (1).png", "000199 (2).png", "000199 (3).png", "000199.png", "000200 (1).png", "000200 (2).png", "000200 (3).png", "000200.png", "000201 (1).png", "000201 (2).png", "000201 (3).png", "000201.png", "000202 (1).png", "000202 (2).png", "000202 (3).png", "000202.png", "000203 (1).png", "000203 (2).png", "000203 (3).png", "000203.png", "000204 (1).png", "000204 (2).png", "000204 (3).png", "000204.png", "000205 (1).png", "000205 (2).png", "000205 (3).png", "000205.png", "000206 (1).png", "000206 (2).png", "000206 (3).png", "000206.png", "000207 (1).png", "000207 (2).png", "000207 (3).png", "000207.png", "000208 (1).png", "000208 (2).png", "000208 (3).png", "000208.png", "000209 (1).png", "000209 (2).png", "000209 (3).png", "000209.png", "000210 (1).png", "000210 (2).png", "000210 (3).png", "000210.png", "000211 (1).png", "000211 (2).png", "000211 (3).png", "000211.png", "000212 (1).png", "000212 (2).png", "000212 (3).png", "000212.png", "000213 (1).png", "000213 (2).png", "000213 (3).png", "000213.png", "000214 (1).png", "000214 (2).png", "000214 (3).png", "000214.png", "000215 (1).png", "000215 (2).png", "000215 (3).png", "000215.png", "000216 (1).png", "000216 (2).png", "000216 (3).png", "000216.png", "000217 (1).png", "000217 (2).png", "000217 (3).png", "000217.png", "000218 (1).png", "000218 (2).png", "000218 (3).png", "000218.png", "000219 (1).png", "000219 (2).png", "000219 (3).png", "000219.png", "000220 (1).png", "000220 (2).png", "000220 (3).png", "000220.png", "000221 (1).png", "000221 (2).png", "000221 (3).png", "000221.png", "000222 (1).png", "000222 (2).png", "000222 (3).png", "000222.png", "000223 (1).png", "000223 (2).png", "000223 (3).png", "000223.png", "000224 (1).png", "000224 (2).png", "000224 (3).png", "000224.png", "000225 (1).png", "000225 (2).png", "000225 (3).png", "000225.png", "000226 (1).png", "000226 (2).png", "000226 (3).png", "000226.png", "000227 (1).png", "000227 (2).png", "000227 (3).png", "000227.png", "000228 (1).png", "000228 (2).png", "000228 (3).png", "000228.png", "000229 (1).png", "000229 (2).png", "000229 (3).png", "000229.png", "000230 (1).png", "000230 (2).png", "000230 (3).png", "000230.png", "000231 (1).png", "000231 (2).png", "000231 (3).png", "000231.png", "000232 (1).png", "000232 (2).png", "000232 (3).png", "000232.png", "000233 (1).png", "000233 (2).png", "000233 (3).png", "000233.png", "000234 (1).png", "000234 (2).png", "000234 (3).png", "000234.png", "000235 (1).png", "000235 (2).png", "000235 (3).png", "000235.png", "000236 (1).png", "000236 (2).png", "000236 (3).png", "000236.png", "000237 (1).png", "000237 (2).png", "000237 (3).png", "000237.png", "000238 (1).png", "000238 (2).png", "000238 (3).png", "000238.png", "000239 (1).png", "000239 (2).png", "000239 (3).png", "000239.png", "000240 (1).png", "000240 (2).png", "000240 (3).png", "000240.png", "000241 (1).png", "000241 (2).png", "000241 (3).png", "000241.png", "000242 (1).png", "000242 (2).png", "000242 (3).png", "000242.png", "000243 (1).png", "000243 (2).png", "000243 (3).png", "000243.png", "000244 (1).png", "000244 (2).png", "000244 (3).png", "000244.png", "000245 (1).png", "000245 (2).png", "000245 (3).png", "000245.png", "000246 (1).png", "000246 (2).png", "000246 (3).png", "000246.png", "000247 (1).png", "000247 (2).png", "000247 (3).png", "000247.png", "000248 (1).png", "000248 (2).png", "000248 (3).png", "000248.png", "000249 (1).png", "000249 (2).png", "000249 (3).png", "000249.png", "000250 (1).png", "000250 (2).png", "000250 (3).png", "000250.png", "000251 (1).png", "000251 (2).png", "000251 (3).png", "000251.png", "000252 (1).png", "000252 (2).png", "000252 (3).png", "000252.png", "000253 (1).png", "000253 (2).png", "000253 (3).png", "000253.png", "000254 (1).png", "000254 (2).png", "000254 (3).png", "000254.png", "000255 (1).png", "000255 (2).png", "000255 (3).png", "000255.png", "000256 (1).png", "000256 (2).png", "000256 (3).png", "000256.png", "000257 (1).png", "000257 (2).png", "000257 (3).png", "000257.png", "000258 (1).png", "000258 (2).png", "000258 (3).png", "000258.png", "000259 (1).png", "000259 (2).png", "000259 (3).png", "000259.png", "000260 (1).png", "000260 (2).png", "000260 (3).png", "000260.png", "000261 (1).png", "000261 (2).png", "000261 (3).png", "000261.png", "000262 (1).png", "000262 (2).png", "000262 (3).png", "000262.png", "000263 (1).png", "000263 (2).png", "000263 (3).png", "000263.png", "000264 (1).png", "000264 (2).png", "000264 (3).png", "000264.png", "000265 (1).png", "000265 (2).png", "000265 (3).png", "000265.png", "000266 (1).png", "000266 (2).png", "000266 (3).png", "000266.png", "000267 (1).png", "000267 (2).png", "000267 (3).png", "000267.png", "000268 (1).png", "000268 (2).png", "000268 (3).png", "000268.png", "000269 (1).png", "000269 (2).png", "000269 (3).png", "000269.png", "000270 (1).png", "000270 (2).png", "000270 (3).png", "000270.png", "000271 (1).png", "000271 (2).png", "000271 (3).png", "000271.png", "000272 (1).png", "000272 (2).png", "000272 (3).png", "000272.png", "000273 (1).png", "000273 (2).png", "000273 (3).png", "000273.png", "000274 (1).png", "000274 (2).png", "000274 (3).png", "000274.png", "000275 (1).png", "000275 (2).png", "000275 (3).png", "000275.png", "000276 (1).png", "000276 (2).png", "000276 (3).png", "000276.png", "000277 (1).png", "000277 (2).png", "000277.png", "000278 (1).png", "000278 (2).png", "000278.png", "000279 (1).png", "000279 (2).png", "000279.png", "000280 (1).png", "000280 (2).png", "000280.png", "000281 (1).png", "000281 (2).png", "000281.png", "000282 (1).png", "000282 (2).png", "000282.png", "000283 (1).png", "000283.png", "000284 (1).png", "000284.png", "000285 (1).png", "000285.png", "000286 (1).png", "000286.png", "000287 (1).png", "000287.png", "000288 (1).png", "000288.png", "000289.png", "000290.png", "000291.png", "000292.png", "000293.png", "000294.png", "000295.png", "000296.png", "000297.png", "000298.png", "000299.png", "000300.png", "000301.png", "000302.png", "000303.png", "000304.png", "000305.png", "000306.png", "000307.png", "000308.png", "000309.png", "000310.png", "000311.png", "000312.png", "000313.png", "000314.png", "084419f11856de5234c3a8a3eba3aac7.jpg", "13753499768289aa1210f59c25731506.png", "38f85f76ca64ed6738d5ca0c05542950_origin(1).jpg", "3ea2a2e2aa7aea7bdaab0ed41c3e766d.png", "5b6b0f9e128f5575e17785e97628311a.png", "62683d69df9198b4b8ec71806fe147d8.png", "8fb439ac734b89f1729916e0c56bcf39.png", "A3E38E3E-9369-4C72-A022-E5EC73414D11-73729-00001F1EBB363F3A.jpg", "ComfyUI_00018_.png", "Qwen_Edit2511_\u56fe\u751f\u56fe_00003_.png", "Qwen_\u6587\u751f\u56fe_00006_.png", "clipboard-2026-06-09T08-37-30-236Z-06840286.png", "clipboard-2026-06-09T08-55-09-228Z-06840286.png", "clipboard-2026-06-09T10-24-30-214Z-f4ada252.png", "clipboard-2026-06-10T01-13-36-419Z-06840286.png", "clipboard-2026-06-10T01-43-35-666Z-ed57443b.png", "clipboard-2026-06-10T02-16-15-866Z-9166c31e.png", "clipboard-2026-06-10T02-25-26-729Z-5947938f.jpg", "clipboard-2026-06-10T03-06-23-575Z-68d3b00e.jpg", "clipboard-2026-06-10T03-06-23-577Z-bdb0dae5.png", "clipboard-2026-06-11T08-00-51-819Z-61275a50.jpg", "clipboard-2026-06-11T08-24-13-352Z-fe58af8f.jpg", "comfyui_kaoyan_1.png", "comfyui_kaoyan_2.png", "comfyui_kaoyan_800_1(2).png", "example.png", "img01_classroom.jpg", "img02_club.jpg", "lQDPKeGXrn043cfNDADNEgCwKQa4O46zR9UH3SKJ-rfQAA_4608_3072.jpg", "xz.png", "\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17812587071441.png", "\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17821189242311.png", "\u603b.png", "\u753b\u677f-2_03.jpg", "\u95e8\u5e97\u7cfb\u7edf\u5c0f\u7a0b\u5e8f.png", "\u98df\u54c1\u8336\u53f6\u76f4\u901a\u8f66\u4e3b\u56fe.jpg"], {"image_upload": true}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["AnyText_images", "IMAGE"], "output_is_list": [false, false], "output_name": ["AnyText_images", "mask_img"], "name": "AnyText_Pose_IMG", "display_name": "AnyText Pose IMG", "description": "", "python_module": "custom_nodes.ComfyUI-AnyText", "category": "ExtraModels/AnyText", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "AnyText_translator": {"input": {"required": {"model": [["utrobinmv/t5_translate_en_ru_zh_small_1024", "damo/nlp_csanmt_translation_zh2en"], {"default": "utrobinmv/t5_translate_en_ru_zh_small_1024"}], "prompt": ["STRING", {"default": "\u8fd9\u91cc\u662f\u5355\u6279\u6b21\u7ffb\u8bd1\u6587\u672c\u8f93\u5165\u3002\n\u58f0\u660e\u8865\u5145\u8bf4\uff0c\u6c83\u4f26\u7684\u540c\u4e8b\u90fd\u6df1\u611f\u9707\u60ca\uff0c\u5e76\u4e14\u5e0c\u671b\u4ed6\u80fd\u591f\u6295\u6848\u81ea\u9996\u3002\n\u5c3d\u91cf\u8f93\u5165\u5355\u53e5\u6587\u672c\uff0c\u5982\u679c\u662f\u591a\u53e5\u957f\u6587\u672c\u5efa\u8bae\u4eba\u5de5\u5206\u53e5\uff0c\u5426\u5219\u53ef\u80fd\u51fa\u73b0\u6f0f\u8bd1\u6216\u672a\u8bd1\u7b49\u60c5\u51b5\uff01\uff01\uff01\n\u4f7f\u7528\u6362\u884c\uff0c\u6548\u679c\u53ef\u80fd\u66f4\u4f73\u3002", "multiline": true}], "Batch_prompt": ["STRING", {"default": "\u8fd9\u91cc\u662f\u591a\u6279\u6b21\u7ffb\u8bd1\u6587\u672c\u8f93\u5165\uff0c\u4f7f\u7528\u6362\u884c\u8fdb\u884c\u5206\u5272\u3002\n\u5929\u4e0a\u6389\u9985\u997c\u5566\uff0c\u5feb\u53bb\u770b\u8d85\u4eba\uff01\uff01\uff01\n\u98de\u6d41\u76f4\u4e0b\u4e09\u5343\u5c3a\uff0c\u7591\u4f3c\u94f6\u6cb3\u843d\u4e5d\u5929\u3002\n\u542f\u7528Batch_Newline\u8868\u793a\u8f93\u51fa\u7684\u7ffb\u8bd1\u4f1a\u6309\u6362\u884c\u8f93\u5165\u8fdb\u884c\u4e8c\u6b21\u6362\u884c,\u5426\u5219\u662f\u7528\u7a7a\u683c\u5408\u5e76\u8d77\u6765\u7684\u6574\u7bc7\u6587\u672c\u3002", "multiline": true}], "t5_Target_Language": [["en", "zh", "ru"], {"default": "en"}], "if_Batch": ["BOOLEAN", {"default": false}], "Batch_Newline": ["BOOLEAN", {"default": true}], "device": [["auto", "cuda", "cpu", "mps", "xpu"], {"default": "auto"}]}}, "input_order": {"required": ["model", "prompt", "Batch_prompt", "t5_Target_Language", "if_Batch", "Batch_Newline", "device"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["text"], "name": "AnyText_translator", "display_name": "AnyText Translator", "description": "", "python_module": "custom_nodes.ComfyUI-AnyText", "category": "ExtraModels/AnyText", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "KSampler Gradually Adding More Denoise (efficient)": {"input": {"required": {"model": ["MODEL"], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "latent_image": ["LATENT"], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"]], "start_denoise": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "denoise_increment": ["FLOAT", {"default": 0.1, "min": 0.0, "max": 1.0, "step": 0.1}], "denoise_increment_steps": ["INT", {"default": 20, "min": 1, "max": 10000}]}, "optional": {"optional_vae": ["VAE"]}}, "input_order": {"required": ["model", "positive", "negative", "latent_image", "seed", "steps", "cfg", "sampler_name", "scheduler", "start_denoise", "denoise_increment", "denoise_increment_steps"], "optional": ["optional_vae"]}, "is_input_list": false, "output": ["MODEL", "CONDITIONING", "CONDITIONING", "LATENT", "VAE"], "output_is_list": [false, false, false, false, false], "output_name": ["MODEL", "CONDITIONING+", "CONDITIONING-", "LATENT", "VAE"], "name": "KSampler Gradually Adding More Denoise (efficient)", "display_name": "KSampler Gradually Adding More Denoise (efficient)", "description": "", "python_module": "custom_nodes.ComfyUI-Frame-Interpolation", "category": "ComfyUI-Frame-Interpolation/others", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "GMFSS Fortuna VFI": {"input": {"required": {"ckpt_name": [["GMFSS_fortuna_union", "GMFSS_fortuna"]], "frames": ["IMAGE"], "clear_cache_after_n_frames": ["INT", {"default": 10, "min": 1, "max": 1000}], "multiplier": ["INT", {"default": 2, "min": 2, "max": 1000}]}, "optional": {"optional_interpolation_states": ["INTERPOLATION_STATES"]}}, "input_order": {"required": ["ckpt_name", "frames", "clear_cache_after_n_frames", "multiplier"], "optional": ["optional_interpolation_states"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "GMFSS Fortuna VFI", "display_name": "GMFSS Fortuna VFI", "description": "", "python_module": "custom_nodes.ComfyUI-Frame-Interpolation", "category": "ComfyUI-Frame-Interpolation/VFI", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IFRNet VFI": {"input": {"required": {"ckpt_name": [["IFRNet_S_Vimeo90K.pth", "IFRNet_L_Vimeo90K.pth", "IFRNet_S_GoPro.pth", "IFRNet_L_GoPro.pth"]], "frames": ["IMAGE"], "clear_cache_after_n_frames": ["INT", {"default": 10, "min": 1, "max": 1000}], "multiplier": ["INT", {"default": 2, "min": 2, "max": 1000}], "scale_factor": [[0.25, 0.5, 1.0, 2.0, 4.0], {"default": 1.0}]}, "optional": {"optional_interpolation_states": ["INTERPOLATION_STATES"]}}, "input_order": {"required": ["ckpt_name", "frames", "clear_cache_after_n_frames", "multiplier", "scale_factor"], "optional": ["optional_interpolation_states"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "IFRNet VFI", "display_name": "IFRNet VFI", "description": "", "python_module": "custom_nodes.ComfyUI-Frame-Interpolation", "category": "ComfyUI-Frame-Interpolation/VFI", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IFUnet VFI": {"input": {"required": {"ckpt_name": [["IFUNet.pth"]], "frames": ["IMAGE"], "clear_cache_after_n_frames": ["INT", {"default": 10, "min": 1, "max": 1000}], "multiplier": ["INT", {"default": 2, "min": 2, "max": 1000}], "scale_factor": ["FLOAT", {"default": 1.0, "min": 0.1, "max": 100, "step": 0.1}], "ensemble": ["BOOLEAN", {"default": true}]}, "optional": {"optional_interpolation_states": ["INTERPOLATION_STATES"]}}, "input_order": {"required": ["ckpt_name", "frames", "clear_cache_after_n_frames", "multiplier", "scale_factor", "ensemble"], "optional": ["optional_interpolation_states"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "IFUnet VFI", "display_name": "IFUnet VFI", "description": "", "python_module": "custom_nodes.ComfyUI-Frame-Interpolation", "category": "ComfyUI-Frame-Interpolation/VFI", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "M2M VFI": {"input": {"required": {"ckpt_name": [["M2M.pth"]], "frames": ["IMAGE"], "clear_cache_after_n_frames": ["INT", {"default": 10, "min": 1, "max": 1000}], "multiplier": ["INT", {"default": 2, "min": 2, "max": 1000}]}, "optional": {"optional_interpolation_states": ["INTERPOLATION_STATES"]}}, "input_order": {"required": ["ckpt_name", "frames", "clear_cache_after_n_frames", "multiplier"], "optional": ["optional_interpolation_states"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "M2M VFI", "display_name": "M2M VFI", "description": "", "python_module": "custom_nodes.ComfyUI-Frame-Interpolation", "category": "ComfyUI-Frame-Interpolation/VFI", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "RIFE VFI": {"input": {"required": {"ckpt_name": [["sudo_rife4_269.662_testV1_scale1.pth", "rife47.pth", "rife49.pth", "rife417.pth", "rife426.pth"], {"default": "rife49.pth"}], "frames": ["IMAGE"], "clear_cache_after_n_frames": ["INT", {"default": 10, "min": 1, "max": 1000}], "multiplier": ["INT", {"default": 2, "min": 1}], "fast_mode": ["BOOLEAN", {"default": true}], "ensemble": ["BOOLEAN", {"default": true}], "scale_factor": [[0.25, 0.5, 1.0, 2.0, 4.0], {"default": 1.0}], "dtype": [["float32", "float16", "bfloat16"], {"default": "float32"}], "torch_compile": ["BOOLEAN", {"default": false, "tooltip": "Compile the model with torch.compile() for 10-30% faster inference after the first (warm-up) run. Requires PyTorch 2.0+."}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64, "tooltip": "Number of interpolation tasks per GPU call. Higher values improve throughput but use more VRAM. Set to 1 for the most conservative behaviour."}]}, "optional": {"optional_interpolation_states": ["INTERPOLATION_STATES"]}}, "input_order": {"required": ["ckpt_name", "frames", "clear_cache_after_n_frames", "multiplier", "fast_mode", "ensemble", "scale_factor", "dtype", "torch_compile", "batch_size"], "optional": ["optional_interpolation_states"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "RIFE VFI", "display_name": "RIFE VFI (recommend rife4.25+)", "description": "", "python_module": "custom_nodes.ComfyUI-Frame-Interpolation", "category": "ComfyUI-Frame-Interpolation/VFI", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "Sepconv VFI": {"input": {"required": {"ckpt_name": [["sepconv.pth"]], "frames": ["IMAGE"], "clear_cache_after_n_frames": ["INT", {"default": 10, "min": 1, "max": 1000}], "multiplier": ["INT", {"default": 2, "min": 2, "max": 1000}]}, "optional": {"optional_interpolation_states": ["INTERPOLATION_STATES"]}}, "input_order": {"required": ["ckpt_name", "frames", "clear_cache_after_n_frames", "multiplier"], "optional": ["optional_interpolation_states"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "Sepconv VFI", "display_name": "Sepconv VFI", "description": "", "python_module": "custom_nodes.ComfyUI-Frame-Interpolation", "category": "ComfyUI-Frame-Interpolation/VFI", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "AMT VFI": {"input": {"required": {"ckpt_name": [["amt-s.pth", "amt-l.pth", "amt-g.pth", "gopro_amt-s.pth"]], "frames": ["IMAGE"], "clear_cache_after_n_frames": ["INT", {"default": 1, "min": 1, "max": 100}], "multiplier": ["INT", {"default": 2, "min": 2, "max": 1000}]}, "optional": {"optional_interpolation_states": ["INTERPOLATION_STATES"]}}, "input_order": {"required": ["ckpt_name", "frames", "clear_cache_after_n_frames", "multiplier"], "optional": ["optional_interpolation_states"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "AMT VFI", "display_name": "AMT VFI", "description": "", "python_module": "custom_nodes.ComfyUI-Frame-Interpolation", "category": "ComfyUI-Frame-Interpolation/VFI", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FILM VFI": {"input": {"required": {"ckpt_name": [["film_net_fp32.pt"]], "frames": ["IMAGE"], "clear_cache_after_n_frames": ["INT", {"default": 10, "min": 1, "max": 1000}], "multiplier": ["INT", {"default": 2, "min": 2, "max": 1000}]}, "optional": {"optional_interpolation_states": ["INTERPOLATION_STATES"]}}, "input_order": {"required": ["ckpt_name", "frames", "clear_cache_after_n_frames", "multiplier"], "optional": ["optional_interpolation_states"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "FILM VFI", "display_name": "FILM VFI", "description": "", "python_module": "custom_nodes.ComfyUI-Frame-Interpolation", "category": "ComfyUI-Frame-Interpolation/VFI", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "Make Interpolation State List": {"input": {"required": {"frame_indices": ["STRING", {"multiline": true, "default": "1,2,3"}], "is_skip_list": ["BOOLEAN", {"default": true}]}}, "input_order": {"required": ["frame_indices", "is_skip_list"]}, "is_input_list": false, "output": ["INTERPOLATION_STATES"], "output_is_list": [false], "output_name": ["INTERPOLATION_STATES"], "name": "Make Interpolation State List", "display_name": "Make Interpolation State List", "description": "", "python_module": "custom_nodes.ComfyUI-Frame-Interpolation", "category": "ComfyUI-Frame-Interpolation/VFI", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "STMFNet VFI": {"input": {"required": {"ckpt_name": [["stmfnet.pth"]], "frames": ["IMAGE"], "clear_cache_after_n_frames": ["INT", {"default": 10, "min": 1, "max": 1000}], "multiplier": ["INT", {"default": 2, "min": 2, "max": 2}], "duplicate_first_last_frames": ["BOOLEAN", {"default": false}]}, "optional": {"optional_interpolation_states": ["INTERPOLATION_STATES"]}}, "input_order": {"required": ["ckpt_name", "frames", "clear_cache_after_n_frames", "multiplier", "duplicate_first_last_frames"], "optional": ["optional_interpolation_states"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "STMFNet VFI", "display_name": "STMFNet VFI", "description": "", "python_module": "custom_nodes.ComfyUI-Frame-Interpolation", "category": "ComfyUI-Frame-Interpolation/VFI", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FLAVR VFI": {"input": {"required": {"ckpt_name": [["FLAVR_2x.pth", "FLAVR_4x.pth", "FLAVR_8x.pth"]], "frames": ["IMAGE"], "clear_cache_after_n_frames": ["INT", {"default": 10, "min": 1, "max": 1000}], "multiplier": ["INT", {"default": 2, "min": 2, "max": 2}], "duplicate_first_last_frames": ["BOOLEAN", {"default": false}]}, "optional": {"optional_interpolation_states": ["INTERPOLATION_STATES"]}}, "input_order": {"required": ["ckpt_name", "frames", "clear_cache_after_n_frames", "multiplier", "duplicate_first_last_frames"], "optional": ["optional_interpolation_states"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "FLAVR VFI", "display_name": "FLAVR VFI", "description": "", "python_module": "custom_nodes.ComfyUI-Frame-Interpolation", "category": "ComfyUI-Frame-Interpolation/VFI", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CAIN VFI": {"input": {"required": {"ckpt_name": [["pretrained_cain.pth"]], "frames": ["IMAGE"], "clear_cache_after_n_frames": ["INT", {"default": 10, "min": 1, "max": 1000}], "multiplier": ["INT", {"default": 2, "min": 2, "max": 1000}]}, "optional": {"optional_interpolation_states": ["INTERPOLATION_STATES"]}}, "input_order": {"required": ["ckpt_name", "frames", "clear_cache_after_n_frames", "multiplier"], "optional": ["optional_interpolation_states"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "CAIN VFI", "display_name": "CAIN VFI", "description": "", "python_module": "custom_nodes.ComfyUI-Frame-Interpolation", "category": "ComfyUI-Frame-Interpolation/VFI", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ATM VFI": {"input": {"required": {"ckpt_name": [["atm-vfi-base.pt", "atm-vfi-lite.pt", "atm-vfi-base-pct.pt"]], "frames": ["IMAGE"], "clear_cache_after_n_frames": ["INT", {"default": 10, "min": 1, "max": 1000}], "multiplier": ["INT", {"default": 2, "min": 2, "max": 2}], "global_motion": [["On", "On with Ensemble (slowest)", "Off (fastest)"]]}, "optional": {"optional_interpolation_states": ["INTERPOLATION_STATES"]}}, "input_order": {"required": ["ckpt_name", "frames", "clear_cache_after_n_frames", "multiplier", "global_motion"], "optional": ["optional_interpolation_states"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ATM VFI", "display_name": "ATM VFI (only supports 2x multiplier)", "description": "", "python_module": "custom_nodes.ComfyUI-Frame-Interpolation", "category": "ComfyUI-Frame-Interpolation/VFI", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "MOMO VFI": {"input": {"required": {"ckpt_name": [["momo-base.pth", "momo-lite.pth"]], "frames": ["IMAGE"], "clear_cache_after_n_frames": ["INT", {"default": 10, "min": 1, "max": 1000}], "multiplier": ["INT", {"default": 2, "min": 2, "max": 2}], "num_inference_steps": ["INT", {"default": 8, "min": 2, "max": 20}]}, "optional": {"optional_interpolation_states": ["INTERPOLATION_STATES"]}}, "input_order": {"required": ["ckpt_name", "frames", "clear_cache_after_n_frames", "multiplier", "num_inference_steps"], "optional": ["optional_interpolation_states"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "MOMO VFI", "display_name": "MOMO VFI (only supports 2x multiplier)", "description": "", "python_module": "custom_nodes.ComfyUI-Frame-Interpolation", "category": "ComfyUI-Frame-Interpolation/VFI", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VFI FloatToInt": {"input": {"required": {"float": ["FLOAT", {"default": 0, "min": 0, "step": 0.01}]}}, "input_order": {"required": ["float"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["INT"], "name": "VFI FloatToInt", "display_name": "VFI FloatToInt", "description": "", "python_module": "custom_nodes.ComfyUI-Frame-Interpolation", "category": "ComfyUI-Frame-Interpolation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "UnetLoaderGGUF": {"input": {"required": {"unet_name": [["Wan2.1_I2V_14B_FusionX-Q4_K_M.gguf", "qwen-image-Q4_K_M.gguf", "qwen-image-edit-2511-Q4_K_M.gguf"]]}}, "input_order": {"required": ["unet_name"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "UnetLoaderGGUF", "display_name": "Unet Loader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPLoaderGGUF": {"input": {"required": {"clip_name": [["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]], "type": [["stable_diffusion", "stable_cascade", "sd3", "stable_audio", "mochi", "ltxv", "pixart", "cosmos", "lumina2", "wan", "hidream", "chroma", "ace", "omnigen2", "qwen_image", "hunyuan_image", "flux2", "ovis", "longcat_image", "cogvideox", "lens", "pixeldit", "ideogram4"]]}}, "input_order": {"required": ["clip_name", "type"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPLoaderGGUF", "display_name": "CLIPLoader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DualCLIPLoaderGGUF": {"input": {"required": {"clip_name1": [["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]], "clip_name2": [["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]], "type": [["sdxl", "sd3", "flux", "hunyuan_video", "hidream", "hunyuan_image", "hunyuan_video_15", "kandinsky5", "kandinsky5_image", "ltxv", "newbie", "ace"]]}}, "input_order": {"required": ["clip_name1", "clip_name2", "type"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "DualCLIPLoaderGGUF", "display_name": "DualCLIPLoader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "TripleCLIPLoaderGGUF": {"input": {"required": {"clip_name1": [["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]], "clip_name2": [["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]], "clip_name3": [["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]]}}, "input_order": {"required": ["clip_name1", "clip_name2", "clip_name3"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "TripleCLIPLoaderGGUF", "display_name": "TripleCLIPLoader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "QuadrupleCLIPLoaderGGUF": {"input": {"required": {"clip_name1": [["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]], "clip_name2": [["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]], "clip_name3": [["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]], "clip_name4": [["clip_g.safetensors", "clip_l.safetensors", "openai--clip-vit-large-patch14\\pytorch_model.bin", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "t5xxl_fp8_e4m3fn.safetensors", "umt5_xxl_fp8_e4m3fn_scaled.safetensors"]]}}, "input_order": {"required": ["clip_name1", "clip_name2", "clip_name3", "clip_name4"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "QuadrupleCLIPLoaderGGUF", "display_name": "QuadrupleCLIPLoader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "UnetLoaderGGUFAdvanced": {"input": {"required": {"unet_name": [["Wan2.1_I2V_14B_FusionX-Q4_K_M.gguf", "qwen-image-Q4_K_M.gguf", "qwen-image-edit-2511-Q4_K_M.gguf"]], "dequant_dtype": [["default", "target", "float32", "float16", "bfloat16"], {"default": "default"}], "patch_dtype": [["default", "target", "float32", "float16", "bfloat16"], {"default": "default"}], "patch_on_device": ["BOOLEAN", {"default": false}]}}, "input_order": {"required": ["unet_name", "dequant_dtype", "patch_dtype", "patch_on_device"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "UnetLoaderGGUFAdvanced", "display_name": "Unet Loader (GGUF/Advanced)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SAMLoader": {"input": {"required": {"model_name": [["sam_vit_b_01ec64.pth"], {"tooltip": "The detection accuracy varies depending on the SAM model. ESAM can only be used if ComfyUI-YoloWorld-EfficientSAM is installed."}], "device_mode": [["AUTO", "Prefer GPU", "CPU"], {"tooltip": "AUTO: Only applicable when a GPU is available. It temporarily loads the SAM_MODEL into VRAM only when the detection function is used.\nPrefer GPU: Tries to keep the SAM_MODEL on the GPU whenever possible. This can be used when there is sufficient VRAM available.\nCPU: Always loads only on the CPU."}]}}, "input_order": {"required": ["model_name", "device_mode"]}, "is_input_list": false, "output": ["SAM_MODEL"], "output_is_list": [false], "output_name": ["SAM_MODEL"], "name": "SAMLoader", "display_name": "SAMLoader (Impact)", "description": "Load the SAM (Segment Anything) model. This can be used in places that utilize SAM detection functionality, such as SAMDetector or SimpleDetector.\nThe SAM detection functionality in Impact Pack must use the SAM_MODEL loaded through this node.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPSegDetectorProvider": {"input": {"required": {"text": ["STRING", {"multiline": false, "tooltip": "Enter the targets to be detected, separated by commas"}], "blur": ["FLOAT", {"min": 0, "max": 15, "step": 0.1, "default": 7, "tooltip": "Blurs the detected mask"}], "threshold": ["FLOAT", {"min": 0, "max": 1, "step": 0.05, "default": 0.4, "tooltip": "Detects only areas that are certain above the threshold."}], "dilation_factor": ["INT", {"min": 0, "max": 10, "step": 1, "default": 4, "tooltip": "Dilates the detected mask."}]}}, "input_order": {"required": ["text", "blur", "threshold", "dilation_factor"]}, "is_input_list": false, "output": ["BBOX_DETECTOR"], "output_is_list": [false], "output_name": ["BBOX_DETECTOR"], "name": "CLIPSegDetectorProvider", "display_name": "CLIPSegDetectorProvider", "description": "Provides a detection function using CLIPSeg, which generates masks based on text prompts.\nTo use this node, the CLIPSeg custom node must be installed.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ONNXDetectorProvider": {"input": {"required": {"model_name": [[]]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["BBOX_DETECTOR"], "output_is_list": [false], "output_name": ["BBOX_DETECTOR"], "name": "ONNXDetectorProvider", "display_name": "ONNXDetectorProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "BitwiseAndMaskForEach": {"input": {"required": {"base_segs": ["SEGS"], "mask_segs": ["SEGS"]}}, "input_order": {"required": ["base_segs", "mask_segs"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "BitwiseAndMaskForEach", "display_name": "Pixelwise(SEGS & SEGS)", "description": "Retains only the overlapping areas between the masks included in base_segs and the mask regions of mask_segs. SEGS with no overlapping mask areas are filtered out.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SubtractMaskForEach": {"input": {"required": {"base_segs": ["SEGS"], "mask_segs": ["SEGS"]}}, "input_order": {"required": ["base_segs", "mask_segs"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "SubtractMaskForEach", "display_name": "Pixelwise(SEGS - SEGS)", "description": "Removes only the overlapping areas between the masks included in base_segs and the mask regions of mask_segs. SEGS with no overlapping mask areas are filtered out.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DetailerForEach": {"input": {"required": {"image": ["IMAGE"], "segs": ["SEGS"], "model": ["MODEL", {"tooltip": "If the `ImpactDummyInput` is connected to the model, the inference stage is skipped."}], "clip": ["CLIP"], "vae": ["VAE"], "guide_size": ["FLOAT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "guide_size_for": ["BOOLEAN", {"default": true, "label_on": "bbox", "label_off": "crop_region"}], "max_size": ["FLOAT", {"default": 1024, "min": 64, "max": 16384, "step": 8}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "denoise": ["FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}], "feather": ["INT", {"default": 5, "min": 0, "max": 100, "step": 1}], "noise_mask": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "force_inpaint": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "wildcard": ["STRING", {"multiline": true, "dynamicPrompts": false}], "cycle": ["INT", {"default": 1, "min": 1, "max": 10, "step": 1}]}, "optional": {"detailer_hook": ["DETAILER_HOOK"], "inpaint_model": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "noise_mask_feather": ["INT", {"default": 20, "min": 0, "max": 100, "step": 1}], "scheduler_func_opt": ["SCHEDULER_FUNC"], "tiled_encode": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "tiled_decode": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}]}}, "input_order": {"required": ["image", "segs", "model", "clip", "vae", "guide_size", "guide_size_for", "max_size", "seed", "steps", "cfg", "sampler_name", "scheduler", "positive", "negative", "denoise", "feather", "noise_mask", "force_inpaint", "wildcard", "cycle"], "optional": ["detailer_hook", "inpaint_model", "noise_mask_feather", "scheduler_func_opt", "tiled_encode", "tiled_decode"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "DetailerForEach", "display_name": "Detailer (SEGS)", "description": "It enhances details by inpainting each region within the detected area bundle (SEGS) after enlarging them based on the guide size.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detailer", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DetailerForEachAutoRetry": {"input": {"required": {"image": ["IMAGE"], "segs": ["SEGS"], "model": ["MODEL", {"tooltip": "If the `ImpactDummyInput` is connected to the model, the inference stage is skipped."}], "clip": ["CLIP"], "vae": ["VAE"], "guide_size": ["FLOAT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "guide_size_for": ["BOOLEAN", {"default": true, "label_on": "bbox", "label_off": "crop_region"}], "max_size": ["FLOAT", {"default": 1024, "min": 64, "max": 16384, "step": 8}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "denoise": ["FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}], "feather": ["INT", {"default": 5, "min": 0, "max": 100, "step": 1}], "noise_mask": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "force_inpaint": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "wildcard": ["STRING", {"multiline": true, "dynamicPrompts": false}], "cycle": ["INT", {"default": 1, "min": 1, "max": 10, "step": 1}], "max_retries": ["INT", {"default": 1, "min": 1, "max": 10, "step": 1}]}, "optional": {"detailer_hook": ["DETAILER_HOOK"], "inpaint_model": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "noise_mask_feather": ["INT", {"default": 20, "min": 0, "max": 100, "step": 1}], "scheduler_func_opt": ["SCHEDULER_FUNC"], "tiled_encode": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "tiled_decode": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}]}}, "input_order": {"required": ["image", "segs", "model", "clip", "vae", "guide_size", "guide_size_for", "max_size", "seed", "steps", "cfg", "sampler_name", "scheduler", "positive", "negative", "denoise", "feather", "noise_mask", "force_inpaint", "wildcard", "cycle", "max_retries"], "optional": ["detailer_hook", "inpaint_model", "noise_mask_feather", "scheduler_func_opt", "tiled_encode", "tiled_decode"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "DetailerForEachAutoRetry", "display_name": "Detailer (SEGS) with auto retry", "description": "It enhances details by inpainting each region within the detected area bundle (SEGS) after enlarging them based on the guide size.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detailer", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DetailerForEachDebug": {"input": {"required": {"image": ["IMAGE"], "segs": ["SEGS"], "model": ["MODEL", {"tooltip": "If the `ImpactDummyInput` is connected to the model, the inference stage is skipped."}], "clip": ["CLIP"], "vae": ["VAE"], "guide_size": ["FLOAT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "guide_size_for": ["BOOLEAN", {"default": true, "label_on": "bbox", "label_off": "crop_region"}], "max_size": ["FLOAT", {"default": 1024, "min": 64, "max": 16384, "step": 8}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "denoise": ["FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}], "feather": ["INT", {"default": 5, "min": 0, "max": 100, "step": 1}], "noise_mask": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "force_inpaint": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "wildcard": ["STRING", {"multiline": true, "dynamicPrompts": false}], "cycle": ["INT", {"default": 1, "min": 1, "max": 10, "step": 1}]}, "optional": {"detailer_hook": ["DETAILER_HOOK"], "inpaint_model": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "noise_mask_feather": ["INT", {"default": 20, "min": 0, "max": 100, "step": 1}], "scheduler_func_opt": ["SCHEDULER_FUNC"], "tiled_encode": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "tiled_decode": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}]}}, "input_order": {"required": ["image", "segs", "model", "clip", "vae", "guide_size", "guide_size_for", "max_size", "seed", "steps", "cfg", "sampler_name", "scheduler", "positive", "negative", "denoise", "feather", "noise_mask", "force_inpaint", "wildcard", "cycle"], "optional": ["detailer_hook", "inpaint_model", "noise_mask_feather", "scheduler_func_opt", "tiled_encode", "tiled_decode"]}, "is_input_list": false, "output": ["IMAGE", "IMAGE", "IMAGE", "IMAGE", "IMAGE"], "output_is_list": [false, true, true, true, true], "output_name": ["image", "cropped", "cropped_refined", "cropped_refined_alpha", "cnet_images"], "name": "DetailerForEachDebug", "display_name": "DetailerDebug (SEGS)", "description": "It enhances details by inpainting each region within the detected area bundle (SEGS) after enlarging them based on the guide size.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detailer", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DetailerForEachPipe": {"input": {"required": {"image": ["IMAGE"], "segs": ["SEGS"], "guide_size": ["FLOAT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "guide_size_for": ["BOOLEAN", {"default": true, "label_on": "bbox", "label_off": "crop_region"}], "max_size": ["FLOAT", {"default": 1024, "min": 64, "max": 16384, "step": 8}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]], "denoise": ["FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}], "feather": ["INT", {"default": 5, "min": 0, "max": 100, "step": 1}], "noise_mask": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "force_inpaint": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "basic_pipe": ["BASIC_PIPE", {"tooltip": "If the `ImpactDummyInput` is connected to the model in the basic_pipe, the inference stage is skipped."}], "wildcard": ["STRING", {"multiline": true, "dynamicPrompts": false}], "refiner_ratio": ["FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0}], "cycle": ["INT", {"default": 1, "min": 1, "max": 10, "step": 1}]}, "optional": {"detailer_hook": ["DETAILER_HOOK"], "refiner_basic_pipe_opt": ["BASIC_PIPE"], "inpaint_model": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "noise_mask_feather": ["INT", {"default": 20, "min": 0, "max": 100, "step": 1}], "scheduler_func_opt": ["SCHEDULER_FUNC"], "tiled_encode": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "tiled_decode": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}]}}, "input_order": {"required": ["image", "segs", "guide_size", "guide_size_for", "max_size", "seed", "steps", "cfg", "sampler_name", "scheduler", "denoise", "feather", "noise_mask", "force_inpaint", "basic_pipe", "wildcard", "refiner_ratio", "cycle"], "optional": ["detailer_hook", "refiner_basic_pipe_opt", "inpaint_model", "noise_mask_feather", "scheduler_func_opt", "tiled_encode", "tiled_decode"]}, "is_input_list": false, "output": ["IMAGE", "SEGS", "BASIC_PIPE", "IMAGE"], "output_is_list": [false, false, false, true], "output_name": ["image", "segs", "basic_pipe", "cnet_images"], "name": "DetailerForEachPipe", "display_name": "Detailer (SEGS/pipe)", "description": "It enhances details by inpainting each region within the detected area bundle (SEGS) after enlarging them based on the guide size.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detailer", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DetailerForEachDebugPipe": {"input": {"required": {"image": ["IMAGE"], "segs": ["SEGS"], "guide_size": ["FLOAT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "guide_size_for": ["BOOLEAN", {"default": true, "label_on": "bbox", "label_off": "crop_region"}], "max_size": ["FLOAT", {"default": 1024, "min": 64, "max": 16384, "step": 8}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]], "denoise": ["FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}], "feather": ["INT", {"default": 5, "min": 0, "max": 100, "step": 1}], "noise_mask": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "force_inpaint": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "basic_pipe": ["BASIC_PIPE", {"tooltip": "If the `ImpactDummyInput` is connected to the model in the basic_pipe, the inference stage is skipped."}], "wildcard": ["STRING", {"multiline": true, "dynamicPrompts": false}], "refiner_ratio": ["FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0}], "cycle": ["INT", {"default": 1, "min": 1, "max": 10, "step": 1}]}, "optional": {"detailer_hook": ["DETAILER_HOOK"], "refiner_basic_pipe_opt": ["BASIC_PIPE"], "inpaint_model": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "noise_mask_feather": ["INT", {"default": 20, "min": 0, "max": 100, "step": 1}], "scheduler_func_opt": ["SCHEDULER_FUNC"], "tiled_encode": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "tiled_decode": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}]}}, "input_order": {"required": ["image", "segs", "guide_size", "guide_size_for", "max_size", "seed", "steps", "cfg", "sampler_name", "scheduler", "denoise", "feather", "noise_mask", "force_inpaint", "basic_pipe", "wildcard", "refiner_ratio", "cycle"], "optional": ["detailer_hook", "refiner_basic_pipe_opt", "inpaint_model", "noise_mask_feather", "scheduler_func_opt", "tiled_encode", "tiled_decode"]}, "is_input_list": false, "output": ["IMAGE", "SEGS", "BASIC_PIPE", "IMAGE", "IMAGE", "IMAGE", "IMAGE"], "output_is_list": [false, false, false, true, true, true, true], "output_name": ["image", "segs", "basic_pipe", "cropped", "cropped_refined", "cropped_refined_alpha", "cnet_images"], "name": "DetailerForEachDebugPipe", "display_name": "DetailerDebug (SEGS/pipe)", "description": "It enhances details by inpainting each region within the detected area bundle (SEGS) after enlarging them based on the guide size.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detailer", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DetailerForEachPipeForAnimateDiff": {"input": {"required": {"image_frames": ["IMAGE"], "segs": ["SEGS"], "guide_size": ["FLOAT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "guide_size_for": ["BOOLEAN", {"default": true, "label_on": "bbox", "label_off": "crop_region"}], "max_size": ["FLOAT", {"default": 1024, "min": 64, "max": 16384, "step": 8}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]], "denoise": ["FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}], "feather": ["INT", {"default": 5, "min": 0, "max": 100, "step": 1}], "basic_pipe": ["BASIC_PIPE", {"tooltip": "If the `ImpactDummyInput` is connected to the model in the basic_pipe, the inference stage is skipped."}], "refiner_ratio": ["FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0}]}, "optional": {"detailer_hook": ["DETAILER_HOOK"], "refiner_basic_pipe_opt": ["BASIC_PIPE"], "noise_mask_feather": ["INT", {"default": 20, "min": 0, "max": 100, "step": 1}], "scheduler_func_opt": ["SCHEDULER_FUNC"]}}, "input_order": {"required": ["image_frames", "segs", "guide_size", "guide_size_for", "max_size", "seed", "steps", "cfg", "sampler_name", "scheduler", "denoise", "feather", "basic_pipe", "refiner_ratio"], "optional": ["detailer_hook", "refiner_basic_pipe_opt", "noise_mask_feather", "scheduler_func_opt"]}, "is_input_list": false, "output": ["IMAGE", "SEGS", "BASIC_PIPE", "IMAGE"], "output_is_list": [false, false, false, true], "output_name": ["image", "segs", "basic_pipe", "cnet_images"], "name": "DetailerForEachPipeForAnimateDiff", "display_name": "Detailer For Video (SEGS/pipe)", "description": "This node enhances details by inpainting each region within the detected area bundle (SEGS) after enlarging them based on the guide size.\nThis node is a specialized detailer node for enhancing video details, such as in AnimateDiff. It can handle cases where the masks contained in SEGS serve as batch masks spanning multiple frames.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detailer", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SAMDetectorCombined": {"input": {"required": {"sam_model": ["SAM_MODEL", {"tooltip": "Segment Anything Model for Silhouette Detection.\nBe sure to use the SAM_MODEL loaded through the SAMLoader (Impact) node as input."}], "segs": ["SEGS", {"tooltip": "This is the segment information detected by the detector.\nIt refines the Mask through the SAM (Segment Anything) detector for all areas pointed to by SEGS, and combines all Masks to return as a single Mask."}], "image": ["IMAGE", {"tooltip": "It is assumed that segs contains only the information about the detected areas, and does not include the image. SAM (Segment Anything) operates by referencing this image."}], "detection_hint": [["center-1", "horizontal-2", "vertical-2", "rect-4", "diamond-4", "mask-area", "mask-points", "mask-point-bbox", "none"], {"tooltip": "It is recommended to use only center-1.\nWhen refining the mask of SEGS with the SAM (Segment Anything) model, center-1 uses only the rectangular area of SEGS and a single point at the exact center as hints.\nOther options were added during the experimental stage and do not work well."}], "dilation": ["INT", {"default": 0, "min": -512, "max": 512, "step": 1, "tooltip": "Set the value to dilate the result mask. If the value is negative, it erodes the mask."}], "threshold": ["FLOAT", {"default": 0.93, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "Set the sensitivity threshold for the mask detected by SAM (Segment Anything). A higher value generates a more specific mask with a narrower range. For example, when pointing to a person's area, it might detect clothes, which is a narrower range, instead of the entire person."}], "bbox_expansion": ["INT", {"default": 0, "min": 0, "max": 1000, "step": 1, "tooltip": "When performing SAM (Segment Anything) detection within the SEGS area, the rectangular area of SEGS is expanded and used as a hint."}], "mask_hint_threshold": ["FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "When detection_hint is mask-area, the mask of SEGS is used as a point hint for SAM (Segment Anything).\nIn this case, only the areas of the mask with brightness values equal to or greater than mask_hint_threshold are used as hints."}], "mask_hint_use_negative": [["False", "Small", "Outter"], {"tooltip": "When detecting with SAM (Segment Anything), negative hints are applied as follows:\nSmall: When the SEGS is smaller than 10 pixels in size\nOuter: Sampling the image area outside the SEGS region at regular intervals"}]}}, "input_order": {"required": ["sam_model", "segs", "image", "detection_hint", "dilation", "threshold", "bbox_expansion", "mask_hint_threshold", "mask_hint_use_negative"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "SAMDetectorCombined", "display_name": "SAMDetector (combined)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SAMDetectorSegmented": {"input": {"required": {"sam_model": ["SAM_MODEL", {"tooltip": "Segment Anything Model for Silhouette Detection.\nBe sure to use the SAM_MODEL loaded through the SAMLoader (Impact) node as input."}], "segs": ["SEGS", {"tooltip": "This is the segment information detected by the detector.\nFor the SEGS region, the masks detected by SAM (Segment Anything) are created as a unified mask and a batch of individual masks."}], "image": ["IMAGE", {"tooltip": "It is assumed that segs contains only the information about the detected areas, and does not include the image. SAM (Segment Anything) operates by referencing this image."}], "detection_hint": [["center-1", "horizontal-2", "vertical-2", "rect-4", "diamond-4", "mask-area", "mask-points", "mask-point-bbox", "none"], {"tooltip": "It is recommended to use only center-1.\nWhen refining the mask of SEGS with the SAM (Segment Anything) model, center-1 uses only the rectangular area of SEGS and a single point at the exact center as hints.\nOther options were added during the experimental stage and do not work well."}], "dilation": ["INT", {"default": 0, "min": -512, "max": 512, "step": 1, "tooltip": "Set the value to dilate the result mask. If the value is negative, it erodes the mask."}], "threshold": ["FLOAT", {"default": 0.93, "min": 0.0, "max": 1.0, "step": 0.01}], "bbox_expansion": ["INT", {"default": 0, "min": 0, "max": 1000, "step": 1, "tooltip": "When performing SAM (Segment Anything) detection within the SEGS area, the rectangular area of SEGS is expanded and used as a hint."}], "mask_hint_threshold": ["FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "When detection_hint is mask-area, the mask of SEGS is used as a point hint for SAM (Segment Anything).\nIn this case, only the areas of the mask with brightness values equal to or greater than mask_hint_threshold are used as hints."}], "mask_hint_use_negative": [["False", "Small", "Outter"], {"tooltip": "When detecting with SAM (Segment Anything), negative hints are applied as follows:\nSmall: When the SEGS is smaller than 10 pixels in size\nOuter: Sampling the image area outside the SEGS region at regular intervals"}]}}, "input_order": {"required": ["sam_model", "segs", "image", "detection_hint", "dilation", "threshold", "bbox_expansion", "mask_hint_threshold", "mask_hint_use_negative"]}, "is_input_list": false, "output": ["MASK", "MASK"], "output_is_list": [false, false], "output_name": ["combined_mask", "batch_masks"], "name": "SAMDetectorSegmented", "display_name": "SAMDetector (segmented)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FaceDetailer": {"input": {"required": {"image": ["IMAGE"], "model": ["MODEL", {"tooltip": "If the `ImpactDummyInput` is connected to the model, the inference stage is skipped."}], "clip": ["CLIP"], "vae": ["VAE"], "guide_size": ["FLOAT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "guide_size_for": ["BOOLEAN", {"default": true, "label_on": "bbox", "label_off": "crop_region"}], "max_size": ["FLOAT", {"default": 1024, "min": 64, "max": 16384, "step": 8}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "denoise": ["FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}], "feather": ["INT", {"default": 5, "min": 0, "max": 100, "step": 1}], "noise_mask": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "force_inpaint": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "bbox_threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "bbox_dilation": ["INT", {"default": 10, "min": -512, "max": 512, "step": 1}], "bbox_crop_factor": ["FLOAT", {"default": 3.0, "min": 1.0, "max": 10, "step": 0.1}], "sam_detection_hint": [["center-1", "horizontal-2", "vertical-2", "rect-4", "diamond-4", "mask-area", "mask-points", "mask-point-bbox", "none"]], "sam_dilation": ["INT", {"default": 0, "min": -512, "max": 512, "step": 1}], "sam_threshold": ["FLOAT", {"default": 0.93, "min": 0.0, "max": 1.0, "step": 0.01}], "sam_bbox_expansion": ["INT", {"default": 0, "min": 0, "max": 1000, "step": 1}], "sam_mask_hint_threshold": ["FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}], "sam_mask_hint_use_negative": [["False", "Small", "Outter"]], "drop_size": ["INT", {"min": 1, "max": 16384, "step": 1, "default": 10}], "bbox_detector": ["BBOX_DETECTOR"], "wildcard": ["STRING", {"multiline": true, "dynamicPrompts": false}], "cycle": ["INT", {"default": 1, "min": 1, "max": 10, "step": 1}]}, "optional": {"sam_model_opt": ["SAM_MODEL"], "segm_detector_opt": ["SEGM_DETECTOR"], "detailer_hook": ["DETAILER_HOOK"], "inpaint_model": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "noise_mask_feather": ["INT", {"default": 20, "min": 0, "max": 100, "step": 1}], "scheduler_func_opt": ["SCHEDULER_FUNC"], "tiled_encode": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "tiled_decode": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}]}}, "input_order": {"required": ["image", "model", "clip", "vae", "guide_size", "guide_size_for", "max_size", "seed", "steps", "cfg", "sampler_name", "scheduler", "positive", "negative", "denoise", "feather", "noise_mask", "force_inpaint", "bbox_threshold", "bbox_dilation", "bbox_crop_factor", "sam_detection_hint", "sam_dilation", "sam_threshold", "sam_bbox_expansion", "sam_mask_hint_threshold", "sam_mask_hint_use_negative", "drop_size", "bbox_detector", "wildcard", "cycle"], "optional": ["sam_model_opt", "segm_detector_opt", "detailer_hook", "inpaint_model", "noise_mask_feather", "scheduler_func_opt", "tiled_encode", "tiled_decode"]}, "is_input_list": false, "output": ["IMAGE", "IMAGE", "IMAGE", "MASK", "DETAILER_PIPE", "IMAGE"], "output_is_list": [false, true, true, false, false, true], "output_name": ["image", "cropped_refined", "cropped_enhanced_alpha", "mask", "detailer_pipe", "cnet_images"], "name": "FaceDetailer", "display_name": "FaceDetailer", "description": "This node enhances details by automatically detecting specific objects in the input image using detection models (bbox, segm, sam) and regenerating the image by enlarging the detected area based on the guide size.\nAlthough this node is specialized to simplify the commonly used facial detail enhancement workflow, it can also be used for various automatic inpainting purposes depending on the detection model.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Simple", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FaceDetailerPipe": {"input": {"required": {"image": ["IMAGE"], "detailer_pipe": ["DETAILER_PIPE", {"tooltip": "If the `ImpactDummyInput` is connected to the model in the detailer_pipe, the inference stage is skipped."}], "guide_size": ["FLOAT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "guide_size_for": ["BOOLEAN", {"default": true, "label_on": "bbox", "label_off": "crop_region"}], "max_size": ["FLOAT", {"default": 1024, "min": 64, "max": 16384, "step": 8}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]], "denoise": ["FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}], "feather": ["INT", {"default": 5, "min": 0, "max": 100, "step": 1}], "noise_mask": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "force_inpaint": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "bbox_threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "bbox_dilation": ["INT", {"default": 10, "min": -512, "max": 512, "step": 1}], "bbox_crop_factor": ["FLOAT", {"default": 3.0, "min": 1.0, "max": 10, "step": 0.1}], "sam_detection_hint": [["center-1", "horizontal-2", "vertical-2", "rect-4", "diamond-4", "mask-area", "mask-points", "mask-point-bbox", "none"]], "sam_dilation": ["INT", {"default": 0, "min": -512, "max": 512, "step": 1}], "sam_threshold": ["FLOAT", {"default": 0.93, "min": 0.0, "max": 1.0, "step": 0.01}], "sam_bbox_expansion": ["INT", {"default": 0, "min": 0, "max": 1000, "step": 1}], "sam_mask_hint_threshold": ["FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}], "sam_mask_hint_use_negative": [["False", "Small", "Outter"]], "drop_size": ["INT", {"min": 1, "max": 16384, "step": 1, "default": 10}], "refiner_ratio": ["FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0}], "cycle": ["INT", {"default": 1, "min": 1, "max": 10, "step": 1}]}, "optional": {"inpaint_model": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "noise_mask_feather": ["INT", {"default": 20, "min": 0, "max": 100, "step": 1}], "scheduler_func_opt": ["SCHEDULER_FUNC"], "tiled_encode": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "tiled_decode": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}]}}, "input_order": {"required": ["image", "detailer_pipe", "guide_size", "guide_size_for", "max_size", "seed", "steps", "cfg", "sampler_name", "scheduler", "denoise", "feather", "noise_mask", "force_inpaint", "bbox_threshold", "bbox_dilation", "bbox_crop_factor", "sam_detection_hint", "sam_dilation", "sam_threshold", "sam_bbox_expansion", "sam_mask_hint_threshold", "sam_mask_hint_use_negative", "drop_size", "refiner_ratio", "cycle"], "optional": ["inpaint_model", "noise_mask_feather", "scheduler_func_opt", "tiled_encode", "tiled_decode"]}, "is_input_list": false, "output": ["IMAGE", "IMAGE", "IMAGE", "MASK", "DETAILER_PIPE", "IMAGE"], "output_is_list": [false, true, true, false, false, true], "output_name": ["image", "cropped_refined", "cropped_enhanced_alpha", "mask", "detailer_pipe", "cnet_images"], "name": "FaceDetailerPipe", "display_name": "FaceDetailer (pipe)", "description": "This node enhances details by automatically detecting specific objects in the input image using detection models (bbox, segm, sam) and regenerating the image by enlarging the detected area based on the guide size.\nAlthough this node is specialized to simplify the commonly used facial detail enhancement workflow, it can also be used for various automatic inpainting purposes depending on the detection model.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Simple", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "MaskDetailerPipe": {"input": {"required": {"image": ["IMAGE"], "mask": ["MASK"], "basic_pipe": ["BASIC_PIPE"], "guide_size": ["FLOAT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "guide_size_for": ["BOOLEAN", {"default": true, "label_on": "mask bbox", "label_off": "crop region"}], "max_size": ["FLOAT", {"default": 1024, "min": 64, "max": 16384, "step": 8}], "mask_mode": ["BOOLEAN", {"default": true, "label_on": "masked only", "label_off": "whole"}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]], "denoise": ["FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}], "feather": ["INT", {"default": 5, "min": 0, "max": 100, "step": 1}], "crop_factor": ["FLOAT", {"default": 3.0, "min": 1.0, "max": 10, "step": 0.1}], "drop_size": ["INT", {"min": 1, "max": 16384, "step": 1, "default": 10}], "refiner_ratio": ["FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 100}], "cycle": ["INT", {"default": 1, "min": 1, "max": 10, "step": 1}]}, "optional": {"refiner_basic_pipe_opt": ["BASIC_PIPE"], "detailer_hook": ["DETAILER_HOOK"], "inpaint_model": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "noise_mask_feather": ["INT", {"default": 20, "min": 0, "max": 100, "step": 1}], "bbox_fill": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "contour_fill": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "scheduler_func_opt": ["SCHEDULER_FUNC"]}}, "input_order": {"required": ["image", "mask", "basic_pipe", "guide_size", "guide_size_for", "max_size", "mask_mode", "seed", "steps", "cfg", "sampler_name", "scheduler", "denoise", "feather", "crop_factor", "drop_size", "refiner_ratio", "batch_size", "cycle"], "optional": ["refiner_basic_pipe_opt", "detailer_hook", "inpaint_model", "noise_mask_feather", "bbox_fill", "contour_fill", "scheduler_func_opt"]}, "is_input_list": false, "output": ["IMAGE", "IMAGE", "IMAGE", "BASIC_PIPE", "BASIC_PIPE"], "output_is_list": [false, true, true, false, false], "output_name": ["image", "cropped_refined", "cropped_enhanced_alpha", "basic_pipe", "refiner_basic_pipe_opt"], "name": "MaskDetailerPipe", "display_name": "MaskDetailer (pipe)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detailer", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ToDetailerPipe": {"input": {"required": {"model": ["MODEL"], "clip": ["CLIP"], "vae": ["VAE"], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "bbox_detector": ["BBOX_DETECTOR"], "wildcard": ["STRING", {"multiline": true, "dynamicPrompts": false}], "Select to add LoRA": [["Select the LoRA to add to the text"]], "Select to add Wildcard": [["Select the Wildcard to add to the text"]]}, "optional": {"sam_model_opt": ["SAM_MODEL"], "segm_detector_opt": ["SEGM_DETECTOR"], "detailer_hook": ["DETAILER_HOOK"]}}, "input_order": {"required": ["model", "clip", "vae", "positive", "negative", "bbox_detector", "wildcard", "Select to add LoRA", "Select to add Wildcard"], "optional": ["sam_model_opt", "segm_detector_opt", "detailer_hook"]}, "is_input_list": false, "output": ["DETAILER_PIPE"], "output_is_list": [false], "output_name": ["detailer_pipe"], "name": "ToDetailerPipe", "display_name": "ToDetailerPipe", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Pipe", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ToDetailerPipeSDXL": {"input": {"required": {"model": ["MODEL"], "clip": ["CLIP"], "vae": ["VAE"], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "refiner_model": ["MODEL"], "refiner_clip": ["CLIP"], "refiner_positive": ["CONDITIONING"], "refiner_negative": ["CONDITIONING"], "bbox_detector": ["BBOX_DETECTOR"], "wildcard": ["STRING", {"multiline": true, "dynamicPrompts": false}], "Select to add LoRA": [["Select the LoRA to add to the text"]], "Select to add Wildcard": [["Select the Wildcard to add to the text"]]}, "optional": {"sam_model_opt": ["SAM_MODEL"], "segm_detector_opt": ["SEGM_DETECTOR"], "detailer_hook": ["DETAILER_HOOK"]}}, "input_order": {"required": ["model", "clip", "vae", "positive", "negative", "refiner_model", "refiner_clip", "refiner_positive", "refiner_negative", "bbox_detector", "wildcard", "Select to add LoRA", "Select to add Wildcard"], "optional": ["sam_model_opt", "segm_detector_opt", "detailer_hook"]}, "is_input_list": false, "output": ["DETAILER_PIPE"], "output_is_list": [false], "output_name": ["detailer_pipe"], "name": "ToDetailerPipeSDXL", "display_name": "ToDetailerPipeSDXL", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Pipe", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FromDetailerPipe": {"input": {"required": {"detailer_pipe": ["DETAILER_PIPE"]}}, "input_order": {"required": ["detailer_pipe"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE", "CONDITIONING", "CONDITIONING", "BBOX_DETECTOR", "SAM_MODEL", "SEGM_DETECTOR", "DETAILER_HOOK"], "output_is_list": [false, false, false, false, false, false, false, false, false], "output_name": ["model", "clip", "vae", "positive", "negative", "bbox_detector", "sam_model_opt", "segm_detector_opt", "detailer_hook"], "name": "FromDetailerPipe", "display_name": "FromDetailerPipe", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Pipe", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FromDetailerPipe_v2": {"input": {"required": {"detailer_pipe": ["DETAILER_PIPE"]}}, "input_order": {"required": ["detailer_pipe"]}, "is_input_list": false, "output": ["DETAILER_PIPE", "MODEL", "CLIP", "VAE", "CONDITIONING", "CONDITIONING", "BBOX_DETECTOR", "SAM_MODEL", "SEGM_DETECTOR", "DETAILER_HOOK"], "output_is_list": [false, false, false, false, false, false, false, false, false, false], "output_name": ["detailer_pipe", "model", "clip", "vae", "positive", "negative", "bbox_detector", "sam_model_opt", "segm_detector_opt", "detailer_hook"], "name": "FromDetailerPipe_v2", "display_name": "FromDetailerPipe_v2", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Pipe", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FromDetailerPipeSDXL": {"input": {"required": {"detailer_pipe": ["DETAILER_PIPE"]}}, "input_order": {"required": ["detailer_pipe"]}, "is_input_list": false, "output": ["DETAILER_PIPE", "MODEL", "CLIP", "VAE", "CONDITIONING", "CONDITIONING", "BBOX_DETECTOR", "SAM_MODEL", "SEGM_DETECTOR", "DETAILER_HOOK", "MODEL", "CLIP", "CONDITIONING", "CONDITIONING"], "output_is_list": [false, false, false, false, false, false, false, false, false, false, false, false, false, false], "output_name": ["detailer_pipe", "model", "clip", "vae", "positive", "negative", "bbox_detector", "sam_model_opt", "segm_detector_opt", "detailer_hook", "refiner_model", "refiner_clip", "refiner_positive", "refiner_negative"], "name": "FromDetailerPipeSDXL", "display_name": "FromDetailer (SDXL/pipe)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Pipe", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "AnyPipeToBasic": {"input": {"required": {"any_pipe": ["*"]}}, "input_order": {"required": ["any_pipe"]}, "is_input_list": false, "output": ["BASIC_PIPE"], "output_is_list": [false], "output_name": ["basic_pipe"], "name": "AnyPipeToBasic", "display_name": "Any PIPE -> BasicPipe", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Pipe", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ToBasicPipe": {"input": {"required": {"model": ["MODEL"], "clip": ["CLIP"], "vae": ["VAE"], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"]}}, "input_order": {"required": ["model", "clip", "vae", "positive", "negative"]}, "is_input_list": false, "output": ["BASIC_PIPE"], "output_is_list": [false], "output_name": ["basic_pipe"], "name": "ToBasicPipe", "display_name": "ToBasicPipe", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Pipe", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FromBasicPipe": {"input": {"required": {"basic_pipe": ["BASIC_PIPE"]}}, "input_order": {"required": ["basic_pipe"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE", "CONDITIONING", "CONDITIONING"], "output_is_list": [false, false, false, false, false], "output_name": ["model", "clip", "vae", "positive", "negative"], "name": "FromBasicPipe", "display_name": "FromBasicPipe", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Pipe", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FromBasicPipe_v2": {"input": {"required": {"basic_pipe": ["BASIC_PIPE"]}}, "input_order": {"required": ["basic_pipe"]}, "is_input_list": false, "output": ["BASIC_PIPE", "MODEL", "CLIP", "VAE", "CONDITIONING", "CONDITIONING"], "output_is_list": [false, false, false, false, false, false], "output_name": ["basic_pipe", "model", "clip", "vae", "positive", "negative"], "name": "FromBasicPipe_v2", "display_name": "FromBasicPipe_v2", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Pipe", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "BasicPipeToDetailerPipe": {"input": {"required": {"basic_pipe": ["BASIC_PIPE"], "bbox_detector": ["BBOX_DETECTOR"], "wildcard": ["STRING", {"multiline": true, "dynamicPrompts": false}], "Select to add LoRA": [["Select the LoRA to add to the text"]], "Select to add Wildcard": [["Select the Wildcard to add to the text"]]}, "optional": {"sam_model_opt": ["SAM_MODEL"], "segm_detector_opt": ["SEGM_DETECTOR"], "detailer_hook": ["DETAILER_HOOK"]}}, "input_order": {"required": ["basic_pipe", "bbox_detector", "wildcard", "Select to add LoRA", "Select to add Wildcard"], "optional": ["sam_model_opt", "segm_detector_opt", "detailer_hook"]}, "is_input_list": false, "output": ["DETAILER_PIPE"], "output_is_list": [false], "output_name": ["detailer_pipe"], "name": "BasicPipeToDetailerPipe", "display_name": "BasicPipe -> DetailerPipe", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Pipe", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "BasicPipeToDetailerPipeSDXL": {"input": {"required": {"base_basic_pipe": ["BASIC_PIPE"], "refiner_basic_pipe": ["BASIC_PIPE"], "bbox_detector": ["BBOX_DETECTOR"], "wildcard": ["STRING", {"multiline": true, "dynamicPrompts": false}], "Select to add LoRA": [["Select the LoRA to add to the text"]], "Select to add Wildcard": [["Select the Wildcard to add to the text"]]}, "optional": {"sam_model_opt": ["SAM_MODEL"], "segm_detector_opt": ["SEGM_DETECTOR"], "detailer_hook": ["DETAILER_HOOK"]}}, "input_order": {"required": ["base_basic_pipe", "refiner_basic_pipe", "bbox_detector", "wildcard", "Select to add LoRA", "Select to add Wildcard"], "optional": ["sam_model_opt", "segm_detector_opt", "detailer_hook"]}, "is_input_list": false, "output": ["DETAILER_PIPE"], "output_is_list": [false], "output_name": ["detailer_pipe"], "name": "BasicPipeToDetailerPipeSDXL", "display_name": "BasicPipe -> DetailerPipe (SDXL)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Pipe", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DetailerPipeToBasicPipe": {"input": {"required": {"detailer_pipe": ["DETAILER_PIPE"]}}, "input_order": {"required": ["detailer_pipe"]}, "is_input_list": false, "output": ["BASIC_PIPE", "BASIC_PIPE"], "output_is_list": [false, false], "output_name": ["base_basic_pipe", "refiner_basic_pipe"], "name": "DetailerPipeToBasicPipe", "display_name": "DetailerPipe -> BasicPipe", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Pipe", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "EditBasicPipe": {"input": {"required": {"basic_pipe": ["BASIC_PIPE"]}, "optional": {"model": ["MODEL"], "clip": ["CLIP"], "vae": ["VAE"], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"]}}, "input_order": {"required": ["basic_pipe"], "optional": ["model", "clip", "vae", "positive", "negative"]}, "is_input_list": false, "output": ["BASIC_PIPE"], "output_is_list": [false], "output_name": ["basic_pipe"], "name": "EditBasicPipe", "display_name": "Edit BasicPipe", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Pipe", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "EditDetailerPipe": {"input": {"required": {"detailer_pipe": ["DETAILER_PIPE"], "wildcard": ["STRING", {"multiline": true, "dynamicPrompts": false}], "Select to add LoRA": [["Select the LoRA to add to the text"]], "Select to add Wildcard": [["Select the Wildcard to add to the text"]]}, "optional": {"model": ["MODEL"], "clip": ["CLIP"], "vae": ["VAE"], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "bbox_detector": ["BBOX_DETECTOR"], "sam_model": ["SAM_MODEL"], "segm_detector": ["SEGM_DETECTOR"], "detailer_hook": ["DETAILER_HOOK"]}}, "input_order": {"required": ["detailer_pipe", "wildcard", "Select to add LoRA", "Select to add Wildcard"], "optional": ["model", "clip", "vae", "positive", "negative", "bbox_detector", "sam_model", "segm_detector", "detailer_hook"]}, "is_input_list": false, "output": ["DETAILER_PIPE"], "output_is_list": [false], "output_name": ["detailer_pipe"], "name": "EditDetailerPipe", "display_name": "Edit DetailerPipe", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Pipe", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "EditDetailerPipeSDXL": {"input": {"required": {"detailer_pipe": ["DETAILER_PIPE"], "wildcard": ["STRING", {"multiline": true, "dynamicPrompts": false}], "Select to add LoRA": [["Select the LoRA to add to the text"]], "Select to add Wildcard": [["Select the Wildcard to add to the text"]]}, "optional": {"model": ["MODEL"], "clip": ["CLIP"], "vae": ["VAE"], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "refiner_model": ["MODEL"], "refiner_clip": ["CLIP"], "refiner_positive": ["CONDITIONING"], "refiner_negative": ["CONDITIONING"], "bbox_detector": ["BBOX_DETECTOR"], "sam_model": ["SAM_MODEL"], "segm_detector": ["SEGM_DETECTOR"], "detailer_hook": ["DETAILER_HOOK"]}}, "input_order": {"required": ["detailer_pipe", "wildcard", "Select to add LoRA", "Select to add Wildcard"], "optional": ["model", "clip", "vae", "positive", "negative", "refiner_model", "refiner_clip", "refiner_positive", "refiner_negative", "bbox_detector", "sam_model", "segm_detector", "detailer_hook"]}, "is_input_list": false, "output": ["DETAILER_PIPE"], "output_is_list": [false], "output_name": ["detailer_pipe"], "name": "EditDetailerPipeSDXL", "display_name": "Edit DetailerPipe (SDXL)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Pipe", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LatentPixelScale": {"input": {"required": {"samples": ["LATENT"], "scale_method": [["nearest-exact", "bilinear", "lanczos", "area"]], "scale_factor": ["FLOAT", {"default": 1.5, "min": 0.1, "max": 10000, "step": 0.05}], "vae": ["VAE"], "use_tiled_vae": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}]}, "optional": {"upscale_model_opt": ["UPSCALE_MODEL"]}}, "input_order": {"required": ["samples", "scale_method", "scale_factor", "vae", "use_tiled_vae"], "optional": ["upscale_model_opt"]}, "is_input_list": false, "output": ["LATENT", "IMAGE"], "output_is_list": [false, false], "output_name": ["LATENT", "IMAGE"], "name": "LatentPixelScale", "display_name": "Latent Scale (on Pixel Space)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PixelKSampleUpscalerProvider": {"input": {"required": {"scale_method": [["nearest-exact", "bilinear", "lanczos", "area"]], "model": ["MODEL"], "vae": ["VAE"], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "use_tiled_vae": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "tile_size": ["INT", {"default": 512, "min": 320, "max": 4096, "step": 64}]}, "optional": {"upscale_model_opt": ["UPSCALE_MODEL"], "pk_hook_opt": ["PK_HOOK"], "scheduler_func_opt": ["SCHEDULER_FUNC"]}}, "input_order": {"required": ["scale_method", "model", "vae", "seed", "steps", "cfg", "sampler_name", "scheduler", "positive", "negative", "denoise", "use_tiled_vae", "tile_size"], "optional": ["upscale_model_opt", "pk_hook_opt", "scheduler_func_opt"]}, "is_input_list": false, "output": ["UPSCALER"], "output_is_list": [false], "output_name": ["UPSCALER"], "name": "PixelKSampleUpscalerProvider", "display_name": "PixelKSampleUpscalerProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PixelKSampleUpscalerProviderPipe": {"input": {"required": {"scale_method": [["nearest-exact", "bilinear", "lanczos", "area"]], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "use_tiled_vae": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "basic_pipe": ["BASIC_PIPE"], "tile_size": ["INT", {"default": 512, "min": 320, "max": 4096, "step": 64}]}, "optional": {"upscale_model_opt": ["UPSCALE_MODEL"], "pk_hook_opt": ["PK_HOOK"], "scheduler_func_opt": ["SCHEDULER_FUNC"], "tile_cnet_opt": ["CONTROL_NET"], "tile_cnet_strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["scale_method", "seed", "steps", "cfg", "sampler_name", "scheduler", "denoise", "use_tiled_vae", "basic_pipe", "tile_size"], "optional": ["upscale_model_opt", "pk_hook_opt", "scheduler_func_opt", "tile_cnet_opt", "tile_cnet_strength"]}, "is_input_list": false, "output": ["UPSCALER"], "output_is_list": [false], "output_name": ["UPSCALER"], "name": "PixelKSampleUpscalerProviderPipe", "display_name": "PixelKSampleUpscalerProviderPipe", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IterativeLatentUpscale": {"input": {"required": {"samples": ["LATENT"], "upscale_factor": ["FLOAT", {"default": 1.5, "min": 1, "max": 10000, "step": 0.1}], "steps": ["INT", {"default": 3, "min": 1, "max": 10000, "step": 1}], "temp_prefix": ["STRING", {"default": ""}], "upscaler": ["UPSCALER"], "step_mode": [["simple", "geometric"], {"default": "simple"}], "vae_compression": ["INT", {"default": 8, "min": 0, "max": 256, "step": 8}]}, "hidden": {"unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["samples", "upscale_factor", "steps", "temp_prefix", "upscaler", "step_mode", "vae_compression"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["LATENT", "VAE"], "output_is_list": [false, false], "output_name": ["latent", "vae"], "name": "IterativeLatentUpscale", "display_name": "Iterative Upscale (Latent/on Pixel Space)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IterativeImageUpscale": {"input": {"required": {"pixels": ["IMAGE"], "upscale_factor": ["FLOAT", {"default": 1.5, "min": 1, "max": 10000, "step": 0.1}], "steps": ["INT", {"default": 3, "min": 1, "max": 10000, "step": 1}], "temp_prefix": ["STRING", {"default": ""}], "upscaler": ["UPSCALER"], "vae": ["VAE"], "step_mode": [["simple", "geometric"], {"default": "simple"}], "vae_compression": ["INT", {"default": 8, "min": 0, "max": 256, "step": 8}]}, "hidden": {"unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["pixels", "upscale_factor", "steps", "temp_prefix", "upscaler", "vae", "step_mode", "vae_compression"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["image"], "name": "IterativeImageUpscale", "display_name": "Iterative Upscale (Image)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PixelTiledKSampleUpscalerProvider": {"input": {"required": {"scale_method": [["nearest-exact", "bilinear", "lanczos", "area"]], "model": ["MODEL"], "vae": ["VAE"], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"]], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "tile_width": ["INT", {"default": 512, "min": 320, "max": 16384, "step": 64}], "tile_height": ["INT", {"default": 512, "min": 320, "max": 16384, "step": 64}], "tiling_strategy": [["random", "padded", "simple"]]}, "optional": {"upscale_model_opt": ["UPSCALE_MODEL"], "pk_hook_opt": ["PK_HOOK"], "tile_cnet_opt": ["CONTROL_NET"], "tile_cnet_strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "overlap": ["INT", {"default": 64, "min": 0, "max": 4096, "step": 32}]}}, "input_order": {"required": ["scale_method", "model", "vae", "seed", "steps", "cfg", "sampler_name", "scheduler", "positive", "negative", "denoise", "tile_width", "tile_height", "tiling_strategy"], "optional": ["upscale_model_opt", "pk_hook_opt", "tile_cnet_opt", "tile_cnet_strength", "overlap"]}, "is_input_list": false, "output": ["UPSCALER"], "output_is_list": [false], "output_name": ["UPSCALER"], "name": "PixelTiledKSampleUpscalerProvider", "display_name": "PixelTiledKSampleUpscalerProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PixelTiledKSampleUpscalerProviderPipe": {"input": {"required": {"scale_method": [["nearest-exact", "bilinear", "lanczos", "area"]], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"]], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "tile_width": ["INT", {"default": 512, "min": 320, "max": 16384, "step": 64}], "tile_height": ["INT", {"default": 512, "min": 320, "max": 16384, "step": 64}], "tiling_strategy": [["random", "padded", "simple"]], "basic_pipe": ["BASIC_PIPE"]}, "optional": {"upscale_model_opt": ["UPSCALE_MODEL"], "pk_hook_opt": ["PK_HOOK"], "tile_cnet_opt": ["CONTROL_NET"], "tile_cnet_strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["scale_method", "seed", "steps", "cfg", "sampler_name", "scheduler", "denoise", "tile_width", "tile_height", "tiling_strategy", "basic_pipe"], "optional": ["upscale_model_opt", "pk_hook_opt", "tile_cnet_opt", "tile_cnet_strength"]}, "is_input_list": false, "output": ["UPSCALER"], "output_is_list": [false], "output_name": ["UPSCALER"], "name": "PixelTiledKSampleUpscalerProviderPipe", "display_name": "PixelTiledKSampleUpscalerProviderPipe", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "TwoSamplersForMaskUpscalerProvider": {"input": {"required": {"scale_method": [["nearest-exact", "bilinear", "lanczos", "area"]], "full_sample_schedule": [["none", "interleave1", "interleave2", "interleave3", "last1", "last2", "interleave1+last1", "interleave2+last1", "interleave3+last1"]], "use_tiled_vae": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "base_sampler": ["KSAMPLER"], "mask_sampler": ["KSAMPLER"], "mask": ["MASK"], "vae": ["VAE"], "tile_size": ["INT", {"default": 512, "min": 320, "max": 4096, "step": 64}]}, "optional": {"full_sampler_opt": ["KSAMPLER"], "upscale_model_opt": ["UPSCALE_MODEL"], "pk_hook_base_opt": ["PK_HOOK"], "pk_hook_mask_opt": ["PK_HOOK"], "pk_hook_full_opt": ["PK_HOOK"]}}, "input_order": {"required": ["scale_method", "full_sample_schedule", "use_tiled_vae", "base_sampler", "mask_sampler", "mask", "vae", "tile_size"], "optional": ["full_sampler_opt", "upscale_model_opt", "pk_hook_base_opt", "pk_hook_mask_opt", "pk_hook_full_opt"]}, "is_input_list": false, "output": ["UPSCALER"], "output_is_list": [false], "output_name": ["UPSCALER"], "name": "TwoSamplersForMaskUpscalerProvider", "display_name": "TwoSamplersForMask Upscaler Provider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "TwoSamplersForMaskUpscalerProviderPipe": {"input": {"required": {"scale_method": [["nearest-exact", "bilinear", "lanczos", "area"]], "full_sample_schedule": [["none", "interleave1", "interleave2", "interleave3", "last1", "last2", "interleave1+last1", "interleave2+last1", "interleave3+last1"]], "use_tiled_vae": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "base_sampler": ["KSAMPLER"], "mask_sampler": ["KSAMPLER"], "mask": ["MASK"], "basic_pipe": ["BASIC_PIPE"], "tile_size": ["INT", {"default": 512, "min": 320, "max": 4096, "step": 64}]}, "optional": {"full_sampler_opt": ["KSAMPLER"], "upscale_model_opt": ["UPSCALE_MODEL"], "pk_hook_base_opt": ["PK_HOOK"], "pk_hook_mask_opt": ["PK_HOOK"], "pk_hook_full_opt": ["PK_HOOK"]}}, "input_order": {"required": ["scale_method", "full_sample_schedule", "use_tiled_vae", "base_sampler", "mask_sampler", "mask", "basic_pipe", "tile_size"], "optional": ["full_sampler_opt", "upscale_model_opt", "pk_hook_base_opt", "pk_hook_mask_opt", "pk_hook_full_opt"]}, "is_input_list": false, "output": ["UPSCALER"], "output_is_list": [false], "output_name": ["UPSCALER"], "name": "TwoSamplersForMaskUpscalerProviderPipe", "display_name": "TwoSamplersForMask Upscaler Provider (pipe)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PixelKSampleHookCombine": {"input": {"required": {"hook1": ["PK_HOOK"], "hook2": ["PK_HOOK"]}}, "input_order": {"required": ["hook1", "hook2"]}, "is_input_list": false, "output": ["PK_HOOK"], "output_is_list": [false], "output_name": ["PK_HOOK"], "name": "PixelKSampleHookCombine", "display_name": "PixelKSampleHookCombine", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DenoiseScheduleHookProvider": {"input": {"required": {"schedule_for_iteration": [["simple"]], "target_denoise": ["FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["schedule_for_iteration", "target_denoise"]}, "is_input_list": false, "output": ["PK_HOOK"], "output_is_list": [false], "output_name": ["PK_HOOK"], "name": "DenoiseScheduleHookProvider", "display_name": "DenoiseScheduleHookProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "StepsScheduleHookProvider": {"input": {"required": {"schedule_for_iteration": [["simple"]], "target_steps": ["INT", {"default": 20, "min": 1, "max": 10000}]}}, "input_order": {"required": ["schedule_for_iteration", "target_steps"]}, "is_input_list": false, "output": ["PK_HOOK"], "output_is_list": [false], "output_name": ["PK_HOOK"], "name": "StepsScheduleHookProvider", "display_name": "StepsScheduleHookProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CfgScheduleHookProvider": {"input": {"required": {"schedule_for_iteration": [["simple"]], "target_cfg": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 100.0}]}}, "input_order": {"required": ["schedule_for_iteration", "target_cfg"]}, "is_input_list": false, "output": ["PK_HOOK"], "output_is_list": [false], "output_name": ["PK_HOOK"], "name": "CfgScheduleHookProvider", "display_name": "CfgScheduleHookProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "NoiseInjectionHookProvider": {"input": {"required": {"schedule_for_iteration": [["simple"]], "source": [["CPU", "GPU"]], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "start_strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 200.0, "step": 0.01}], "end_strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 200.0, "step": 0.01}]}}, "input_order": {"required": ["schedule_for_iteration", "source", "seed", "start_strength", "end_strength"]}, "is_input_list": false, "output": ["PK_HOOK"], "output_is_list": [false], "output_name": ["PK_HOOK"], "name": "NoiseInjectionHookProvider", "display_name": "NoiseInjectionHookProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "UnsamplerHookProvider": {"input": {"required": {"model": ["MODEL"], "steps": ["INT", {"default": 25, "min": 1, "max": 10000}], "start_end_at_step": ["INT", {"default": 21, "min": 0, "max": 10000}], "end_end_at_step": ["INT", {"default": 24, "min": 0, "max": 10000}], "cfg": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"]], "normalize": [["disable", "enable"]], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "schedule_for_iteration": [["simple"]]}}, "input_order": {"required": ["model", "steps", "start_end_at_step", "end_end_at_step", "cfg", "sampler_name", "scheduler", "normalize", "positive", "negative", "schedule_for_iteration"]}, "is_input_list": false, "output": ["PK_HOOK"], "output_is_list": [false], "output_name": ["PK_HOOK"], "name": "UnsamplerHookProvider", "display_name": "UnsamplerHookProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CoreMLDetailerHookProvider": {"input": {"required": {"mode": [["512x512", "768x768", "512x768", "768x512"]]}}, "input_order": {"required": ["mode"]}, "is_input_list": false, "output": ["DETAILER_HOOK"], "output_is_list": [false], "output_name": ["DETAILER_HOOK"], "name": "CoreMLDetailerHookProvider", "display_name": "CoreMLDetailerHookProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detailer", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PreviewDetailerHookProvider": {"input": {"required": {"quality": ["INT", {"default": 95, "min": 20, "max": 100}]}, "hidden": {"unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["quality"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["DETAILER_HOOK", "UPSCALER_HOOK"], "output_is_list": [false, false], "output_name": ["DETAILER_HOOK", "UPSCALER_HOOK"], "name": "PreviewDetailerHookProvider", "display_name": "PreviewDetailerHookProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "BlackPatchRetryHookProvider": {"input": {"required": {"mean_thresh": ["INT", {"default": 10, "min": 0, "max": 255}], "var_thresh": ["INT", {"default": 5, "min": 0, "max": 255}]}}, "input_order": {"required": ["mean_thresh", "var_thresh"]}, "is_input_list": false, "output": ["DETAILER_HOOK"], "output_is_list": [false], "output_name": ["DETAILER_HOOK"], "name": "BlackPatchRetryHookProvider", "display_name": "BlackPatchRetryHookProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CustomSamplerDetailerHookProvider": {"input": {"required": {"sampler": ["SAMPLER"]}}, "input_order": {"required": ["sampler"]}, "is_input_list": false, "output": ["DETAILER_HOOK"], "output_is_list": [false], "output_name": ["DETAILER_HOOK"], "name": "CustomSamplerDetailerHookProvider", "display_name": "CustomSamplerDetailerHookProvider", "description": "Apply a hook that allows you to use a custom sampler in the Detailer nodes. When using `DetailerHookCombine`, the sampler from the first hook is applied.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detailer", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LamaRemoverDetailerHookProvider": {"input": {"required": {"mask_threshold": ["INT", {"default": 250, "min": 0, "max": 255, "step": 1, "display": "slider"}], "gaussblur_radius": ["INT", {"default": 8, "min": 0, "max": 20, "step": 1, "display": "slider"}], "skip_sampling": ["BOOLEAN", {"default": true}]}}, "input_order": {"required": ["mask_threshold", "gaussblur_radius", "skip_sampling"]}, "is_input_list": false, "output": ["DETAILER_HOOK"], "output_is_list": [false], "output_name": ["DETAILER_HOOK"], "name": "LamaRemoverDetailerHookProvider", "display_name": "LamaRemoverDetailerHookProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DetailerHookCombine": {"input": {"required": {"hook1": ["DETAILER_HOOK"], "hook2": ["DETAILER_HOOK"]}}, "input_order": {"required": ["hook1", "hook2"]}, "is_input_list": false, "output": ["DETAILER_HOOK"], "output_is_list": [false], "output_name": ["DETAILER_HOOK"], "name": "DetailerHookCombine", "display_name": "DetailerHookCombine", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "NoiseInjectionDetailerHookProvider": {"input": {"required": {"schedule_for_cycle": [["skip_start", "from_start"]], "source": [["CPU", "GPU"]], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "start_strength": ["FLOAT", {"default": 2.0, "min": 0.0, "max": 200.0, "step": 0.01}], "end_strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 200.0, "step": 0.01}]}}, "input_order": {"required": ["schedule_for_cycle", "source", "seed", "start_strength", "end_strength"]}, "is_input_list": false, "output": ["DETAILER_HOOK"], "output_is_list": [false], "output_name": ["DETAILER_HOOK"], "name": "NoiseInjectionDetailerHookProvider", "display_name": "NoiseInjectionDetailerHookProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detailer", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "UnsamplerDetailerHookProvider": {"input": {"required": {"model": ["MODEL"], "steps": ["INT", {"default": 25, "min": 1, "max": 10000}], "start_end_at_step": ["INT", {"default": 21, "min": 0, "max": 10000}], "end_end_at_step": ["INT", {"default": 24, "min": 0, "max": 10000}], "cfg": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"]], "normalize": [["disable", "enable"]], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "schedule_for_cycle": [["skip_start", "from_start"]]}}, "input_order": {"required": ["model", "steps", "start_end_at_step", "end_end_at_step", "cfg", "sampler_name", "scheduler", "normalize", "positive", "negative", "schedule_for_cycle"]}, "is_input_list": false, "output": ["DETAILER_HOOK"], "output_is_list": [false], "output_name": ["DETAILER_HOOK"], "name": "UnsamplerDetailerHookProvider", "display_name": "UnsamplerDetailerHookProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detailer", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DenoiseSchedulerDetailerHookProvider": {"input": {"required": {"schedule_for_cycle": [["simple"]], "target_denoise": ["FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["schedule_for_cycle", "target_denoise"]}, "is_input_list": false, "output": ["DETAILER_HOOK"], "output_is_list": [false], "output_name": ["DETAILER_HOOK"], "name": "DenoiseSchedulerDetailerHookProvider", "display_name": "DenoiseSchedulerDetailerHookProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detailer", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SEGSOrderedFilterDetailerHookProvider": {"input": {"required": {"target": [["area(=w*h)", "width", "height", "x1", "y1", "x2", "y2"]], "order": ["BOOLEAN", {"default": true, "label_on": "descending", "label_off": "ascending"}], "take_start": ["INT", {"default": 0, "min": 0, "max": 9223372036854775807, "step": 1}], "take_count": ["INT", {"default": 1, "min": 0, "max": 9223372036854775807, "step": 1}]}}, "input_order": {"required": ["target", "order", "take_start", "take_count"]}, "is_input_list": false, "output": ["DETAILER_HOOK"], "output_is_list": [false], "output_name": ["DETAILER_HOOK"], "name": "SEGSOrderedFilterDetailerHookProvider", "display_name": "SEGSOrderedFilterDetailerHookProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SEGSRangeFilterDetailerHookProvider": {"input": {"required": {"target": [["area(=w*h)", "width", "height", "x1", "y1", "x2", "y2", "length_percent"]], "mode": ["BOOLEAN", {"default": true, "label_on": "inside", "label_off": "outside"}], "min_value": ["INT", {"default": 0, "min": 0, "max": 9223372036854775807, "step": 1}], "max_value": ["INT", {"default": 67108864, "min": 0, "max": 9223372036854775807, "step": 1}]}}, "input_order": {"required": ["target", "mode", "min_value", "max_value"]}, "is_input_list": false, "output": ["DETAILER_HOOK"], "output_is_list": [false], "output_name": ["DETAILER_HOOK"], "name": "SEGSRangeFilterDetailerHookProvider", "display_name": "SEGSRangeFilterDetailerHookProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SEGSLabelFilterDetailerHookProvider": {"input": {"required": {"segs": ["SEGS"], "preset": [["all", "hand", "face", "mouth", "eyes", "eyebrows", "pupils", "left_eyebrow", "left_eye", "left_pupil", "right_eyebrow", "right_eye", "right_pupil", "short_sleeved_shirt", "long_sleeved_shirt", "short_sleeved_outwear", "long_sleeved_outwear", "vest", "sling", "shorts", "trousers", "skirt", "short_sleeved_dress", "long_sleeved_dress", "vest_dress", "sling_dress", "person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", "traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard", "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", "couch", "potted plant", "bed", "dining table", "toilet", "tv", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear", "hair drier", "toothbrush"]], "labels": ["STRING", {"multiline": true, "placeholder": "List the types of segments to be allowed, separated by commas"}]}}, "input_order": {"required": ["segs", "preset", "labels"]}, "is_input_list": false, "output": ["DETAILER_HOOK"], "output_is_list": [false], "output_name": ["DETAILER_HOOK"], "name": "SEGSLabelFilterDetailerHookProvider", "display_name": "SEGSLabelFilterDetailerHookProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VariationNoiseDetailerHookProvider": {"input": {"required": {"seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "strength": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["seed", "strength"]}, "is_input_list": false, "output": ["DETAILER_HOOK"], "output_is_list": [false], "output_name": ["DETAILER_HOOK"], "name": "VariationNoiseDetailerHookProvider", "display_name": "VariationNoiseDetailerHookProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detailer", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "BitwiseAndMask": {"input": {"required": {"mask1": ["MASK"], "mask2": ["MASK"]}}, "input_order": {"required": ["mask1", "mask2"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "BitwiseAndMask", "display_name": "Pixelwise(MASK & MASK)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SubtractMask": {"input": {"required": {"mask1": ["MASK"], "mask2": ["MASK"]}}, "input_order": {"required": ["mask1", "mask2"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "SubtractMask", "display_name": "Pixelwise(MASK - MASK)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "AddMask": {"input": {"required": {"mask1": ["MASK"], "mask2": ["MASK"]}}, "input_order": {"required": ["mask1", "mask2"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "AddMask", "display_name": "Pixelwise(MASK + MASK)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "MaskRectArea": {"input": {"required": {"x": ["INT", {"default": 0, "min": 0, "max": 100, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 100, "step": 1}], "width": ["INT", {"default": 50, "min": 0, "max": 100, "step": 1}], "height": ["INT", {"default": 50, "min": 0, "max": 100, "step": 1}], "blur_radius": ["INT", {"default": 0, "min": 0, "step": 1}]}, "hidden": {"extra_pnginfo": "EXTRA_PNGINFO", "unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["x", "y", "width", "height", "blur_radius"], "hidden": ["extra_pnginfo", "unique_id"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "MaskRectArea", "display_name": "Mask Rect Area", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "MaskRectAreaAdvanced": {"input": {"required": {"x": ["INT", {"default": 0, "min": 0, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "step": 1}], "width": ["INT", {"default": 256, "min": 0, "step": 1}], "height": ["INT", {"default": 320, "min": 0, "step": 1}], "image_width": ["INT", {"default": 512, "min": 1, "step": 1}], "image_height": ["INT", {"default": 320, "min": 1, "step": 1}], "blur_radius": ["INT", {"default": 0, "min": 0, "step": 1}]}, "hidden": {"extra_pnginfo": "EXTRA_PNGINFO", "unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["x", "y", "width", "height", "image_width", "image_height", "blur_radius"], "hidden": ["extra_pnginfo", "unique_id"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "MaskRectAreaAdvanced", "display_name": "Mask Rect Area (Advanced)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSegsAndMask": {"input": {"required": {"segs": ["SEGS"], "mask": ["MASK"]}}, "input_order": {"required": ["segs", "mask"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactSegsAndMask", "display_name": "Pixelwise(SEGS & MASK)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSegsAndMaskForEach": {"input": {"required": {"segs": ["SEGS"], "masks": ["MASK"]}}, "input_order": {"required": ["segs", "masks"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactSegsAndMaskForEach", "display_name": "Pixelwise(SEGS & MASKS ForEach)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "EmptySegs": {"input": {"required": {}}, "input_order": {"required": []}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "EmptySegs", "display_name": "EmptySegs", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactFlattenMask": {"input": {"required": {"masks": ["MASK"]}}, "input_order": {"required": ["masks"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "ImpactFlattenMask", "display_name": "Flatten Mask Batch", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "MediaPipeFaceMeshToSEGS": {"input": {"required": {"image": ["IMAGE"], "crop_factor": ["FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}], "bbox_fill": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "crop_min_size": ["INT", {"min": 10, "max": 16384, "step": 1, "default": 50}], "drop_size": ["INT", {"min": 1, "max": 16384, "step": 1, "default": 1}], "dilation": ["INT", {"default": 0, "min": -512, "max": 512, "step": 1}], "face": ["BOOLEAN", {"default": true, "label_on": "Enabled", "label_off": "Disabled"}], "mouth": ["BOOLEAN", {"default": false, "label_on": "Enabled", "label_off": "Disabled"}], "left_eyebrow": ["BOOLEAN", {"default": false, "label_on": "Enabled", "label_off": "Disabled"}], "left_eye": ["BOOLEAN", {"default": false, "label_on": "Enabled", "label_off": "Disabled"}], "left_pupil": ["BOOLEAN", {"default": false, "label_on": "Enabled", "label_off": "Disabled"}], "right_eyebrow": ["BOOLEAN", {"default": false, "label_on": "Enabled", "label_off": "Disabled"}], "right_eye": ["BOOLEAN", {"default": false, "label_on": "Enabled", "label_off": "Disabled"}], "right_pupil": ["BOOLEAN", {"default": false, "label_on": "Enabled", "label_off": "Disabled"}]}}, "input_order": {"required": ["image", "crop_factor", "bbox_fill", "crop_min_size", "drop_size", "dilation", "face", "mouth", "left_eyebrow", "left_eye", "left_pupil", "right_eyebrow", "right_eye", "right_pupil"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "MediaPipeFaceMeshToSEGS", "display_name": "MediaPipe FaceMesh to SEGS", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "MaskToSEGS": {"input": {"required": {"mask": ["MASK"], "combined": ["BOOLEAN", {"default": false, "label_on": "True", "label_off": "False"}], "crop_factor": ["FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}], "bbox_fill": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "drop_size": ["INT", {"min": 1, "max": 16384, "step": 1, "default": 10}], "contour_fill": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}]}}, "input_order": {"required": ["mask", "combined", "crop_factor", "bbox_fill", "drop_size", "contour_fill"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "MaskToSEGS", "display_name": "MASK to SEGS", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "MaskToSEGS_for_AnimateDiff": {"input": {"required": {"mask": ["MASK"], "combined": ["BOOLEAN", {"default": false, "label_on": "True", "label_off": "False"}], "crop_factor": ["FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}], "bbox_fill": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "drop_size": ["INT", {"min": 1, "max": 16384, "step": 1, "default": 10}], "contour_fill": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}]}}, "input_order": {"required": ["mask", "combined", "crop_factor", "bbox_fill", "drop_size", "contour_fill"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "MaskToSEGS_for_AnimateDiff", "display_name": "MASK to SEGS for Video", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ToBinaryMask": {"input": {"required": {"mask": ["MASK"], "threshold": ["INT", {"default": 20, "min": 1, "max": 255}]}}, "input_order": {"required": ["mask", "threshold"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "ToBinaryMask", "display_name": "ToBinaryMask", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "MasksToMaskList": {"input": {"optional": {"masks": ["MASK"]}}, "input_order": {"optional": ["masks"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [true], "output_name": ["MASK"], "name": "MasksToMaskList", "display_name": "Mask Batch to Mask List", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "MaskListToMaskBatch": {"input": {"required": {"mask": ["MASK"]}}, "input_order": {"required": ["mask"]}, "is_input_list": true, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "MaskListToMaskBatch", "display_name": "Mask List to Mask Batch", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImageListToImageBatch": {"input": {"required": {"images": ["IMAGE"]}}, "input_order": {"required": ["images"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageListToImageBatch", "display_name": "Image List to Image Batch", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SetDefaultImageForSEGS": {"input": {"required": {"segs": ["SEGS"], "image": ["IMAGE"], "override": ["BOOLEAN", {"default": true}]}}, "input_order": {"required": ["segs", "image", "override"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "SetDefaultImageForSEGS", "display_name": "Set Default Image for SEGS", "description": "If the SEGS have not passed through the detailer, they contain only detection area information without an image. This node sets a default image for the SEGS.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "RemoveImageFromSEGS": {"input": {"required": {"segs": ["SEGS"]}}, "input_order": {"required": ["segs"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "RemoveImageFromSEGS", "display_name": "Remove Image from SEGS", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "BboxDetectorSEGS": {"input": {"required": {"bbox_detector": ["BBOX_DETECTOR"], "image": ["IMAGE"], "threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "dilation": ["INT", {"default": 10, "min": -512, "max": 512, "step": 1}], "crop_factor": ["FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}], "drop_size": ["INT", {"min": 1, "max": 16384, "step": 1, "default": 10}], "labels": ["STRING", {"multiline": true, "default": "all", "placeholder": "List the types of segments to be allowed, separated by commas"}]}, "optional": {"detailer_hook": ["DETAILER_HOOK"]}}, "input_order": {"required": ["bbox_detector", "image", "threshold", "dilation", "crop_factor", "drop_size", "labels"], "optional": ["detailer_hook"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "BboxDetectorSEGS", "display_name": "BBOX Detector (SEGS)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SegmDetectorSEGS": {"input": {"required": {"segm_detector": ["SEGM_DETECTOR"], "image": ["IMAGE"], "threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "dilation": ["INT", {"default": 10, "min": -512, "max": 512, "step": 1}], "crop_factor": ["FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}], "drop_size": ["INT", {"min": 1, "max": 16384, "step": 1, "default": 10}], "labels": ["STRING", {"multiline": true, "default": "all", "placeholder": "List the types of segments to be allowed, separated by commas"}]}, "optional": {"detailer_hook": ["DETAILER_HOOK"]}}, "input_order": {"required": ["segm_detector", "image", "threshold", "dilation", "crop_factor", "drop_size", "labels"], "optional": ["detailer_hook"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "SegmDetectorSEGS", "display_name": "SEGM Detector (SEGS)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ONNXDetectorSEGS": {"input": {"required": {"bbox_detector": ["BBOX_DETECTOR"], "image": ["IMAGE"], "threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "dilation": ["INT", {"default": 10, "min": -512, "max": 512, "step": 1}], "crop_factor": ["FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}], "drop_size": ["INT", {"min": 1, "max": 16384, "step": 1, "default": 10}], "labels": ["STRING", {"multiline": true, "default": "all", "placeholder": "List the types of segments to be allowed, separated by commas"}]}, "optional": {"detailer_hook": ["DETAILER_HOOK"]}}, "input_order": {"required": ["bbox_detector", "image", "threshold", "dilation", "crop_factor", "drop_size", "labels"], "optional": ["detailer_hook"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ONNXDetectorSEGS", "display_name": "ONNX Detector (SEGS/legacy) - use BBOXDetector", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSimpleDetectorSEGS_for_AD": {"input": {"required": {"bbox_detector": ["BBOX_DETECTOR"], "image_frames": ["IMAGE"], "bbox_threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "bbox_dilation": ["INT", {"default": 0, "min": -255, "max": 255, "step": 1}], "crop_factor": ["FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}], "drop_size": ["INT", {"min": 1, "max": 16384, "step": 1, "default": 10}], "sub_threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "sub_dilation": ["INT", {"default": 0, "min": -255, "max": 255, "step": 1}], "sub_bbox_expansion": ["INT", {"default": 0, "min": 0, "max": 1000, "step": 1}], "sam_mask_hint_threshold": ["FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"masking_mode": [["Pivot SEGS", "Combine neighboring frames", "Don't combine"]], "segs_pivot": [["Combined mask", "1st frame mask"]], "sam_model_opt": ["SAM_MODEL", {"tooltip": "[OPTIONAL]\nSegment Anything Model for Silhouette Detection.\nBe sure to use the SAM_MODEL loaded through the SAMLoader (Impact) node as input.\nGiven this input, it refines the rectangular areas detected by BBOX_DETECTOR into silhouette shapes through SAM.\nsam_model_opt takes priority over segm_detector_opt."}], "segm_detector_opt": ["SEGM_DETECTOR"]}}, "input_order": {"required": ["bbox_detector", "image_frames", "bbox_threshold", "bbox_dilation", "crop_factor", "drop_size", "sub_threshold", "sub_dilation", "sub_bbox_expansion", "sam_mask_hint_threshold"], "optional": ["masking_mode", "segs_pivot", "sam_model_opt", "segm_detector_opt"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactSimpleDetectorSEGS_for_AD", "display_name": "Simple Detector for Video (SEGS)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSAM2VideoDetectorSEGS": {"input": {"required": {"image_frames": ["IMAGE"], "bbox_detector": ["BBOX_DETECTOR"], "sam2_model": ["SAM_MODEL"], "bbox_threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "sam2_threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "crop_factor": ["FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}], "drop_size": ["INT", {"min": 1, "max": 16384, "step": 1, "default": 10}]}}, "input_order": {"required": ["image_frames", "bbox_detector", "sam2_model", "bbox_threshold", "sam2_threshold", "crop_factor", "drop_size"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactSAM2VideoDetectorSEGS", "display_name": "SAM2 Video Detector (SEGS)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSimpleDetectorSEGS": {"input": {"required": {"bbox_detector": ["BBOX_DETECTOR"], "image": ["IMAGE"], "bbox_threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "bbox_dilation": ["INT", {"default": 0, "min": -512, "max": 512, "step": 1}], "crop_factor": ["FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}], "drop_size": ["INT", {"min": 1, "max": 16384, "step": 1, "default": 10}], "sub_threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "sub_dilation": ["INT", {"default": 0, "min": -512, "max": 512, "step": 1}], "sub_bbox_expansion": ["INT", {"default": 0, "min": 0, "max": 1000, "step": 1}], "sam_mask_hint_threshold": ["FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"post_dilation": ["INT", {"default": 0, "min": -512, "max": 512, "step": 1}], "sam_model_opt": ["SAM_MODEL", {"tooltip": "[OPTIONAL]\nSegment Anything Model for Silhouette Detection.\nBe sure to use the SAM_MODEL loaded through the SAMLoader (Impact) node as input.\nGiven this input, it refines the rectangular areas detected by BBOX_DETECTOR into silhouette shapes through SAM.\nsam_model_opt takes priority over segm_detector_opt."}], "segm_detector_opt": ["SEGM_DETECTOR"]}}, "input_order": {"required": ["bbox_detector", "image", "bbox_threshold", "bbox_dilation", "crop_factor", "drop_size", "sub_threshold", "sub_dilation", "sub_bbox_expansion", "sam_mask_hint_threshold"], "optional": ["post_dilation", "sam_model_opt", "segm_detector_opt"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactSimpleDetectorSEGS", "display_name": "Simple Detector (SEGS)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSimpleDetectorSEGSPipe": {"input": {"required": {"detailer_pipe": ["DETAILER_PIPE"], "image": ["IMAGE"], "bbox_threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "bbox_dilation": ["INT", {"default": 0, "min": -512, "max": 512, "step": 1}], "crop_factor": ["FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}], "drop_size": ["INT", {"min": 1, "max": 16384, "step": 1, "default": 10}], "sub_threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "sub_dilation": ["INT", {"default": 0, "min": -512, "max": 512, "step": 1}], "sub_bbox_expansion": ["INT", {"default": 0, "min": 0, "max": 1000, "step": 1}], "sam_mask_hint_threshold": ["FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"post_dilation": ["INT", {"default": 0, "min": -512, "max": 512, "step": 1}]}}, "input_order": {"required": ["detailer_pipe", "image", "bbox_threshold", "bbox_dilation", "crop_factor", "drop_size", "sub_threshold", "sub_dilation", "sub_bbox_expansion", "sam_mask_hint_threshold"], "optional": ["post_dilation"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactSimpleDetectorSEGSPipe", "display_name": "Simple Detector (SEGS/pipe)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactControlNetApplySEGS": {"input": {"required": {"segs": ["SEGS"], "control_net": ["CONTROL_NET"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}, "optional": {"segs_preprocessor": ["SEGS_PREPROCESSOR"], "control_image": ["IMAGE"]}}, "input_order": {"required": ["segs", "control_net", "strength"], "optional": ["segs_preprocessor", "control_image"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactControlNetApplySEGS", "display_name": "ControlNetApply (SEGS) - DEPRECATED", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "deprecated": true, "search_aliases": []}, "ImpactControlNetApplyAdvancedSEGS": {"input": {"required": {"segs": ["SEGS"], "control_net": ["CONTROL_NET"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}, "optional": {"segs_preprocessor": ["SEGS_PREPROCESSOR"], "control_image": ["IMAGE"], "vae": ["VAE"]}}, "input_order": {"required": ["segs", "control_net", "strength", "start_percent", "end_percent"], "optional": ["segs_preprocessor", "control_image", "vae"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactControlNetApplyAdvancedSEGS", "display_name": "ControlNetApply (SEGS)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactControlNetClearSEGS": {"input": {"required": {"segs": ["SEGS"]}}, "input_order": {"required": ["segs"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactControlNetClearSEGS", "display_name": "ImpactControlNetClearSEGS", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactIPAdapterApplySEGS": {"input": {"required": {"segs": ["SEGS"], "ipadapter_pipe": ["IPADAPTER_PIPE"], "weight": ["FLOAT", {"default": 0.7, "min": -1, "max": 3, "step": 0.05}], "noise": ["FLOAT", {"default": 0.4, "min": 0.0, "max": 1.0, "step": 0.01}], "weight_type": [["original", "linear", "channel penalty"], {"default": "channel penalty"}], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 0.9, "min": 0.0, "max": 1.0, "step": 0.001}], "unfold_batch": ["BOOLEAN", {"default": false}], "faceid_v2": ["BOOLEAN", {"default": false}], "weight_v2": ["FLOAT", {"default": 1.0, "min": -1, "max": 3, "step": 0.05}], "context_crop_factor": ["FLOAT", {"default": 1.2, "min": 1.0, "max": 100, "step": 0.1}], "reference_image": ["IMAGE"]}, "optional": {"combine_embeds": [["concat", "add", "subtract", "average", "norm average"]], "neg_image": ["IMAGE"]}}, "input_order": {"required": ["segs", "ipadapter_pipe", "weight", "noise", "weight_type", "start_at", "end_at", "unfold_batch", "faceid_v2", "weight_v2", "context_crop_factor", "reference_image"], "optional": ["combine_embeds", "neg_image"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactIPAdapterApplySEGS", "display_name": "IPAdapterApply (SEGS)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactDecomposeSEGS": {"input": {"required": {"segs": ["SEGS"]}}, "input_order": {"required": ["segs"]}, "is_input_list": false, "output": ["SEGS_HEADER", "SEG_ELT"], "output_is_list": [false, true], "output_name": ["SEGS_HEADER", "SEG_ELT"], "name": "ImpactDecomposeSEGS", "display_name": "Decompose (SEGS)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactAssembleSEGS": {"input": {"required": {"seg_header": ["SEGS_HEADER"], "seg_elt": ["SEG_ELT"]}}, "input_order": {"required": ["seg_header", "seg_elt"]}, "is_input_list": true, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactAssembleSEGS", "display_name": "Assemble (SEGS)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactFrom_SEG_ELT": {"input": {"required": {"seg_elt": ["SEG_ELT"]}}, "input_order": {"required": ["seg_elt"]}, "is_input_list": false, "output": ["SEG_ELT", "IMAGE", "MASK", "SEG_ELT_crop_region", "SEG_ELT_bbox", "SEG_ELT_control_net_wrapper", "FLOAT", "STRING"], "output_is_list": [false, false, false, false, false, false, false, false], "output_name": ["seg_elt", "cropped_image", "cropped_mask", "crop_region", "bbox", "control_net_wrapper", "confidence", "label"], "name": "ImpactFrom_SEG_ELT", "display_name": "From SEG_ELT", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactEdit_SEG_ELT": {"input": {"required": {"seg_elt": ["SEG_ELT"]}, "optional": {"cropped_image_opt": ["IMAGE"], "cropped_mask_opt": ["MASK"], "crop_region_opt": ["SEG_ELT_crop_region"], "bbox_opt": ["SEG_ELT_bbox"], "control_net_wrapper_opt": ["SEG_ELT_control_net_wrapper"], "confidence_opt": ["FLOAT", {"min": 0, "max": 1.0, "step": 0.1, "forceInput": true}], "label_opt": ["STRING", {"multiline": false, "forceInput": true}]}}, "input_order": {"required": ["seg_elt"], "optional": ["cropped_image_opt", "cropped_mask_opt", "crop_region_opt", "bbox_opt", "control_net_wrapper_opt", "confidence_opt", "label_opt"]}, "is_input_list": false, "output": ["SEG_ELT"], "output_is_list": [false], "output_name": ["SEG_ELT"], "name": "ImpactEdit_SEG_ELT", "display_name": "Edit SEG_ELT", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactDilate_Mask_SEG_ELT": {"input": {"required": {"seg_elt": ["SEG_ELT"], "dilation": ["INT", {"default": 10, "min": -512, "max": 512, "step": 1}]}}, "input_order": {"required": ["seg_elt", "dilation"]}, "is_input_list": false, "output": ["SEG_ELT"], "output_is_list": [false], "output_name": ["SEG_ELT"], "name": "ImpactDilate_Mask_SEG_ELT", "display_name": "Dilate Mask (SEG_ELT)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactDilateMask": {"input": {"required": {"mask": ["MASK"], "dilation": ["INT", {"default": 10, "min": -512, "max": 512, "step": 1}]}}, "input_order": {"required": ["mask", "dilation"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "ImpactDilateMask", "display_name": "Dilate Mask", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactGaussianBlurMask": {"input": {"required": {"mask": ["MASK"], "kernel_size": ["INT", {"default": 10, "min": 0, "max": 100, "step": 1}], "sigma": ["FLOAT", {"default": 10.0, "min": 0.1, "max": 100.0, "step": 0.1}]}}, "input_order": {"required": ["mask", "kernel_size", "sigma"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "ImpactGaussianBlurMask", "display_name": "Gaussian Blur Mask", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactDilateMaskInSEGS": {"input": {"required": {"segs": ["SEGS"], "dilation": ["INT", {"default": 10, "min": -512, "max": 512, "step": 1}]}}, "input_order": {"required": ["segs", "dilation"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactDilateMaskInSEGS", "display_name": "Dilate Mask (SEGS)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactGaussianBlurMaskInSEGS": {"input": {"required": {"segs": ["SEGS"], "kernel_size": ["INT", {"default": 10, "min": 0, "max": 100, "step": 1}], "sigma": ["FLOAT", {"default": 10.0, "min": 0.1, "max": 100.0, "step": 0.1}]}}, "input_order": {"required": ["segs", "kernel_size", "sigma"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactGaussianBlurMaskInSEGS", "display_name": "Gaussian Blur Mask (SEGS)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactScaleBy_BBOX_SEG_ELT": {"input": {"required": {"seg": ["SEG_ELT"], "scale_by": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 8.0, "step": 0.01}]}}, "input_order": {"required": ["seg", "scale_by"]}, "is_input_list": false, "output": ["SEG_ELT"], "output_is_list": [false], "output_name": ["SEG_ELT"], "name": "ImpactScaleBy_BBOX_SEG_ELT", "display_name": "ScaleBy BBOX (SEG_ELT)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactFrom_SEG_ELT_bbox": {"input": {"required": {"bbox": ["SEG_ELT_bbox"]}}, "input_order": {"required": ["bbox"]}, "is_input_list": false, "output": ["INT", "INT", "INT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["left", "top", "right", "bottom"], "name": "ImpactFrom_SEG_ELT_bbox", "display_name": "From SEG_ELT bbox", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactFrom_SEG_ELT_crop_region": {"input": {"required": {"crop_region": ["SEG_ELT_crop_region"]}}, "input_order": {"required": ["crop_region"]}, "is_input_list": false, "output": ["INT", "INT", "INT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["left", "top", "right", "bottom"], "name": "ImpactFrom_SEG_ELT_crop_region", "display_name": "From SEG_ELT crop_region", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactCount_Elts_in_SEGS": {"input": {"required": {"segs": ["SEGS"]}}, "input_order": {"required": ["segs"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["INT"], "name": "ImpactCount_Elts_in_SEGS", "display_name": "Count Elts in SEGS", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "BboxDetectorCombined_v2": {"input": {"required": {"bbox_detector": ["BBOX_DETECTOR"], "image": ["IMAGE"], "threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "dilation": ["INT", {"default": 4, "min": -512, "max": 512, "step": 1}]}}, "input_order": {"required": ["bbox_detector", "image", "threshold", "dilation"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "BboxDetectorCombined_v2", "display_name": "BBOX Detector (combined)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SegmDetectorCombined_v2": {"input": {"required": {"segm_detector": ["SEGM_DETECTOR"], "image": ["IMAGE"], "threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "dilation": ["INT", {"default": 0, "min": -512, "max": 512, "step": 1}]}}, "input_order": {"required": ["segm_detector", "image", "threshold", "dilation"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "SegmDetectorCombined_v2", "display_name": "SEGM Detector (combined)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SegsToCombinedMask": {"input": {"required": {"segs": ["SEGS"]}}, "input_order": {"required": ["segs"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "SegsToCombinedMask", "display_name": "SEGS to MASK (combined)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Operation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "KSamplerProvider": {"input": {"required": {"seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "tooltip": "Random seed to use for generating CPU noise for sampling."}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "total sampling steps"}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "tooltip": "classifier free guidance value"}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"], {"tooltip": "sampler"}], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"], {"tooltip": "noise schedule"}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The amount of noise to remove. This amount is the noise added at the start, and the higher it is, the more the input latent will be modified before being returned."}], "basic_pipe": ["BASIC_PIPE", {"tooltip": "basic_pipe input for sampling"}]}, "optional": {"scheduler_func_opt": ["SCHEDULER_FUNC", {"tooltip": "[OPTIONAL] Noise schedule generation function. If this is set, the scheduler widget will be ignored."}]}}, "input_order": {"required": ["seed", "steps", "cfg", "sampler_name", "scheduler", "denoise", "basic_pipe"], "optional": ["scheduler_func_opt"]}, "is_input_list": false, "output": ["KSAMPLER"], "output_is_list": [false], "output_name": ["KSAMPLER"], "name": "KSamplerProvider", "display_name": "KSamplerProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Sampler", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["sampler wrapper. (Can be used when generating a regional_prompt.)"], "search_aliases": []}, "TwoSamplersForMask": {"input": {"required": {"latent_image": ["LATENT", {"tooltip": "input latent image"}], "base_sampler": ["KSAMPLER", {"tooltip": "Sampler to apply to the region outside the mask."}], "mask_sampler": ["KSAMPLER", {"tooltip": "Sampler to apply to the masked region."}], "mask": ["MASK", {"tooltip": "region mask"}]}}, "input_order": {"required": ["latent_image", "base_sampler", "mask_sampler", "mask"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "TwoSamplersForMask", "display_name": "TwoSamplersForMask", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Sampler", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["result latent"], "search_aliases": []}, "TiledKSamplerProvider": {"input": {"required": {"seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "tooltip": "Random seed to use for generating CPU noise for sampling."}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "total sampling steps"}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "tooltip": "classifier free guidance value"}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"], {"tooltip": "sampler"}], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"], {"tooltip": "noise schedule"}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The amount of noise to remove. This amount is the noise added at the start, and the higher it is, the more the input latent will be modified before being returned."}], "tile_width": ["INT", {"default": 512, "min": 320, "max": 16384, "step": 64, "tooltip": "Sets the width of the tile to be used in TiledKSampler."}], "tile_height": ["INT", {"default": 512, "min": 320, "max": 16384, "step": 64, "tooltip": "Sets the height of the tile to be used in TiledKSampler."}], "tiling_strategy": [["random", "padded", "simple"], {"tooltip": "Sets the tiling strategy for TiledKSampler."}], "basic_pipe": ["BASIC_PIPE", {"tooltip": "basic_pipe input for sampling"}]}}, "input_order": {"required": ["seed", "steps", "cfg", "sampler_name", "scheduler", "denoise", "tile_width", "tile_height", "tiling_strategy", "basic_pipe"]}, "is_input_list": false, "output": ["KSAMPLER"], "output_is_list": [false], "output_name": ["KSAMPLER"], "name": "TiledKSamplerProvider", "display_name": "TiledKSamplerProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Sampler", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["sampler wrapper. (Can be used when generating a regional_prompt.)"], "search_aliases": []}, "KSamplerAdvancedProvider": {"input": {"required": {"cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "toolip": "classifier free guidance value"}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"], {"toolip": "sampler"}], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"], {"toolip": "noise schedule"}], "sigma_factor": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01, "toolip": "Multiplier of noise schedule"}], "basic_pipe": ["BASIC_PIPE", {"toolip": "basic_pipe input for sampling"}]}, "optional": {"sampler_opt": ["SAMPLER", {"toolip": "[OPTIONAL] Uses the passed sampler instead of internal impact_sampler."}], "scheduler_func_opt": ["SCHEDULER_FUNC", {"toolip": "[OPTIONAL] Noise schedule generation function. If this is set, the scheduler widget will be ignored."}]}}, "input_order": {"required": ["cfg", "sampler_name", "scheduler", "sigma_factor", "basic_pipe"], "optional": ["sampler_opt", "scheduler_func_opt"]}, "is_input_list": false, "output": ["KSAMPLER_ADVANCED"], "output_is_list": [false], "output_name": ["KSAMPLER_ADVANCED"], "name": "KSamplerAdvancedProvider", "display_name": "KSamplerAdvancedProvider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Sampler", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["sampler wrapper. (Can be used when generating a regional_prompt.)"], "search_aliases": []}, "TwoAdvancedSamplersForMask": {"input": {"required": {"seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "tooltip": "Random seed to use for generating CPU noise for sampling."}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "total sampling steps"}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The amount of noise to remove. This amount is the noise added at the start, and the higher it is, the more the input latent will be modified before being returned."}], "samples": ["LATENT", {"tooltip": "input latent image"}], "base_sampler": ["KSAMPLER_ADVANCED", {"tooltip": "Sampler to apply to the region outside the mask."}], "mask_sampler": ["KSAMPLER_ADVANCED", {"tooltip": "Sampler to apply to the masked region."}], "mask": ["MASK", {"tooltip": "region mask"}], "overlap_factor": ["INT", {"default": 10, "min": 0, "max": 10000, "tooltip": "To smooth the seams of the region boundaries, expand the mask by the overlap_factor amount to overlap with other regions."}]}}, "input_order": {"required": ["seed", "steps", "denoise", "samples", "base_sampler", "mask_sampler", "mask", "overlap_factor"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "TwoAdvancedSamplersForMask", "display_name": "TwoAdvancedSamplersForMask", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Sampler", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["result latent"], "search_aliases": []}, "ImpactNegativeConditioningPlaceholder": {"input": {"required": {}}, "input_order": {"required": []}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ImpactNegativeConditioningPlaceholder", "display_name": "Negative Cond Placeholder", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/sampling", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["This is a Placeholder for the FLUX model that does not use Negative Conditioning."], "search_aliases": []}, "PreviewBridge": {"input": {"required": {"images": ["IMAGE"], "image": ["STRING", {"default": ""}]}, "optional": {"block": ["BOOLEAN", {"default": false, "label_on": "if_empty_mask", "label_off": "never", "tooltip": "is_empty_mask: If the mask is empty, the execution is stopped.\nnever: The execution is never stopped."}], "restore_mask": [["never", "always", "if_same_size"], {"tooltip": "if_same_size: If the changed input image is the same size as the previous image, restore using the last saved mask\nalways: Whenever the input image changes, always restore using the last saved mask\nnever: Do not restore the mask.\n`restore_mask` has higher priority than `block`"}]}, "hidden": {"unique_id": "UNIQUE_ID", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["images", "image"], "optional": ["block", "restore_mask"], "hidden": ["unique_id", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "PreviewBridge", "display_name": "Preview Bridge (Image)", "description": "This is a feature that allows you to edit and send a Mask over a image.\nIf the block is set to 'is_empty_mask', the execution is stopped when the mask is empty.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "PreviewBridgeLatent": {"input": {"required": {"latent": ["LATENT"], "image": ["STRING", {"default": ""}], "preview_method": [["Latent2RGB-FLUX.1", "Latent2RGB-SDXL", "Latent2RGB-SD15", "Latent2RGB-SD3", "Latent2RGB-SD-X4", "Latent2RGB-Playground-2.5", "Latent2RGB-SC-Prior", "Latent2RGB-SC-B", "Latent2RGB-LTXV", "TAEF1", "TAESDXL", "TAESD15", "TAESD3"]]}, "optional": {"vae_opt": ["VAE"], "block": ["BOOLEAN", {"default": false, "label_on": "if_empty_mask", "label_off": "never", "tooltip": "is_empty_mask: If the mask is empty, the execution is stopped.\nnever: The execution is never stopped. Instead, it returns a white mask."}], "restore_mask": [["never", "always", "if_same_size"], {"tooltip": "if_same_size: If the changed input latent is the same size as the previous latent, restore using the last saved mask\nalways: Whenever the input latent changes, always restore using the last saved mask\nnever: Do not restore the mask.\n`restore_mask` has higher priority than `block`\nIf the input latent already has a mask, do not restore mask."}]}, "hidden": {"unique_id": "UNIQUE_ID", "prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["latent", "image", "preview_method"], "optional": ["vae_opt", "block", "restore_mask"], "hidden": ["unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["LATENT", "MASK"], "output_is_list": [false, false], "output_name": ["LATENT", "MASK"], "name": "PreviewBridgeLatent", "display_name": "Preview Bridge (Latent)", "description": "This is a feature that allows you to edit and send a Mask over a latent image.\nIf the block is set to 'is_empty_mask', the execution is stopped when the mask is empty.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "ImageSender": {"input": {"required": {"images": ["IMAGE"], "filename_prefix": ["STRING", {"default": "ImgSender"}], "link_id": ["INT", {"default": 0, "min": 0, "max": 9223372036854775807, "step": 1}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["images", "filename_prefix", "link_id"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "ImageSender", "display_name": "Image Sender", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": true, "has_intermediate_output": false, "search_aliases": ["preview", "preview image", "show image", "view image", "display image", "image viewer"], "essentials_category": "Basics"}, "ImageReceiver": {"input": {"required": {"image": [["000001 (1).png", "000001 (2).png", "000001 (3).png", "000001 (4).png", "000001.png", "000002 (1).png", "000002 (2).png", "000002 (3).png", "000002 (4).png", "000002.png", "000003 (1).png", "000003 (2).png", "000003 (3).png", "000003 (4).png", "000003.png", "000004 (1).png", "000004 (2).png", "000004 (3).png", "000004 (4).png", "000004.png", "000005 (1).png", "000005 (2).png", "000005 (3).png", "000005 (4).png", "000005.png", "000006 (1).png", "000006 (2).png", "000006 (3).png", "000006 (4).png", "000006.png", "000007 (1).png", "000007 (2).png", "000007 (3).png", "000007 (4).png", "000007.png", "000008 (1).png", "000008 (2).png", "000008 (3).png", "000008 (4).png", "000008.png", "000009 (1).png", "000009 (2).png", "000009 (3).png", "000009 (4).png", "000009.png", "000010 (1).png", "000010 (2).png", "000010 (3).png", "000010 (4).png", "000010.png", "000011 (1).png", "000011 (2).png", "000011 (3).png", "000011 (4).png", "000011.png", "000012 (1).png", "000012 (2).png", "000012 (3).png", "000012 (4).png", "000012.png", "000013 (1).png", "000013 (2).png", "000013 (3).png", "000013 (4).png", "000013.png", "000014 (1).png", "000014 (2).png", "000014 (3).png", "000014 (4).png", "000014.png", "000015 (1).png", "000015 (2).png", "000015 (3).png", "000015 (4).png", "000015.png", "000016 (1).png", "000016 (2).png", "000016 (3).png", "000016 (4).png", "000016.png", "000017 (1).png", "000017 (2).png", "000017 (3).png", "000017 (4).png", "000017.png", "000018 (1).png", "000018 (2).png", "000018 (3).png", "000018 (4).png", "000018.png", "000019 (1).png", "000019 (2).png", "000019 (3).png", "000019 (4).png", "000019.png", "000020 (1).png", "000020 (2).png", "000020 (3).png", "000020 (4).png", "000020.png", "000021 (1).png", "000021 (2).png", "000021 (3).png", "000021 (4).png", "000021.png", "000022 (1).png", "000022 (2).png", "000022 (3).png", "000022 (4).png", "000022.png", "000023 (1).png", "000023 (2).png", "000023 (3).png", "000023 (4).png", "000023.png", "000024 (1).png", "000024 (2).png", "000024 (3).png", "000024 (4).png", "000024.png", "000025 (1).png", "000025 (2).png", "000025 (3).png", "000025 (4).png", "000025.png", "000026 (1).png", "000026 (2).png", "000026 (3).png", "000026 (4).png", "000026.png", "000027 (1).png", "000027 (2).png", "000027 (3).png", "000027 (4).png", "000027.png", "000028 (1).png", "000028 (2).png", "000028 (3).png", "000028 (4).png", "000028.png", "000029 (1).png", "000029 (2).png", "000029 (3).png", "000029 (4).png", "000029.png", "000030 (1).png", "000030 (2).png", "000030 (3).png", "000030 (4).png", "000030.png", "000031 (1).png", "000031 (2).png", "000031 (3).png", "000031 (4).png", "000031.png", "000032 (1).png", "000032 (2).png", "000032 (3).png", "000032 (4).png", "000032.png", "000033 (1).png", "000033 (2).png", "000033 (3).png", "000033 (4).png", "000033.png", "000034 (1).png", "000034 (2).png", "000034 (3).png", "000034 (4).png", "000034.png", "000035 (1).png", "000035 (2).png", "000035 (3).png", "000035 (4).png", "000035.png", "000036 (1).png", "000036 (2).png", "000036 (3).png", "000036 (4).png", "000036.png", "000037 (1).png", "000037 (2).png", "000037 (3).png", "000037 (4).png", "000037.png", "000038 (1).png", "000038 (2).png", "000038 (3).png", "000038 (4).png", "000038.png", "000039 (1).png", "000039 (2).png", "000039 (3).png", "000039 (4).png", "000039.png", "000040 (1).png", "000040 (2).png", "000040 (3).png", "000040 (4).png", "000040.png", "000041 (1).png", "000041 (2).png", "000041 (3).png", "000041 (4).png", "000041.png", "000042 (1).png", "000042 (2).png", "000042 (3).png", "000042 (4).png", "000042.png", "000043 (1).png", "000043 (2).png", "000043 (3).png", "000043 (4).png", "000043.png", "000044 (1).png", "000044 (2).png", "000044 (3).png", "000044 (4).png", "000044.png", "000045 (1).png", "000045 (2).png", "000045 (3).png", "000045 (4).png", "000045.png", "000046 (1).png", "000046 (2).png", "000046 (3).png", "000046 (4).png", "000046.png", "000047 (1).png", "000047 (2).png", "000047 (3).png", "000047 (4).png", "000047.png", "000048 (1).png", "000048 (2).png", "000048 (3).png", "000048 (4).png", "000048.png", "000049 (1).png", "000049 (2).png", "000049 (3).png", "000049 (4).png", "000049.png", "000050 (1).png", "000050 (2).png", "000050 (3).png", "000050 (4).png", "000050.png", "000051 (1).png", "000051 (2).png", "000051 (3).png", "000051 (4).png", "000051.png", "000052 (1).png", "000052 (2).png", "000052 (3).png", "000052 (4).png", "000052.png", "000053 (1).png", "000053 (2).png", "000053 (3).png", "000053 (4).png", "000053.png", "000054 (1).png", "000054 (2).png", "000054 (3).png", "000054 (4).png", "000054.png", "000055 (1).png", "000055 (2).png", "000055 (3).png", "000055 (4).png", "000055.png", "000056 (1).png", "000056 (2).png", "000056 (3).png", "000056 (4).png", "000056.png", "000057 (1).png", "000057 (2).png", "000057 (3).png", "000057 (4).png", "000057.png", "000058 (1).png", "000058 (2).png", "000058 (3).png", "000058 (4).png", "000058.png", "000059 (1).png", "000059 (2).png", "000059 (3).png", "000059 (4).png", "000059.png", "000060 (1).png", "000060 (2).png", "000060 (3).png", "000060 (4).png", "000060.png", "000061 (1).png", "000061 (2).png", "000061 (3).png", "000061 (4).png", "000061.png", "000062 (1).png", "000062 (2).png", "000062 (3).png", "000062 (4).png", "000062.png", "000063 (1).png", "000063 (2).png", "000063 (3).png", "000063 (4).png", "000063.png", "000064 (1).png", "000064 (2).png", "000064 (3).png", "000064 (4).png", "000064.png", "000065 (1).png", "000065 (2).png", "000065 (3).png", "000065 (4).png", "000065.png", "000066 (1).png", "000066 (2).png", "000066 (3).png", "000066 (4).png", "000066.png", "000067 (1).png", "000067 (2).png", "000067 (3).png", "000067 (4).png", "000067.png", "000068 (1).png", "000068 (2).png", "000068 (3).png", "000068 (4).png", "000068.png", "000069 (1).png", "000069 (2).png", "000069 (3).png", "000069 (4).png", "000069.png", "000070 (1).png", "000070 (2).png", "000070 (3).png", "000070 (4).png", "000070.png", "000071 (1).png", "000071 (2).png", "000071 (3).png", "000071 (4).png", "000071.png", "000072 (1).png", "000072 (2).png", "000072 (3).png", "000072 (4).png", "000072.png", "000073 (1).png", "000073 (2).png", "000073 (3).png", "000073 (4).png", "000073.png", "000074 (1).png", "000074 (2).png", "000074 (3).png", "000074 (4).png", "000074.png", "000075 (1).png", "000075 (2).png", "000075 (3).png", "000075 (4).png", "000075.png", "000076 (1).png", "000076 (2).png", "000076 (3).png", "000076 (4).png", "000076.png", "000077 (1).png", "000077 (2).png", "000077 (3).png", "000077 (4).png", "000077.png", "000078 (1).png", "000078 (2).png", "000078 (3).png", "000078 (4).png", "000078.png", "000079 (1).png", "000079 (2).png", "000079 (3).png", "000079 (4).png", "000079.png", "000080 (1).png", "000080 (2).png", "000080 (3).png", "000080 (4).png", "000080.png", "000081 (1).png", "000081 (2).png", "000081 (3).png", "000081 (4).png", "000081.png", "000082 (1).png", "000082 (2).png", "000082 (3).png", "000082 (4).png", "000082.png", "000083 (1).png", "000083 (2).png", "000083 (3).png", "000083 (4).png", "000083.png", "000084 (1).png", "000084 (2).png", "000084 (3).png", "000084 (4).png", "000084.png", "000085 (1).png", "000085 (2).png", "000085 (3).png", "000085 (4).png", "000085.png", "000086 (1).png", "000086 (2).png", "000086 (3).png", "000086 (4).png", "000086.png", "000087 (1).png", "000087 (2).png", "000087 (3).png", "000087 (4).png", "000087.png", "000088 (1).png", "000088 (2).png", "000088 (3).png", "000088 (4).png", "000088.png", "000089 (1).png", "000089 (2).png", "000089 (3).png", "000089 (4).png", "000089.png", "000090 (1).png", "000090 (2).png", "000090 (3).png", "000090 (4).png", "000090.png", "000091 (1).png", "000091 (2).png", "000091 (3).png", "000091 (4).png", "000091.png", "000092 (1).png", "000092 (2).png", "000092 (3).png", "000092 (4).png", "000092.png", "000093 (1).png", "000093 (2).png", "000093 (3).png", "000093 (4).png", "000093.png", "000094 (1).png", "000094 (2).png", "000094 (3).png", "000094 (4).png", "000094.png", "000095 (1).png", "000095 (2).png", "000095 (3).png", "000095 (4).png", "000095.png", "000096 (1).png", "000096 (2).png", "000096 (3).png", "000096 (4).png", "000096.png", "000097 (1).png", "000097 (2).png", "000097 (3).png", "000097 (4).png", "000097.png", "000098 (1).png", "000098 (2).png", "000098 (3).png", "000098 (4).png", "000098.png", "000099 (1).png", "000099 (2).png", "000099 (3).png", "000099 (4).png", "000099.png", "000100 (1).png", "000100 (2).png", "000100 (3).png", "000100 (4).png", "000100.png", "000101 (1).png", "000101 (2).png", "000101 (3).png", "000101 (4).png", "000101.png", "000102 (1).png", "000102 (2).png", "000102 (3).png", "000102 (4).png", "000102.png", "000103 (1).png", "000103 (2).png", "000103 (3).png", "000103 (4).png", "000103.png", "000104 (1).png", "000104 (2).png", "000104 (3).png", "000104 (4).png", "000104.png", "000105 (1).png", "000105 (2).png", "000105 (3).png", "000105 (4).png", "000105.png", "000106 (1).png", "000106 (2).png", "000106 (3).png", "000106 (4).png", "000106.png", "000107 (1).png", "000107 (2).png", "000107 (3).png", "000107 (4).png", "000107.png", "000108 (1).png", "000108 (2).png", "000108 (3).png", "000108 (4).png", "000108.png", "000109 (1).png", "000109 (2).png", "000109 (3).png", "000109 (4).png", "000109.png", "000110 (1).png", "000110 (2).png", "000110 (3).png", "000110 (4).png", "000110.png", "000111 (1).png", "000111 (2).png", "000111 (3).png", "000111 (4).png", "000111.png", "000112 (1).png", "000112 (2).png", "000112 (3).png", "000112 (4).png", "000112.png", "000113 (1).png", "000113 (2).png", "000113 (3).png", "000113 (4).png", "000113.png", "000114 (1).png", "000114 (2).png", "000114 (3).png", "000114 (4).png", "000114.png", "000115 (1).png", "000115 (2).png", "000115 (3).png", "000115 (4).png", "000115.png", "000116 (1).png", "000116 (2).png", "000116 (3).png", "000116 (4).png", "000116.png", "000117 (1).png", "000117 (2).png", "000117 (3).png", "000117 (4).png", "000117.png", "000118 (1).png", "000118 (2).png", "000118 (3).png", "000118 (4).png", "000118.png", "000119 (1).png", "000119 (2).png", "000119 (3).png", "000119 (4).png", "000119.png", "000120 (1).png", "000120 (2).png", "000120 (3).png", "000120 (4).png", "000120.png", "000121 (1).png", "000121 (2).png", "000121 (3).png", "000121 (4).png", "000121.png", "000122 (1).png", "000122 (2).png", "000122 (3).png", "000122 (4).png", "000122.png", "000123 (1).png", "000123 (2).png", "000123 (3).png", "000123 (4).png", "000123.png", "000124 (1).png", "000124 (2).png", "000124 (3).png", "000124 (4).png", "000124.png", "000125 (1).png", "000125 (2).png", "000125 (3).png", "000125 (4).png", "000125.png", "000126 (1).png", "000126 (2).png", "000126 (3).png", "000126 (4).png", "000126.png", "000127 (1).png", "000127 (2).png", "000127 (3).png", "000127 (4).png", "000127.png", "000128 (1).png", "000128 (2).png", "000128 (3).png", "000128 (4).png", "000128.png", "000129 (1).png", "000129 (2).png", "000129 (3).png", "000129 (4).png", "000129.png", "000130 (1).png", "000130 (2).png", "000130 (3).png", "000130 (4).png", "000130.png", "000131 (1).png", "000131 (2).png", "000131 (3).png", "000131 (4).png", "000131.png", "000132 (1).png", "000132 (2).png", "000132 (3).png", "000132 (4).png", "000132.png", "000133 (1).png", "000133 (2).png", "000133 (3).png", "000133 (4).png", "000133.png", "000134 (1).png", "000134 (2).png", "000134 (3).png", "000134 (4).png", "000134.png", "000135 (1).png", "000135 (2).png", "000135 (3).png", "000135 (4).png", "000135.png", "000136 (1).png", "000136 (2).png", "000136 (3).png", "000136 (4).png", "000136.png", "000137 (1).png", "000137 (2).png", "000137 (3).png", "000137.png", "000138 (1).png", "000138 (2).png", "000138 (3).png", "000138.png", "000139 (1).png", "000139 (2).png", "000139 (3).png", "000139.png", "000140 (1).png", "000140 (2).png", "000140 (3).png", "000140.png", "000141 (1).png", "000141 (2).png", "000141 (3).png", "000141.png", "000142 (1).png", "000142 (2).png", "000142 (3).png", "000142.png", "000143 (1).png", "000143 (2).png", "000143 (3).png", "000143.png", "000144 (1).png", "000144 (2).png", "000144 (3).png", "000144.png", "000145 (1).png", "000145 (2).png", "000145 (3).png", "000145.png", "000146 (1).png", "000146 (2).png", "000146 (3).png", "000146.png", "000147 (1).png", "000147 (2).png", "000147 (3).png", "000147.png", "000148 (1).png", "000148 (2).png", "000148 (3).png", "000148.png", "000149 (1).png", "000149 (2).png", "000149 (3).png", "000149.png", "000150 (1).png", "000150 (2).png", "000150 (3).png", "000150.png", "000151 (1).png", "000151 (2).png", "000151 (3).png", "000151.png", "000152 (1).png", "000152 (2).png", "000152 (3).png", "000152.png", "000153 (1).png", "000153 (2).png", "000153 (3).png", "000153.png", "000154 (1).png", "000154 (2).png", "000154 (3).png", "000154.png", "000155 (1).png", "000155 (2).png", "000155 (3).png", "000155.png", "000156 (1).png", "000156 (2).png", "000156 (3).png", "000156.png", "000157 (1).png", "000157 (2).png", "000157 (3).png", "000157.png", "000158 (1).png", "000158 (2).png", "000158 (3).png", "000158.png", "000159 (1).png", "000159 (2).png", "000159 (3).png", "000159.png", "000160 (1).png", "000160 (2).png", "000160 (3).png", "000160.png", "000161 (1).png", "000161 (2).png", "000161 (3).png", "000161.png", "000162 (1).png", "000162 (2).png", "000162 (3).png", "000162.png", "000163 (1).png", "000163 (2).png", "000163 (3).png", "000163.png", "000164 (1).png", "000164 (2).png", "000164 (3).png", "000164.png", "000165 (1).png", "000165 (2).png", "000165 (3).png", "000165.png", "000166 (1).png", "000166 (2).png", "000166 (3).png", "000166.png", "000167 (1).png", "000167 (2).png", "000167 (3).png", "000167.png", "000168 (1).png", "000168 (2).png", "000168 (3).png", "000168.png", "000169 (1).png", "000169 (2).png", "000169 (3).png", "000169.png", "000170 (1).png", "000170 (2).png", "000170 (3).png", "000170.png", "000171 (1).png", "000171 (2).png", "000171 (3).png", "000171.png", "000172 (1).png", "000172 (2).png", "000172 (3).png", "000172.png", "000173 (1).png", "000173 (2).png", "000173 (3).png", "000173.png", "000174 (1).png", "000174 (2).png", "000174 (3).png", "000174.png", "000175 (1).png", "000175 (2).png", "000175 (3).png", "000175.png", "000176 (1).png", "000176 (2).png", "000176 (3).png", "000176.png", "000177 (1).png", "000177 (2).png", "000177 (3).png", "000177.png", "000178 (1).png", "000178 (2).png", "000178 (3).png", "000178.png", "000179 (1).png", "000179 (2).png", "000179 (3).png", "000179.png", "000180 (1).png", "000180 (2).png", "000180 (3).png", "000180.png", "000181 (1).png", "000181 (2).png", "000181 (3).png", "000181.png", "000182 (1).png", "000182 (2).png", "000182 (3).png", "000182.png", "000183 (1).png", "000183 (2).png", "000183 (3).png", "000183.png", "000184 (1).png", "000184 (2).png", "000184 (3).png", "000184.png", "000185 (1).png", "000185 (2).png", "000185 (3).png", "000185.png", "000186 (1).png", "000186 (2).png", "000186 (3).png", "000186.png", "000187 (1).png", "000187 (2).png", "000187 (3).png", "000187.png", "000188 (1).png", "000188 (2).png", "000188 (3).png", "000188.png", "000189 (1).png", "000189 (2).png", "000189 (3).png", "000189.png", "000190 (1).png", "000190 (2).png", "000190 (3).png", "000190.png", "000191 (1).png", "000191 (2).png", "000191 (3).png", "000191.png", "000192 (1).png", "000192 (2).png", "000192 (3).png", "000192.png", "000193 (1).png", "000193 (2).png", "000193 (3).png", "000193.png", "000194 (1).png", "000194 (2).png", "000194 (3).png", "000194.png", "000195 (1).png", "000195 (2).png", "000195 (3).png", "000195.png", "000196 (1).png", "000196 (2).png", "000196 (3).png", "000196.png", "000197 (1).png", "000197 (2).png", "000197 (3).png", "000197.png", "000198 (1).png", "000198 (2).png", "000198 (3).png", "000198.png", "000199 (1).png", "000199 (2).png", "000199 (3).png", "000199.png", "000200 (1).png", "000200 (2).png", "000200 (3).png", "000200.png", "000201 (1).png", "000201 (2).png", "000201 (3).png", "000201.png", "000202 (1).png", "000202 (2).png", "000202 (3).png", "000202.png", "000203 (1).png", "000203 (2).png", "000203 (3).png", "000203.png", "000204 (1).png", "000204 (2).png", "000204 (3).png", "000204.png", "000205 (1).png", "000205 (2).png", "000205 (3).png", "000205.png", "000206 (1).png", "000206 (2).png", "000206 (3).png", "000206.png", "000207 (1).png", "000207 (2).png", "000207 (3).png", "000207.png", "000208 (1).png", "000208 (2).png", "000208 (3).png", "000208.png", "000209 (1).png", "000209 (2).png", "000209 (3).png", "000209.png", "000210 (1).png", "000210 (2).png", "000210 (3).png", "000210.png", "000211 (1).png", "000211 (2).png", "000211 (3).png", "000211.png", "000212 (1).png", "000212 (2).png", "000212 (3).png", "000212.png", "000213 (1).png", "000213 (2).png", "000213 (3).png", "000213.png", "000214 (1).png", "000214 (2).png", "000214 (3).png", "000214.png", "000215 (1).png", "000215 (2).png", "000215 (3).png", "000215.png", "000216 (1).png", "000216 (2).png", "000216 (3).png", "000216.png", "000217 (1).png", "000217 (2).png", "000217 (3).png", "000217.png", "000218 (1).png", "000218 (2).png", "000218 (3).png", "000218.png", "000219 (1).png", "000219 (2).png", "000219 (3).png", "000219.png", "000220 (1).png", "000220 (2).png", "000220 (3).png", "000220.png", "000221 (1).png", "000221 (2).png", "000221 (3).png", "000221.png", "000222 (1).png", "000222 (2).png", "000222 (3).png", "000222.png", "000223 (1).png", "000223 (2).png", "000223 (3).png", "000223.png", "000224 (1).png", "000224 (2).png", "000224 (3).png", "000224.png", "000225 (1).png", "000225 (2).png", "000225 (3).png", "000225.png", "000226 (1).png", "000226 (2).png", "000226 (3).png", "000226.png", "000227 (1).png", "000227 (2).png", "000227 (3).png", "000227.png", "000228 (1).png", "000228 (2).png", "000228 (3).png", "000228.png", "000229 (1).png", "000229 (2).png", "000229 (3).png", "000229.png", "000230 (1).png", "000230 (2).png", "000230 (3).png", "000230.png", "000231 (1).png", "000231 (2).png", "000231 (3).png", "000231.png", "000232 (1).png", "000232 (2).png", "000232 (3).png", "000232.png", "000233 (1).png", "000233 (2).png", "000233 (3).png", "000233.png", "000234 (1).png", "000234 (2).png", "000234 (3).png", "000234.png", "000235 (1).png", "000235 (2).png", "000235 (3).png", "000235.png", "000236 (1).png", "000236 (2).png", "000236 (3).png", "000236.png", "000237 (1).png", "000237 (2).png", "000237 (3).png", "000237.png", "000238 (1).png", "000238 (2).png", "000238 (3).png", "000238.png", "000239 (1).png", "000239 (2).png", "000239 (3).png", "000239.png", "000240 (1).png", "000240 (2).png", "000240 (3).png", "000240.png", "000241 (1).png", "000241 (2).png", "000241 (3).png", "000241.png", "000242 (1).png", "000242 (2).png", "000242 (3).png", "000242.png", "000243 (1).png", "000243 (2).png", "000243 (3).png", "000243.png", "000244 (1).png", "000244 (2).png", "000244 (3).png", "000244.png", "000245 (1).png", "000245 (2).png", "000245 (3).png", "000245.png", "000246 (1).png", "000246 (2).png", "000246 (3).png", "000246.png", "000247 (1).png", "000247 (2).png", "000247 (3).png", "000247.png", "000248 (1).png", "000248 (2).png", "000248 (3).png", "000248.png", "000249 (1).png", "000249 (2).png", "000249 (3).png", "000249.png", "000250 (1).png", "000250 (2).png", "000250 (3).png", "000250.png", "000251 (1).png", "000251 (2).png", "000251 (3).png", "000251.png", "000252 (1).png", "000252 (2).png", "000252 (3).png", "000252.png", "000253 (1).png", "000253 (2).png", "000253 (3).png", "000253.png", "000254 (1).png", "000254 (2).png", "000254 (3).png", "000254.png", "000255 (1).png", "000255 (2).png", "000255 (3).png", "000255.png", "000256 (1).png", "000256 (2).png", "000256 (3).png", "000256.png", "000257 (1).png", "000257 (2).png", "000257 (3).png", "000257.png", "000258 (1).png", "000258 (2).png", "000258 (3).png", "000258.png", "000259 (1).png", "000259 (2).png", "000259 (3).png", "000259.png", "000260 (1).png", "000260 (2).png", "000260 (3).png", "000260.png", "000261 (1).png", "000261 (2).png", "000261 (3).png", "000261.png", "000262 (1).png", "000262 (2).png", "000262 (3).png", "000262.png", "000263 (1).png", "000263 (2).png", "000263 (3).png", "000263.png", "000264 (1).png", "000264 (2).png", "000264 (3).png", "000264.png", "000265 (1).png", "000265 (2).png", "000265 (3).png", "000265.png", "000266 (1).png", "000266 (2).png", "000266 (3).png", "000266.png", "000267 (1).png", "000267 (2).png", "000267 (3).png", "000267.png", "000268 (1).png", "000268 (2).png", "000268 (3).png", "000268.png", "000269 (1).png", "000269 (2).png", "000269 (3).png", "000269.png", "000270 (1).png", "000270 (2).png", "000270 (3).png", "000270.png", "000271 (1).png", "000271 (2).png", "000271 (3).png", "000271.png", "000272 (1).png", "000272 (2).png", "000272 (3).png", "000272.png", "000273 (1).png", "000273 (2).png", "000273 (3).png", "000273.png", "000274 (1).png", "000274 (2).png", "000274 (3).png", "000274.png", "000275 (1).png", "000275 (2).png", "000275 (3).png", "000275.png", "000276 (1).png", "000276 (2).png", "000276 (3).png", "000276.png", "000277 (1).png", "000277 (2).png", "000277.png", "000278 (1).png", "000278 (2).png", "000278.png", "000279 (1).png", "000279 (2).png", "000279.png", "000280 (1).png", "000280 (2).png", "000280.png", "000281 (1).png", "000281 (2).png", "000281.png", "000282 (1).png", "000282 (2).png", "000282.png", "000283 (1).png", "000283.png", "000284 (1).png", "000284.png", "000285 (1).png", "000285.png", "000286 (1).png", "000286.png", "000287 (1).png", "000287.png", "000288 (1).png", "000288.png", "000289.png", "000290.png", "000291.png", "000292.png", "000293.png", "000294.png", "000295.png", "000296.png", "000297.png", "000298.png", "000299.png", "000300.png", "000301.png", "000302.png", "000303.png", "000304.png", "000305.png", "000306.png", "000307.png", "000308.png", "000309.png", "000310.png", "000311.png", "000312.png", "000313.png", "000314.png", "084419f11856de5234c3a8a3eba3aac7.jpg", "13753499768289aa1210f59c25731506.png", "38f85f76ca64ed6738d5ca0c05542950_origin(1).jpg", "3ea2a2e2aa7aea7bdaab0ed41c3e766d.png", "5b6b0f9e128f5575e17785e97628311a.png", "62683d69df9198b4b8ec71806fe147d8.png", "8fb439ac734b89f1729916e0c56bcf39.png", "A3E38E3E-9369-4C72-A022-E5EC73414D11-73729-00001F1EBB363F3A.jpg", "ComfyUI_00018_.png", "Qwen_Edit2511_\u56fe\u751f\u56fe_00003_.png", "Qwen_\u6587\u751f\u56fe_00006_.png", "clipboard-2026-06-09T08-37-30-236Z-06840286.png", "clipboard-2026-06-09T08-55-09-228Z-06840286.png", "clipboard-2026-06-09T10-24-30-214Z-f4ada252.png", "clipboard-2026-06-10T01-13-36-419Z-06840286.png", "clipboard-2026-06-10T01-43-35-666Z-ed57443b.png", "clipboard-2026-06-10T02-16-15-866Z-9166c31e.png", "clipboard-2026-06-10T02-25-26-729Z-5947938f.jpg", "clipboard-2026-06-10T03-06-23-575Z-68d3b00e.jpg", "clipboard-2026-06-10T03-06-23-577Z-bdb0dae5.png", "clipboard-2026-06-11T08-00-51-819Z-61275a50.jpg", "clipboard-2026-06-11T08-24-13-352Z-fe58af8f.jpg", "comfyui_kaoyan_1.png", "comfyui_kaoyan_2.png", "comfyui_kaoyan_800_1(2).png", "example.png", "img01_classroom.jpg", "img02_club.jpg", "lQDPKeGXrn043cfNDADNEgCwKQa4O46zR9UH3SKJ-rfQAA_4608_3072.jpg", "xz.png", "\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17812587071441.png", "\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17821189242311.png", "\u603b.png", "\u753b\u677f-2_03.jpg", "\u95e8\u5e97\u7cfb\u7edf\u5c0f\u7a0b\u5e8f.png", "\u98df\u54c1\u8336\u53f6\u76f4\u901a\u8f66\u4e3b\u56fe.jpg"]], "link_id": ["INT", {"default": 0, "min": 0, "max": 9223372036854775807, "step": 1}], "save_to_workflow": ["BOOLEAN", {"default": false}], "image_data": ["STRING", {"multiline": false}], "trigger_always": ["BOOLEAN", {"default": false, "label_on": "enable", "label_off": "disable"}]}}, "input_order": {"required": ["image", "link_id", "save_to_workflow", "image_data", "trigger_always"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "ImageReceiver", "display_name": "Image Receiver", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LatentSender": {"input": {"required": {"samples": ["LATENT"], "filename_prefix": ["STRING", {"default": "latents/LatentSender"}], "link_id": ["INT", {"default": 0, "min": 0, "max": 9223372036854775807, "step": 1}], "preview_method": [["Latent2RGB-FLUX.1", "Latent2RGB-SDXL", "Latent2RGB-SD15", "Latent2RGB-SD3", "Latent2RGB-SD-X4", "Latent2RGB-Playground-2.5", "Latent2RGB-SC-Prior", "Latent2RGB-SC-B", "Latent2RGB-LTXV", "TAEF1", "TAESDXL", "TAESD15", "TAESD3"]]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["samples", "filename_prefix", "link_id", "preview_method"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "LatentSender", "display_name": "LatentSender", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": true, "has_intermediate_output": false, "search_aliases": ["export latent"]}, "LatentReceiver": {"input": {"required": {"latent": [[]], "link_id": ["INT", {"default": 0, "min": 0, "max": 9223372036854775807, "step": 1}], "trigger_always": ["BOOLEAN", {"default": false, "label_on": "enable", "label_off": "disable"}]}}, "input_order": {"required": ["latent", "link_id", "trigger_always"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentReceiver", "display_name": "LatentReceiver", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImageMaskSwitch": {"input": {"required": {"select": ["INT", {"default": 1, "min": 1, "max": 4, "step": 1}], "images1": ["IMAGE"]}, "optional": {"mask1_opt": ["MASK"], "images2_opt": ["IMAGE"], "mask2_opt": ["MASK"], "images3_opt": ["IMAGE"], "mask3_opt": ["MASK"], "images4_opt": ["IMAGE"], "mask4_opt": ["MASK"]}}, "input_order": {"required": ["select", "images1"], "optional": ["mask1_opt", "images2_opt", "mask2_opt", "images3_opt", "mask3_opt", "images4_opt", "mask4_opt"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "ImageMaskSwitch", "display_name": "Switch (images, mask)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "LatentSwitch": {"input": {"required": {"select": ["INT", {"default": 1, "min": 1, "max": 999999, "step": 1, "tooltip": "The input number you want to output among the inputs"}], "sel_mode": ["BOOLEAN", {"default": false, "label_on": "select_on_prompt", "label_off": "select_on_execution", "forceInput": false, "tooltip": "In the case of 'select_on_execution', the selection is dynamically determined at the time of workflow execution. 'select_on_prompt' is an option that exists for older versions of ComfyUI, and it makes the decision before the workflow execution."}]}, "optional": {"input1": ["*", {"lazy": true, "tooltip": "Any input. When connected, one more input slot is added."}]}, "hidden": {"unique_id": "UNIQUE_ID", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["select", "sel_mode"], "optional": ["input1"], "hidden": ["unique_id", "extra_pnginfo"]}, "is_input_list": false, "output": ["*", "STRING", "INT"], "output_is_list": [false, false, false], "output_name": ["selected_value", "selected_label", "selected_index"], "name": "LatentSwitch", "display_name": "Switch (latent/legacy)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["Output is generated only from the input chosen by the 'select' value.", "Slot label of the selected input slot", "Outputs the select value as is"], "search_aliases": []}, "SEGSSwitch": {"input": {"required": {"select": ["INT", {"default": 1, "min": 1, "max": 999999, "step": 1, "tooltip": "The input number you want to output among the inputs"}], "sel_mode": ["BOOLEAN", {"default": false, "label_on": "select_on_prompt", "label_off": "select_on_execution", "forceInput": false, "tooltip": "In the case of 'select_on_execution', the selection is dynamically determined at the time of workflow execution. 'select_on_prompt' is an option that exists for older versions of ComfyUI, and it makes the decision before the workflow execution."}]}, "optional": {"input1": ["*", {"lazy": true, "tooltip": "Any input. When connected, one more input slot is added."}]}, "hidden": {"unique_id": "UNIQUE_ID", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["select", "sel_mode"], "optional": ["input1"], "hidden": ["unique_id", "extra_pnginfo"]}, "is_input_list": false, "output": ["*", "STRING", "INT"], "output_is_list": [false, false, false], "output_name": ["selected_value", "selected_label", "selected_index"], "name": "SEGSSwitch", "display_name": "Switch (SEGS/legacy)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["Output is generated only from the input chosen by the 'select' value.", "Slot label of the selected input slot", "Outputs the select value as is"], "search_aliases": []}, "ImpactSwitch": {"input": {"required": {"select": ["INT", {"default": 1, "min": 1, "max": 999999, "step": 1, "tooltip": "The input number you want to output among the inputs"}], "sel_mode": ["BOOLEAN", {"default": false, "label_on": "select_on_prompt", "label_off": "select_on_execution", "forceInput": false, "tooltip": "In the case of 'select_on_execution', the selection is dynamically determined at the time of workflow execution. 'select_on_prompt' is an option that exists for older versions of ComfyUI, and it makes the decision before the workflow execution."}]}, "optional": {"input1": ["*", {"lazy": true, "tooltip": "Any input. When connected, one more input slot is added."}]}, "hidden": {"unique_id": "UNIQUE_ID", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["select", "sel_mode"], "optional": ["input1"], "hidden": ["unique_id", "extra_pnginfo"]}, "is_input_list": false, "output": ["*", "STRING", "INT"], "output_is_list": [false, false, false], "output_name": ["selected_value", "selected_label", "selected_index"], "name": "ImpactSwitch", "display_name": "Switch (Any)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["Output is generated only from the input chosen by the 'select' value.", "Slot label of the selected input slot", "Outputs the select value as is"], "search_aliases": []}, "ImpactInversedSwitch": {"input": {"required": {"select": ["INT", {"default": 1, "min": 1, "max": 999999, "step": 1, "tooltip": "The output number you want to send from the input"}], "input": ["*", {"tooltip": "Any input. When connected, one more input slot is added."}]}, "optional": {"sel_mode": ["BOOLEAN", {"default": false, "label_on": "select_on_prompt", "label_off": "select_on_execution", "forceInput": false, "tooltip": "In the case of 'select_on_execution', the selection is dynamically determined at the time of workflow execution. 'select_on_prompt' is an option that exists for older versions of ComfyUI, and it makes the decision before the workflow execution."}]}, "hidden": {"prompt": "PROMPT", "unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["select", "input"], "optional": ["sel_mode"], "hidden": ["prompt", "unique_id"]}, "is_input_list": false, "output": ["*"], "output_is_list": [false], "output_name": ["*"], "name": "ImpactInversedSwitch", "display_name": "Inversed Switch (Any)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["Output occurs only from the output selected by the 'select' value.\nWhen slots are connected, additional slots are created."], "search_aliases": []}, "ImpactWildcardProcessor": {"input": {"required": {"wildcard_text": ["STRING", {"multiline": true, "dynamicPrompts": false, "tooltip": "Enter a prompt using wildcard syntax."}], "populated_text": ["STRING", {"multiline": true, "dynamicPrompts": false, "tooltip": "The actual value passed during the execution of 'ImpactWildcardProcessor' is what is shown here. The behavior varies slightly depending on the mode. Wildcard syntax can also be used in 'populated_text'."}], "mode": [["populate", "fixed", "reproduce"], {"default": "populate", "tooltip": "populate: Before running the workflow, it overwrites the existing value of 'populated_text' with the prompt processed from 'wildcard_text'. In this mode, 'populated_text' cannot be edited.\nfixed: Ignores wildcard_text and keeps 'populated_text' as is. You can edit 'populated_text' in this mode.\nreproduce: This mode operates as 'fixed' mode only once for reproduction, and then it switches to 'populate' mode."}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "tooltip": "Determines the random seed to be used for wildcard processing."}], "Select to add Wildcard": [["Select the Wildcard to add to the text"]]}}, "input_order": {"required": ["wildcard_text", "populated_text", "mode", "seed", "Select to add Wildcard"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["processed text"], "name": "ImpactWildcardProcessor", "display_name": "ImpactWildcardProcessor", "description": "The 'ImpactWildcardProcessor' processes text prompts written in wildcard syntax and outputs the processed text prompt.\n\nTIP: Before the workflow is executed, the processing result of 'wildcard_text' is displayed in 'populated_text', and the populated text is saved along with the workflow. If you want to use a seed converted as input, write the prompt directly in 'populated_text' instead of 'wildcard_text', and set the mode to 'fixed'.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Prompt", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactWildcardEncode": {"input": {"required": {"model": ["MODEL"], "clip": ["CLIP"], "wildcard_text": ["STRING", {"multiline": true, "dynamicPrompts": false, "tooltip": "Enter a prompt using wildcard syntax."}], "populated_text": ["STRING", {"multiline": true, "dynamicPrompts": false, "tooltip": "The actual value passed during the execution of 'ImpactWildcardEncode' is what is shown here. The behavior varies slightly depending on the mode. Wildcard syntax can also be used in 'populated_text'."}], "mode": [["populate", "fixed", "reproduce"], {"tooltip": "populate: Before running the workflow, it overwrites the existing value of 'populated_text' with the prompt processed from 'wildcard_text'. In this mode, 'populated_text' cannot be edited.\nfixed: Ignores wildcard_text and keeps 'populated_text' as is. You can edit 'populated_text' in this mode\n.reproduce: This mode operates as 'fixed' mode only once for reproduction, and then it switches to 'populate' mode."}], "Select to add LoRA": [["Select the LoRA to add to the text"]], "Select to add Wildcard": [["Select the Wildcard to add to the text"]], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "tooltip": "Determines the random seed to be used for wildcard processing."}]}}, "input_order": {"required": ["model", "clip", "wildcard_text", "populated_text", "mode", "Select to add LoRA", "Select to add Wildcard", "seed"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "CONDITIONING", "STRING"], "output_is_list": [false, false, false, false], "output_name": ["model", "clip", "conditioning", "populated_text"], "name": "ImpactWildcardEncode", "display_name": "ImpactWildcardEncode", "description": "The 'ImpactWildcardEncode' node processes text prompts written in wildcard syntax and outputs them as conditioning. It also supports LoRA syntax, with the applied LoRA reflected in the model's output.\n\nTIP1: Before the workflow is executed, the processing result of 'wildcard_text' is displayed in 'populated_text', and the populated text is saved along with the workflow. If you want to use a seed converted as input, write the prompt directly in 'populated_text' instead of 'wildcard_text', and set the mode to 'fixed'.\nTIP2: If the 'Inspire Pack' is installed, LBW(LoRA Block Weight) syntax can also be applied.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Prompt", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SEGSUpscaler": {"input": {"required": {"image": ["IMAGE"], "segs": ["SEGS"], "model": ["MODEL"], "clip": ["CLIP"], "vae": ["VAE"], "rescale_factor": ["FLOAT", {"default": 2, "min": 0.01, "max": 100.0, "step": 0.01}], "resampling_method": [["lanczos", "nearest", "bilinear", "bicubic"]], "supersample": [["true", "false"]], "rounding_modulus": ["INT", {"default": 8, "min": 8, "max": 1024, "step": 8}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "denoise": ["FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}], "feather": ["INT", {"default": 5, "min": 0, "max": 100, "step": 1}], "inpaint_model": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "noise_mask_feather": ["INT", {"default": 20, "min": 0, "max": 100, "step": 1}]}, "optional": {"upscale_model_opt": ["UPSCALE_MODEL"], "upscaler_hook_opt": ["UPSCALER_HOOK"], "scheduler_func_opt": ["SCHEDULER_FUNC"]}}, "input_order": {"required": ["image", "segs", "model", "clip", "vae", "rescale_factor", "resampling_method", "supersample", "rounding_modulus", "seed", "steps", "cfg", "sampler_name", "scheduler", "positive", "negative", "denoise", "feather", "inpaint_model", "noise_mask_feather"], "optional": ["upscale_model_opt", "upscaler_hook_opt", "scheduler_func_opt"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "SEGSUpscaler", "display_name": "Upscaler (SEGS)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SEGSUpscalerPipe": {"input": {"required": {"image": ["IMAGE"], "segs": ["SEGS"], "basic_pipe": ["BASIC_PIPE"], "rescale_factor": ["FLOAT", {"default": 2, "min": 0.01, "max": 100.0, "step": 0.01}], "resampling_method": [["lanczos", "nearest", "bilinear", "bicubic"]], "supersample": [["true", "false"]], "rounding_modulus": ["INT", {"default": 8, "min": 8, "max": 1024, "step": 8}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]], "denoise": ["FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}], "feather": ["INT", {"default": 5, "min": 0, "max": 100, "step": 1}], "inpaint_model": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "noise_mask_feather": ["INT", {"default": 20, "min": 0, "max": 100, "step": 1}]}, "optional": {"upscale_model_opt": ["UPSCALE_MODEL"], "upscaler_hook_opt": ["UPSCALER_HOOK"], "scheduler_func_opt": ["SCHEDULER_FUNC"]}}, "input_order": {"required": ["image", "segs", "basic_pipe", "rescale_factor", "resampling_method", "supersample", "rounding_modulus", "seed", "steps", "cfg", "sampler_name", "scheduler", "denoise", "feather", "inpaint_model", "noise_mask_feather"], "optional": ["upscale_model_opt", "upscaler_hook_opt", "scheduler_func_opt"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "SEGSUpscalerPipe", "display_name": "Upscaler (SEGS/pipe)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Upscale", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SEGSDetailer": {"input": {"required": {"image": ["IMAGE"], "segs": ["SEGS"], "guide_size": ["FLOAT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "guide_size_for": ["BOOLEAN", {"default": true, "label_on": "bbox", "label_off": "crop_region"}], "max_size": ["FLOAT", {"default": 768, "min": 64, "max": 16384, "step": 8}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]], "denoise": ["FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}], "noise_mask": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "force_inpaint": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled"}], "basic_pipe": ["BASIC_PIPE", {"tooltip": "If the `ImpactDummyInput` is connected to the model in the basic_pipe, the inference stage is skipped."}], "refiner_ratio": ["FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 100}], "cycle": ["INT", {"default": 1, "min": 1, "max": 10, "step": 1}]}, "optional": {"refiner_basic_pipe_opt": ["BASIC_PIPE"], "inpaint_model": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "noise_mask_feather": ["INT", {"default": 20, "min": 0, "max": 100, "step": 1}], "scheduler_func_opt": ["SCHEDULER_FUNC"]}}, "input_order": {"required": ["image", "segs", "guide_size", "guide_size_for", "max_size", "seed", "steps", "cfg", "sampler_name", "scheduler", "denoise", "noise_mask", "force_inpaint", "basic_pipe", "refiner_ratio", "batch_size", "cycle"], "optional": ["refiner_basic_pipe_opt", "inpaint_model", "noise_mask_feather", "scheduler_func_opt"]}, "is_input_list": false, "output": ["SEGS", "IMAGE"], "output_is_list": [false, true], "output_name": ["segs", "cnet_images"], "name": "SEGSDetailer", "display_name": "SEGSDetailer", "description": "This node enhances details by inpainting each region within the detected area bundle (SEGS) after enlarging them based on the guide size.\nThis node is applied specifically to SEGS rather than the entire image. To apply it to the entire image, use the 'SEGS Paste' node.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detailer", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SEGSPaste": {"input": {"required": {"image": ["IMAGE"], "segs": ["SEGS"], "feather": ["INT", {"default": 5, "min": 0, "max": 100, "step": 1}], "alpha": ["INT", {"default": 255, "min": 0, "max": 255, "step": 1}]}, "optional": {"ref_image_opt": ["IMAGE"]}}, "input_order": {"required": ["image", "segs", "feather", "alpha"], "optional": ["ref_image_opt"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "SEGSPaste", "display_name": "SEGSPaste", "description": "This node provides a function to paste the enhanced SEGS, improved through the SEGS detailer, back onto the original image.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detailer", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SEGSPreview": {"input": {"required": {"segs": ["SEGS"], "alpha_mode": ["BOOLEAN", {"default": true, "label_on": "enable", "label_off": "disable"}], "min_alpha": ["FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"fallback_image_opt": ["IMAGE"]}}, "input_order": {"required": ["segs", "alpha_mode", "min_alpha"], "optional": ["fallback_image_opt"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["IMAGE"], "name": "SEGSPreview", "display_name": "SEGSPreview", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "SEGSPreviewCNet": {"input": {"required": {"segs": ["SEGS"]}}, "input_order": {"required": ["segs"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["IMAGE"], "name": "SEGSPreviewCNet", "display_name": "SEGSPreview (CNET Image)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "SEGSToImageList": {"input": {"required": {"segs": ["SEGS"]}, "optional": {"fallback_image_opt": ["IMAGE"]}}, "input_order": {"required": ["segs"], "optional": ["fallback_image_opt"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["IMAGE"], "name": "SEGSToImageList", "display_name": "SEGSToImageList", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSEGSToMaskList": {"input": {"required": {"segs": ["SEGS"]}}, "input_order": {"required": ["segs"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [true], "output_name": ["MASK"], "name": "ImpactSEGSToMaskList", "display_name": "SEGS to Mask List", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSEGSToMaskBatch": {"input": {"required": {"segs": ["SEGS"]}}, "input_order": {"required": ["segs"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "ImpactSEGSToMaskBatch", "display_name": "SEGS to Mask Batch", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSEGSConcat": {"input": {"required": {"segs1": ["SEGS"]}}, "input_order": {"required": ["segs1"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactSEGSConcat", "display_name": "SEGS Concat", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSEGSPicker": {"input": {"required": {"picks": ["STRING", {"multiline": true, "dynamicPrompts": false, "pysssss.autocomplete": false}], "segs": ["SEGS"]}, "optional": {"fallback_image_opt": ["IMAGE"]}, "hidden": {"unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["picks", "segs"], "optional": ["fallback_image_opt"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactSEGSPicker", "display_name": "Picker (SEGS)", "description": "This node provides a function to select only the chosen SEGS from the input SEGS.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactMakeTileSEGS": {"input": {"required": {"images": ["IMAGE"], "bbox_size": ["INT", {"default": 512, "min": 64, "max": 4096, "step": 8}], "crop_factor": ["FLOAT", {"default": 3.0, "min": 1.0, "max": 10, "step": 0.01}], "min_overlap": ["INT", {"default": 5, "min": 0, "max": 512, "step": 1}], "filter_segs_dilation": ["INT", {"default": 20, "min": -255, "max": 255, "step": 1}], "mask_irregularity": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "irregular_mask_mode": [["Reuse fast", "Reuse quality", "All random fast", "All random quality"]]}, "optional": {"filter_in_segs_opt": ["SEGS"], "filter_out_segs_opt": ["SEGS"]}}, "input_order": {"required": ["images", "bbox_size", "crop_factor", "min_overlap", "filter_segs_dilation", "mask_irregularity", "irregular_mask_mode"], "optional": ["filter_in_segs_opt", "filter_out_segs_opt"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactMakeTileSEGS", "display_name": "Make Tile SEGS", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/__for_testing", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSEGSMerge": {"input": {"required": {"segs": ["SEGS"]}}, "input_order": {"required": ["segs"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactSEGSMerge", "display_name": "SEGS Merge", "description": "SEGS contains multiple SEGs. SEGS Merge integrates several SEGs into a single merged SEG. The label is changed to `merged` and the confidence becomes the minimum confidence. The applied controlnet and cropped_image are removed.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SEGSDetailerForAnimateDiff": {"input": {"required": {"image_frames": ["IMAGE"], "segs": ["SEGS"], "guide_size": ["FLOAT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "guide_size_for": ["BOOLEAN", {"default": true, "label_on": "bbox", "label_off": "crop_region"}], "max_size": ["FLOAT", {"default": 768, "min": 64, "max": 16384, "step": 8}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]], "denoise": ["FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}], "basic_pipe": ["BASIC_PIPE", {"tooltip": "If the `ImpactDummyInput` is connected to the model in the basic_pipe, the inference stage is skipped."}], "refiner_ratio": ["FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0}]}, "optional": {"refiner_basic_pipe_opt": ["BASIC_PIPE"], "noise_mask_feather": ["INT", {"default": 20, "min": 0, "max": 100, "step": 1}], "scheduler_func_opt": ["SCHEDULER_FUNC"]}}, "input_order": {"required": ["image_frames", "segs", "guide_size", "guide_size_for", "max_size", "seed", "steps", "cfg", "sampler_name", "scheduler", "denoise", "basic_pipe", "refiner_ratio"], "optional": ["refiner_basic_pipe_opt", "noise_mask_feather", "scheduler_func_opt"]}, "is_input_list": false, "output": ["SEGS", "IMAGE"], "output_is_list": [false, true], "output_name": ["segs", "cnet_images"], "name": "SEGSDetailerForAnimateDiff", "display_name": "SEGSDetailer For Video (SEGS/pipe)", "description": "This node enhances details by inpainting each region within the detected area bundle (SEGS) after enlarging them based on the guide size.\nThis node is applied specifically to SEGS rather than the entire image. To apply it to the entire image, use the 'SEGS Paste' node.\nAs a specialized detailer node for improving video details, such as in AnimateDiff, this node can handle cases where the masks contained in SEGS serve as batch masks spanning multiple frames.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Detailer", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactKSamplerBasicPipe": {"input": {"required": {"basic_pipe": ["BASIC_PIPE", {"tooltip": "basic_pipe input for sampling"}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "tooltip": "Random seed to use for generating CPU noise for sampling."}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "total sampling steps"}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "tooltip": "classifier free guidance value"}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"], {"tooltip": "sampler"}], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"], {"tooltip": "noise schedule"}], "latent_image": ["LATENT", {"tooltip": "input latent image"}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The amount of noise to remove. This amount is the noise added at the start, and the higher it is, the more the input latent will be modified before being returned."}]}, "optional": {"scheduler_func_opt": ["SCHEDULER_FUNC", {"tooltip": "[OPTIONAL] Noise schedule generation function. If this is set, the scheduler widget will be ignored."}]}}, "input_order": {"required": ["basic_pipe", "seed", "steps", "cfg", "sampler_name", "scheduler", "latent_image", "denoise"], "optional": ["scheduler_func_opt"]}, "is_input_list": false, "output": ["BASIC_PIPE", "LATENT", "VAE"], "output_is_list": [false, false, false], "output_name": ["BASIC_PIPE", "LATENT", "VAE"], "name": "ImpactKSamplerBasicPipe", "display_name": "KSampler (pipe)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/sampling", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["passthrough input basic_pipe", "result latent", "VAE in basic_pipe"], "search_aliases": []}, "ImpactKSamplerAdvancedBasicPipe": {"input": {"required": {"basic_pipe": ["BASIC_PIPE", {"tooltip": "basic_pipe input for sampling"}], "add_noise": ["BOOLEAN", {"default": true, "label_on": "enable", "label_off": "disable", "tooltip": "Whether to add noise"}], "noise_seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "tooltip": "Random seed to use for generating CPU noise for sampling."}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "total sampling steps"}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "tooltip": "classifier free guidance value"}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"], {"tooltip": "sampler"}], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"], {"tooltip": "noise schedule"}], "latent_image": ["LATENT", {"tooltip": "input latent image"}], "start_at_step": ["INT", {"default": 0, "min": 0, "max": 10000, "tooltip": "The starting step of the sampling to be applied at this node within the range of 'steps'."}], "end_at_step": ["INT", {"default": 10000, "min": 0, "max": 10000, "tooltip": "The step at which sampling applied at this node will stop within the range of steps (if greater than steps, sampling will continue only up to steps)."}], "return_with_leftover_noise": ["BOOLEAN", {"default": false, "label_on": "enable", "label_off": "disable", "tooltip": "Whether to return the latent with noise remaining if the noise has not been completely removed according to the noise schedule, or to completely remove the noise before returning it."}]}, "optional": {"scheduler_func_opt": ["SCHEDULER_FUNC", {"tooltip": "[OPTIONAL] Noise schedule generation function. If this is set, the scheduler widget will be ignored."}]}}, "input_order": {"required": ["basic_pipe", "add_noise", "noise_seed", "steps", "cfg", "sampler_name", "scheduler", "latent_image", "start_at_step", "end_at_step", "return_with_leftover_noise"], "optional": ["scheduler_func_opt"]}, "is_input_list": false, "output": ["BASIC_PIPE", "LATENT", "VAE"], "output_is_list": [false, false, false], "output_name": ["BASIC_PIPE", "LATENT", "VAE"], "name": "ImpactKSamplerAdvancedBasicPipe", "display_name": "KSampler (Advanced/pipe)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/sampling", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["passthrough input basic_pipe", "result latent", "VAE in basic_pipe"], "search_aliases": []}, "ReencodeLatent": {"input": {"required": {"samples": ["LATENT"], "tile_mode": [["None", "Both", "Decode(input) only", "Encode(output) only"]], "input_vae": ["VAE"], "output_vae": ["VAE"], "tile_size": ["INT", {"default": 512, "min": 320, "max": 4096, "step": 64}]}, "optional": {"overlap": ["INT", {"default": 64, "min": 0, "max": 4096, "step": 32, "tooltip": "This setting applies when 'tile_mode' is enabled."}]}}, "input_order": {"required": ["samples", "tile_mode", "input_vae", "output_vae", "tile_size"], "optional": ["overlap"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "ReencodeLatent", "display_name": "Reencode Latent", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ReencodeLatentPipe": {"input": {"required": {"samples": ["LATENT"], "tile_mode": [["None", "Both", "Decode(input) only", "Encode(output) only"]], "input_basic_pipe": ["BASIC_PIPE"], "output_basic_pipe": ["BASIC_PIPE"]}}, "input_order": {"required": ["samples", "tile_mode", "input_basic_pipe", "output_basic_pipe"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "ReencodeLatentPipe", "display_name": "Reencode Latent (pipe)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactImageBatchToImageList": {"input": {"required": {"image": ["IMAGE"]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["IMAGE"], "name": "ImpactImageBatchToImageList", "display_name": "Image Batch to Image List", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactMakeImageList": {"input": {"optional": {"image1": ["IMAGE"]}}, "input_order": {"optional": ["image1"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["IMAGE"], "name": "ImpactMakeImageList", "display_name": "Make Image List", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactMakeImageBatch": {"input": {"optional": {"image1": ["IMAGE"]}}, "input_order": {"optional": ["image1"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImpactMakeImageBatch", "display_name": "Make Image Batch", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactMakeAnyList": {"input": {"required": {}, "optional": {"value1": ["*"]}}, "input_order": {"required": [], "optional": ["value1"]}, "is_input_list": false, "output": ["*"], "output_is_list": [true], "output_name": ["*"], "name": "ImpactMakeAnyList", "display_name": "Make List (Any)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactMakeMaskList": {"input": {"required": {"mask1": ["MASK"]}}, "input_order": {"required": ["mask1"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [true], "output_name": ["MASK"], "name": "ImpactMakeMaskList", "display_name": "Make Mask List", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactMakeMaskBatch": {"input": {"optional": {"mask1": ["MASK"]}}, "input_order": {"optional": ["mask1"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "ImpactMakeMaskBatch", "display_name": "Make Mask Batch", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSelectNthItemOfAnyList": {"input": {"required": {"any_list": ["*"], "index": ["INT", {"default": 0, "min": -9223372036854775807, "max": 9223372036854775807, "step": 1, "tooltip": "The index of the item you want to select from the list. Use negative values to select from the end (e.g., -1 for last item, -2 for second to last)."}]}}, "input_order": {"required": ["any_list", "index"]}, "is_input_list": true, "output": ["*"], "output_is_list": [false], "output_name": ["*"], "name": "ImpactSelectNthItemOfAnyList", "display_name": "Select Nth Item (Any list)", "description": "Selects the Nth item from a list. If the index is out of range, it returns the last item in the list.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "RegionalSampler": {"input": {"required": {"seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "tooltip": "Random seed to use for generating CPU noise for sampling."}], "seed_2nd": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "tooltip": "Additional noise seed. The behavior is determined by seed_2nd_mode."}], "seed_2nd_mode": [["ignore", "fixed", "seed+seed_2nd", "seed-seed_2nd", "increment", "decrement", "randomize"], {"tooltip": "application method of seed_2nd. 1) ignore: Do not use seed_2nd. In the base only sampling stage, the seed is applied as a noise seed, and in the regional sampling stage, denoising is performed as it is without additional noise. 2) Others: In the base only sampling stage, the seed is applied as a noise seed, and once it is closed so that there is no leftover noise, new noise is added with seed_2nd and the regional samping stage is performed. a) fixed: Use seed_2nd as it is as an additional noise seed. b) seed+seed_2nd: Apply the value of seed+seed_2nd as an additional noise seed. c) seed-seed_2nd: Apply the value of seed-seed_2nd as an additional noise seed. d) increment: Not implemented yet. Same with fixed. e) decrement: Not implemented yet. Same with fixed. f) randomize: Not implemented yet. Same with fixed."}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "total sampling steps"}], "base_only_steps": ["INT", {"default": 2, "min": 0, "max": 10000, "tooltip": "total sampling steps"}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The amount of noise to remove. This amount is the noise added at the start, and the higher it is, the more the input latent will be modified before being returned."}], "samples": ["LATENT", {"tooltip": "input latent image"}], "base_sampler": ["KSAMPLER_ADVANCED", {"tooltip": "The sampler applied outside the area set by the regional_prompt."}], "regional_prompts": ["REGIONAL_PROMPTS", {"tooltip": "The prompt applied to each region"}], "overlap_factor": ["INT", {"default": 10, "min": 0, "max": 10000, "tooltip": "To smooth the seams of the region boundaries, expand the mask set in regional_prompts by the overlap_factor amount to overlap with other regions."}], "restore_latent": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled", "tooltip": "At each step, restore the noise outside the mask area to its original state, as per the principle of inpainting. This option is provided for backward compatibility, and it is recommended to always set it to true."}], "additional_mode": [["DISABLE", "ratio additional", "ratio between"], {"default": "ratio between", "tooltip": "..._sde or uni_pc and other special samplers are used, the region is not properly denoised, and it causes a phenomenon that destroys the overall harmony. To compensate for this, a recovery operation is performed using another sampler. This requires a longer time for sampling because a second sampling is performed at each step in each region using a special sampler. 1) DISABLE: Disable this feature. 2) ratio additional: After performing the denoise amount to be performed in the step with the sampler set in the region, the recovery sampler is additionally applied by the additional_sigma_ratio. If you use this option, the total denoise amount increases by additional_sigma_ratio. 3) ratio between: The denoise amount to be performed in the step with the sampler set in the region and the denoise amount to be applied to the recovery sampler are divided by additional_sigma_ratio, and denoise is performed for each denoise amount. If you use this option, the total denoise amount does not change."}], "additional_sampler": [["AUTO", "euler", "heun", "heunpp2", "dpm_2", "dpm_fast", "dpmpp_2m", "ddpm"], {"tooltip": "1) AUTO: Automatically set the recovery sampler. If the sampler is uni_pc, uni_pc_bh2, dpmpp_sde, dpmpp_sde_gpu, the dpm_fast sampler is selected If the sampler is dpmpp_2m_sde, dpmpp_2m_sde_gpu, dpmpp_3m_sde, dpmpp_3m_sde_gpu, the dpmpp_2m sampler is selected. 2) Others: Manually set the recovery sampler."}], "additional_sigma_ratio": ["FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "Multiplier of noise schedule to be applied according to additional_mode."}]}, "hidden": {"unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["seed", "seed_2nd", "seed_2nd_mode", "steps", "base_only_steps", "denoise", "samples", "base_sampler", "regional_prompts", "overlap_factor", "restore_latent", "additional_mode", "additional_sampler", "additional_sigma_ratio"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "RegionalSampler", "display_name": "RegionalSampler", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Regional", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["result latent"], "search_aliases": []}, "RegionalSamplerAdvanced": {"input": {"required": {"add_noise": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled", "tooltip": "Whether to add noise"}], "noise_seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "tooltip": "Random seed to use for generating CPU noise for sampling."}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "total sampling steps"}], "start_at_step": ["INT", {"default": 0, "min": 0, "max": 10000, "tooltip": "The starting step of the sampling to be applied at this node within the range of 'steps'."}], "end_at_step": ["INT", {"default": 10000, "min": 0, "max": 10000, "tooltip": "The step at which sampling applied at this node will stop within the range of steps (if greater than steps, sampling will continue only up to steps)."}], "overlap_factor": ["INT", {"default": 10, "min": 0, "max": 10000, "tooltip": "To smooth the seams of the region boundaries, expand the mask set in regional_prompts by the overlap_factor amount to overlap with other regions."}], "restore_latent": ["BOOLEAN", {"default": true, "label_on": "enabled", "label_off": "disabled", "tooltip": "At each step, restore the noise outside the mask area to its original state, as per the principle of inpainting. This option is provided for backward compatibility, and it is recommended to always set it to true."}], "return_with_leftover_noise": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled", "tooltip": "Whether to return the latent with noise remaining if the noise has not been completely removed according to the noise schedule, or to completely remove the noise before returning it."}], "latent_image": ["LATENT", {"tooltip": "input latent image"}], "base_sampler": ["KSAMPLER_ADVANCED", {"tooltip": "The sampler applied outside the area set by the regional_prompt."}], "regional_prompts": ["REGIONAL_PROMPTS", {"tooltip": "The prompt applied to each region"}], "additional_mode": [["DISABLE", "ratio additional", "ratio between"], {"default": "ratio between", "tooltip": "..._sde or uni_pc and other special samplers are used, the region is not properly denoised, and it causes a phenomenon that destroys the overall harmony. To compensate for this, a recovery operation is performed using another sampler. This requires a longer time for sampling because a second sampling is performed at each step in each region using a special sampler. 1) DISABLE: Disable this feature. 2) ratio additional: After performing the denoise amount to be performed in the step with the sampler set in the region, the recovery sampler is additionally applied by the additional_sigma_ratio. If you use this option, the total denoise amount increases by additional_sigma_ratio. 3) ratio between: The denoise amount to be performed in the step with the sampler set in the region and the denoise amount to be applied to the recovery sampler are divided by additional_sigma_ratio, and denoise is performed for each denoise amount. If you use this option, the total denoise amount does not change."}], "additional_sampler": [["AUTO", "euler", "heun", "heunpp2", "dpm_2", "dpm_fast", "dpmpp_2m", "ddpm"], {"tooltip": "1) AUTO: Automatically set the recovery sampler. If the sampler is uni_pc, uni_pc_bh2, dpmpp_sde, dpmpp_sde_gpu, the dpm_fast sampler is selected If the sampler is dpmpp_2m_sde, dpmpp_2m_sde_gpu, dpmpp_3m_sde, dpmpp_3m_sde_gpu, the dpmpp_2m sampler is selected. 2) Others: Manually set the recovery sampler."}], "additional_sigma_ratio": ["FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "Multiplier of noise schedule to be applied according to additional_mode."}]}, "hidden": {"unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["add_noise", "noise_seed", "steps", "start_at_step", "end_at_step", "overlap_factor", "restore_latent", "return_with_leftover_noise", "latent_image", "base_sampler", "regional_prompts", "additional_mode", "additional_sampler", "additional_sigma_ratio"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "RegionalSamplerAdvanced", "display_name": "RegionalSamplerAdvanced", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Regional", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["result latent"], "search_aliases": []}, "CombineRegionalPrompts": {"input": {"required": {"regional_prompts1": ["REGIONAL_PROMPTS", {"tooltip": "input regional_prompts. (Connecting to the input slot increases the number of additional slots.)"}]}}, "input_order": {"required": ["regional_prompts1"]}, "is_input_list": false, "output": ["REGIONAL_PROMPTS"], "output_is_list": [false], "output_name": ["REGIONAL_PROMPTS"], "name": "CombineRegionalPrompts", "display_name": "CombineRegionalPrompts", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Regional", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["Combined REGIONAL_PROMPTS"], "search_aliases": []}, "RegionalPrompt": {"input": {"required": {"mask": ["MASK", {"tooltip": "region mask"}], "advanced_sampler": ["KSAMPLER_ADVANCED", {"tooltip": "sampler for specified region"}]}, "optional": {"variation_seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "tooltip": "Sets the extra seed to be used for noise variation."}], "variation_strength": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "Sets the strength of the noise variation."}], "variation_method": [["linear", "slerp"], {"tooltip": "Sets how the original noise and extra noise are blended together."}]}}, "input_order": {"required": ["mask", "advanced_sampler"], "optional": ["variation_seed", "variation_strength", "variation_method"]}, "is_input_list": false, "output": ["REGIONAL_PROMPTS"], "output_is_list": [false], "output_name": ["REGIONAL_PROMPTS"], "name": "RegionalPrompt", "display_name": "RegionalPrompt", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Regional", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["regional prompts. (Can be used in the RegionalSampler.)"], "search_aliases": []}, "ImpactCombineConditionings": {"input": {"required": {"conditioning1": ["CONDITIONING", {"tooltip": "input conditionings. (Connecting to the input slot increases the number of additional slots.)"}]}}, "input_order": {"required": ["conditioning1"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ImpactCombineConditionings", "display_name": "Combine Conditionings", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["Combined conditioning"], "search_aliases": []}, "ImpactConcatConditionings": {"input": {"required": {"conditioning1": ["CONDITIONING", {"tooltip": "input conditionings. (Connecting to the input slot increases the number of additional slots.)"}]}}, "input_order": {"required": ["conditioning1"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ImpactConcatConditionings", "display_name": "Concat Conditionings", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["Concatenated conditioning"], "search_aliases": []}, "ImpactSEGSLabelAssign": {"input": {"required": {"segs": ["SEGS"], "labels": ["STRING", {"multiline": true, "placeholder": "List the label to be assigned in order of segs, separated by commas"}]}}, "input_order": {"required": ["segs", "labels"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["SEGS"], "name": "ImpactSEGSLabelAssign", "display_name": "SEGS Assign (label)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSEGSLabelFilter": {"input": {"required": {"segs": ["SEGS"], "preset": [["all", "hand", "face", "mouth", "eyes", "eyebrows", "pupils", "left_eyebrow", "left_eye", "left_pupil", "right_eyebrow", "right_eye", "right_pupil", "short_sleeved_shirt", "long_sleeved_shirt", "short_sleeved_outwear", "long_sleeved_outwear", "vest", "sling", "shorts", "trousers", "skirt", "short_sleeved_dress", "long_sleeved_dress", "vest_dress", "sling_dress", "person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", "traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard", "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", "couch", "potted plant", "bed", "dining table", "toilet", "tv", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear", "hair drier", "toothbrush"]], "labels": ["STRING", {"multiline": true, "placeholder": "List the types of segments to be allowed, separated by commas"}]}}, "input_order": {"required": ["segs", "preset", "labels"]}, "is_input_list": false, "output": ["SEGS", "SEGS"], "output_is_list": [false, false], "output_name": ["filtered_SEGS", "remained_SEGS"], "name": "ImpactSEGSLabelFilter", "display_name": "SEGS Filter (label)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSEGSRangeFilter": {"input": {"required": {"segs": ["SEGS"], "target": [["area(=w*h)", "width", "height", "x1", "y1", "x2", "y2", "length_percent", "confidence(0-100)"]], "mode": ["BOOLEAN", {"default": true, "label_on": "inside", "label_off": "outside"}], "min_value": ["INT", {"default": 0, "min": 0, "max": 9223372036854775807, "step": 1}], "max_value": ["INT", {"default": 67108864, "min": 0, "max": 9223372036854775807, "step": 1}]}}, "input_order": {"required": ["segs", "target", "mode", "min_value", "max_value"]}, "is_input_list": false, "output": ["SEGS", "SEGS"], "output_is_list": [false, false], "output_name": ["filtered_SEGS", "remained_SEGS"], "name": "ImpactSEGSRangeFilter", "display_name": "SEGS Filter (range)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSEGSOrderedFilter": {"input": {"required": {"segs": ["SEGS"], "target": [["area(=w*h)", "width", "height", "x1", "y1", "x2", "y2", "confidence", "none"]], "order": ["BOOLEAN", {"default": true, "label_on": "descending", "label_off": "ascending"}], "take_start": ["INT", {"default": 0, "min": 0, "max": 9223372036854775807, "step": 1}], "take_count": ["INT", {"default": 1, "min": 0, "max": 9223372036854775807, "step": 1}]}}, "input_order": {"required": ["segs", "target", "order", "take_start", "take_count"]}, "is_input_list": false, "output": ["SEGS", "SEGS"], "output_is_list": [false, false], "output_name": ["filtered_SEGS", "remained_SEGS"], "name": "ImpactSEGSOrderedFilter", "display_name": "SEGS Filter (ordered)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSEGSIntersectionFilter": {"input": {"required": {"segs1": ["SEGS"], "segs2": ["SEGS"], "ioa_threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["segs1", "segs2", "ioa_threshold"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["filtered_SEGS"], "name": "ImpactSEGSIntersectionFilter", "display_name": "SEGS Filter (intersection)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSEGSNMSFilter": {"input": {"required": {"segs": ["SEGS"], "iou_threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["segs", "iou_threshold"]}, "is_input_list": false, "output": ["SEGS"], "output_is_list": [false], "output_name": ["filtered_SEGS"], "name": "ImpactSEGSNMSFilter", "display_name": "SEGS Filter (non max suppression)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactCompare": {"input": {"required": {"cmp": [["a = b", "a <> b", "a > b", "a < b", "a >= b", "a <= b", "tt", "ff"]], "a": ["*"], "b": ["*"]}}, "input_order": {"required": ["cmp", "a", "b"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "name": "ImpactCompare", "display_name": "ImpactCompare", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactConditionalBranch": {"input": {"required": {"cond": ["BOOLEAN"], "tt_value": ["*", {"lazy": true}], "ff_value": ["*", {"lazy": true}]}}, "input_order": {"required": ["cond", "tt_value", "ff_value"]}, "is_input_list": false, "output": ["*"], "output_is_list": [false], "output_name": ["*"], "name": "ImpactConditionalBranch", "display_name": "ImpactConditionalBranch", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactConditionalBranchSelMode": {"input": {"required": {"cond": ["BOOLEAN"]}, "optional": {"tt_value": ["*"], "ff_value": ["*"]}}, "input_order": {"required": ["cond"], "optional": ["tt_value", "ff_value"]}, "is_input_list": false, "output": ["*"], "output_is_list": [false], "output_name": ["*"], "name": "ImpactConditionalBranchSelMode", "display_name": "ImpactConditionalBranchSelMode", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactIfNone": {"input": {"required": {}, "optional": {"signal": ["*"], "any_input": ["*"]}}, "input_order": {"required": [], "optional": ["signal", "any_input"]}, "is_input_list": false, "output": ["*", "BOOLEAN"], "output_is_list": [false, false], "output_name": ["signal_opt", "bool"], "name": "ImpactIfNone", "display_name": "ImpactIfNone", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactConvertDataType": {"input": {"required": {"value": ["*"]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["STRING", "FLOAT", "INT", "BOOLEAN"], "output_is_list": [false, false, false, false], "output_name": ["STRING", "FLOAT", "INT", "BOOLEAN"], "name": "ImpactConvertDataType", "display_name": "ImpactConvertDataType", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactLogicalOperators": {"input": {"required": {"operator": [["and", "or", "xor"]], "bool_a": ["BOOLEAN", {"forceInput": true}], "bool_b": ["BOOLEAN", {"forceInput": true}]}}, "input_order": {"required": ["operator", "bool_a", "bool_b"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "name": "ImpactLogicalOperators", "display_name": "ImpactLogicalOperators", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactInt": {"input": {"required": {"value": ["INT", {"default": 0, "min": 0, "max": 9223372036854775807, "step": 1}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["INT"], "name": "ImpactInt", "display_name": "ImpactInt", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactFloat": {"input": {"required": {"value": ["FLOAT", {"default": 1.0, "min": -3.402823466e+38, "max": 3.402823466e+38}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["FLOAT"], "output_is_list": [false], "output_name": ["FLOAT"], "name": "ImpactFloat", "display_name": "ImpactFloat", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactBoolean": {"input": {"required": {"value": ["BOOLEAN", {"default": false}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "name": "ImpactBoolean", "display_name": "ImpactBoolean", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactValueSender": {"input": {"required": {"value": ["*"], "link_id": ["INT", {"default": 0, "min": 0, "max": 9223372036854775807, "step": 1}]}, "optional": {"signal_opt": ["*"]}}, "input_order": {"required": ["value", "link_id"], "optional": ["signal_opt"]}, "is_input_list": false, "output": ["*"], "output_is_list": [false], "output_name": ["signal"], "name": "ImpactValueSender", "display_name": "ImpactValueSender", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "ImpactValueReceiver": {"input": {"required": {"typ": [["STRING", "INT", "FLOAT", "BOOLEAN"]], "value": ["STRING", {"default": ""}], "link_id": ["INT", {"default": 0, "min": 0, "max": 9223372036854775807, "step": 1}]}}, "input_order": {"required": ["typ", "value", "link_id"]}, "is_input_list": false, "output": ["*"], "output_is_list": [false], "output_name": ["*"], "name": "ImpactValueReceiver", "display_name": "ImpactValueReceiver", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactImageInfo": {"input": {"required": {"value": ["IMAGE"]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["INT", "INT", "INT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["batch", "height", "width", "channel"], "name": "ImpactImageInfo", "display_name": "ImpactImageInfo", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic/_for_test", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactLatentInfo": {"input": {"required": {"value": ["LATENT"]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["INT", "INT", "INT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["batch", "height", "width", "channel"], "name": "ImpactLatentInfo", "display_name": "ImpactLatentInfo", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic/_for_test", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactMinMax": {"input": {"required": {"mode": ["BOOLEAN", {"default": true, "label_on": "max", "label_off": "min"}], "a": ["*"], "b": ["*"]}}, "input_order": {"required": ["mode", "a", "b"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["INT"], "name": "ImpactMinMax", "display_name": "ImpactMinMax", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic/_for_test", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactNeg": {"input": {"required": {"value": ["BOOLEAN", {"forceInput": true}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "name": "ImpactNeg", "display_name": "ImpactNeg", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactConditionalStopIteration": {"input": {"required": {"cond": ["BOOLEAN", {"forceInput": true}]}}, "input_order": {"required": ["cond"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "ImpactConditionalStopIteration", "display_name": "ImpactConditionalStopIteration", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "ImpactStringSelector": {"input": {"required": {"strings": ["STRING", {"multiline": true}], "multiline": ["BOOLEAN", {"default": false, "label_on": "enabled", "label_off": "disabled"}], "select": ["INT", {"min": 0, "max": 9223372036854775807, "step": 1, "default": 0}]}}, "input_order": {"required": ["strings", "multiline", "select"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "name": "ImpactStringSelector", "display_name": "String Selector", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "StringListToString": {"input": {"required": {"join_with": ["STRING", {"default": "\\n"}], "string_list": ["STRING", {"forceInput": true}]}}, "input_order": {"required": ["join_with", "string_list"]}, "is_input_list": true, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "name": "StringListToString", "display_name": "String List to String", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "WildcardPromptFromString": {"input": {"required": {"string": ["STRING", {"forceInput": true}], "delimiter": ["STRING", {"multiline": false, "default": "\\n"}], "prefix_all": ["STRING", {"multiline": false}], "postfix_all": ["STRING", {"multiline": false}], "restrict_to_tags": ["STRING", {"multiline": false}], "exclude_tags": ["STRING", {"multiline": false}]}}, "input_order": {"required": ["string", "delimiter", "prefix_all", "postfix_all", "restrict_to_tags", "exclude_tags"]}, "is_input_list": false, "output": ["STRING", "STRING"], "output_is_list": [false, false], "output_name": ["wildcard", "segs_labels"], "name": "WildcardPromptFromString", "display_name": "Wildcard Prompt from String", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactExecutionOrderController": {"input": {"required": {"signal": ["*"], "value": ["*"]}}, "input_order": {"required": ["signal", "value"]}, "is_input_list": false, "output": ["*", "*"], "output_is_list": [false, false], "output_name": ["signal", "value"], "name": "ImpactExecutionOrderController", "display_name": "Execution Order Controller", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactListBridge": {"input": {"required": {"list_input": ["*"]}}, "input_order": {"required": ["list_input"]}, "is_input_list": true, "output": ["*"], "output_is_list": [true], "output_name": ["list_output"], "name": "ImpactListBridge", "display_name": "List Bridge", "description": "When passing the list output through this node, it collects and organizes the data before forwarding it, which ensures that the previous stage's sub-workflow has been completed.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "RemoveNoiseMask": {"input": {"required": {"samples": ["LATENT"]}}, "input_order": {"required": ["samples"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "RemoveNoiseMask", "display_name": "Remove Noise Mask", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactLogger": {"input": {"required": {"data": ["*"], "text": ["STRING", {"multiline": true}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO", "unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["data", "text"], "hidden": ["prompt", "extra_pnginfo", "unique_id"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "ImpactLogger", "display_name": "ImpactLogger", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Debug", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "ImpactDummyInput": {"input": {"required": {}}, "input_order": {"required": []}, "is_input_list": false, "output": ["*"], "output_is_list": [false], "output_name": ["*"], "name": "ImpactDummyInput", "display_name": "ImpactDummyInput", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Debug", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactQueueTrigger": {"input": {"required": {"signal": ["*"], "mode": ["BOOLEAN", {"default": true, "label_on": "Trigger", "label_off": "Don't trigger"}]}}, "input_order": {"required": ["signal", "mode"]}, "is_input_list": false, "output": ["*"], "output_is_list": [false], "output_name": ["signal_opt"], "name": "ImpactQueueTrigger", "display_name": "Queue Trigger", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic/_for_test", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "ImpactQueueTriggerCountdown": {"input": {"required": {"count": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "total": ["INT", {"default": 10, "min": 1, "max": 18446744073709551615}], "mode": ["BOOLEAN", {"default": true, "label_on": "Trigger", "label_off": "Don't trigger"}]}, "optional": {"signal": ["*"]}, "hidden": {"unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["count", "total", "mode"], "optional": ["signal"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["*", "INT", "INT"], "output_is_list": [false, false, false], "output_name": ["signal_opt", "count", "total"], "name": "ImpactQueueTriggerCountdown", "display_name": "Queue Trigger (Countdown)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic/_for_test", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "ImpactSetWidgetValue": {"input": {"required": {"signal": ["*"], "node_id": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "widget_name": ["STRING", {"multiline": false}]}, "optional": {"boolean_value": ["BOOLEAN", {"forceInput": true}], "int_value": ["INT", {"forceInput": true}], "float_value": ["FLOAT", {"forceInput": true}], "string_value": ["STRING", {"forceInput": true}]}}, "input_order": {"required": ["signal", "node_id", "widget_name"], "optional": ["boolean_value", "int_value", "float_value", "string_value"]}, "is_input_list": false, "output": ["*"], "output_is_list": [false], "output_name": ["signal_opt"], "name": "ImpactSetWidgetValue", "display_name": "Set Widget Value", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic/_for_test", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "ImpactNodeSetMuteState": {"input": {"required": {"signal": ["*"], "node_id": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "set_state": ["BOOLEAN", {"default": true, "label_on": "active", "label_off": "mute"}]}}, "input_order": {"required": ["signal", "node_id", "set_state"]}, "is_input_list": false, "output": ["*"], "output_is_list": [false], "output_name": ["signal_opt"], "name": "ImpactNodeSetMuteState", "display_name": "Set Mute State", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic/_for_test", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "ImpactControlBridge": {"input": {"required": {"value": ["*"], "mode": ["BOOLEAN", {"default": true, "label_on": "Active", "label_off": "Stop/Mute/Bypass"}], "behavior": [["Stop", "Mute", "Bypass"]]}, "hidden": {"unique_id": "UNIQUE_ID", "prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["value", "mode", "behavior"], "hidden": ["unique_id", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["*"], "output_is_list": [false], "output_name": ["value"], "name": "ImpactControlBridge", "display_name": "Control Bridge", "description": "When behavior is Stop and mode is active, the input value is passed directly to the output.\nWhen behavior is Mute/Bypass and mode is active, the node connected to the output is changed to active state.\nWhen behavior is Stop and mode is Stop/Mute/Bypass, the workflow execution of the current node is halted.\nWhen behavior is Mute/Bypass and mode is Stop/Mute/Bypass, the node connected to the output is changed to Mute/Bypass state.", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "ImpactIsNotEmptySEGS": {"input": {"required": {"segs": ["SEGS"]}}, "input_order": {"required": ["segs"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "name": "ImpactIsNotEmptySEGS", "display_name": "SEGS isn't Empty", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSleep": {"input": {"required": {"signal": ["*"], "seconds": ["FLOAT", {"default": 0.5, "min": 0, "max": 3600}]}}, "input_order": {"required": ["signal", "seconds"]}, "is_input_list": false, "output": ["*"], "output_is_list": [false], "output_name": ["signal_opt"], "name": "ImpactSleep", "display_name": "Sleep", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic/_for_test", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "ImpactRemoteBoolean": {"input": {"required": {"node_id": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "widget_name": ["STRING", {"multiline": false}], "value": ["BOOLEAN", {"default": true, "label_on": "True", "label_off": "False"}]}}, "input_order": {"required": ["node_id", "widget_name", "value"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "ImpactRemoteBoolean", "display_name": "Remote Boolean (on prompt)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic/_for_test", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "ImpactRemoteInt": {"input": {"required": {"node_id": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "widget_name": ["STRING", {"multiline": false}], "value": ["INT", {"default": 0, "min": -18446744073709551615, "max": 18446744073709551615}]}}, "input_order": {"required": ["node_id", "widget_name", "value"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "ImpactRemoteInt", "display_name": "Remote Int (on prompt)", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Logic/_for_test", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "ImpactHFTransformersClassifierProvider": {"input": {"required": {"preset_repo_id": [["rizvandwiki/gender-classification-2", "NTQAI/pedestrian_gender_recognition", "Leilab/gender_class", "ProjectPersonal/GenderClassifier", "crangana/trained-gender", "cledoux42/GenderNew_v002", "ivensamdh/genderage2", "Manual repo id"]], "manual_repo_id": ["STRING", {"multiline": false}], "device_mode": [["AUTO", "Prefer GPU", "CPU"]]}}, "input_order": {"required": ["preset_repo_id", "manual_repo_id", "device_mode"]}, "is_input_list": false, "output": ["TRANSFORMERS_CLASSIFIER"], "output_is_list": [false], "output_name": ["TRANSFORMERS_CLASSIFIER"], "name": "ImpactHFTransformersClassifierProvider", "display_name": "HF Transformers Classifier Provider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/HuggingFace", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSEGSClassify": {"input": {"required": {"classifier": ["TRANSFORMERS_CLASSIFIER"], "segs": ["SEGS"], "preset_expr": [["#Female > #Male", "#Female < #Male", "female > 0.5", "male > 0.5", "Age16to25 > 0.1", "Age50to69 > 0.1", "Manual expr"]], "manual_expr": ["STRING", {"multiline": false}]}, "optional": {"ref_image_opt": ["IMAGE"]}}, "input_order": {"required": ["classifier", "segs", "preset_expr", "manual_expr"], "optional": ["ref_image_opt"]}, "is_input_list": false, "output": ["SEGS", "SEGS", "STRING"], "output_is_list": [false, false, true], "output_name": ["filtered_SEGS", "remained_SEGS", "detected_labels"], "name": "ImpactSEGSClassify", "display_name": "SEGS Classify", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/HuggingFace", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImpactSchedulerAdapter": {"input": {"required": {"scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"], {"defaultInput": true}], "extra_scheduler": [["None", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]]}}, "input_order": {"required": ["scheduler", "extra_scheduler"]}, "is_input_list": false, "output": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal", "AYS SDXL", "AYS SD1", "AYS SVD", "GITS[coeff=1.2]", "LTXV[default]", "OSS FLUX", "OSS Wan", "OSS Chroma"]], "output_is_list": [false], "output_name": ["scheduler"], "name": "ImpactSchedulerAdapter", "display_name": "Impact Scheduler Adapter", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/Util", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "GITSSchedulerFuncProvider": {"input": {"required": {"coeff": ["FLOAT", {"default": 1.2, "min": 0.8, "max": 1.5, "step": 0.05, "tooltip": "coeff factor of GITS Scheduler"}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "denoise amount for noise schedule"}]}}, "input_order": {"required": ["coeff", "denoise"]}, "is_input_list": false, "output": ["SCHEDULER_FUNC"], "output_is_list": [false], "output_name": ["SCHEDULER_FUNC"], "name": "GITSSchedulerFuncProvider", "display_name": "GITSScheduler Func Provider", "description": "", "python_module": "custom_nodes.ComfyUI-Impact-Pack", "category": "ImpactPack/sampling", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["Returns a function that generates a noise schedule using GITSScheduler. This can be used in place of a predetermined noise schedule to dynamically generate a noise schedule based on the steps."], "search_aliases": []}, "INPAINT_LoadFooocusInpaint": {"input": {"required": {"head": ["COMBO", {"multiselect": false, "options": []}], "patch": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["head", "patch"]}, "is_input_list": false, "output": ["INPAINT_PATCH"], "output_is_list": [false], "output_name": ["inpaint patch"], "output_tooltips": [null], "output_matchtypes": null, "name": "INPAINT_LoadFooocusInpaint", "display_name": "Load Fooocus Inpaint", "description": "", "python_module": "custom_nodes.comfyui-inpaint-nodes", "category": "inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "INPAINT_ApplyFooocusInpaint": {"input": {"required": {"model": ["MODEL", {}], "patch": ["INPAINT_PATCH", {"display_name": "inpaint patch"}], "latent": ["LATENT", {}]}}, "input_order": {"required": ["model", "patch", "latent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["model"], "output_tooltips": [null], "output_matchtypes": null, "name": "INPAINT_ApplyFooocusInpaint", "display_name": "Apply Fooocus Inpaint", "description": "", "python_module": "custom_nodes.comfyui-inpaint-nodes", "category": "inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "INPAINT_VAEEncodeInpaintConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "pixels": ["IMAGE", {}], "mask": ["MASK", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "pixels", "mask"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT", "LATENT"], "output_is_list": [false, false, false, false], "output_name": ["positive", "negative", "latent inpaint", "latent samples"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "INPAINT_VAEEncodeInpaintConditioning", "display_name": "VAE Encode & Inpaint Conditioning", "description": "", "python_module": "custom_nodes.comfyui-inpaint-nodes", "category": "inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "INPAINT_MaskedFill": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {}], "fill": ["COMBO", {"multiselect": false, "options": ["neutral", "telea", "navier-stokes"]}], "falloff": ["INT", {"default": 0, "min": 0, "max": 8191, "step": 1}]}}, "input_order": {"required": ["image", "mask", "fill", "falloff"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["image"], "output_tooltips": [null], "output_matchtypes": null, "name": "INPAINT_MaskedFill", "display_name": "Fill Masked Area", "description": "", "python_module": "custom_nodes.comfyui-inpaint-nodes", "category": "inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "INPAINT_MaskedBlur": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {}], "blur": ["INT", {"default": 255, "min": 3, "max": 8191, "step": 1}], "falloff": ["INT", {"default": 0, "min": 0, "max": 8191, "step": 1}]}}, "input_order": {"required": ["image", "mask", "blur", "falloff"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["image"], "output_tooltips": [null], "output_matchtypes": null, "name": "INPAINT_MaskedBlur", "display_name": "Blur Masked Area", "description": "", "python_module": "custom_nodes.comfyui-inpaint-nodes", "category": "inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "INPAINT_LoadInpaintModel": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["INPAINT_MODEL"], "output_is_list": [false], "output_name": ["inpaint model"], "output_tooltips": [null], "output_matchtypes": null, "name": "INPAINT_LoadInpaintModel", "display_name": "Load Inpaint Model", "description": "", "python_module": "custom_nodes.comfyui-inpaint-nodes", "category": "inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "INPAINT_InpaintWithModel": {"input": {"required": {"inpaint_model": ["INPAINT_MODEL", {}], "image": ["IMAGE", {}], "mask": ["MASK", {}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "step": 1}]}, "optional": {"optional_upscale_model": ["UPSCALE_MODEL", {"display_name": "upscale model (optional)"}]}}, "input_order": {"required": ["inpaint_model", "image", "mask", "seed"], "optional": ["optional_upscale_model"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["inpainted image"], "output_tooltips": [null], "output_matchtypes": null, "name": "INPAINT_InpaintWithModel", "display_name": "Inpaint (using Model)", "description": "", "python_module": "custom_nodes.comfyui-inpaint-nodes", "category": "inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "INPAINT_ColorMatch": {"input": {"required": {"target": ["IMAGE", {}], "reference": ["IMAGE", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"exclude_mask": ["MASK", {}]}}, "input_order": {"required": ["target", "reference", "strength"], "optional": ["exclude_mask"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["image"], "output_tooltips": [null], "output_matchtypes": null, "name": "INPAINT_ColorMatch", "display_name": "Color Match (Masked)", "description": "", "python_module": "custom_nodes.comfyui-inpaint-nodes", "category": "inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "INPAINT_ExpandMask": {"input": {"required": {"mask": ["MASK", {}], "grow": ["INT", {"default": 16, "min": 0, "max": 8096, "step": 1}], "blur": ["INT", {"default": 7, "min": 0, "max": 8096, "step": 1}], "blur_type": ["COMBO", {"default": "gaussian", "multiselect": false, "options": ["box", "linear", "gaussian"]}]}}, "input_order": {"required": ["mask", "grow", "blur", "blur_type"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["mask"], "output_tooltips": [null], "output_matchtypes": null, "name": "INPAINT_ExpandMask", "display_name": "Expand Mask", "description": "", "python_module": "custom_nodes.comfyui-inpaint-nodes", "category": "inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "INPAINT_ShrinkMask": {"input": {"required": {"mask": ["MASK", {}], "shrink": ["INT", {"default": 16, "min": 0, "max": 8096, "step": 1}], "blur": ["INT", {"default": 7, "min": 0, "max": 8096, "step": 1}], "blur_type": ["COMBO", {"default": "gaussian", "multiselect": false, "options": ["box", "linear", "gaussian"]}]}}, "input_order": {"required": ["mask", "shrink", "blur", "blur_type"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["mask"], "output_tooltips": [null], "output_matchtypes": null, "name": "INPAINT_ShrinkMask", "display_name": "Shrink Mask", "description": "", "python_module": "custom_nodes.comfyui-inpaint-nodes", "category": "inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "INPAINT_StabilizeMask": {"input": {"required": {"mask": ["MASK", {}], "epsilon": ["FLOAT", {"default": 0.01, "min": 0.0, "max": 1.0, "step": 0.0001}]}}, "input_order": {"required": ["mask", "epsilon"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["mask"], "output_tooltips": [null], "output_matchtypes": null, "name": "INPAINT_StabilizeMask", "display_name": "Stabilize Mask", "description": "", "python_module": "custom_nodes.comfyui-inpaint-nodes", "category": "inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "INPAINT_DenoiseToCompositingMask": {"input": {"required": {"mask": ["MASK", {}], "offset": ["FLOAT", {"default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}], "threshold": ["FLOAT", {"default": 0.2, "min": 0.01, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["mask", "offset", "threshold"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["mask"], "output_tooltips": [null], "output_matchtypes": null, "name": "INPAINT_DenoiseToCompositingMask", "display_name": "Denoise to Compositing Mask", "description": "", "python_module": "custom_nodes.comfyui-inpaint-nodes", "category": "inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "INPAINT_MaskBoundingBox": {"input": {"required": {"mask": ["MASK", {}]}}, "input_order": {"required": ["mask"]}, "is_input_list": false, "output": ["INT", "INT", "INT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["x", "y", "width", "height"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "INPAINT_MaskBoundingBox", "display_name": "Mask Bounding Box", "description": "", "python_module": "custom_nodes.comfyui-inpaint-nodes", "category": "inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "InspyrenetRembg": {"input": {"required": {"image": ["IMAGE"], "torchscript_jit": [["default", "on"]]}}, "input_order": {"required": ["image", "torchscript_jit"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "InspyrenetRembg", "display_name": "Inspyrenet Rembg", "description": "", "python_module": "custom_nodes.comfyui-inspyrenet-rembg", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "InspyrenetRembgAdvanced": {"input": {"required": {"image": ["IMAGE"], "threshold": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "torchscript_jit": [["default", "on"]]}}, "input_order": {"required": ["image", "threshold", "torchscript_jit"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "InspyrenetRembgAdvanced", "display_name": "Inspyrenet Rembg Advanced", "description": "", "python_module": "custom_nodes.comfyui-inspyrenet-rembg", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DownloadAndLoadKolorsModel": {"input": {"required": {"model": [["Kwai-Kolors/Kolors"]], "precision": [["fp16"], {"default": "fp16"}]}}, "input_order": {"required": ["model", "precision"]}, "is_input_list": false, "output": ["KOLORSMODEL"], "output_is_list": [false], "output_name": ["kolors_model"], "name": "DownloadAndLoadKolorsModel", "display_name": "(Down)load Kolors Model", "description": "", "python_module": "custom_nodes.ComfyUI-KwaiKolorsWrapper", "category": "KwaiKolorsWrapper", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DownloadAndLoadChatGLM3": {"input": {"required": {"precision": [["fp16", "quant4", "quant8"], {"default": "fp16"}]}}, "input_order": {"required": ["precision"]}, "is_input_list": false, "output": ["CHATGLM3MODEL"], "output_is_list": [false], "output_name": ["chatglm3_model"], "name": "DownloadAndLoadChatGLM3", "display_name": "(Down)load ChatGLM3 Model", "description": "", "python_module": "custom_nodes.ComfyUI-KwaiKolorsWrapper", "category": "KwaiKolorsWrapper", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "KolorsSampler": {"input": {"required": {"kolors_model": ["KOLORSMODEL"], "kolors_embeds": ["KOLORS_EMBEDS"], "width": ["INT", {"default": 1024, "min": 64, "max": 2048, "step": 64}], "height": ["INT", {"default": 1024, "min": 64, "max": 2048, "step": 64}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "steps": ["INT", {"default": 25, "min": 1, "max": 200, "step": 1}], "cfg": ["FLOAT", {"default": 5.0, "min": 0.0, "max": 20.0, "step": 0.01}], "scheduler": [["EulerDiscreteScheduler", "EulerAncestralDiscreteScheduler", "DPMSolverMultistepScheduler", "DPMSolverMultistepScheduler_SDE_karras", "UniPCMultistepScheduler", "DEISMultistepScheduler"], {"default": "EulerDiscreteScheduler"}]}, "optional": {"latent": ["LATENT"], "denoise_strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["kolors_model", "kolors_embeds", "width", "height", "seed", "steps", "cfg", "scheduler"], "optional": ["latent", "denoise_strength"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["latent"], "name": "KolorsSampler", "display_name": "Kolors Sampler", "description": "", "python_module": "custom_nodes.ComfyUI-KwaiKolorsWrapper", "category": "KwaiKolorsWrapper", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "KolorsTextEncode": {"input": {"required": {"chatglm3_model": ["CHATGLM3MODEL"], "prompt": ["STRING", {"multiline": true, "default": ""}], "negative_prompt": ["STRING", {"multiline": true, "default": ""}], "num_images_per_prompt": ["INT", {"default": 1, "min": 1, "max": 128, "step": 1}]}}, "input_order": {"required": ["chatglm3_model", "prompt", "negative_prompt", "num_images_per_prompt"]}, "is_input_list": false, "output": ["KOLORS_EMBEDS"], "output_is_list": [false], "output_name": ["kolors_embeds"], "name": "KolorsTextEncode", "display_name": "Kolors Text Encode", "description": "", "python_module": "custom_nodes.ComfyUI-KwaiKolorsWrapper", "category": "KwaiKolorsWrapper", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LoadChatGLM3": {"input": {"required": {"chatglm3_checkpoint": [[]]}}, "input_order": {"required": ["chatglm3_checkpoint"]}, "is_input_list": false, "output": ["CHATGLM3MODEL"], "output_is_list": [false], "output_name": ["chatglm3_model"], "name": "LoadChatGLM3", "display_name": "Load ChatGLM3 Model", "description": "", "python_module": "custom_nodes.ComfyUI-KwaiKolorsWrapper", "category": "KwaiKolorsWrapper", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_VideoCombine": {"input": {"required": {"images": ["IMAGE"], "frame_rate": ["FLOAT", {"default": 8, "min": 1, "step": 1}], "loop_count": ["INT", {"default": 0, "min": 0, "max": 100, "step": 1}], "filename_prefix": ["STRING", {"default": "AnimateDiff"}], "format": [["image/gif", "image/webp", "video/16bit-png", "video/8bit-png", "video/av1-webm", "video/ffmpeg-gif", "video/ffv1-mkv", "video/h264-mp4", "video/h265-mp4", "video/nvenc_av1-mp4", "video/nvenc_h264-mp4", "video/nvenc_hevc-mp4", "video/ProRes", "video/webm"], {"formats": {"video/av1-webm": [["pix_fmt", ["yuv420p10le", "yuv420p"]], ["crf", "INT", {"default": 23, "min": 0, "max": 100, "step": 1}], ["input_color_depth", ["8bit", "16bit"]], ["save_metadata", "BOOLEAN", {"default": true}]], "video/ffmpeg-gif": [["dither", ["bayer", "heckbert", "floyd_steinberg", "sierra2", "sierra2_4a", "sierra3", "burkes", "atkinson", "none"], {"default": "sierra2_4a"}, "[0:v] split [a][b]; [a] palettegen=reserve_transparent=on:transparency_color=ffffff [p]; [b][p] paletteuse=dither=$val"]], "video/ffv1-mkv": [["level", ["0", "1", "3"], {"default": "3"}], ["coder", ["0", "1", "2"], {"default": "1"}], ["context", ["0", "1"], {"default": "1"}], ["gop_size", "INT", {"default": 1, "min": 1, "max": 300, "step": 1}], ["slices", ["4", "6", "9", "12", "16", "20", "24", "30"], {"default": "16"}], ["slicecrc", ["0", "1"], {"default": "1"}], ["pix_fmt", ["rgba64le", "bgra", "yuv420p", "yuv422p", "yuv444p", "yuva420p", "yuva422p", "yuva444p", "yuv420p10le", "yuv422p10le", "yuv444p10le", "yuv420p12le", "yuv422p12le", "yuv444p12le", "yuv420p14le", "yuv422p14le", "yuv444p14le", "yuv420p16le", "yuv422p16le", "yuv444p16le", "gray", "gray10le", "gray12le", "gray16le"], {"default": "rgba64le"}], ["save_metadata", "BOOLEAN", {"default": true}], ["trim_to_audio", "BOOLEAN", {"default": false}]], "video/h264-mp4": [["pix_fmt", ["yuv420p", "yuv420p10le"]], ["crf", "INT", {"default": 19, "min": 0, "max": 100, "step": 1}], ["save_metadata", "BOOLEAN", {"default": true}], ["trim_to_audio", "BOOLEAN", {"default": false}]], "video/h265-mp4": [["pix_fmt", ["yuv420p10le", "yuv420p"]], ["crf", "INT", {"default": 22, "min": 0, "max": 100, "step": 1}], ["save_metadata", "BOOLEAN", {"default": true}]], "video/nvenc_av1-mp4": [["pix_fmt", ["yuv420p", "p010le"]], ["bitrate", "INT", {"default": 10, "min": 1, "max": 999, "step": 1}], ["megabit", "BOOLEAN", {"default": true}], ["save_metadata", "BOOLEAN", {"default": true}]], "video/nvenc_h264-mp4": [["pix_fmt", ["yuv420p", "p010le"]], ["bitrate", "INT", {"default": 10, "min": 1, "max": 999, "step": 1}], ["megabit", "BOOLEAN", {"default": true}], ["save_metadata", "BOOLEAN", {"default": true}]], "video/nvenc_hevc-mp4": [["pix_fmt", ["yuv420p", "p010le"]], ["bitrate", "INT", {"default": 10, "min": 1, "max": 999, "step": 1}], ["megabit", "BOOLEAN", {"default": true}], ["save_metadata", "BOOLEAN", {"default": true}]], "video/ProRes": [["profile", ["lt", "standard", "hq", "4444", "4444xq"], {"default": "hq"}]], "video/webm": [["pix_fmt", ["yuv420p", "yuva420p"]], ["crf", "INT", {"default": 20, "min": 0, "max": 100, "step": 1}], ["save_metadata", "BOOLEAN", {"default": true}], ["trim_to_audio", "BOOLEAN", {"default": false}]], "image/webp": [["lossless", "BOOLEAN", {"default": true}]]}}], "pingpong": ["BOOLEAN", {"default": false}], "save_output": ["BOOLEAN", {"default": true}]}, "optional": {"audio": ["AUDIO"], "meta_batch": ["VHS_BatchManager"], "vae": ["VAE"]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO", "unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["images", "frame_rate", "loop_count", "filename_prefix", "format", "pingpong", "save_output"], "optional": ["audio", "meta_batch", "vae"], "hidden": ["prompt", "extra_pnginfo", "unique_id"]}, "is_input_list": false, "output": ["VHS_FILENAMES"], "output_is_list": [false], "output_name": ["Filenames"], "name": "VHS_VideoCombine", "display_name": "Video Combine \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Video Combine \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Combine an image sequence into a video</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"images\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">images: The images to be turned into a video</div></div><div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: (optional) audio to add to the video</div></div><div vhs_title=\"meta_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">meta_batch: (optional) Connect to a Meta Batch manager to divide extremely long image sequences into sub batches. See the documentation for Meta Batch Manager</div></div><div vhs_title=\"vae\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vae: (optional) If provided, the node will take latents as input instead of images. This drastically reduces the required RAM (not VRAM) when working with long (100+ frames) sequences<div style=\"font-size: 1em\">Unlike on Load Video, this isn't always a strict upgrade over using a standalone VAE Decode.</div><div style=\"font-size: 1em\">If you have multiple Video Combine outputs, then the VAE decode will be performed for each output node increasing execution time</div><div style=\"font-size: 1em\">If you make any change to output settings on the Video Combine (such as changing the output format), the VAE decode will be performed again as the decoded result is (by design) not cached</div></div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"frame_rate\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_rate: The frame rate which will be used for the output video. Consider converting this to an input and connecting this to a Load Video with Video Info(Loaded)->fps. When including audio, failure to properly set this will result in audio desync</div></div><div vhs_title=\"loop_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loop_count: The number of additional times the video should repeat. Can cause performance issues when used with long (100+ frames) sequences</div></div><div vhs_title=\"filename_prefix\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">filename_prefix: A prefix to add to the name of the output filename. This can include subfolders or format strings.</div></div><div vhs_title=\"format\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">format: The output format to use. Formats starting with, 'image' are saved with PIL, but formats starting with 'video' utilize the video_formats system. 'video' options require ffmpeg and selecting one frequently adds additional options to the node.</div></div><div vhs_title=\"pingpong\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">pingpong: Play the video normally, then repeat the video in reverse so that it 'pingpongs' back and forth. This is frequently used to minimize the appearance of skips on very short animations.</div></div><div vhs_title=\"save_output\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">save_output: Specifies if output files should be saved to the output folder, or the temporary output folder</div></div><div vhs_title=\"videopreview\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">videopreview: Displays a preview for the processed result. If advanced previews is enabled, the output is always converted to a format viewable from the browser. If the video has audio, it will also be previewed when moused over. Additional preview options can be accessed with right click.</div></div></div></div><div vhs_title=\"Common Format Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Common Format Widgets: <div vhs_title=\"crf\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">crf: Determines how much to prioritize quality over filesize. Numbers vary between formats, but on each format that includes it, the default value provides visually loss less output</div></div><div vhs_title=\"pix_fmt\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">pix_fmt: The pixel format to use for output. Alternative options will often have higher quality at the cost of increased file size and reduced compatibility with external software.<div style=\"font-size: 1em\"><div vhs_title=\"yuv420p\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">yuv420p: The most common and default format</div></div><div vhs_title=\"yuv420p10le\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">yuv420p10le: Use 10 bit color depth. This can improve color quality when combined with 16bit input color depth</div></div><div vhs_title=\"yuva420p\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">yuva420p: Include transparency in the output video</div></div></div></div></div><div vhs_title=\"input_color_depth\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">input_color_depth: VHS supports outputting 16bit images. While this produces higher quality output, the difference usually isn't visible without postprocessing and it significantly increases file size and processing time.</div></div><div vhs_title=\"save_metadata\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">save_metadata: Determines if metadata for the workflow should be included in the output video file</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "VHS_LoadVideo": {"input": {"required": {"video": [[]], "force_rate": ["FLOAT", {"default": 0, "min": 0, "max": 60, "step": 1, "disable": 0}], "custom_width": ["INT", {"default": 0, "min": 0, "max": 8192, "disable": 0}], "custom_height": ["INT", {"default": 0, "min": 0, "max": 8192, "disable": 0}], "frame_load_cap": ["INT", {"default": 0, "min": 0, "max": 9007199254740991, "step": 1, "disable": 0}], "skip_first_frames": ["INT", {"default": 0, "min": 0, "max": 9007199254740991, "step": 1}], "select_every_nth": ["INT", {"default": 1, "min": 1, "max": 9007199254740991, "step": 1}]}, "optional": {"meta_batch": ["VHS_BatchManager"], "vae": ["VAE"], "format": [["None", "AnimateDiff", "Mochi", "LTXV", "Hunyuan", "Cosmos", "Wan"], {"default": "AnimateDiff", "formats": {"None": {}, "AnimateDiff": {"target_rate": 8, "dim": [8, 0, 512, 512]}, "Mochi": {"target_rate": 24, "dim": [16, 0, 848, 480], "frames": [6, 1]}, "LTXV": {"target_rate": 24, "dim": [32, 0, 768, 512], "frames": [8, 1]}, "Hunyuan": {"target_rate": 24, "dim": [16, 0, 848, 480], "frames": [4, 1]}, "Cosmos": {"target_rate": 24, "dim": [16, 0, 1280, 704], "frames": [8, 1]}, "Wan": {"target_rate": 16, "dim": [8, 0, 832, 480], "frames": [4, 1]}}}]}, "hidden": {"force_size": "STRING", "unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["video", "force_rate", "custom_width", "custom_height", "frame_load_cap", "skip_first_frames", "select_every_nth"], "optional": ["meta_batch", "vae", "format"], "hidden": ["force_size", "unique_id"]}, "is_input_list": false, "output": ["IMAGE", "INT", "AUDIO", "VHS_VIDEOINFO"], "output_is_list": [false, false, false, false], "output_name": ["IMAGE", "frame_count", "audio", "video_info"], "name": "VHS_LoadVideo", "display_name": "Load Video (Upload) \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Load Video \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Loads a video from the input folder</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"meta_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">meta_batch: (optional) Connect to a Meta Batch manager to divide extremely long sequences into sub batches. See the documentation for Meta Batch Manager</div></div><div vhs_title=\"vae\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vae: (optional) If provided the node will output latents instead of images. This drastically reduces the required RAM (not VRAM) when working with long (100+ frames) sequences<div style=\"font-size: 1em\">Using this is strongly encouraged unless connecting to a node that requires a blue image connection such as Apply Controllnet</div></div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The loaded images</div></div><div vhs_title=\"frame_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_count: The length of images just returned</div></div><div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: The audio from the loaded video</div></div><div vhs_title=\"video_info\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video_info: Exposes additional info about the video such as the source frame rate, or the total length</div></div><div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The loaded images pre-converted to latents. Only available when a vae is connected</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"video\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video: The video file to be loaded. Lists all files with a video extension in the ComfyUI/Input folder</div></div><div vhs_title=\"force_rate\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_rate: Drops or duplicates frames so that the produced output has the target frame rate. Many motion models are trained on videos of a specific frame rate and will give better results if input matches that frame rate. If set to 0, all frames are returned. May give unusual results with inputs that have a variable frame rate like animated gifs. Reducing this value can also greatly reduce the execution time and memory requirements.</div></div><div vhs_title=\"force_size\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_size: Previously was used to provide suggested resolutions. Instead, custom_width and custom_height can be disabled by setting to 0.</div></div><div vhs_title=\"custom_width\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_width: Allows for an arbitrary width to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"custom_height\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_height: Allows for an arbitrary height to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"frame_load_cap\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_load_cap: The maximum number of frames to load. If 0, all frames are loaded.</div></div><div vhs_title=\"skip_first_frames\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">skip_first_frames: A number of frames which are discarded before producing output.</div></div><div vhs_title=\"select_every_nth\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">select_every_nth: Similar to frame rate. Keeps only the first of every n frames and discard the rest. Has better compatibility with variable frame rate inputs such as gifs. When combined with force_rate, select_every_nth_applies after force_rate so the resulting output has a frame rate equivalent to force_rate/select_every_nth. select_every_nth does not apply to skip_first_frames</div></div><div vhs_title=\"format\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">format: Updates other widgets so that only values supported by the given format can be entered and provides recommended defaults.</div></div><div vhs_title=\"choose video to upload\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">choose video to upload: An upload button is provided to upload local files to the input folder</div></div><div vhs_title=\"videopreview\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">videopreview: Displays a preview for the selected video input. If advanced previews is enabled, this preview will reflect the frame_load_cap, force_rate, skip_first_frames, and select_every_nth values chosen. If the video has audio, it will also be previewed when moused over. Additional preview options can be accessed with right click.</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_LoadVideoPath": {"input": {"required": {"video": ["STRING", {"placeholder": "X://insert/path/here.mp4", "vhs_path_extensions": ["webm", "mp4", "mkv", "gif", "mov"]}], "force_rate": ["FLOAT", {"default": 0, "min": 0, "max": 60, "step": 1, "disable": 0}], "custom_width": ["INT", {"default": 0, "min": 0, "max": 8192, "disable": 0}], "custom_height": ["INT", {"default": 0, "min": 0, "max": 8192, "disable": 0}], "frame_load_cap": ["INT", {"default": 0, "min": 0, "max": 9007199254740991, "step": 1, "disable": 0}], "skip_first_frames": ["INT", {"default": 0, "min": 0, "max": 9007199254740991, "step": 1}], "select_every_nth": ["INT", {"default": 1, "min": 1, "max": 9007199254740991, "step": 1}]}, "optional": {"meta_batch": ["VHS_BatchManager"], "vae": ["VAE"], "format": [["None", "AnimateDiff", "Mochi", "LTXV", "Hunyuan", "Cosmos", "Wan"], {"default": "AnimateDiff", "formats": {"None": {}, "AnimateDiff": {"target_rate": 8, "dim": [8, 0, 512, 512]}, "Mochi": {"target_rate": 24, "dim": [16, 0, 848, 480], "frames": [6, 1]}, "LTXV": {"target_rate": 24, "dim": [32, 0, 768, 512], "frames": [8, 1]}, "Hunyuan": {"target_rate": 24, "dim": [16, 0, 848, 480], "frames": [4, 1]}, "Cosmos": {"target_rate": 24, "dim": [16, 0, 1280, 704], "frames": [8, 1]}, "Wan": {"target_rate": 16, "dim": [8, 0, 832, 480], "frames": [4, 1]}}}]}, "hidden": {"force_size": "STRING", "unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["video", "force_rate", "custom_width", "custom_height", "frame_load_cap", "skip_first_frames", "select_every_nth"], "optional": ["meta_batch", "vae", "format"], "hidden": ["force_size", "unique_id"]}, "is_input_list": false, "output": ["IMAGE", "INT", "AUDIO", "VHS_VIDEOINFO"], "output_is_list": [false, false, false, false], "output_name": ["IMAGE", "frame_count", "audio", "video_info"], "name": "VHS_LoadVideoPath", "display_name": "Load Video (Path) \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Load Video (Path) \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Loads a video from an arbitrary path</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"meta_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">meta_batch: (optional) Connect to a Meta Batch manager to divide extremely long sequences into sub batches. See the documentation for Meta Batch Manager</div></div><div vhs_title=\"vae\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vae: (optional) If provided the node will output latents instead of images. This drastically reduces the required RAM (not VRAM) when working with long (100+ frames) sequences<div style=\"font-size: 1em\">Using this is strongly encouraged unless connecting to a node that requires a blue image connection such as Apply Controllnet</div></div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The loaded images</div></div><div vhs_title=\"frame_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_count: The length of images just returned</div></div><div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: The audio from the loaded video</div></div><div vhs_title=\"video_info\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video_info: Exposes additional info about the video such as the source frame rate, or the total length</div></div><div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The loaded images pre-converted to latents. Only available when a vae is connected</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"video\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video: The video file to be loaded.<div style=\"font-size: 1em\">You can also select an image to load it as a single frame</div><div style=\"font-size: 1em\">This is a VHS_PATH input. When edited, it provides a list of possible valid files or directories</div><div style=\"font-size: 1em\"><video preload=\"none\" src=https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/assets/4284322/729b7185-1fca-41d8-bc8d-a770bb2a5ce6 muted loop controls controlslist=\"nodownload noremoteplayback noplaybackrate\" style=\"width: 0px; min-width: 100%\" class=\"VHS_loopedvideo\"></div><div style=\"font-size: 1em\">The current top-most completion may be selected with Tab</div><div style=\"font-size: 1em\">You can navigate up a directory by pressing Ctrl+B (or Ctrl+W if supported by browser)</div><div style=\"font-size: 1em\">The filter on suggested file types can be disabled by pressing Ctrl+G.</div><div style=\"font-size: 1em\">If converted to an input, this functions as a string</div></div></div><div vhs_title=\"force_rate\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_rate: Drops or duplicates frames so that the produced output has the target frame rate. Many motion models are trained on videos of a specific frame rate and will give better results if input matches that frame rate. If set to 0, all frames are returned. May give unusual results with inputs that have a variable frame rate like animated gifs. Reducing this value can also greatly reduce the execution time and memory requirements.</div></div><div vhs_title=\"force_size\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_size: Previously was used to provide suggested resolutions. Instead, custom_width and custom_height can be disabled by setting to 0.</div></div><div vhs_title=\"custom_width\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_width: Allows for an arbitrary width to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"custom_height\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_height: Allows for an arbitrary height to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"frame_load_cap\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_load_cap: The maximum number of frames to load. If 0, all frames are loaded.</div></div><div vhs_title=\"skip_first_frames\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">skip_first_frames: A number of frames which are discarded before producing output.</div></div><div vhs_title=\"select_every_nth\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">select_every_nth: Similar to frame rate. Keeps only the first of every n frames and discard the rest. Has better compatibility with variable frame rate inputs such as gifs. When combined with force_rate, select_every_nth_applies after force_rate so the resulting output has a frame rate equivalent to force_rate/select_every_nth. select_every_nth does not apply to skip_first_frames</div></div><div vhs_title=\"format\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">format: Updates other widgets so that only values supported by the given format can be entered and provides recommended defaults.</div></div><div vhs_title=\"videopreview\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">videopreview: Displays a preview for the selected video input. Will only be shown if Advanced Previews is enabled. This preview will reflect the frame_load_cap, force_rate, skip_first_frames, and select_every_nth values chosen. If the video has audio, it will also be previewed when moused over. Additional preview options can be accessed with right click.</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_LoadVideoFFmpeg": {"input": {"required": {"video": [[]], "force_rate": ["FLOAT", {"default": 0, "min": 0, "max": 60, "step": 1, "disable": 0}], "custom_width": ["INT", {"default": 0, "min": 0, "max": 8192, "disable": 0}], "custom_height": ["INT", {"default": 0, "min": 0, "max": 8192, "disable": 0}], "frame_load_cap": ["INT", {"default": 0, "min": 0, "max": 9007199254740991, "step": 1, "disable": 0}], "start_time": ["FLOAT", {"default": 0, "min": 0, "max": 9007199254740991, "step": 0.001, "widgetType": "VHSTIMESTAMP"}]}, "optional": {"meta_batch": ["VHS_BatchManager"], "vae": ["VAE"], "format": [["None", "AnimateDiff", "Mochi", "LTXV", "Hunyuan", "Cosmos", "Wan"], {"default": "AnimateDiff", "formats": {"None": {}, "AnimateDiff": {"target_rate": 8, "dim": [8, 0, 512, 512]}, "Mochi": {"target_rate": 24, "dim": [16, 0, 848, 480], "frames": [6, 1]}, "LTXV": {"target_rate": 24, "dim": [32, 0, 768, 512], "frames": [8, 1]}, "Hunyuan": {"target_rate": 24, "dim": [16, 0, 848, 480], "frames": [4, 1]}, "Cosmos": {"target_rate": 24, "dim": [16, 0, 1280, 704], "frames": [8, 1]}, "Wan": {"target_rate": 16, "dim": [8, 0, 832, 480], "frames": [4, 1]}}}]}, "hidden": {"force_size": "STRING", "unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["video", "force_rate", "custom_width", "custom_height", "frame_load_cap", "start_time"], "optional": ["meta_batch", "vae", "format"], "hidden": ["force_size", "unique_id"]}, "is_input_list": false, "output": ["IMAGE", "MASK", "AUDIO", "VHS_VIDEOINFO"], "output_is_list": [false, false, false, false], "output_name": ["IMAGE", "mask", "audio", "video_info"], "name": "VHS_LoadVideoFFmpeg", "display_name": "Load Video FFmpeg (Upload) \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Load Video FFmpeg \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Loads a video from the input folder using ffmpeg instead of opencv</div></div><div style=\"font-size: 0.8em\">Provides faster execution speed, transparency support, and allows specifying start time in seconds</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"meta_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">meta_batch: (optional) Connect to a Meta Batch manager to divide extremely long sequences into sub batches. See the documentation for Meta Batch Manager</div></div><div vhs_title=\"vae\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vae: (optional) If provided the node will output latents instead of images. This drastically reduces the required RAM (not VRAM) when working with long (100+ frames) sequences<div style=\"font-size: 1em\">Using this is strongly encouraged unless connecting to a node that requires a blue image connection such as Apply Controllnet</div></div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The loaded images</div></div><div vhs_title=\"mask\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">mask: Transparency data from the loaded video</div></div><div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: The audio from the loaded video</div></div><div vhs_title=\"video_info\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video_info: Exposes additional info about the video such as the source frame rate, or the total length</div></div><div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The loaded images pre-converted to latents. Only available when a vae is connected</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"video\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video: The video file to be loaded. Lists all files with a video extension in the ComfyUI/Input folder</div></div><div vhs_title=\"force_rate\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_rate: Drops or duplicates frames so that the produced output has the target frame rate. Many motion models are trained on videos of a specific frame rate and will give better results if input matches that frame rate. If set to 0, all frames are returned. May give unusual results with inputs that have a variable frame rate like animated gifs. Reducing this value can also greatly reduce the execution time and memory requirements.</div></div><div vhs_title=\"force_size\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_size: Previously was used to provide suggested resolutions. Instead, custom_width and custom_height can be disabled by setting to 0.</div></div><div vhs_title=\"custom_width\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_width: Allows for an arbitrary width to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"custom_height\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_height: Allows for an arbitrary height to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"frame_load_cap\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_load_cap: The maximum number of frames to load. If 0, all frames are loaded.</div></div><div vhs_title=\"start_time\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">start_time: A timestamp, in seconds from the start of the video, to start loading frames from. </div></div><div vhs_title=\"format\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">format: Updates other widgets so that only values supported by the given format can be entered and provides recommended defaults.</div></div><div vhs_title=\"choose video to upload\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">choose video to upload: An upload button is provided to upload local files to the input folder</div></div><div vhs_title=\"videopreview\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">videopreview: Displays a preview for the selected video input. If advanced previews is enabled, this preview will reflect the frame_load_cap, force_rate, skip_first_frames, and select_every_nth values chosen. If the video has audio, it will also be previewed when moused over. Additional preview options can be accessed with right click.</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_LoadVideoFFmpegPath": {"input": {"required": {"video": ["STRING", {"placeholder": "X://insert/path/here.mp4", "vhs_path_extensions": ["webm", "mp4", "mkv", "gif", "mov"]}], "force_rate": ["FLOAT", {"default": 0, "min": 0, "max": 60, "step": 1, "disable": 0}], "custom_width": ["INT", {"default": 0, "min": 0, "max": 8192, "disable": 0}], "custom_height": ["INT", {"default": 0, "min": 0, "max": 8192, "disable": 0}], "frame_load_cap": ["INT", {"default": 0, "min": 0, "max": 9007199254740991, "step": 1, "disable": 0}], "start_time": ["FLOAT", {"default": 0, "min": 0, "max": 9007199254740991, "step": 0.001, "widgetType": "VHSTIMESTAMP"}]}, "optional": {"meta_batch": ["VHS_BatchManager"], "vae": ["VAE"], "format": [["None", "AnimateDiff", "Mochi", "LTXV", "Hunyuan", "Cosmos", "Wan"], {"default": "AnimateDiff", "formats": {"None": {}, "AnimateDiff": {"target_rate": 8, "dim": [8, 0, 512, 512]}, "Mochi": {"target_rate": 24, "dim": [16, 0, 848, 480], "frames": [6, 1]}, "LTXV": {"target_rate": 24, "dim": [32, 0, 768, 512], "frames": [8, 1]}, "Hunyuan": {"target_rate": 24, "dim": [16, 0, 848, 480], "frames": [4, 1]}, "Cosmos": {"target_rate": 24, "dim": [16, 0, 1280, 704], "frames": [8, 1]}, "Wan": {"target_rate": 16, "dim": [8, 0, 832, 480], "frames": [4, 1]}}}]}, "hidden": {"force_size": "STRING", "unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["video", "force_rate", "custom_width", "custom_height", "frame_load_cap", "start_time"], "optional": ["meta_batch", "vae", "format"], "hidden": ["force_size", "unique_id"]}, "is_input_list": false, "output": ["IMAGE", "MASK", "AUDIO", "VHS_VIDEOINFO"], "output_is_list": [false, false, false, false], "output_name": ["IMAGE", "mask", "audio", "video_info"], "name": "VHS_LoadVideoFFmpegPath", "display_name": "Load Video FFmpeg (Path) \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Load Video FFmpeg (Path) \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Loads a video from an arbitrary path using ffmpeg instead of opencv</div></div><div style=\"font-size: 0.8em\">Provides faster execution speed, transparency support, and allows specifying start time in seconds</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"meta_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">meta_batch: (optional) Connect to a Meta Batch manager to divide extremely long sequences into sub batches. See the documentation for Meta Batch Manager</div></div><div vhs_title=\"vae\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vae: (optional) If provided the node will output latents instead of images. This drastically reduces the required RAM (not VRAM) when working with long (100+ frames) sequences<div style=\"font-size: 1em\">Using this is strongly encouraged unless connecting to a node that requires a blue image connection such as Apply Controllnet</div></div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The loaded images</div></div><div vhs_title=\"mask\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">mask: Transparency data from the loaded video</div></div><div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: The audio from the loaded video</div></div><div vhs_title=\"video_info\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video_info: Exposes additional info about the video such as the source frame rate, or the total length</div></div><div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The loaded images pre-converted to latents. Only available when a vae is connected</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"video\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video: The video file to be loaded.<div style=\"font-size: 1em\">You can also select an image to load it as a single frame</div><div style=\"font-size: 1em\">This is a VHS_PATH input. When edited, it provides a list of possible valid files or directories</div><div style=\"font-size: 1em\"><video preload=\"none\" src=https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/assets/4284322/729b7185-1fca-41d8-bc8d-a770bb2a5ce6 muted loop controls controlslist=\"nodownload noremoteplayback noplaybackrate\" style=\"width: 0px; min-width: 100%\" class=\"VHS_loopedvideo\"></div><div style=\"font-size: 1em\">The current top-most completion may be selected with Tab</div><div style=\"font-size: 1em\">You can navigate up a directory by pressing Ctrl+B (or Ctrl+W if supported by browser)</div><div style=\"font-size: 1em\">The filter on suggested file types can be disabled by pressing Ctrl+G.</div><div style=\"font-size: 1em\">If converted to an input, this functions as a string</div></div></div><div vhs_title=\"force_rate\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_rate: Drops or duplicates frames so that the produced output has the target frame rate. Many motion models are trained on videos of a specific frame rate and will give better results if input matches that frame rate. If set to 0, all frames are returned. May give unusual results with inputs that have a variable frame rate like animated gifs. Reducing this value can also greatly reduce the execution time and memory requirements.</div></div><div vhs_title=\"force_size\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_size: Previously was used to provide suggested resolutions. Instead, custom_width and custom_height can be disabled by setting to 0.</div></div><div vhs_title=\"custom_width\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_width: Allows for an arbitrary width to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"custom_height\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_height: Allows for an arbitrary height to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"frame_load_cap\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_load_cap: The maximum number of frames to load. If 0, all frames are loaded.</div></div><div vhs_title=\"skip_first_frames\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">skip_first_frames: A number of frames which are discarded before producing output.</div></div><div vhs_title=\"select_every_nth\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">select_every_nth: Similar to frame rate. Keeps only the first of every n frames and discard the rest. Has better compatibility with variable frame rate inputs such as gifs. When combined with force_rate, select_every_nth_applies after force_rate so the resulting output has a frame rate equivalent to force_rate/select_every_nth. select_every_nth does not apply to skip_first_frames</div></div><div vhs_title=\"format\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">format: Updates other widgets so that only values supported by the given format can be entered and provides recommended defaults.</div></div><div vhs_title=\"videopreview\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">videopreview: Displays a preview for the selected video input. Will only be shown if Advanced Previews is enabled. This preview will reflect the frame_load_cap, force_rate, skip_first_frames, and select_every_nth values chosen. If the video has audio, it will also be previewed when moused over. Additional preview options can be accessed with right click.</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_LoadImagePath": {"input": {"required": {"image": ["STRING", {"placeholder": "X://insert/path/here.png", "vhs_path_extensions": [".png", ".tiff", ".jpg", ".bmp", ".webp", ".pgm", ".ppm", ".tif", ".jpeg"]}], "custom_width": ["INT", {"default": 0, "min": 0, "max": 8192, "step": 8, "disable": 0}], "custom_height": ["INT", {"default": 0, "min": 0, "max": 8192, "step": 8, "disable": 0}]}, "optional": {"vae": ["VAE"]}, "hidden": {"force_size": "STRING"}}, "input_order": {"required": ["image", "custom_width", "custom_height"], "optional": ["vae"], "hidden": ["force_size"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "mask"], "name": "VHS_LoadImagePath", "display_name": "Load Image (Path) \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Load Image (Path) \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Load a single image from a given path</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"vae\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vae: (optional) If provided the node will output latents instead of images.</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The loaded images</div></div><div vhs_title=\"MASK\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">MASK: The alpha channel of the loaded images.</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"image\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">image: The image file to be loaded.<div style=\"font-size: 1em\">This is a VHS_PATH input. When edited, it provides a list of possible valid files or directories</div><div style=\"font-size: 1em\"><video preload=\"none\" src=https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/assets/4284322/729b7185-1fca-41d8-bc8d-a770bb2a5ce6 muted loop controls controlslist=\"nodownload noremoteplayback noplaybackrate\" style=\"width: 0px; min-width: 100%\" class=\"VHS_loopedvideo\"></div><div style=\"font-size: 1em\">The current top-most completion may be selected with Tab</div><div style=\"font-size: 1em\">You can navigate up a directory by pressing Ctrl+B (or Ctrl+W if supported by browser)</div><div style=\"font-size: 1em\">The filter on suggested file types can be disabled by pressing Ctrl+G.</div><div style=\"font-size: 1em\">If converted to an input, this functions as a string</div></div></div><div vhs_title=\"force_size\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_size: Allows for conveniently scaling the input without requiring an additional node. Provides options to maintain aspect ratio or conveniently target common training formats for Animate Diff<div style=\"font-size: 1em\"><div vhs_title=\"custom_width\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_width: Allows for an arbitrary width to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"custom_height\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_height: Allows for an arbitrary height to be entered, cropping to maintain aspect ratio if both are set</div></div></div></div></div><div vhs_title=\"videopreview\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">videopreview: Displays a preview for the selected video input. Will only be shown if Advanced Previews is enabled. This preview will reflect the image_load_cap, skip_first_images, and select_every_nth values chosen. Additional preview options can be accessed with right click.</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_LoadImages": {"input": {"required": {"directory": [["3d", "pasted"]]}, "optional": {"image_load_cap": ["INT", {"default": 0, "min": 0, "max": 9007199254740991, "step": 1}], "skip_first_images": ["INT", {"default": 0, "min": 0, "max": 9007199254740991, "step": 1}], "select_every_nth": ["INT", {"default": 1, "min": 1, "max": 9007199254740991, "step": 1}], "meta_batch": ["VHS_BatchManager"]}, "hidden": {"unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["directory"], "optional": ["image_load_cap", "skip_first_images", "select_every_nth", "meta_batch"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["IMAGE", "MASK", "INT"], "output_is_list": [false, false, false], "output_name": ["IMAGE", "MASK", "frame_count"], "name": "VHS_LoadImages", "display_name": "Load Images (Upload) \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Load Images \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Loads a sequence of images from a subdirectory of the input folder</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"meta_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">meta_batch: (optional) Connect to a Meta Batch manager to divide extremely long sequences into sub batches. See the documentation for Meta Batch Manager</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The loaded images</div></div><div vhs_title=\"MASK\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">MASK: The alpha channel of the loaded images.</div></div><div vhs_title=\"frame_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_count: The length of images just returned</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"directory\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">directory: The directory images will be loaded from. Filtered to process jpg, png, ppm, bmp, tif, and webp files</div></div><div vhs_title=\"image_load_cap\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">image_load_cap: The maximum number of images to load. If 0, all images are loaded.</div></div><div vhs_title=\"start_time\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">start_time: A timestamp, in seconds from the start of the video, to start loading frames from. </div></div><div vhs_title=\"choose folder to upload\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">choose folder to upload: An upload button is provided to upload a local folder containing images to the input folder</div></div><div vhs_title=\"videopreview\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">videopreview: Displays a preview for the selected video input. Will only be shown if Advanced Previews is enabled. This preview will reflect the image_load_cap, skip_first_images, and select_every_nth values chosen. Additional preview options can be accessed with right click.</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_LoadImagesPath": {"input": {"required": {"directory": ["STRING", {"placeholder": "X://path/to/images", "vhs_path_extensions": []}]}, "optional": {"image_load_cap": ["INT", {"default": 0, "min": 0, "max": 9007199254740991, "step": 1}], "skip_first_images": ["INT", {"default": 0, "min": 0, "max": 9007199254740991, "step": 1}], "select_every_nth": ["INT", {"default": 1, "min": 1, "max": 9007199254740991, "step": 1}], "meta_batch": ["VHS_BatchManager"]}, "hidden": {"unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["directory"], "optional": ["image_load_cap", "skip_first_images", "select_every_nth", "meta_batch"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["IMAGE", "MASK", "INT"], "output_is_list": [false, false, false], "output_name": ["IMAGE", "MASK", "frame_count"], "name": "VHS_LoadImagesPath", "display_name": "Load Images (Path) \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Load Images (Path) \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Loads a sequence of images from an arbitrary path</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"meta_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">meta_batch: (optional) Connect to a Meta Batch manager to divide extremely long sequences into sub batches. See the documentation for Meta Batch Manager</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The loaded images</div></div><div vhs_title=\"MASK\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">MASK: The alpha channel of the loaded images.</div></div><div vhs_title=\"frame_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_count: The length of images just returned</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"directory\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">directory: The directory images will be loaded from. Filtered to process jpg, png, ppm, bmp, tif, and webp files<div style=\"font-size: 1em\">This is a VHS_PATH input. When edited, it provides a list of possible valid files or directories</div><div style=\"font-size: 1em\"><video preload=\"none\" src=https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/assets/4284322/729b7185-1fca-41d8-bc8d-a770bb2a5ce6 muted loop controls controlslist=\"nodownload noremoteplayback noplaybackrate\" style=\"width: 0px; min-width: 100%\" class=\"VHS_loopedvideo\"></div><div style=\"font-size: 1em\">The current top-most completion may be selected with Tab</div><div style=\"font-size: 1em\">You can navigate up a directory by pressing Ctrl+B (or Ctrl+W if supported by browser)</div><div style=\"font-size: 1em\">The filter on suggested file types can be disabled by pressing Ctrl+G.</div><div style=\"font-size: 1em\">If converted to an input, this functions as a string</div></div></div><div vhs_title=\"image_load_cap\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">image_load_cap: The maximum number of images to load. If 0, all images are loaded.</div></div><div vhs_title=\"skip_first_images\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">skip_first_images: A number of images which are discarded before producing output.</div></div><div vhs_title=\"select_every_nth\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">select_every_nth: Keeps only the first of every n frames and discard the rest.</div></div><div vhs_title=\"videopreview\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">videopreview: Displays a preview for the selected video input. Will only be shown if Advanced Previews is enabled. This preview will reflect the image_load_cap, skip_first_images, and select_every_nth values chosen. Additional preview options can be accessed with right click.</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_LoadAudio": {"input": {"required": {"audio_file": ["STRING", {"default": "input/", "vhs_path_extensions": ["wav", "mp3", "ogg", "m4a", "flac"]}]}, "optional": {"seek_seconds": ["FLOAT", {"default": 0, "min": 0, "widgetType": "VHSTIMESTAMP"}], "duration": ["FLOAT", {"default": 0, "min": 0, "max": 10000000, "step": 0.01, "widgetType": "VHSTIMESTAMP"}]}}, "input_order": {"required": ["audio_file"], "optional": ["seek_seconds", "duration"]}, "is_input_list": false, "output": ["AUDIO", "FLOAT"], "output_is_list": [false, false], "output_name": ["audio", "duration"], "name": "VHS_LoadAudio", "display_name": "Load Audio (Path)\ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Load Audio (Path) \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Loads an audio file from an arbitrary path</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: The loaded audio</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"audio_file\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio_file: The audio file to be loaded.<div style=\"font-size: 1em\">This is a VHS_PATH input. When edited, it provides a list of possible valid files or directories</div><div style=\"font-size: 1em\"><video preload=\"none\" src=https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/assets/4284322/729b7185-1fca-41d8-bc8d-a770bb2a5ce6 muted loop controls controlslist=\"nodownload noremoteplayback noplaybackrate\" style=\"width: 0px; min-width: 100%\" class=\"VHS_loopedvideo\"></div><div style=\"font-size: 1em\">The current top-most completion may be selected with Tab</div><div style=\"font-size: 1em\">You can navigate up a directory by pressing Ctrl+B (or Ctrl+W if supported by browser)</div><div style=\"font-size: 1em\">The filter on suggested file types can be disabled by pressing Ctrl+G.</div><div style=\"font-size: 1em\">If converted to an input, this functions as a string</div></div></div><div vhs_title=\"seek_seconds\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">seek_seconds: An offset from the start of the sound file that the audio should start from</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/audio", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_LoadAudioUpload": {"input": {"required": {"audio": [[]]}, "optional": {"start_time": ["FLOAT", {"default": 0, "min": 0, "max": 10000000, "step": 0.01, "widgetType": "VHSTIMESTAMP"}], "duration": ["FLOAT", {"default": 0, "min": 0, "max": 10000000, "step": 0.01, "widgetType": "VHSTIMESTAMP"}]}}, "input_order": {"required": ["audio"], "optional": ["start_time", "duration"]}, "is_input_list": false, "output": ["AUDIO", "FLOAT"], "output_is_list": [false, false], "output_name": ["audio", "duration"], "name": "VHS_LoadAudioUpload", "display_name": "Load Audio (Upload)\ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Load Audio (Upload) \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Loads an audio file from the input directory</div></div><div style=\"font-size: 0.8em\">Very similar in functionality to the built-in LoadAudio. It was originally added before VHS swapped to use Comfy's internal AUDIO format, but provides the additional options for start time and duration</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: The loaded audio</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: The audio file to be loaded.</div></div><div vhs_title=\"start_time\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">start_time: An offset from the start of the sound file that the audio should start from</div></div><div vhs_title=\"duration\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">duration: A maximum limit for the audio. Disabled if 0</div></div><div vhs_title=\"choose audio to upload\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">choose audio to upload: An upload button is provided to upload an audio file to the input folder</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/audio", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_AudioToVHSAudio": {"input": {"required": {"audio": ["AUDIO"]}}, "input_order": {"required": ["audio"]}, "is_input_list": false, "output": ["VHS_AUDIO"], "output_is_list": [false], "output_name": ["vhs_audio"], "name": "VHS_AudioToVHSAudio", "display_name": "Audio to legacy VHS_AUDIO\ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Audio to legacy VHS_AUDIO \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>utility function for compatibility with external nodes</div></div><div style=\"font-size: 0.8em\">VHS used to use an internal VHS_AUDIO format for routing audio between inputs and outputs. This format was intended to only be used internally and was designed with a focus on performance over ease of use. Since ComfyUI now has an internal AUDIO format, VHS now uses this format. However, some custom node packs were made that are external to both ComfyUI and VHS that use VHS_AUDIO. This node was added so that those external nodes can still function</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: An input in the standardized AUDIO format</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"vhs_audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vhs_audio: An output in the legacy VHS_AUDIO format for use with external nodes</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/audio", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_VHSAudioToAudio": {"input": {"required": {"vhs_audio": ["VHS_AUDIO"]}}, "input_order": {"required": ["vhs_audio"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "name": "VHS_VHSAudioToAudio", "display_name": "Legacy VHS_AUDIO to Audio\ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Legacy VHS_AUDIO to Audio \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>utility function for compatibility with external nodes</div></div><div style=\"font-size: 0.8em\">VHS used to use an internal VHS_AUDIO format for routing audio between inputs and outputs. This format was intended to only be used internally and was designed with a focus on performance over ease of use. Since ComfyUI now has an internal AUDIO format, VHS now uses this format. However, some custom node packs were made that are external to both ComfyUI and VHS that use VHS_AUDIO. This node was added so that those external nodes can still function</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"vhs_audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vhs_audio: An input in the legacy VHS_AUDIO format produced by an external node</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"vhs_audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vhs_audio: An output in the standardized AUDIO format</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/audio", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_PruneOutputs": {"input": {"required": {"filenames": ["VHS_FILENAMES"], "options": [["Intermediate", "Intermediate and Utility"]]}}, "input_order": {"required": ["filenames", "options"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "VHS_PruneOutputs", "display_name": "Prune Outputs \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Prune Outputs \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Automates deletion of undesired outputs from a Video Combine node.</div></div><div style=\"font-size: 0.8em\">Video Combine produces a number of file outputs in addition to the final output. Some of these, such as a video file without audio included, are implementation limitations and are not feasible to solve. As an alternative, the Prune Outputs node is added to automate the deletion of these file outputs if they are not desired</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"filenames\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">filenames: A connection from a Video Combine node to indicate which outputs should be pruned</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"options\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">options: Which files should be deleted<div style=\"font-size: 1em\"><div vhs_title=\"Intermediate\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Intermediate: Delete any files that were required for intermediate processing but are not the final output, like the no-audio output file when audio is included</div></div><div vhs_title=\"Intermediate and Utility\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Intermediate and Utility: Delete all produced files that aren't the final output, including the first frame png</div></div></div></div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "VHS_BatchManager": {"input": {"required": {"frames_per_batch": ["INT", {"default": 16, "min": 1, "max": 9007199254740991, "step": 1}]}, "hidden": {"prompt": "PROMPT", "unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["frames_per_batch"], "hidden": ["prompt", "unique_id"]}, "is_input_list": false, "output": ["VHS_BatchManager"], "output_is_list": [false], "output_name": ["meta_batch"], "name": "VHS_BatchManager", "display_name": "Meta Batch Manager \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Meta Batch Manager \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Split the processing of a very long video into sets of smaller Meta Batches</div></div><div style=\"font-size: 0.8em\">The Meta Batch Manager allows for extremely long input videos to be processed when all other methods for fitting the content in RAM fail. It does not effect VRAM usage.</div><div style=\"font-size: 0.8em\">It must be connected to at least one Input (a Load Video or Load Images) AND at least one Video Combine</div><div style=\"font-size: 0.8em\"><img src=https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/assets/4284322/7cb3fb7e-59d8-4cb2-a09f-9c6698de8b1f loading=lazy style=\"width: 0px; min-width: 100%\"></div><div style=\"font-size: 0.8em\">It functions by holding both the inputs and ouputs open between executions, and automatically requeue's the workflow until one of the inputs is unable to provide additional images.</div><div style=\"font-size: 0.8em\">Because each sub execution only contains a subset of the total frames, each sub execution creates a hard window which temporal smoothing can not be applied across. This results in jumps in the output.</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"meta_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">meta_batch: Add all connected nodes to this Meta Batch</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"frames_per_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frames_per_batch: How many frames to process for each sub execution. If loading as image, each frame will use about 50MB of RAM (not VRAM), and this can safely be set in the 100-1000 range, depending on available memory. When loading and combining from latent space (no blue image noodles exist), this value can be much higher, around the 2,000 to 20,000 range</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_VideoInfo": {"input": {"required": {"video_info": ["VHS_VIDEOINFO"]}}, "input_order": {"required": ["video_info"]}, "is_input_list": false, "output": ["FLOAT", "INT", "FLOAT", "INT", "INT", "FLOAT", "INT", "FLOAT", "INT", "INT"], "output_is_list": [false, false, false, false, false, false, false, false, false, false], "output_name": ["source_fps\ud83d\udfe8", "source_frame_count\ud83d\udfe8", "source_duration\ud83d\udfe8", "source_width\ud83d\udfe8", "source_height\ud83d\udfe8", "loaded_fps\ud83d\udfe6", "loaded_frame_count\ud83d\udfe6", "loaded_duration\ud83d\udfe6", "loaded_width\ud83d\udfe6", "loaded_height\ud83d\udfe6"], "name": "VHS_VideoInfo", "display_name": "Video Info \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Video Info \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Splits information on a video into a numerous outputs</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"video_info\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video_info: A connection to a Load Video node</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"source_fps\ud83d\udfe8\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_fps\ud83d\udfe8: The frame rate of the video</div></div><div vhs_title=\"source_frame_count\ud83d\udfe8\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_frame_count\ud83d\udfe8: How many total frames the video contains before accounting for frame rate or select_every_nth</div></div><div vhs_title=\"source_duration\ud83d\udfe8\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_duration\ud83d\udfe8: The length of images just returned in seconds</div></div><div vhs_title=\"source_width\ud83d\udfe8\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_width\ud83d\udfe8: The width</div></div><div vhs_title=\"source_height\ud83d\udfe8\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_height\ud83d\udfe8: The height</div></div><div vhs_title=\"loaded_fps\ud83d\udfe6\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_fps\ud83d\udfe6: The frame rate after accounting for force_rate and select_every_nth. This output is of particular use as it can be connected to the converted frame_rate input of a Video Combine node to ensure audio remains synchronized.</div></div><div vhs_title=\"loaded_frame_count\ud83d\udfe6\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_frame_count\ud83d\udfe6: The number of frames returned by the current execution. Identical to the frame_count returned by the node itself</div></div><div vhs_title=\"loaded_duration\ud83d\udfe6\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_duration\ud83d\udfe6: The duration in seconds of returned images after accounting for frame_load_cap</div></div><div vhs_title=\"loaded_width\ud83d\udfe6\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_width\ud83d\udfe6: The width of the video after scaling. These coordinates are in image space even if loading to latent space</div></div><div vhs_title=\"loaded_height\ud83d\udfe6\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_height\ud83d\udfe6: The height of the video after scaling. These coordinates are in image space even if loading to latent space</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_VideoInfoSource": {"input": {"required": {"video_info": ["VHS_VIDEOINFO"]}}, "input_order": {"required": ["video_info"]}, "is_input_list": false, "output": ["FLOAT", "INT", "FLOAT", "INT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["fps\ud83d\udfe8", "frame_count\ud83d\udfe8", "duration\ud83d\udfe8", "width\ud83d\udfe8", "height\ud83d\udfe8"], "name": "VHS_VideoInfoSource", "display_name": "Video Info (Source) \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Video Info Source \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Splits information on a video into a numerous outputs describing the file itself without accounting for load options</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"video_info\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video_info: A connection to a Load Video node</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"source_fps\ud83d\udfe8\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_fps\ud83d\udfe8: The frame rate of the video</div></div><div vhs_title=\"source_frame_count\ud83d\udfe8\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_frame_count\ud83d\udfe8: How many total frames the video contains before accounting for frame rate or select_every_nth</div></div><div vhs_title=\"source_duration\ud83d\udfe8\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_duration\ud83d\udfe8: The length of images just returned in seconds</div></div><div vhs_title=\"source_width\ud83d\udfe8\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_width\ud83d\udfe8: The original width</div></div><div vhs_title=\"source_height\ud83d\udfe8\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_height\ud83d\udfe8: The original height</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_VideoInfoLoaded": {"input": {"required": {"video_info": ["VHS_VIDEOINFO"]}}, "input_order": {"required": ["video_info"]}, "is_input_list": false, "output": ["FLOAT", "INT", "FLOAT", "INT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["fps\ud83d\udfe6", "frame_count\ud83d\udfe6", "duration\ud83d\udfe6", "width\ud83d\udfe6", "height\ud83d\udfe6"], "name": "VHS_VideoInfoLoaded", "display_name": "Video Info (Loaded) \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Video Info Loaded \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Splits information on a video into a numerous outputs describing the file itself after accounting for load options</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"video_info\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video_info: A connection to a Load Video node</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"loaded_fps\ud83d\udfe6\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_fps\ud83d\udfe6: The frame rate after accounting for force_rate and select_every_nth. This output is of particular use as it can be connected to the converted frame_rate input of a Video Combine node to ensure audio remains synchronized.</div></div><div vhs_title=\"loaded_frame_count\ud83d\udfe6\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_frame_count\ud83d\udfe6: The number of frames returned by the current execution. Identical to the frame_count returned by the node itself</div></div><div vhs_title=\"loaded_duration\ud83d\udfe6\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_duration\ud83d\udfe6: The duration in seconds of returned images after accounting for frame_load_cap</div></div><div vhs_title=\"loaded_width\ud83d\udfe6\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_width\ud83d\udfe6: The width of the video after scaling. This is the dimension of the corresponding image even if loading as a latent directly</div></div><div vhs_title=\"loaded_height\ud83d\udfe6\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_height\ud83d\udfe6: The height of the video after scaling. This is the dimension of the corresponding image even if loading as a latent directly</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_SelectFilename": {"input": {"required": {"filenames": ["VHS_FILENAMES"], "index": ["INT", {"default": -1, "step": 1, "min": -1}]}}, "input_order": {"required": ["filenames", "index"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["Filename"], "name": "VHS_SelectFilename", "display_name": "Select Filename \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "VAE Select Filename \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Select a single filename from the VHS_FILENAMES output by a Video Combine and return it as a string</div></div><div style=\"font-size: 0.8em\">Take care when combining this node with Prune Outputs. The VHS_FILENAMES object is immutable and will always contain the full list of output files, but execution order is undefined behavior (currently, Prune Outputs will generally execute first) and SelectFilename may return a path to a file that no longer exists.</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"filenames\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">filenames: A VHS_FILENAMES from a Video Combine node</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"filename\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">filename: A string representation of the full output path for the chosen file</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"index\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">index: The index of which file should be selected. The default, -1, chooses the most complete output</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_VAEEncodeBatched": {"input": {"required": {"pixels": ["IMAGE"], "vae": ["VAE"], "per_batch": ["INT", {"default": 16, "min": 1}]}}, "input_order": {"required": ["pixels", "vae", "per_batch"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "VHS_VAEEncodeBatched", "display_name": "VAE Encode Batched \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "VAE Encode Batched \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Encode images as latents with a manually specified batch size.</div></div><div style=\"font-size: 0.8em\">Some people have ran into VRAM issues when encoding or decoding large batches of images. As a workaround, this node lets you manually set a batch size when encoding images.</div><div style=\"font-size: 0.8em\">Unless these issues have been encountered, it is simpler to use the native VAE Encode or to encode directly from a Load Video</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"pixels\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">pixels: The images to be encoded.</div></div><div vhs_title=\"vae\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vae: The VAE to use when encoding.</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The encoded latents.</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"per_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">per_batch: The maximum number of images to encode in each batch.</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/batched nodes", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_VAEDecodeBatched": {"input": {"required": {"samples": ["LATENT"], "vae": ["VAE"], "per_batch": ["INT", {"default": 16, "min": 1}]}}, "input_order": {"required": ["samples", "vae", "per_batch"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "VHS_VAEDecodeBatched", "display_name": "VAE Decode Batched \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "VAE Decode Batched \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Decode latents to images with a manually specified batch size</div></div><div style=\"font-size: 0.8em\">Some people have ran into VRAM issues when encoding or decoding large batches of images. As a workaround, this node lets you manually set a batch size when decoding latents.</div><div style=\"font-size: 0.8em\">Unless these issues have been encountered, it is simpler to use the native VAE Decode or to decode from a Video Combine directly</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"samples\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">samples: The latents to be decoded.</div></div><div vhs_title=\"vae\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vae: The VAE to use when decoding.</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The decoded images.</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"per_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">per_batch: The maximum number of images to decode in each batch.</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/batched nodes", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_SplitLatents": {"input": {"required": {"latents": ["LATENT"], "split_index": ["INT", {"default": 0, "step": 1, "min": -9007199254740991, "max": 9007199254740991}]}}, "input_order": {"required": ["latents", "split_index"]}, "is_input_list": false, "output": ["LATENT", "INT", "LATENT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["LATENT_A", "A_count", "LATENT_B", "B_count"], "name": "VHS_SplitLatents", "display_name": "Split Latents \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Split Latents \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Split a set of latents into two groups</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"latents\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">latents: The latents to be split.</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"LATENT_A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT_A: The first group of latents</div></div><div vhs_title=\"A_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">A_count: The number of latents in group A. This will be equal to split_index unless the latents input has length less than split_index</div></div><div vhs_title=\"LATENT_B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT_B: The second group of latents</div></div><div vhs_title=\"B_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">B_count: The number of latents in group B</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"split_index\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">split_index: The index of the first latent that will be in the second output groups.</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_SplitImages": {"input": {"required": {"images": ["IMAGE"], "split_index": ["INT", {"default": 0, "step": 1, "min": -9007199254740991, "max": 9007199254740991}]}}, "input_order": {"required": ["images", "split_index"]}, "is_input_list": false, "output": ["IMAGE", "INT", "IMAGE", "INT"], "output_is_list": [false, false, false, false], "output_name": ["IMAGE_A", "A_count", "IMAGE_B", "B_count"], "name": "VHS_SplitImages", "display_name": "Split Images \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Split Images \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Split a set of images into two groups</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"images\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">images: The images to be split.</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE_A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE_A: The first group of images</div></div><div vhs_title=\"A_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">A_count: The number of images in group A. This will be equal to split_index unless the images input has length less than split_index</div></div><div vhs_title=\"IMAGE_B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE_B: The second group of images</div></div><div vhs_title=\"B_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">B_count: The number of images in group B</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"split_index\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">split_index: The index of the first latent that will be in the second output groups.</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/image", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_SplitMasks": {"input": {"required": {"mask": ["MASK"], "split_index": ["INT", {"default": 0, "step": 1, "min": -9007199254740991, "max": 9007199254740991}]}}, "input_order": {"required": ["mask", "split_index"]}, "is_input_list": false, "output": ["MASK", "INT", "MASK", "INT"], "output_is_list": [false, false, false, false], "output_name": ["MASK_A", "A_count", "MASK_B", "B_count"], "name": "VHS_SplitMasks", "display_name": "Split Masks \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Split Masks \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Split a set of masks into two groups</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"mask\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">mask: The masks to be split.</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"MASK_A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">MASK_A: The first group of masks</div></div><div vhs_title=\"A_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">A_count: The number of masks in group A. This will be equal to split_index unless the mask input has length less than split_index</div></div><div vhs_title=\"MASK_B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">MASK_B: The second group of masks</div></div><div vhs_title=\"B_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">B_count: The number of masks in group B</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"split_index\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">split_index: The index of the first latent that will be in the second output groups.</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/mask", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_MergeLatents": {"input": {"required": {"latents_A": ["LATENT"], "latents_B": ["LATENT"], "merge_strategy": [["match A", "match B", "match smaller", "match larger"]], "scale_method": [["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]], "crop": [["disabled", "center"]]}}, "input_order": {"required": ["latents_A", "latents_B", "merge_strategy", "scale_method", "crop"]}, "is_input_list": false, "output": ["LATENT", "INT"], "output_is_list": [false, false], "output_name": ["LATENT", "count"], "name": "VHS_MergeLatents", "display_name": "Merge Latents \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Merge Latents \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Combine two groups of latents into a single group of latents</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"latents_A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">latents_A: The first group of latents</div></div><div vhs_title=\"latents_B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">latents_B: The first group of latents</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The combined group of latents</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The length of the combined group</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"merge_strategy\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">merge_strategy: Determines what the output resolution will be if input resolutions don't match<div style=\"font-size: 1em\"><div vhs_title=\"match A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match A: Always use the resolution for A</div></div><div vhs_title=\"match B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match B: Always use the resolution for B</div></div><div vhs_title=\"match smaller\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match smaller: Pick the smaller resolution by area</div></div><div vhs_title=\"match larger\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match larger: Pick the larger resolution by area</div></div></div></div></div><div vhs_title=\"scale_method\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">scale_method: Determines what method to use if scaling is required</div></div><div vhs_title=\"crop\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">crop: When sizes don't match, should the resized image have it's aspect ratio changed, or be cropped to maintain aspect ratio</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_MergeImages": {"input": {"required": {"images_A": ["IMAGE"], "images_B": ["IMAGE"], "merge_strategy": [["match A", "match B", "match smaller", "match larger"]], "scale_method": [["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]], "crop": [["disabled", "center"]]}}, "input_order": {"required": ["images_A", "images_B", "merge_strategy", "scale_method", "crop"]}, "is_input_list": false, "output": ["IMAGE", "INT"], "output_is_list": [false, false], "output_name": ["IMAGE", "count"], "name": "VHS_MergeImages", "display_name": "Merge Images \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Merge Images \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Combine two groups of images into a single group of images</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"images_A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">images_A: The first group of images</div></div><div vhs_title=\"images_B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">images_B: The first group of images</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The combined group of images</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The length of the combined group</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"merge_strategy\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">merge_strategy: Determines what the output resolution will be if input resolutions don't match<div style=\"font-size: 1em\"><div vhs_title=\"match A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match A: Always use the resolution for A</div></div><div vhs_title=\"match B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match B: Always use the resolution for B</div></div><div vhs_title=\"match smaller\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match smaller: Pick the smaller resolution by area</div></div><div vhs_title=\"match larger\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match larger: Pick the larger resolution by area</div></div></div></div></div><div vhs_title=\"scale_method\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">scale_method: Determines what method to use if scaling is required</div></div><div vhs_title=\"crop\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">crop: When sizes don't match, should the resized image have it's aspect ratio changed, or be cropped to maintain aspect ratio</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/image", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_MergeMasks": {"input": {"required": {"mask_A": ["MASK"], "mask_B": ["MASK"], "merge_strategy": [["match A", "match B", "match smaller", "match larger"]], "scale_method": [["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]], "crop": [["disabled", "center"]]}}, "input_order": {"required": ["mask_A", "mask_B", "merge_strategy", "scale_method", "crop"]}, "is_input_list": false, "output": ["MASK", "INT"], "output_is_list": [false, false], "output_name": ["MASK", "count"], "name": "VHS_MergeMasks", "display_name": "Merge Masks \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Merge Masks \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Combine two groups of masks into a single group of masks</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"mask_A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">mask_A: The first group of masks</div></div><div vhs_title=\"mask_B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">mask_B: The first group of masks</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"MASK\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">MASK: The combined group of masks</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The length of the combined group</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"merge_strategy\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">merge_strategy: Determines what the output resolution will be if input resolutions don't match<div style=\"font-size: 1em\"><div vhs_title=\"match A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match A: Always use the resolution for A</div></div><div vhs_title=\"match B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match B: Always use the resolution for B</div></div><div vhs_title=\"match smaller\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match smaller: Pick the smaller resolution by area</div></div><div vhs_title=\"match larger\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match larger: Pick the larger resolution by area</div></div></div></div></div><div vhs_title=\"scale_method\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">scale_method: Determines what method to use if scaling is required</div></div><div vhs_title=\"crop\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">crop: When sizes don't match, should the resized image have it's aspect ratio changed, or be cropped to maintain aspect ratio</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/mask", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_GetLatentCount": {"input": {"required": {"latents": ["LATENT"]}}, "input_order": {"required": ["latents"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["count"], "name": "VHS_GetLatentCount", "display_name": "Get Latent Count \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Get Latent Count \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Return the number of latents in an input as an INT</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"latents\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">latents: The input latent</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of latents in the input</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_GetImageCount": {"input": {"required": {"images": ["IMAGE"]}}, "input_order": {"required": ["images"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["count"], "name": "VHS_GetImageCount", "display_name": "Get Image Count \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Get Image Count \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Return the number of images in an input as an INT</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"images\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">images: The input image</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of images in the input</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/image", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_GetMaskCount": {"input": {"required": {"mask": ["MASK"]}}, "input_order": {"required": ["mask"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["count"], "name": "VHS_GetMaskCount", "display_name": "Get Mask Count \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Get Mask Count \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Return the number of masks in an input as an INT</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"masks\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">masks: The input mask</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of masks in the input</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/mask", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_DuplicateLatents": {"input": {"required": {"latents": ["LATENT"], "multiply_by": ["INT", {"default": 1, "min": 1, "max": 9007199254740991, "step": 1}]}}, "input_order": {"required": ["latents", "multiply_by"]}, "is_input_list": false, "output": ["LATENT", "INT"], "output_is_list": [false, false], "output_name": ["LATENT", "count"], "name": "VHS_DuplicateLatents", "display_name": "Repeat Latents \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Repeat Latents \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Append copies of a latent to itself so it repeats</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"latents\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">latents: The latents to be repeated</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The latent with repeats</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of latents in the output. Equal to the length of the input latent * multiply_by</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"multiply_by\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">multiply_by: Controls the number of times the latent should repeat. 1, the default, means no change.</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_DuplicateImages": {"input": {"required": {"images": ["IMAGE"], "multiply_by": ["INT", {"default": 1, "min": 1, "max": 9007199254740991, "step": 1}]}}, "input_order": {"required": ["images", "multiply_by"]}, "is_input_list": false, "output": ["IMAGE", "INT"], "output_is_list": [false, false], "output_name": ["IMAGE", "count"], "name": "VHS_DuplicateImages", "display_name": "Repeat Images \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Repeat Images \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Append copies of a image to itself so it repeats</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"IMAGES\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGES: The image to be repeated</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The image with repeats</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of image in the output. Equal to the length of the input image * multiply_by</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"multiply_by\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">multiply_by: Controls the number of times the mask should repeat. 1, the default, means no change.</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/image", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_DuplicateMasks": {"input": {"required": {"mask": ["MASK"], "multiply_by": ["INT", {"default": 1, "min": 1, "max": 9007199254740991, "step": 1}]}}, "input_order": {"required": ["mask", "multiply_by"]}, "is_input_list": false, "output": ["MASK", "INT"], "output_is_list": [false, false], "output_name": ["MASK", "count"], "name": "VHS_DuplicateMasks", "display_name": "Repeat Masks \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Repeat Masks \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Append copies of a mask to itself so it repeats</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"masks\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">masks: The masks to be repeated</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The mask with repeats</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of mask in the output. Equal to the length of the input mask * multiply_by</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"multiply_by\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">multiply_by: Controls the number of times the mask should repeat. 1, the default, means no change.</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/mask", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_SelectEveryNthLatent": {"input": {"required": {"latents": ["LATENT"], "select_every_nth": ["INT", {"default": 1, "min": 1, "max": 9007199254740991, "step": 1}], "skip_first_latents": ["INT", {"default": 0, "min": 0, "max": 9007199254740991, "step": 1}]}}, "input_order": {"required": ["latents", "select_every_nth", "skip_first_latents"]}, "is_input_list": false, "output": ["LATENT", "INT"], "output_is_list": [false, false], "output_name": ["LATENT", "count"], "name": "VHS_SelectEveryNthLatent", "display_name": "Select Every Nth Latent \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Select Every Nth Latent \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Keep only 1 latent for every interval</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"latents\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">latents: The input latent</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The output latents</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of latents in the input</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"select_every_nth\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">select_every_nth: The interval from which one frame is kept. 1 means no frames are skipped.</div></div><div vhs_title=\"skip_first_latents\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">skip_first_latents: A number of frames which that is skipped from the start. This applies before select_every_nth. As a result, multiple copies of the node can each have a different skip_first_frames to divide the latent into groups</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_SelectEveryNthImage": {"input": {"required": {"images": ["IMAGE"], "select_every_nth": ["INT", {"default": 1, "min": 1, "max": 9007199254740991, "step": 1}], "skip_first_images": ["INT", {"default": 0, "min": 0, "max": 9007199254740991, "step": 1}]}}, "input_order": {"required": ["images", "select_every_nth", "skip_first_images"]}, "is_input_list": false, "output": ["IMAGE", "INT"], "output_is_list": [false, false], "output_name": ["IMAGE", "count"], "name": "VHS_SelectEveryNthImage", "display_name": "Select Every Nth Image \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Select Every Nth Image \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Keep only 1 image for every interval</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"images\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">images: The input image</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The output images</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of images in the input</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"select_every_nth\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">select_every_nth: The interval from which one frame is kept. 1 means no frames are skipped.</div></div><div vhs_title=\"skip_first_images\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">skip_first_images: A number of frames which that is skipped from the start. This applies before select_every_nth. As a result, multiple copies of the node can each have a different skip_first_frames to divide the image into groups</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/image", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_SelectEveryNthMask": {"input": {"required": {"mask": ["MASK"], "select_every_nth": ["INT", {"default": 1, "min": 1, "max": 9007199254740991, "step": 1}], "skip_first_masks": ["INT", {"default": 0, "min": 0, "max": 9007199254740991, "step": 1}]}}, "input_order": {"required": ["mask", "select_every_nth", "skip_first_masks"]}, "is_input_list": false, "output": ["MASK", "INT"], "output_is_list": [false, false], "output_name": ["MASK", "count"], "name": "VHS_SelectEveryNthMask", "display_name": "Select Every Nth Mask \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Select Every Nth Mask \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Keep only 1 mask for every interval</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"mask\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">mask: The input mask</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"MASK\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">MASK: The output mask</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of mask in the input</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"select_every_nth\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">select_every_nth: The interval from which one frame is kept. 1 means no frames are skipped.</div></div><div vhs_title=\"skip_first_mask\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">skip_first_mask: A number of frames which that is skipped from the start. This applies before select_every_nth. As a result, multiple copies of the node can each have a different skip_first_frames to divide the mask into groups</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/mask", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_SelectLatents": {"input": {"required": {"latent": ["LATENT"], "indexes": ["STRING", {"default": "0"}], "err_if_missing": ["BOOLEAN", {"default": true}], "err_if_empty": ["BOOLEAN", {"default": true}]}}, "input_order": {"required": ["latent", "indexes", "err_if_missing", "err_if_empty"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "VHS_SelectLatents", "display_name": "Select Latents \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Use comma-separated indexes to select items in the given order.\nSupports negative indexes, python-style ranges (end index excluded),\nas well as range step.\n\nAcceptable entries (assuming 16 items provided, so idxs 0 to 15 exist):\n0         -> Returns [0]\n-1        -> Returns [15]\n0, 1, 13  -> Returns [0, 1, 13]\n0:5, 13   -> Returns [0, 1, 2, 3, 4, 13]\n0:-1      -> Returns [0, 1, 2, ..., 13, 14]\n0:5:-1    -> Returns [4, 3, 2, 1, 0]\n0:5:2     -> Returns [0, 2, 4]\n::-1     -> Returns [15, 14, 13, ..., 2, 1, 0]\n", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_SelectImages": {"input": {"required": {"image": ["IMAGE"], "indexes": ["STRING", {"default": "0"}], "err_if_missing": ["BOOLEAN", {"default": true}], "err_if_empty": ["BOOLEAN", {"default": true}]}}, "input_order": {"required": ["image", "indexes", "err_if_missing", "err_if_empty"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "VHS_SelectImages", "display_name": "Select Images \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Use comma-separated indexes to select items in the given order.\nSupports negative indexes, python-style ranges (end index excluded),\nas well as range step.\n\nAcceptable entries (assuming 16 items provided, so idxs 0 to 15 exist):\n0         -> Returns [0]\n-1        -> Returns [15]\n0, 1, 13  -> Returns [0, 1, 13]\n0:5, 13   -> Returns [0, 1, 2, 3, 4, 13]\n0:-1      -> Returns [0, 1, 2, ..., 13, 14]\n0:5:-1    -> Returns [4, 3, 2, 1, 0]\n0:5:2     -> Returns [0, 2, 4]\n::-1     -> Returns [15, 14, 13, ..., 2, 1, 0]\n", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/image", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_SelectMasks": {"input": {"required": {"mask": ["MASK"], "indexes": ["STRING", {"default": "0"}], "err_if_missing": ["BOOLEAN", {"default": true}], "err_if_empty": ["BOOLEAN", {"default": true}]}}, "input_order": {"required": ["mask", "indexes", "err_if_missing", "err_if_empty"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "VHS_SelectMasks", "display_name": "Select Masks \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Use comma-separated indexes to select items in the given order.\nSupports negative indexes, python-style ranges (end index excluded),\nas well as range step.\n\nAcceptable entries (assuming 16 items provided, so idxs 0 to 15 exist):\n0         -> Returns [0]\n-1        -> Returns [15]\n0, 1, 13  -> Returns [0, 1, 13]\n0:5, 13   -> Returns [0, 1, 2, 3, 4, 13]\n0:-1      -> Returns [0, 1, 2, ..., 13, 14]\n0:5:-1    -> Returns [4, 3, 2, 1, 0]\n0:5:2     -> Returns [0, 2, 4]\n::-1     -> Returns [15, 14, 13, ..., 2, 1, 0]\n", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62/mask", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_Unbatch": {"input": {"required": {"batched": ["*"]}}, "input_order": {"required": ["batched"]}, "is_input_list": true, "output": ["*"], "output_is_list": [false], "output_name": ["unbatched"], "name": "VHS_Unbatch", "display_name": "Unbatch \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Unbatch \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Unbatch a list of items into a single concatenated item</div></div><div style=\"font-size: 0.8em\">Useful for when you want a single video output from a complex workflow</div><div style=\"font-size: 0.8em\">Has no relation to the Meta Batch system of VHS</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"batched\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">batched: Any input which may or may not be batched</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"unbatched\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">unbatched: A single output element. Torch tensors are concatenated across dim 0, all other types are added which functions as concatenation for strings and arrays, but may give undesired results for other types</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VHS_SelectLatest": {"input": {"required": {"filename_prefix": ["STRING", {"default": "output/AnimateDiff", "vhs_path_extensions": []}], "filename_postfix": ["STRING", {"placeholder": ".webm"}]}}, "input_order": {"required": ["filename_prefix", "filename_postfix"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["Filename"], "name": "VHS_SelectLatest", "display_name": "Select Latest \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "description": "Select Latest \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Experimental virtual node to select the most recently modified file from a given folder</div></div><div style=\"font-size: 0.8em\">Assists in the creation of workflows where outputs from one execution are used elsewhere in subsequent executions.</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"filename_prefix\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">filename_prefix: A path which can consist of a combination of folders and a prefix which candidate files must match</div></div><div vhs_title=\"filename_postfix\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">filename_postfix: A string which chich the selected file must end with. Useful for limiting to a target extension.</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"Filename\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Filename: A string representing a file path to the most recently modified file.</div></div></div></div></div>", "python_module": "custom_nodes.ComfyUI-VideoHelperSuite", "category": "Video Helper Suite \ud83c\udfa5\ud83c\udd65\ud83c\udd57\ud83c\udd62", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "AnimeFace_SemSegPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"remove_background_using_abg": ["BOOLEAN", {"default": true}], "resolution": ["INT", {"default": 512, "min": 512, "max": 512, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["remove_background_using_abg", "resolution"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "ABG_CHARACTER_MASK (MASK)"], "name": "AnimeFace_SemSegPreprocessor", "display_name": "Anime Face Segmentor", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Semantic Segmentation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "AnyLineArtPreprocessor_aux": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"merge_with_lineart": [["lineart_standard", "lineart_realisitic", "lineart_anime", "manga_line"], {"default": "lineart_standard"}], "resolution": ["INT", {"default": 1280, "min": 64, "max": 16384, "step": 8}], "lineart_lower_bound": ["FLOAT", {"default": 0, "min": 0, "max": 1, "step": 0.01}], "lineart_upper_bound": ["FLOAT", {"default": 1, "min": 0, "max": 1, "step": 0.01}], "object_min_size": ["INT", {"default": 36, "min": 1, "max": 16384, "step": 1}], "object_connectivity": ["INT", {"default": 1, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["image"], "optional": ["merge_with_lineart", "resolution", "lineart_lower_bound", "lineart_upper_bound", "object_min_size", "object_connectivity"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["image"], "name": "AnyLineArtPreprocessor_aux", "display_name": "AnyLine Lineart", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "BinaryPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"bin_threshold": ["INT", {"default": 100, "min": 0, "max": 255, "step": 1}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["bin_threshold", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "BinaryPreprocessor", "display_name": "Binary Lines", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CannyEdgePreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"low_threshold": ["INT", {"default": 100, "min": 0, "max": 255, "step": 1}], "high_threshold": ["INT", {"default": 200, "min": 0, "max": 255, "step": 1}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["low_threshold", "high_threshold", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "CannyEdgePreprocessor", "display_name": "Canny Edge", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ColorPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ColorPreprocessor", "display_name": "Color Pallete", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/T2IAdapter-only", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DensePosePreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"model": [["densepose_r50_fpn_dl.torchscript", "densepose_r101_fpn_dl.torchscript"], {"default": "densepose_r50_fpn_dl.torchscript"}], "cmap": [["Viridis (MagicAnimate)", "Parula (CivitAI)"], {"default": "Viridis (MagicAnimate)"}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["model", "cmap", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "DensePosePreprocessor", "display_name": "DensePose Estimator", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Faces and Poses Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DepthAnythingPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"ckpt_name": [["depth_anything_vitl14.pth", "depth_anything_vitb14.pth", "depth_anything_vits14.pth"], {"default": "depth_anything_vitl14.pth"}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["ckpt_name", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "DepthAnythingPreprocessor", "display_name": "Depth Anything", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Normal and Depth Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "Zoe_DepthAnythingPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"environment": [["indoor", "outdoor"], {"default": "indoor"}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["environment", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "Zoe_DepthAnythingPreprocessor", "display_name": "Zoe Depth Anything", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Normal and Depth Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DepthAnythingV2Preprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"ckpt_name": [["depth_anything_v2_vitg.pth", "depth_anything_v2_vitl.pth", "depth_anything_v2_vitb.pth", "depth_anything_v2_vits.pth"], {"default": "depth_anything_v2_vitl.pth"}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["ckpt_name", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "DepthAnythingV2Preprocessor", "display_name": "Depth Anything V2 - Relative", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Normal and Depth Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DiffusionEdge_Preprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"environment": [["indoor", "urban", "natrual"], {"default": "indoor"}], "patch_batch_size": ["INT", {"default": 4, "min": 1, "max": 16, "step": 1}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["environment", "patch_batch_size", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "DiffusionEdge_Preprocessor", "display_name": "Diffusion Edge (batch size \u2191 => speed \u2191, VRAM \u2191)", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DSINE-NormalMapPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"fov": ["FLOAT", {"default": 60.0, "min": 0, "max": 365.0, "step": 0.01}], "iterations": ["INT", {"default": 5, "min": 1, "max": 20, "step": 1}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["fov", "iterations", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "DSINE-NormalMapPreprocessor", "display_name": "DSINE Normal Map", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Normal and Depth Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DWPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"detect_hand": [["enable", "disable"], {"default": "enable"}], "detect_body": [["enable", "disable"], {"default": "enable"}], "detect_face": [["enable", "disable"], {"default": "enable"}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}], "bbox_detector": [["None", "yolox_l.torchscript.pt", "yolox_l.onnx", "yolo_nas_l_fp16.onnx", "yolo_nas_m_fp16.onnx", "yolo_nas_s_fp16.onnx"], {"default": "yolox_l.onnx"}], "pose_estimator": [["dw-ll_ucoco_384_bs5.torchscript.pt", "dw-ll_ucoco_384.onnx", "dw-ll_ucoco.onnx"], {"default": "dw-ll_ucoco_384_bs5.torchscript.pt"}], "scale_stick_for_xinsr_cn": [["disable", "enable"], {"default": "disable"}]}}, "input_order": {"required": ["image"], "optional": ["detect_hand", "detect_body", "detect_face", "resolution", "bbox_detector", "pose_estimator", "scale_stick_for_xinsr_cn"]}, "is_input_list": false, "output": ["IMAGE", "POSE_KEYPOINT"], "output_is_list": [false, false], "output_name": ["IMAGE", "POSE_KEYPOINT"], "name": "DWPreprocessor", "display_name": "DWPose Estimator", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Faces and Poses Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "AnimalPosePreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"bbox_detector": [["None", "yolox_l.torchscript.pt", "yolox_l.onnx", "yolo_nas_l_fp16.onnx", "yolo_nas_m_fp16.onnx", "yolo_nas_s_fp16.onnx"], {"default": "yolox_l.torchscript.pt"}], "pose_estimator": [["rtmpose-m_ap10k_256_bs5.torchscript.pt", "rtmpose-m_ap10k_256.onnx"], {"default": "rtmpose-m_ap10k_256_bs5.torchscript.pt"}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["bbox_detector", "pose_estimator", "resolution"]}, "is_input_list": false, "output": ["IMAGE", "POSE_KEYPOINT"], "output_is_list": [false, false], "output_name": ["IMAGE", "POSE_KEYPOINT"], "name": "AnimalPosePreprocessor", "display_name": "AnimalPose Estimator (AP10K)", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Faces and Poses Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "HEDPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"safe": [["enable", "disable"], {"default": "enable"}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["safe", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "HEDPreprocessor", "display_name": "HED Soft-Edge Lines", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FakeScribblePreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"safe": [["enable", "disable"], {"default": "enable"}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["safe", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "FakeScribblePreprocessor", "display_name": "Fake Scribble Lines (aka scribble_hed)", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "InpaintPreprocessor": {"input": {"required": {"image": ["IMAGE"], "mask": ["MASK"]}, "optional": {"black_pixel_for_xinsir_cn": ["BOOLEAN", {"default": false}]}}, "input_order": {"required": ["image", "mask"], "optional": ["black_pixel_for_xinsir_cn"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "InpaintPreprocessor", "display_name": "Inpaint Preprocessor", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/others", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LeReS-DepthMapPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"rm_nearest": ["FLOAT", {"default": 0, "min": 0, "max": 100.0, "step": 0.01}], "rm_background": ["FLOAT", {"default": 0, "min": 0, "max": 100.0, "step": 0.01}], "boost": [["disable", "enable"], {"default": "disable"}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["rm_nearest", "rm_background", "boost", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "LeReS-DepthMapPreprocessor", "display_name": "LeReS Depth Map (enable boost for leres++)", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Normal and Depth Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LineArtPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"coarse": [["disable", "enable"], {"default": "disable"}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["coarse", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "LineArtPreprocessor", "display_name": "Realistic Lineart", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "AnimeLineArtPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "AnimeLineArtPreprocessor", "display_name": "Anime Lineart", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LineartStandardPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"guassian_sigma": ["FLOAT", {"default": 6.0, "min": 0, "max": 100.0, "step": 0.01}], "intensity_threshold": ["INT", {"default": 8, "min": 0, "max": 16, "step": 1}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["guassian_sigma", "intensity_threshold", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "LineartStandardPreprocessor", "display_name": "Standard Lineart", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "Manga2Anime_LineArt_Preprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "Manga2Anime_LineArt_Preprocessor", "display_name": "Manga Lineart (aka lineart_anime_denoise)", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "MediaPipe-FaceMeshPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"max_faces": ["INT", {"default": 10, "min": 1, "max": 50, "step": 1}], "min_confidence": ["FLOAT", {"default": 0.5, "min": 0.1, "max": 1, "step": 0.01}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["max_faces", "min_confidence", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "MediaPipe-FaceMeshPreprocessor", "display_name": "MediaPipe Face Mesh", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Faces and Poses Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "MeshGraphormer-DepthMapPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"mask_bbox_padding": ["INT", {"default": 30, "min": 0, "max": 100}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}], "mask_type": [["based_on_depth", "tight_bboxes", "original"], {"default": "based_on_depth"}], "mask_expand": ["INT", {"default": 5, "min": -16384, "max": 16384, "step": 1}], "rand_seed": ["INT", {"default": 88, "min": 0, "max": 18446744073709551615, "step": 1}], "detect_thr": ["FLOAT", {"default": 0.6, "min": 0.1, "max": 1, "step": 0.01}], "presence_thr": ["FLOAT", {"default": 0.6, "min": 0.1, "max": 1, "step": 0.01}]}}, "input_order": {"required": ["image"], "optional": ["mask_bbox_padding", "resolution", "mask_type", "mask_expand", "rand_seed", "detect_thr", "presence_thr"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "INPAINTING_MASK"], "name": "MeshGraphormer-DepthMapPreprocessor", "display_name": "MeshGraphormer Hand Refiner", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Normal and Depth Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "MeshGraphormer+ImpactDetector-DepthMapPreprocessor": {"input": {"required": {"image": ["IMAGE"], "bbox_detector": ["BBOX_DETECTOR"]}, "optional": {"bbox_threshold": ["FLOAT", {"default": 0.5, "min": 0.1, "max": 1, "step": 0.01}], "bbox_dilation": ["INT", {"default": 10, "min": -512, "max": 512, "step": 1}], "bbox_crop_factor": ["FLOAT", {"default": 3.0, "min": 1.0, "max": 10.0, "step": 0.01}], "drop_size": ["INT", {"default": 10, "min": 1, "max": 16384, "step": 1}], "mask_bbox_padding": ["INT", {"default": 30, "min": 0, "max": 100, "step": 1}], "mask_type": [["based_on_depth", "tight_bboxes", "original"], {"default": "based_on_depth"}], "mask_expand": ["INT", {"default": 5, "min": -16384, "max": 16384, "step": 1}], "rand_seed": ["INT", {"default": 88, "min": 0, "max": 18446744073709551615, "step": 1}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image", "bbox_detector"], "optional": ["bbox_threshold", "bbox_dilation", "bbox_crop_factor", "drop_size", "mask_bbox_padding", "mask_type", "mask_expand", "rand_seed", "resolution"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "INPAINTING_MASK"], "name": "MeshGraphormer+ImpactDetector-DepthMapPreprocessor", "display_name": "MeshGraphormer Hand Refiner With External Detector", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Normal and Depth Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "Metric3D-DepthMapPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"backbone": [["vit-small", "vit-large", "vit-giant2"], {"default": "vit-small"}], "fx": ["INT", {"default": 1000, "min": 1, "max": 16384, "step": 1}], "fy": ["INT", {"default": 1000, "min": 1, "max": 16384, "step": 1}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["backbone", "fx", "fy", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "Metric3D-DepthMapPreprocessor", "display_name": "Metric3D Depth Map", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Normal and Depth Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "Metric3D-NormalMapPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"backbone": [["vit-small", "vit-large", "vit-giant2"], {"default": "vit-small"}], "fx": ["INT", {"default": 1000, "min": 1, "max": 16384, "step": 1}], "fy": ["INT", {"default": 1000, "min": 1, "max": 16384, "step": 1}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["backbone", "fx", "fy", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "Metric3D-NormalMapPreprocessor", "display_name": "Metric3D Normal Map", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Normal and Depth Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "MiDaS-NormalMapPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"a": ["FLOAT", {"default": 6.283185307179586, "min": 0.0, "max": 15.707963267948966, "step": 0.01}], "bg_threshold": ["FLOAT", {"default": 0.1, "min": 0, "max": 1, "step": 0.01}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["a", "bg_threshold", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "MiDaS-NormalMapPreprocessor", "display_name": "MiDaS Normal Map", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Normal and Depth Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "MiDaS-DepthMapPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"a": ["FLOAT", {"default": 6.283185307179586, "min": 0.0, "max": 15.707963267948966, "step": 0.01}], "bg_threshold": ["FLOAT", {"default": 0.1, "min": 0, "max": 1, "step": 0.01}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["a", "bg_threshold", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "MiDaS-DepthMapPreprocessor", "display_name": "MiDaS Depth Map", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Normal and Depth Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "M-LSDPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"score_threshold": ["FLOAT", {"default": 0.1, "min": 0.01, "max": 2.0, "step": 0.01}], "dist_threshold": ["FLOAT", {"default": 0.1, "min": 0.01, "max": 20.0, "step": 0.01}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["score_threshold", "dist_threshold", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "M-LSDPreprocessor", "display_name": "M-LSD Lines", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "BAE-NormalMapPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "BAE-NormalMapPreprocessor", "display_name": "BAE Normal Map", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Normal and Depth Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "OneFormer-COCO-SemSegPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "OneFormer-COCO-SemSegPreprocessor", "display_name": "OneFormer COCO Segmentor", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Semantic Segmentation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "OneFormer-ADE20K-SemSegPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "OneFormer-ADE20K-SemSegPreprocessor", "display_name": "OneFormer ADE20K Segmentor", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Semantic Segmentation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "OpenposePreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"detect_hand": [["enable", "disable"], {"default": "enable"}], "detect_body": [["enable", "disable"], {"default": "enable"}], "detect_face": [["enable", "disable"], {"default": "enable"}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}], "scale_stick_for_xinsr_cn": [["disable", "enable"], {"default": "disable"}]}}, "input_order": {"required": ["image"], "optional": ["detect_hand", "detect_body", "detect_face", "resolution", "scale_stick_for_xinsr_cn"]}, "is_input_list": false, "output": ["IMAGE", "POSE_KEYPOINT"], "output_is_list": [false, false], "output_name": ["IMAGE", "POSE_KEYPOINT"], "name": "OpenposePreprocessor", "display_name": "OpenPose Pose", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Faces and Poses Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PiDiNetPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"safe": [["enable", "disable"], {"default": "enable"}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["safe", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "PiDiNetPreprocessor", "display_name": "PiDiNet Soft-Edge Lines", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SavePoseKpsAsJsonFile": {"input": {"required": {"pose_kps": ["POSE_KEYPOINT"], "filename_prefix": ["STRING", {"default": "PoseKeypoint"}]}}, "input_order": {"required": ["pose_kps", "filename_prefix"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "SavePoseKpsAsJsonFile", "display_name": "Save Pose Keypoints", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Pose Keypoint Postprocess", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "FacialPartColoringFromPoseKps": {"input": {"required": {"pose_kps": ["POSE_KEYPOINT"], "mode": [["point", "polygon"], {"default": "polygon"}], "skin": ["STRING", {"default": "rgb(0, 153, 255)", "multiline": false}], "left_eye": ["STRING", {"default": "rgb(0, 204, 153)", "multiline": false}], "right_eye": ["STRING", {"default": "rgb(255, 153, 0)", "multiline": false}], "nose": ["STRING", {"default": "rgb(255, 102, 255)", "multiline": false}], "upper_lip": ["STRING", {"default": "rgb(102, 0, 51)", "multiline": false}], "inner_mouth": ["STRING", {"default": "rgb(255, 204, 255)", "multiline": false}], "lower_lip": ["STRING", {"default": "rgb(255, 0, 102)", "multiline": false}]}}, "input_order": {"required": ["pose_kps", "mode", "skin", "left_eye", "right_eye", "nose", "upper_lip", "inner_mouth", "lower_lip"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "FacialPartColoringFromPoseKps", "display_name": "Colorize Facial Parts from PoseKPS", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Pose Keypoint Postprocess", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "UpperBodyTrackingFromPoseKps": {"input": {"required": {"pose_kps": ["POSE_KEYPOINT"], "id_include": ["STRING", {"default": "", "multiline": false}], "Head_width_height": ["STRING", {"default": "256, 256", "multiline": false}], "Neck_width_height": ["STRING", {"default": "100, 100", "multiline": false}], "Shoulder_width_height": ["STRING", {"default": "", "multiline": false}], "Torso_width_height": ["STRING", {"default": "350, 450", "multiline": false}], "RArm_width_height": ["STRING", {"default": "128, 256", "multiline": false}], "RForearm_width_height": ["STRING", {"default": "128, 256", "multiline": false}], "LArm_width_height": ["STRING", {"default": "128, 256", "multiline": false}], "LForearm_width_height": ["STRING", {"default": "128, 256", "multiline": false}]}}, "input_order": {"required": ["pose_kps", "id_include", "Head_width_height", "Neck_width_height", "Shoulder_width_height", "Torso_width_height", "RArm_width_height", "RForearm_width_height", "LArm_width_height", "LForearm_width_height"]}, "is_input_list": false, "output": ["TRACKING", "STRING"], "output_is_list": [false, false], "output_name": ["tracking", "prompt"], "name": "UpperBodyTrackingFromPoseKps", "display_name": "Upper Body Tracking From PoseKps (InstanceDiffusion)", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Pose Keypoint Postprocess", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "RenderPeopleKps": {"input": {"required": {"kps": ["POSE_KEYPOINT"], "render_body": ["BOOLEAN", {"default": true}], "render_hand": ["BOOLEAN", {"default": true}], "render_face": ["BOOLEAN", {"default": true}]}}, "input_order": {"required": ["kps", "render_body", "render_hand", "render_face"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "RenderPeopleKps", "display_name": "Render Pose JSON (Human)", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Pose Keypoint Postprocess", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "RenderAnimalKps": {"input": {"required": {"kps": ["POSE_KEYPOINT"]}}, "input_order": {"required": ["kps"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "RenderAnimalKps", "display_name": "Render Pose JSON (Animal)", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Pose Keypoint Postprocess", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PyraCannyPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"low_threshold": ["INT", {"default": 64, "min": 0, "max": 255, "step": 1}], "high_threshold": ["INT", {"default": 128, "min": 0, "max": 255, "step": 1}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["low_threshold", "high_threshold", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "PyraCannyPreprocessor", "display_name": "PyraCanny", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImageLuminanceDetector": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"gamma_correction": ["FLOAT", {"default": 1.0, "min": 0.1, "max": 2.0, "step": 0.01}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["gamma_correction", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageLuminanceDetector", "display_name": "Image Luminance", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Recolor", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImageIntensityDetector": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"gamma_correction": ["FLOAT", {"default": 1.0, "min": 0.1, "max": 2.0, "step": 0.01}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["gamma_correction", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageIntensityDetector", "display_name": "Image Intensity", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Recolor", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ScribblePreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ScribblePreprocessor", "display_name": "Scribble Lines", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "Scribble_XDoG_Preprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"threshold": ["INT", {"default": 32, "min": 1, "max": 64, "step": 1}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["threshold", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "Scribble_XDoG_Preprocessor", "display_name": "Scribble XDoG Lines", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "Scribble_PiDiNet_Preprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"safe": [["enable", "disable"]], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["safe", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "Scribble_PiDiNet_Preprocessor", "display_name": "Scribble PiDiNet Lines", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SAMPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "SAMPreprocessor", "display_name": "SAM Segmentor", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/others", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ShufflePreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["image"], "optional": ["resolution", "seed"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ShufflePreprocessor", "display_name": "Content Shuffle", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/T2IAdapter-only", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "TEEDPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"safe_steps": ["INT", {"default": 2, "min": 0, "max": 10, "step": 1}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["safe_steps", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "TEEDPreprocessor", "display_name": "TEEDPreprocessor", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Line Extractors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "TilePreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"pyrUp_iters": ["INT", {"default": 3, "min": 1, "max": 10, "step": 1}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["pyrUp_iters", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "TilePreprocessor", "display_name": "Tile", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/tile", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "TTPlanet_TileGF_Preprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"scale_factor": ["FLOAT", {"default": 1.0, "min": 1.0, "max": 8.0, "step": 0.01}], "blur_strength": ["FLOAT", {"default": 2.0, "min": 1.0, "max": 10.0, "step": 0.01}], "radius": ["INT", {"default": 7, "min": 1, "max": 20, "step": 1}], "eps": ["FLOAT", {"default": 0.01, "min": 0.001, "max": 0.1, "step": 0.001}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["scale_factor", "blur_strength", "radius", "eps", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "TTPlanet_TileGF_Preprocessor", "display_name": "TTPlanet Tile GuidedFilter", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/tile", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "TTPlanet_TileSimple_Preprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"scale_factor": ["FLOAT", {"default": 1.0, "min": 1.0, "max": 8.0, "step": 0.01}], "blur_strength": ["FLOAT", {"default": 2.0, "min": 1.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["image"], "optional": ["scale_factor", "blur_strength"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "TTPlanet_TileSimple_Preprocessor", "display_name": "TTPlanet Tile Simple", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/tile", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "UniFormer-SemSegPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "UniFormer-SemSegPreprocessor", "display_name": "UniFormer Segmentor", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Semantic Segmentation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SemSegPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "SemSegPreprocessor", "display_name": "Semantic Segmentor (legacy, alias for UniFormer)", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Semantic Segmentation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "Unimatch_OptFlowPreprocessor": {"input": {"required": {"image": ["IMAGE"], "ckpt_name": [["gmflow-scale1-mixdata.pth", "gmflow-scale2-mixdata.pth", "gmflow-scale2-regrefine6-mixdata.pth"], {"default": "gmflow-scale2-regrefine6-mixdata.pth"}], "backward_flow": ["BOOLEAN", {"default": false}], "bidirectional_flow": ["BOOLEAN", {"default": false}]}}, "input_order": {"required": ["image", "ckpt_name", "backward_flow", "bidirectional_flow"]}, "is_input_list": false, "output": ["OPTICAL_FLOW", "IMAGE"], "output_is_list": [false, false], "output_name": ["OPTICAL_FLOW", "PREVIEW_IMAGE"], "name": "Unimatch_OptFlowPreprocessor", "display_name": "Unimatch Optical Flow", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Optical Flow", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "MaskOptFlow": {"input": {"required": {"optical_flow": ["OPTICAL_FLOW"], "mask": ["MASK"]}}, "input_order": {"required": ["optical_flow", "mask"]}, "is_input_list": false, "output": ["OPTICAL_FLOW", "IMAGE"], "output_is_list": [false, false], "output_name": ["OPTICAL_FLOW", "PREVIEW_IMAGE"], "name": "MaskOptFlow", "display_name": "Mask Optical Flow (DragNUWA)", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Optical Flow", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "Zoe-DepthMapPreprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "Zoe-DepthMapPreprocessor", "display_name": "Zoe Depth Map", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors/Normal and Depth Estimators", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "AIO_Preprocessor": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"preprocessor": [["none", "AnimeFace_SemSegPreprocessor", "AnyLineArtPreprocessor_aux", "BinaryPreprocessor", "CannyEdgePreprocessor", "ColorPreprocessor", "DensePosePreprocessor", "DepthAnythingPreprocessor", "Zoe_DepthAnythingPreprocessor", "DepthAnythingV2Preprocessor", "DSINE-NormalMapPreprocessor", "DWPreprocessor", "AnimalPosePreprocessor", "HEDPreprocessor", "FakeScribblePreprocessor", "LeReS-DepthMapPreprocessor", "LineArtPreprocessor", "AnimeLineArtPreprocessor", "LineartStandardPreprocessor", "Manga2Anime_LineArt_Preprocessor", "MediaPipe-FaceMeshPreprocessor", "MeshGraphormer-DepthMapPreprocessor", "Metric3D-DepthMapPreprocessor", "Metric3D-NormalMapPreprocessor", "MiDaS-NormalMapPreprocessor", "MiDaS-DepthMapPreprocessor", "M-LSDPreprocessor", "BAE-NormalMapPreprocessor", "OneFormer-COCO-SemSegPreprocessor", "OneFormer-ADE20K-SemSegPreprocessor", "OpenposePreprocessor", "PiDiNetPreprocessor", "PyraCannyPreprocessor", "ImageLuminanceDetector", "ImageIntensityDetector", "ScribblePreprocessor", "Scribble_XDoG_Preprocessor", "Scribble_PiDiNet_Preprocessor", "SAMPreprocessor", "ShufflePreprocessor", "TEEDPreprocessor", "TilePreprocessor", "TTPlanet_TileGF_Preprocessor", "TTPlanet_TileSimple_Preprocessor", "UniFormer-SemSegPreprocessor", "SemSegPreprocessor", "Zoe-DepthMapPreprocessor"], {"default": "none"}], "resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["preprocessor", "resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "AIO_Preprocessor", "display_name": "AIO Aux Preprocessor", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ControlNetPreprocessorSelector": {"input": {"required": {"preprocessor": [["none", "AnimeFace_SemSegPreprocessor", "AnyLineArtPreprocessor_aux", "BinaryPreprocessor", "CannyEdgePreprocessor", "ColorPreprocessor", "DensePosePreprocessor", "DepthAnythingPreprocessor", "Zoe_DepthAnythingPreprocessor", "DepthAnythingV2Preprocessor", "DSINE-NormalMapPreprocessor", "DWPreprocessor", "AnimalPosePreprocessor", "HEDPreprocessor", "FakeScribblePreprocessor", "LeReS-DepthMapPreprocessor", "LineArtPreprocessor", "AnimeLineArtPreprocessor", "LineartStandardPreprocessor", "Manga2Anime_LineArt_Preprocessor", "MediaPipe-FaceMeshPreprocessor", "MeshGraphormer-DepthMapPreprocessor", "Metric3D-DepthMapPreprocessor", "Metric3D-NormalMapPreprocessor", "MiDaS-NormalMapPreprocessor", "MiDaS-DepthMapPreprocessor", "M-LSDPreprocessor", "BAE-NormalMapPreprocessor", "OneFormer-COCO-SemSegPreprocessor", "OneFormer-ADE20K-SemSegPreprocessor", "OpenposePreprocessor", "PiDiNetPreprocessor", "PyraCannyPreprocessor", "ImageLuminanceDetector", "ImageIntensityDetector", "ScribblePreprocessor", "Scribble_XDoG_Preprocessor", "Scribble_PiDiNet_Preprocessor", "SAMPreprocessor", "ShufflePreprocessor", "TEEDPreprocessor", "TilePreprocessor", "TTPlanet_TileGF_Preprocessor", "TTPlanet_TileSimple_Preprocessor", "UniFormer-SemSegPreprocessor", "SemSegPreprocessor", "Zoe-DepthMapPreprocessor"]]}}, "input_order": {"required": ["preprocessor"]}, "is_input_list": false, "output": [["none", "AnimeFace_SemSegPreprocessor", "AnyLineArtPreprocessor_aux", "BinaryPreprocessor", "CannyEdgePreprocessor", "ColorPreprocessor", "DensePosePreprocessor", "DepthAnythingPreprocessor", "Zoe_DepthAnythingPreprocessor", "DepthAnythingV2Preprocessor", "DSINE-NormalMapPreprocessor", "DWPreprocessor", "AnimalPosePreprocessor", "HEDPreprocessor", "FakeScribblePreprocessor", "LeReS-DepthMapPreprocessor", "LineArtPreprocessor", "AnimeLineArtPreprocessor", "LineartStandardPreprocessor", "Manga2Anime_LineArt_Preprocessor", "MediaPipe-FaceMeshPreprocessor", "MeshGraphormer-DepthMapPreprocessor", "Metric3D-DepthMapPreprocessor", "Metric3D-NormalMapPreprocessor", "MiDaS-NormalMapPreprocessor", "MiDaS-DepthMapPreprocessor", "M-LSDPreprocessor", "BAE-NormalMapPreprocessor", "OneFormer-COCO-SemSegPreprocessor", "OneFormer-ADE20K-SemSegPreprocessor", "OpenposePreprocessor", "PiDiNetPreprocessor", "PyraCannyPreprocessor", "ImageLuminanceDetector", "ImageIntensityDetector", "ScribblePreprocessor", "Scribble_XDoG_Preprocessor", "Scribble_PiDiNet_Preprocessor", "SAMPreprocessor", "ShufflePreprocessor", "TEEDPreprocessor", "TilePreprocessor", "TTPlanet_TileGF_Preprocessor", "TTPlanet_TileSimple_Preprocessor", "UniFormer-SemSegPreprocessor", "SemSegPreprocessor", "Zoe-DepthMapPreprocessor"]], "output_is_list": [false], "output_name": ["preprocessor"], "name": "ControlNetPreprocessorSelector", "display_name": "Preprocessor Selector", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PixelPerfectResolution": {"input": {"required": {"original_image": ["IMAGE"], "image_gen_width": ["INT", {"default": 512, "min": 64, "max": 8192, "step": 8}], "image_gen_height": ["INT", {"default": 512, "min": 64, "max": 8192, "step": 8}], "resize_mode": [["Just Resize", "Crop and Resize", "Resize and Fill"], {"default": "Just Resize"}]}}, "input_order": {"required": ["original_image", "image_gen_width", "image_gen_height", "resize_mode"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["RESOLUTION (INT)"], "name": "PixelPerfectResolution", "display_name": "Pixel Perfect Resolution", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImageGenResolutionFromImage": {"input": {"required": {"image": ["IMAGE"]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["INT", "INT"], "output_is_list": [false, false], "output_name": ["IMAGE_GEN_WIDTH (INT)", "IMAGE_GEN_HEIGHT (INT)"], "name": "ImageGenResolutionFromImage", "display_name": "Generation Resolution From Image", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImageGenResolutionFromLatent": {"input": {"required": {"latent": ["LATENT"]}}, "input_order": {"required": ["latent"]}, "is_input_list": false, "output": ["INT", "INT"], "output_is_list": [false, false], "output_name": ["IMAGE_GEN_WIDTH (INT)", "IMAGE_GEN_HEIGHT (INT)"], "name": "ImageGenResolutionFromLatent", "display_name": "Generation Resolution From Latent", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "HintImageEnchance": {"input": {"required": {"hint_image": ["IMAGE"], "image_gen_width": ["INT", {"default": 512, "min": 64, "max": 8192, "step": 8}], "image_gen_height": ["INT", {"default": 512, "min": 64, "max": 8192, "step": 8}], "resize_mode": [["Just Resize", "Crop and Resize", "Resize and Fill"], {"default": "Just Resize"}]}}, "input_order": {"required": ["hint_image", "image_gen_width", "image_gen_height", "resize_mode"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "HintImageEnchance", "display_name": "Enchance And Resize Hint Images", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ExecuteAllControlNetPreprocessors": {"input": {"required": {"image": ["IMAGE"]}, "optional": {"resolution": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 64}]}}, "input_order": {"required": ["image"], "optional": ["resolution"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ExecuteAllControlNetPreprocessors", "display_name": "Execute All ControlNet Preprocessors", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ControlNetAuxSimpleAddText": {"input": {"required": {"image": ["IMAGE"], "text": ["STRING", {"default": "", "multiline": false}]}}, "input_order": {"required": ["image", "text"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ControlNetAuxSimpleAddText", "display_name": "ControlNetAuxSimpleAddText", "description": "", "python_module": "custom_nodes.comfyui_controlnet_aux", "category": "ControlNet Preprocessors", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapter": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 3, "step": 0.05}], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "weight_type": [["standard", "prompt is more important", "style transfer"]]}, "optional": {"attn_mask": ["MASK"]}}, "input_order": {"required": ["model", "ipadapter", "image", "weight", "start_at", "end_at", "weight_type"], "optional": ["attn_mask"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "IPAdapter", "display_name": "IPAdapter", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterAdvanced": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 5, "step": 0.05}], "weight_type": [["linear", "ease in", "ease out", "ease in-out", "reverse in-out", "weak input", "weak output", "weak middle", "strong middle", "style transfer", "composition", "strong style transfer", "style and composition", "style transfer precise", "composition precise"]], "combine_embeds": [["concat", "add", "subtract", "average", "norm average"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]]}, "optional": {"image_negative": ["IMAGE"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"]}}, "input_order": {"required": ["model", "ipadapter", "image", "weight", "weight_type", "combine_embeds", "start_at", "end_at", "embeds_scaling"], "optional": ["image_negative", "attn_mask", "clip_vision"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "IPAdapterAdvanced", "display_name": "IPAdapter Advanced", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterBatch": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 5, "step": 0.05}], "weight_type": [["linear", "ease in", "ease out", "ease in-out", "reverse in-out", "weak input", "weak output", "weak middle", "strong middle", "style transfer", "composition", "strong style transfer", "style and composition", "style transfer precise", "composition precise"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]], "encode_batch_size": ["INT", {"default": 0, "min": 0, "max": 4096}]}, "optional": {"image_negative": ["IMAGE"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"]}}, "input_order": {"required": ["model", "ipadapter", "image", "weight", "weight_type", "start_at", "end_at", "embeds_scaling", "encode_batch_size"], "optional": ["image_negative", "attn_mask", "clip_vision"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "IPAdapterBatch", "display_name": "IPAdapter Batch (Adv.)", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterFaceID": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 3, "step": 0.05}], "weight_faceidv2": ["FLOAT", {"default": 1.0, "min": -1, "max": 5.0, "step": 0.05}], "weight_type": [["linear", "ease in", "ease out", "ease in-out", "reverse in-out", "weak input", "weak output", "weak middle", "strong middle", "style transfer", "composition", "strong style transfer", "style and composition", "style transfer precise", "composition precise"]], "combine_embeds": [["concat", "add", "subtract", "average", "norm average"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]]}, "optional": {"image_negative": ["IMAGE"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"], "insightface": ["INSIGHTFACE"]}}, "input_order": {"required": ["model", "ipadapter", "image", "weight", "weight_faceidv2", "weight_type", "combine_embeds", "start_at", "end_at", "embeds_scaling"], "optional": ["image_negative", "attn_mask", "clip_vision", "insightface"]}, "is_input_list": false, "output": ["MODEL", "IMAGE"], "output_is_list": [false, false], "output_name": ["MODEL", "face_image"], "name": "IPAdapterFaceID", "display_name": "IPAdapter FaceID", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/faceid", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterFaceIDKolors": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 3, "step": 0.05}], "weight_faceidv2": ["FLOAT", {"default": 1.0, "min": -1, "max": 5.0, "step": 0.05}], "weight_kolors": ["FLOAT", {"default": 1.0, "min": -1, "max": 5.0, "step": 0.05}], "weight_type": [["linear", "ease in", "ease out", "ease in-out", "reverse in-out", "weak input", "weak output", "weak middle", "strong middle", "style transfer", "composition", "strong style transfer", "style and composition", "style transfer precise", "composition precise"]], "combine_embeds": [["concat", "add", "subtract", "average", "norm average"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]]}, "optional": {"image_negative": ["IMAGE"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"], "insightface": ["INSIGHTFACE"]}}, "input_order": {"required": ["model", "ipadapter", "image", "weight", "weight_faceidv2", "weight_kolors", "weight_type", "combine_embeds", "start_at", "end_at", "embeds_scaling"], "optional": ["image_negative", "attn_mask", "clip_vision", "insightface"]}, "is_input_list": false, "output": ["MODEL", "IMAGE"], "output_is_list": [false, false], "output_name": ["MODEL", "face_image"], "name": "IPAdapterFaceIDKolors", "display_name": "IPAdapter FaceID Kolors", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/faceid", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAAdapterFaceIDBatch": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 3, "step": 0.05}], "weight_faceidv2": ["FLOAT", {"default": 1.0, "min": -1, "max": 5.0, "step": 0.05}], "weight_type": [["linear", "ease in", "ease out", "ease in-out", "reverse in-out", "weak input", "weak output", "weak middle", "strong middle", "style transfer", "composition", "strong style transfer", "style and composition", "style transfer precise", "composition precise"]], "combine_embeds": [["concat", "add", "subtract", "average", "norm average"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]]}, "optional": {"image_negative": ["IMAGE"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"], "insightface": ["INSIGHTFACE"]}}, "input_order": {"required": ["model", "ipadapter", "image", "weight", "weight_faceidv2", "weight_type", "combine_embeds", "start_at", "end_at", "embeds_scaling"], "optional": ["image_negative", "attn_mask", "clip_vision", "insightface"]}, "is_input_list": false, "output": ["MODEL", "IMAGE"], "output_is_list": [false, false], "output_name": ["MODEL", "face_image"], "name": "IPAAdapterFaceIDBatch", "display_name": "IPAdapter FaceID Batch", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/faceid", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterTiled": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 3, "step": 0.05}], "weight_type": [["linear", "ease in", "ease out", "ease in-out", "reverse in-out", "weak input", "weak output", "weak middle", "strong middle", "style transfer", "composition", "strong style transfer", "style and composition", "style transfer precise", "composition precise"]], "combine_embeds": [["concat", "add", "subtract", "average", "norm average"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "sharpening": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.05}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]]}, "optional": {"image_negative": ["IMAGE"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"]}}, "input_order": {"required": ["model", "ipadapter", "image", "weight", "weight_type", "combine_embeds", "start_at", "end_at", "sharpening", "embeds_scaling"], "optional": ["image_negative", "attn_mask", "clip_vision"]}, "is_input_list": false, "output": ["MODEL", "IMAGE", "MASK"], "output_is_list": [false, false, false], "output_name": ["MODEL", "tiles", "masks"], "name": "IPAdapterTiled", "display_name": "IPAdapter Tiled", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/tiled", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterTiledBatch": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 3, "step": 0.05}], "weight_type": [["linear", "ease in", "ease out", "ease in-out", "reverse in-out", "weak input", "weak output", "weak middle", "strong middle", "style transfer", "composition", "strong style transfer", "style and composition", "style transfer precise", "composition precise"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "sharpening": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.05}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]], "encode_batch_size": ["INT", {"default": 0, "min": 0, "max": 4096}]}, "optional": {"image_negative": ["IMAGE"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"]}}, "input_order": {"required": ["model", "ipadapter", "image", "weight", "weight_type", "start_at", "end_at", "sharpening", "embeds_scaling", "encode_batch_size"], "optional": ["image_negative", "attn_mask", "clip_vision"]}, "is_input_list": false, "output": ["MODEL", "IMAGE", "MASK"], "output_is_list": [false, false, false], "output_name": ["MODEL", "tiles", "masks"], "name": "IPAdapterTiledBatch", "display_name": "IPAdapter Tiled Batch", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/tiled", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterEmbeds": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "pos_embed": ["EMBEDS"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 3, "step": 0.05}], "weight_type": [["linear", "ease in", "ease out", "ease in-out", "reverse in-out", "weak input", "weak output", "weak middle", "strong middle", "style transfer", "composition", "strong style transfer", "style and composition", "style transfer precise", "composition precise"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]]}, "optional": {"neg_embed": ["EMBEDS"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"]}}, "input_order": {"required": ["model", "ipadapter", "pos_embed", "weight", "weight_type", "start_at", "end_at", "embeds_scaling"], "optional": ["neg_embed", "attn_mask", "clip_vision"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "IPAdapterEmbeds", "display_name": "IPAdapter Embeds", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/embeds", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterEmbedsBatch": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "pos_embed": ["EMBEDS"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 3, "step": 0.05}], "weight_type": [["linear", "ease in", "ease out", "ease in-out", "reverse in-out", "weak input", "weak output", "weak middle", "strong middle", "style transfer", "composition", "strong style transfer", "style and composition", "style transfer precise", "composition precise"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]]}, "optional": {"neg_embed": ["EMBEDS"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"]}}, "input_order": {"required": ["model", "ipadapter", "pos_embed", "weight", "weight_type", "start_at", "end_at", "embeds_scaling"], "optional": ["neg_embed", "attn_mask", "clip_vision"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "IPAdapterEmbedsBatch", "display_name": "IPAdapter Embeds Batch", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/embeds", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterStyleComposition": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image_style": ["IMAGE"], "image_composition": ["IMAGE"], "weight_style": ["FLOAT", {"default": 1.0, "min": -1, "max": 5, "step": 0.05}], "weight_composition": ["FLOAT", {"default": 1.0, "min": -1, "max": 5, "step": 0.05}], "expand_style": ["BOOLEAN", {"default": false}], "combine_embeds": [["concat", "add", "subtract", "average", "norm average"], {"default": "average"}], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]]}, "optional": {"image_negative": ["IMAGE"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"]}}, "input_order": {"required": ["model", "ipadapter", "image_style", "image_composition", "weight_style", "weight_composition", "expand_style", "combine_embeds", "start_at", "end_at", "embeds_scaling"], "optional": ["image_negative", "attn_mask", "clip_vision"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "IPAdapterStyleComposition", "display_name": "IPAdapter Style & Composition SDXL", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/style_composition", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterStyleCompositionBatch": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image_style": ["IMAGE"], "image_composition": ["IMAGE"], "weight_style": ["FLOAT", {"default": 1.0, "min": -1, "max": 5, "step": 0.05}], "weight_composition": ["FLOAT", {"default": 1.0, "min": -1, "max": 5, "step": 0.05}], "expand_style": ["BOOLEAN", {"default": false}], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]]}, "optional": {"image_negative": ["IMAGE"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"]}}, "input_order": {"required": ["model", "ipadapter", "image_style", "image_composition", "weight_style", "weight_composition", "expand_style", "start_at", "end_at", "embeds_scaling"], "optional": ["image_negative", "attn_mask", "clip_vision"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "IPAdapterStyleCompositionBatch", "display_name": "IPAdapter Style & Composition Batch SDXL", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/style_composition", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterMS": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 5, "step": 0.05}], "weight_faceidv2": ["FLOAT", {"default": 1.0, "min": -1, "max": 5.0, "step": 0.05}], "weight_type": [["linear", "ease in", "ease out", "ease in-out", "reverse in-out", "weak input", "weak output", "weak middle", "strong middle", "style transfer", "composition", "strong style transfer", "style and composition", "style transfer precise", "composition precise"]], "combine_embeds": [["concat", "add", "subtract", "average", "norm average"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]], "layer_weights": ["STRING", {"default": "", "multiline": true}]}, "optional": {"image_negative": ["IMAGE"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"], "insightface": ["INSIGHTFACE"]}}, "input_order": {"required": ["model", "ipadapter", "image", "weight", "weight_faceidv2", "weight_type", "combine_embeds", "start_at", "end_at", "embeds_scaling", "layer_weights"], "optional": ["image_negative", "attn_mask", "clip_vision", "insightface"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "IPAdapterMS", "display_name": "IPAdapter Mad Scientist", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/dev", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterClipVisionEnhancer": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 5, "step": 0.05}], "weight_type": [["linear", "ease in", "ease out", "ease in-out", "reverse in-out", "weak input", "weak output", "weak middle", "strong middle", "style transfer", "composition", "strong style transfer", "style and composition", "style transfer precise", "composition precise"]], "combine_embeds": [["concat", "add", "subtract", "average", "norm average"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]], "enhance_tiles": ["INT", {"default": 2, "min": 1, "max": 16}], "enhance_ratio": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.05}]}, "optional": {"image_negative": ["IMAGE"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"]}}, "input_order": {"required": ["model", "ipadapter", "image", "weight", "weight_type", "combine_embeds", "start_at", "end_at", "embeds_scaling", "enhance_tiles", "enhance_ratio"], "optional": ["image_negative", "attn_mask", "clip_vision"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "IPAdapterClipVisionEnhancer", "display_name": "IPAdapter ClipVision Enhancer", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/dev", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterClipVisionEnhancerBatch": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 5, "step": 0.05}], "weight_type": [["linear", "ease in", "ease out", "ease in-out", "reverse in-out", "weak input", "weak output", "weak middle", "strong middle", "style transfer", "composition", "strong style transfer", "style and composition", "style transfer precise", "composition precise"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]], "enhance_tiles": ["INT", {"default": 2, "min": 1, "max": 16}], "enhance_ratio": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.05}], "encode_batch_size": ["INT", {"default": 0, "min": 0, "max": 4096}]}, "optional": {"image_negative": ["IMAGE"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"]}}, "input_order": {"required": ["model", "ipadapter", "image", "weight", "weight_type", "start_at", "end_at", "embeds_scaling", "enhance_tiles", "enhance_ratio", "encode_batch_size"], "optional": ["image_negative", "attn_mask", "clip_vision"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "IPAdapterClipVisionEnhancerBatch", "display_name": "IPAdapter ClipVision Enhancer Batch", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/dev", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterFromParams": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "ipadapter_params": ["IPADAPTER_PARAMS"], "combine_embeds": [["concat", "add", "subtract", "average", "norm average"]], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]]}, "optional": {"image_negative": ["IMAGE"], "clip_vision": ["CLIP_VISION"]}}, "input_order": {"required": ["model", "ipadapter", "ipadapter_params", "combine_embeds", "embeds_scaling"], "optional": ["image_negative", "clip_vision"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "IPAdapterFromParams", "display_name": "IPAdapter from Params", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/params", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterPreciseStyleTransfer": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 5, "step": 0.05}], "style_boost": ["FLOAT", {"default": 1.0, "min": -5, "max": 5, "step": 0.05}], "combine_embeds": [["concat", "add", "subtract", "average", "norm average"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]]}, "optional": {"image_negative": ["IMAGE"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"]}}, "input_order": {"required": ["model", "ipadapter", "image", "weight", "style_boost", "combine_embeds", "start_at", "end_at", "embeds_scaling"], "optional": ["image_negative", "attn_mask", "clip_vision"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "IPAdapterPreciseStyleTransfer", "display_name": "IPAdapter Precise Style Transfer", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterPreciseStyleTransferBatch": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 5, "step": 0.05}], "style_boost": ["FLOAT", {"default": 1.0, "min": -5, "max": 5, "step": 0.05}], "combine_embeds": [["concat", "add", "subtract", "average", "norm average"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]]}, "optional": {"image_negative": ["IMAGE"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"]}}, "input_order": {"required": ["model", "ipadapter", "image", "weight", "style_boost", "combine_embeds", "start_at", "end_at", "embeds_scaling"], "optional": ["image_negative", "attn_mask", "clip_vision"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "IPAdapterPreciseStyleTransferBatch", "display_name": "IPAdapter Precise Style Transfer Batch", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterPreciseComposition": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 5, "step": 0.05}], "composition_boost": ["FLOAT", {"default": 0.0, "min": -5, "max": 5, "step": 0.05}], "combine_embeds": [["concat", "add", "subtract", "average", "norm average"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]]}, "optional": {"image_negative": ["IMAGE"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"]}}, "input_order": {"required": ["model", "ipadapter", "image", "weight", "composition_boost", "combine_embeds", "start_at", "end_at", "embeds_scaling"], "optional": ["image_negative", "attn_mask", "clip_vision"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "IPAdapterPreciseComposition", "display_name": "IPAdapter Precise Composition", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterPreciseCompositionBatch": {"input": {"required": {"model": ["MODEL"], "ipadapter": ["IPADAPTER"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1, "max": 5, "step": 0.05}], "composition_boost": ["FLOAT", {"default": 0.0, "min": -5, "max": 5, "step": 0.05}], "combine_embeds": [["concat", "add", "subtract", "average", "norm average"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "embeds_scaling": [["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"]]}, "optional": {"image_negative": ["IMAGE"], "attn_mask": ["MASK"], "clip_vision": ["CLIP_VISION"]}}, "input_order": {"required": ["model", "ipadapter", "image", "weight", "composition_boost", "combine_embeds", "start_at", "end_at", "embeds_scaling"], "optional": ["image_negative", "attn_mask", "clip_vision"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "IPAdapterPreciseCompositionBatch", "display_name": "IPAdapter Precise Composition Batch", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterUnifiedLoader": {"input": {"required": {"model": ["MODEL"], "preset": [["LIGHT - SD1.5 only (low strength)", "STANDARD (medium strength)", "VIT-G (medium strength)", "PLUS (high strength)", "PLUS FACE (portraits)", "FULL FACE - SD1.5 only (portraits stronger)"]]}, "optional": {"ipadapter": ["IPADAPTER"]}}, "input_order": {"required": ["model", "preset"], "optional": ["ipadapter"]}, "is_input_list": false, "output": ["MODEL", "IPADAPTER"], "output_is_list": [false, false], "output_name": ["model", "ipadapter"], "name": "IPAdapterUnifiedLoader", "display_name": "IPAdapter Unified Loader", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterUnifiedLoaderFaceID": {"input": {"required": {"model": ["MODEL"], "preset": [["FACEID", "FACEID PLUS - SD1.5 only", "FACEID PLUS V2", "FACEID PORTRAIT (style transfer)", "FACEID PORTRAIT UNNORM - SDXL only (strong)"]], "lora_strength": ["FLOAT", {"default": 0.6, "min": 0, "max": 1, "step": 0.01}], "provider": [["CPU", "CUDA", "ROCM", "DirectML", "OpenVINO", "CoreML"]]}, "optional": {"ipadapter": ["IPADAPTER"]}}, "input_order": {"required": ["model", "preset", "lora_strength", "provider"], "optional": ["ipadapter"]}, "is_input_list": false, "output": ["MODEL", "IPADAPTER"], "output_is_list": [false, false], "output_name": ["MODEL", "ipadapter"], "name": "IPAdapterUnifiedLoaderFaceID", "display_name": "IPAdapter Unified Loader FaceID", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/faceid", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterModelLoader": {"input": {"required": {"ipadapter_file": [["FLUX.1-dev-IP-Adapter\\ip-adapter.bin", "Kolors-IP-Adapter-Plus\\image_encoder\\pytorch_model.bin", "Kolors-IP-Adapter-Plus\\ip_adapter_plus_general.bin"]]}}, "input_order": {"required": ["ipadapter_file"]}, "is_input_list": false, "output": ["IPADAPTER"], "output_is_list": [false], "output_name": ["IPADAPTER"], "name": "IPAdapterModelLoader", "display_name": "IPAdapter Model Loader", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterInsightFaceLoader": {"input": {"required": {"provider": [["CPU", "CUDA", "ROCM"]], "model_name": [["buffalo_l", "antelopev2"]]}}, "input_order": {"required": ["provider", "model_name"]}, "is_input_list": false, "output": ["INSIGHTFACE"], "output_is_list": [false], "output_name": ["INSIGHTFACE"], "name": "IPAdapterInsightFaceLoader", "display_name": "IPAdapter InsightFace Loader", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterUnifiedLoaderCommunity": {"input": {"required": {"model": ["MODEL"], "preset": [["Composition", "Kolors"]]}, "optional": {"ipadapter": ["IPADAPTER"]}}, "input_order": {"required": ["model", "preset"], "optional": ["ipadapter"]}, "is_input_list": false, "output": ["MODEL", "IPADAPTER"], "output_is_list": [false, false], "output_name": ["model", "ipadapter"], "name": "IPAdapterUnifiedLoaderCommunity", "display_name": "IPAdapter Unified Loader Community", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterEncoder": {"input": {"required": {"ipadapter": ["IPADAPTER"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1.0, "max": 3.0, "step": 0.01}]}, "optional": {"mask": ["MASK"], "clip_vision": ["CLIP_VISION"]}}, "input_order": {"required": ["ipadapter", "image", "weight"], "optional": ["mask", "clip_vision"]}, "is_input_list": false, "output": ["EMBEDS", "EMBEDS"], "output_is_list": [false, false], "output_name": ["pos_embed", "neg_embed"], "name": "IPAdapterEncoder", "display_name": "IPAdapter Encoder", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/embeds", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterCombineEmbeds": {"input": {"required": {"embed1": ["EMBEDS"], "method": [["concat", "add", "subtract", "average", "norm average", "max", "min"]]}, "optional": {"embed2": ["EMBEDS"], "embed3": ["EMBEDS"], "embed4": ["EMBEDS"], "embed5": ["EMBEDS"]}}, "input_order": {"required": ["embed1", "method"], "optional": ["embed2", "embed3", "embed4", "embed5"]}, "is_input_list": false, "output": ["EMBEDS"], "output_is_list": [false], "output_name": ["EMBEDS"], "name": "IPAdapterCombineEmbeds", "display_name": "IPAdapter Combine Embeds", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/embeds", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterNoise": {"input": {"required": {"type": [["fade", "dissolve", "gaussian", "shuffle"]], "strength": ["FLOAT", {"default": 1.0, "min": 0, "max": 1, "step": 0.05}], "blur": ["INT", {"default": 0, "min": 0, "max": 32, "step": 1}]}, "optional": {"image_optional": ["IMAGE"]}}, "input_order": {"required": ["type", "strength", "blur"], "optional": ["image_optional"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "IPAdapterNoise", "display_name": "IPAdapter Noise", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/utils", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PrepImageForClipVision": {"input": {"required": {"image": ["IMAGE"], "interpolation": [["LANCZOS", "BICUBIC", "HAMMING", "BILINEAR", "BOX", "NEAREST"]], "crop_position": [["top", "bottom", "left", "right", "center", "pad"]], "sharpening": ["FLOAT", {"default": 0.0, "min": 0, "max": 1, "step": 0.05}]}}, "input_order": {"required": ["image", "interpolation", "crop_position", "sharpening"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "PrepImageForClipVision", "display_name": "Prep Image For ClipVision", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/utils", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterSaveEmbeds": {"input": {"required": {"embeds": ["EMBEDS"], "filename_prefix": ["STRING", {"default": "IP_embeds"}]}}, "input_order": {"required": ["embeds", "filename_prefix"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "IPAdapterSaveEmbeds", "display_name": "IPAdapter Save Embeds", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/embeds", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterLoadEmbeds": {"input": {"required": {"embeds": [[]]}}, "input_order": {"required": ["embeds"]}, "is_input_list": false, "output": ["EMBEDS"], "output_is_list": [false], "output_name": ["EMBEDS"], "name": "IPAdapterLoadEmbeds", "display_name": "IPAdapter Load Embeds", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/embeds", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterWeights": {"input": {"required": {"weights": ["STRING", {"default": "1.0, 0.0", "multiline": true}], "timing": [["custom", "linear", "ease_in_out", "ease_in", "ease_out", "random"], {"default": "linear"}], "frames": ["INT", {"default": 0, "min": 0, "max": 9999, "step": 1}], "start_frame": ["INT", {"default": 0, "min": 0, "max": 9999, "step": 1}], "end_frame": ["INT", {"default": 9999, "min": 0, "max": 9999, "step": 1}], "add_starting_frames": ["INT", {"default": 0, "min": 0, "max": 9999, "step": 1}], "add_ending_frames": ["INT", {"default": 0, "min": 0, "max": 9999, "step": 1}], "method": [["full batch", "shift batches", "alternate batches"], {"default": "full batch"}]}, "optional": {"image": ["IMAGE"]}}, "input_order": {"required": ["weights", "timing", "frames", "start_frame", "end_frame", "add_starting_frames", "add_ending_frames", "method"], "optional": ["image"]}, "is_input_list": false, "output": ["FLOAT", "FLOAT", "INT", "IMAGE", "IMAGE", "WEIGHTS_STRATEGY"], "output_is_list": [false, false, false, false, false, false], "output_name": ["weights", "weights_invert", "total_frames", "image_1", "image_2", "weights_strategy"], "name": "IPAdapterWeights", "display_name": "IPAdapter Weights", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/weights", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterCombineWeights": {"input": {"required": {"weights_1": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.05}], "weights_2": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.05}]}}, "input_order": {"required": ["weights_1", "weights_2"]}, "is_input_list": false, "output": ["FLOAT", "INT"], "output_is_list": [false, false], "output_name": ["weights", "count"], "name": "IPAdapterCombineWeights", "display_name": "IPAdapter Combine Weights", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/utils", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterWeightsFromStrategy": {"input": {"required": {"weights_strategy": ["WEIGHTS_STRATEGY"]}, "optional": {"image": ["IMAGE"]}}, "input_order": {"required": ["weights_strategy"], "optional": ["image"]}, "is_input_list": false, "output": ["FLOAT", "FLOAT", "INT", "IMAGE", "IMAGE", "WEIGHTS_STRATEGY"], "output_is_list": [false, false, false, false, false, false], "output_name": ["weights", "weights_invert", "total_frames", "image_1", "image_2", "weights_strategy"], "name": "IPAdapterWeightsFromStrategy", "display_name": "IPAdapter Weights From Strategy", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/weights", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterPromptScheduleFromWeightsStrategy": {"input": {"required": {"weights_strategy": ["WEIGHTS_STRATEGY"], "prompt": ["STRING", {"default": "", "multiline": true}]}}, "input_order": {"required": ["weights_strategy", "prompt"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["prompt_schedule"], "name": "IPAdapterPromptScheduleFromWeightsStrategy", "display_name": "Prompt Schedule From Weights Strategy", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/weights", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterRegionalConditioning": {"input": {"required": {"image": ["IMAGE"], "image_weight": ["FLOAT", {"default": 1.0, "min": -1.0, "max": 3.0, "step": 0.05}], "prompt_weight": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.05}], "weight_type": [["linear", "ease in", "ease out", "ease in-out", "reverse in-out", "weak input", "weak output", "weak middle", "strong middle", "style transfer", "composition", "strong style transfer", "style and composition", "style transfer precise", "composition precise"]], "start_at": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_at": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}, "optional": {"mask": ["MASK"], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"]}}, "input_order": {"required": ["image", "image_weight", "prompt_weight", "weight_type", "start_at", "end_at"], "optional": ["mask", "positive", "negative"]}, "is_input_list": false, "output": ["IPADAPTER_PARAMS", "CONDITIONING", "CONDITIONING"], "output_is_list": [false, false, false], "output_name": ["IPADAPTER_PARAMS", "POSITIVE", "NEGATIVE"], "name": "IPAdapterRegionalConditioning", "display_name": "IPAdapter Regional Conditioning", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/params", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IPAdapterCombineParams": {"input": {"required": {"params_1": ["IPADAPTER_PARAMS"], "params_2": ["IPADAPTER_PARAMS"]}, "optional": {"params_3": ["IPADAPTER_PARAMS"], "params_4": ["IPADAPTER_PARAMS"], "params_5": ["IPADAPTER_PARAMS"]}}, "input_order": {"required": ["params_1", "params_2"], "optional": ["params_3", "params_4", "params_5"]}, "is_input_list": false, "output": ["IPADAPTER_PARAMS"], "output_is_list": [false], "output_name": ["IPADAPTER_PARAMS"], "name": "IPAdapterCombineParams", "display_name": "IPAdapter Combine Params", "description": "", "python_module": "custom_nodes.ComfyUI_IPAdapter_plus", "category": "ipadapter/params", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SAMModelLoader (segment anything plus)": {"input": {"required": {"model_name": [["sam_vit_h (2.56GB)", "sam_vit_l (1.25GB)", "sam_vit_b (375MB)", "sam_hq_vit_h (2.57GB)", "sam_hq_vit_l (1.25GB)", "sam_hq_vit_b (379MB)", "mobile_sam(39MB)"]]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["SAM_MODEL"], "output_is_list": [false], "output_name": ["SAM_MODEL"], "name": "SAMModelLoader (segment anything plus)", "display_name": "SAMModelLoader (segment anything plus)", "description": "", "python_module": "custom_nodes.comfyui_segment_anything_plus", "category": "segment_anything_plus", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "GroundingDinoModelLoader (segment anything plus)": {"input": {"required": {"model_name": [["GroundingDINO_SwinT_OGC (694MB)", "GroundingDINO_SwinB (938MB)"]]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["GROUNDING_DINO_MODEL"], "output_is_list": [false], "output_name": ["GROUNDING_DINO_MODEL"], "name": "GroundingDinoModelLoader (segment anything plus)", "display_name": "GroundingDinoModelLoader (segment anything plus)", "description": "", "python_module": "custom_nodes.comfyui_segment_anything_plus", "category": "segment_anything_plus", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "GroundingDinoSAMSegment (segment anything plus)": {"input": {"required": {"sam_model": ["SAM_MODEL", {}], "grounding_dino_model": ["GROUNDING_DINO_MODEL", {}], "image": ["IMAGE", {}], "prompt": ["STRING", {}], "points": ["STRING", {}], "threshold": ["FLOAT", {"default": 0.3, "min": 0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["sam_model", "grounding_dino_model", "image", "prompt", "points", "threshold"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "GroundingDinoSAMSegment (segment anything plus)", "display_name": "GroundingDinoSAMSegment (segment anything plus)", "description": "", "python_module": "custom_nodes.comfyui_segment_anything_plus", "category": "segment_anything_plus", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "InvertMask (segment anything plus)": {"input": {"required": {"mask": ["MASK"]}}, "input_order": {"required": ["mask"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "InvertMask (segment anything plus)", "display_name": "InvertMask (segment anything plus)", "description": "", "python_module": "custom_nodes.comfyui_segment_anything_plus", "category": "segment_anything_plus", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "IsMaskEmpty  (segment anything plus)": {"input": {"required": {"mask": ["MASK"]}}, "input_order": {"required": ["mask"]}, "is_input_list": false, "output": ["NUMBER"], "output_is_list": [false], "output_name": ["boolean_number"], "name": "IsMaskEmpty  (segment anything plus)", "display_name": "IsMaskEmpty  (segment anything plus)", "description": "", "python_module": "custom_nodes.comfyui_segment_anything_plus", "category": "segment_anything_plus", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SaveImageCustom": {"input": {"required": {"images": ["IMAGE", {"tooltip": "\u8981\u4fdd\u5b58\u7684\u56fe\u50cf"}]}, "optional": {"prefix": ["STRING", {"default": "\u62a0\u56fe", "tooltip": "\u6587\u4ef6\u540d\u524d\u7f00"}], "subfolder": ["STRING", {"default": "", "tooltip": "\u5b50\u76ee\u5f55\u540d\u79f0\uff08\u7559\u7a7a\u5219\u4fdd\u5b58\u5230output\u6839\u76ee\u5f55\uff09"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["images"], "optional": ["prefix", "subfolder"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "SaveImageCustom", "display_name": "\u4fdd\u5b58\u56fe\u7247 (\u81ea\u5b9a\u4e49\u547d\u540d)", "description": "", "python_module": "custom_nodes.save_image_custom", "category": "image", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "PreviewImageCustom": {"input": {"required": {"images": ["IMAGE", {"tooltip": "\u8981\u9884\u89c8\u7684\u56fe\u50cf"}]}, "optional": {"prefix": ["STRING", {"default": "\u9884\u89c8", "tooltip": "\u6587\u4ef6\u540d\u524d\u7f00"}]}}, "input_order": {"required": ["images"], "optional": ["prefix"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "PreviewImageCustom", "display_name": "\u9884\u89c8\u56fe\u7247 (\u81ea\u5b9a\u4e49\u547d\u540d)", "description": "", "python_module": "custom_nodes.save_image_custom", "category": "image", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "SaveImageWebsocket": {"input": {"required": {"images": ["IMAGE"]}}, "input_order": {"required": ["images"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "SaveImageWebsocket", "display_name": "Save Image (Websocket)", "description": "", "python_module": "custom_nodes.websocket_image_save", "category": "image", "output_node": true, "has_intermediate_output": false, "search_aliases": []}}