{"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": "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": [["ace_step_1.5_turbo_aio.safetensors", "ltx-2.3-22b-dev-fp8.safetensors", "ltx-2.3-22b-distilled-1.1.safetensors", "sd_xl_base_1.0.safetensors", "sd_xl_refiner_1.0.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": "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": "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": "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": "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": "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": "latent/inpaint", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAELoader": {"input": {"required": {"vae_name": [["ace_1.5_vae.safetensors", "ae.safetensors", "full_encoder_small_decoder.safetensors", "ltx-2.3-22b-dev_audio_vae.safetensors", "ltx-2.3-22b-dev_video_vae.safetensors", "qwen_image_vae.safetensors", "taeltx2_3.safetensors", "taesd", "taesdxl", "taesd3", "taef1", "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": "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": "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": "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": "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": "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": "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": [["fikoyt_flux_test.png", "zekiye-sip-sak-1.png", "\u00e7\u00fcr\u00fck-fikri.png"], {"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": [["fikoyt_flux_test.png", "zekiye-sip-sak-1.png", "\u00e7\u00fcr\u00fck-fikri.png"], {"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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": [["LTX2.3-22B_IC-LoRA-Cameraman_v1_10500.safetensors", "LTX2.3_AudioReactiveV1.safetensors", "Ltx2.3-Licon-VBVR-I2V-96000-R32.safetensors", "Penile_Praxis_V4.safetensors", "Qwen-Edit-2509-Multiple-angles.safetensors", "Qwen-Image-2512-Lightning-4steps-V1.0-fp32.safetensors", "Qwen-Image-Edit-2509-Lightning-4steps-V1.0-bf16.safetensors", "Qwen-Image-Lightning-4steps-V1.0.safetensors", "SexGod_Handjobs_LTX23_Rank64_v1.safetensors", "ltx-2-19b-ic-lora-detailer.safetensors", "ltx-2.3-22b-distilled-lora-384.safetensors", "ltx-2.3-22b-ic-lora-lipdub-0.9.safetensors", "ltx-2.3-22b-ic-lora-motion-track-control-ref0.5.safetensors", "ltx-2.3-22b-ic-lora-refocus.safetensors", "ltx-2.3-id-lora-talkvid-3k.safetensors", "ltx2.3-transition.safetensors", "ltx23_edit_anything_global_rank128_v1_9000steps_adamw.safetensors", "ltxdeepthroat_v01.safetensors"], {"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": "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": [["EVA02_CLIP_L_336_psz14_s6B.pt", "clip_l.safetensors", "gemma-3-12b-it-abliterated-sikaworld-high-fidelity-edition.safetensors", "gemma_3_12B_it_fp4_mixed.safetensors", "ltx-2.3_text_projection_bf16.safetensors", "qwen_0.6b_ace15.safetensors", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "qwen_3_4b.safetensors", "qwen_4b_ace15.safetensors", "t5xxl_fp8_e4m3fn.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"]]}, "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", "python_module": "nodes", "category": "advanced/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "UNETLoader": {"input": {"required": {"unet_name": [["Wan2_1-HuMo-1_7B_fp16.safetensors", "acestep_v1.5_turbo.safetensors", "acestep_v1.5_xl_turbo_bf16.safetensors", "flux1-dev-fp8.safetensors", "qwen_image_2512_fp8_e4m3fn.safetensors", "qwen_image_edit_2509_fp8_e4m3fn.safetensors", "z_image_turbo_bf16.safetensors"]], "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": [["EVA02_CLIP_L_336_psz14_s6B.pt", "clip_l.safetensors", "gemma-3-12b-it-abliterated-sikaworld-high-fidelity-edition.safetensors", "gemma_3_12B_it_fp4_mixed.safetensors", "ltx-2.3_text_projection_bf16.safetensors", "qwen_0.6b_ace15.safetensors", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "qwen_3_4b.safetensors", "qwen_4b_ace15.safetensors", "t5xxl_fp8_e4m3fn.safetensors"]], "clip_name2": [["EVA02_CLIP_L_336_psz14_s6B.pt", "clip_l.safetensors", "gemma-3-12b-it-abliterated-sikaworld-high-fidelity-edition.safetensors", "gemma_3_12B_it_fp4_mixed.safetensors", "ltx-2.3_text_projection_bf16.safetensors", "qwen_0.6b_ace15.safetensors", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "qwen_3_4b.safetensors", "qwen_4b_ace15.safetensors", "t5xxl_fp8_e4m3fn.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": "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": "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": "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": "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": "conditioning/controlnet", "output_node": false, "has_intermediate_output": false, "search_aliases": ["controlnet", "apply controlnet", "use controlnet", "control net"]}, "ControlNetLoader": {"input": {"required": {"control_net_name": [["Qwen-Image-2512-Fun-Controlnet-Union-2602.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": "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": [["Qwen-Image-2512-Fun-Controlnet-Union-2602.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": "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": "loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPVisionLoader": {"input": {"required": {"clip_name": [[]]}}, "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": "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": [["ace_step_1.5_turbo_aio.safetensors", "ltx-2.3-22b-dev-fp8.safetensors", "ltx-2.3-22b-distilled-1.1.safetensors", "sd_xl_base_1.0.safetensors", "sd_xl_refiner_1.0.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": "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": "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": "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": "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": [["ace_step_1.5_turbo_aio.safetensors", "ltx-2.3-22b-dev-fp8.safetensors", "ltx-2.3-22b-distilled-1.1.safetensors", "sd_xl_base_1.0.safetensors", "sd_xl_refiner_1.0.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": [[]]}}, "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": [["LTX2.3-22B_IC-LoRA-Cameraman_v1_10500.safetensors", "LTX2.3_AudioReactiveV1.safetensors", "Ltx2.3-Licon-VBVR-I2V-96000-R32.safetensors", "Penile_Praxis_V4.safetensors", "Qwen-Edit-2509-Multiple-angles.safetensors", "Qwen-Image-2512-Lightning-4steps-V1.0-fp32.safetensors", "Qwen-Image-Edit-2509-Lightning-4steps-V1.0-bf16.safetensors", "Qwen-Image-Lightning-4steps-V1.0.safetensors", "SexGod_Handjobs_LTX23_Rank64_v1.safetensors", "ltx-2-19b-ic-lora-detailer.safetensors", "ltx-2.3-22b-distilled-lora-384.safetensors", "ltx-2.3-22b-ic-lora-lipdub-0.9.safetensors", "ltx-2.3-22b-ic-lora-motion-track-control-ref0.5.safetensors", "ltx-2.3-22b-ic-lora-refocus.safetensors", "ltx-2.3-id-lora-talkvid-3k.safetensors", "ltx2.3-transition.safetensors", "ltx23_edit_anything_global_rank128_v1_9000steps_adamw.safetensors", "ltxdeepthroat_v01.safetensors"]], "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": []}]}}, "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": "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": "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": "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": "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_patches/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_patches/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_patches/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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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}, "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": "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": "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": "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": "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_patches/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_patches/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": "", "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": ["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": "utils/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}, "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": [["ace_step_1.5_turbo_aio.safetensors", "ltx-2.3-22b-dev-fp8.safetensors", "ltx-2.3-22b-distilled-1.1.safetensors", "sd_xl_base_1.0.safetensors", "sd_xl_refiner_1.0.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": "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": "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": "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": "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": "conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "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": ["LTX2.3-22B_IC-LoRA-Cameraman_v1_10500.safetensors", "LTX2.3_AudioReactiveV1.safetensors", "Ltx2.3-Licon-VBVR-I2V-96000-R32.safetensors", "Penile_Praxis_V4.safetensors", "Qwen-Edit-2509-Multiple-angles.safetensors", "Qwen-Image-2512-Lightning-4steps-V1.0-fp32.safetensors", "Qwen-Image-Edit-2509-Lightning-4steps-V1.0-bf16.safetensors", "Qwen-Image-Lightning-4steps-V1.0.safetensors", "SexGod_Handjobs_LTX23_Rank64_v1.safetensors", "ltx-2-19b-ic-lora-detailer.safetensors", "ltx-2.3-22b-distilled-lora-384.safetensors", "ltx-2.3-22b-ic-lora-lipdub-0.9.safetensors", "ltx-2.3-22b-ic-lora-motion-track-control-ref0.5.safetensors", "ltx-2.3-22b-ic-lora-refocus.safetensors", "ltx-2.3-id-lora-talkvid-3k.safetensors", "ltx2.3-transition.safetensors", "ltx23_edit_anything_global_rank128_v1_9000steps_adamw.safetensors", "ltxdeepthroat_v01.safetensors", "[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": "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": "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": "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"]}]}}, "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 Dataset from Folder", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset", "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}, "LoadImageTextDataSetFromFolder": {"input": {"required": {"folder": ["COMBO", {"tooltip": "The folder to load images from.", "multiselect": false, "options": ["3d"]}]}}, "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 and Text Dataset from Folder", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset", "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}, "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}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "folder_name", "filename_prefix"], "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 Dataset to Folder", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveImageTextDataSetToFolder": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to save."}], "texts": ["STRING", {"tooltip": "List of text captions to save.", "multiline": false}], "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}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "texts", "folder_name", "filename_prefix"], "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 and Text Dataset to Folder", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ResizeImagesByShorterEdge": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "shorter_edge": ["INT", {"tooltip": "Target length 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", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/image", "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 length 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", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/image", "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": "Center Crop Images", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/image", "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}, "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": "Random Crop Images", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/image", "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}, "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 Images", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/image", "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}, "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": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/image", "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}, "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": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/image", "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}, "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 Image Dataset", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/image", "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}, "ShuffleImageTextDataset": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to shuffle."}], "texts": ["STRING", {"tooltip": "List of texts to shuffle.", "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 Image-Text Dataset", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/image", "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}, "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": "Text to Lowercase", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/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": "Text to Uppercase", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/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": "dataset/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", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/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", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/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", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/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", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/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": "Image Deduplication", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/image", "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}, "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": "Image Grid", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/image", "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}, "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", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/image", "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}, "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", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset/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).", "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": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset", "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": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export training data"], "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": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset", "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": "", "python_module": "comfy_extras.nodes_dataset", "category": "dataset", "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}, "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": "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": "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": "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": "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": "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": "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": "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": "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_patches/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": "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": "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": "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": "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": "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": "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": "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)", "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": ["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)", "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": ["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)", "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": ["export opus"], "essentials_category": null, "has_intermediate_output": false}, "LoadAudio": {"input": {"required": {"audio": ["COMBO", {"multiselect": false, "options": ["\u00c7\u00fcr\u00fcd\u00fc-kald\u0131.mp3", "\u015fip-\u015fak-2.mp3"], "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": "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": "Audio Concat", "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": "Audio Merge", "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": "Audio Adjust Volume", "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": ["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": ["EVA02_CLIP_L_336_psz14_s6B.pt", "clip_l.safetensors", "gemma-3-12b-it-abliterated-sikaworld-high-fidelity-edition.safetensors", "gemma_3_12B_it_fp4_mixed.safetensors", "ltx-2.3_text_projection_bf16.safetensors", "qwen_0.6b_ace15.safetensors", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "qwen_3_4b.safetensors", "qwen_4b_ace15.safetensors", "t5xxl_fp8_e4m3fn.safetensors"]}], "clip_name2": ["COMBO", {"multiselect": false, "options": ["EVA02_CLIP_L_336_psz14_s6B.pt", "clip_l.safetensors", "gemma-3-12b-it-abliterated-sikaworld-high-fidelity-edition.safetensors", "gemma_3_12B_it_fp4_mixed.safetensors", "ltx-2.3_text_projection_bf16.safetensors", "qwen_0.6b_ace15.safetensors", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "qwen_3_4b.safetensors", "qwen_4b_ace15.safetensors", "t5xxl_fp8_e4m3fn.safetensors"]}], "clip_name3": ["COMBO", {"multiselect": false, "options": ["EVA02_CLIP_L_336_psz14_s6B.pt", "clip_l.safetensors", "gemma-3-12b-it-abliterated-sikaworld-high-fidelity-edition.safetensors", "gemma_3_12B_it_fp4_mixed.safetensors", "ltx-2.3_text_projection_bf16.safetensors", "qwen_0.6b_ace15.safetensors", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "qwen_3_4b.safetensors", "qwen_4b_ace15.safetensors", "t5xxl_fp8_e4m3fn.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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": ["ltx-2.3-spatial-upscaler-x2-1.1.safetensors"]}]}}, "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": "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": "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": "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": "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_patches/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_patches/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": "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": "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": "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"], "name": "LTXVLatentUpsampler", "display_name": "LTXVLatentUpsampler", "description": "", "python_module": "comfy_extras.nodes_lt_upsampler", "category": "latent/video", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "LTXVAudioVAELoader": {"input": {"required": {"ckpt_name": ["COMBO", {"tooltip": "Audio VAE checkpoint to load.", "multiselect": false, "options": ["ace_step_1.5_turbo_aio.safetensors", "ltx-2.3-22b-dev-fp8.safetensors", "ltx-2.3-22b-distilled-1.1.safetensors", "sd_xl_base_1.0.safetensors", "sd_xl_refiner_1.0.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": "LTXV Audio VAE Loader", "description": "", "python_module": "comfy_extras.nodes_lt_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}, "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": "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": "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": "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": ["EVA02_CLIP_L_336_psz14_s6B.pt", "clip_l.safetensors", "gemma-3-12b-it-abliterated-sikaworld-high-fidelity-edition.safetensors", "gemma_3_12B_it_fp4_mixed.safetensors", "ltx-2.3_text_projection_bf16.safetensors", "qwen_0.6b_ace15.safetensors", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "qwen_3_4b.safetensors", "qwen_4b_ace15.safetensors", "t5xxl_fp8_e4m3fn.safetensors"]}], "ckpt_name": ["COMBO", {"multiselect": false, "options": ["ace_step_1.5_turbo_aio.safetensors", "ltx-2.3-22b-dev-fp8.safetensors", "ltx-2.3-22b-distilled-1.1.safetensors", "sd_xl_base_1.0.safetensors", "sd_xl_refiner_1.0.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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": [["LTX2.3-22B_IC-LoRA-Cameraman_v1_10500.safetensors", "LTX2.3_AudioReactiveV1.safetensors", "Ltx2.3-Licon-VBVR-I2V-96000-R32.safetensors", "Penile_Praxis_V4.safetensors", "Qwen-Edit-2509-Multiple-angles.safetensors", "Qwen-Image-2512-Lightning-4steps-V1.0-fp32.safetensors", "Qwen-Image-Edit-2509-Lightning-4steps-V1.0-bf16.safetensors", "Qwen-Image-Lightning-4steps-V1.0.safetensors", "SexGod_Handjobs_LTX23_Rank64_v1.safetensors", "ltx-2-19b-ic-lora-detailer.safetensors", "ltx-2.3-22b-distilled-lora-384.safetensors", "ltx-2.3-22b-ic-lora-lipdub-0.9.safetensors", "ltx-2.3-22b-ic-lora-motion-track-control-ref0.5.safetensors", "ltx-2.3-22b-ic-lora-refocus.safetensors", "ltx-2.3-id-lora-talkvid-3k.safetensors", "ltx2.3-transition.safetensors", "ltx23_edit_anything_global_rank128_v1_9000steps_adamw.safetensors", "ltxdeepthroat_v01.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": ["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": [["LTX2.3-22B_IC-LoRA-Cameraman_v1_10500.safetensors", "LTX2.3_AudioReactiveV1.safetensors", "Ltx2.3-Licon-VBVR-I2V-96000-R32.safetensors", "Penile_Praxis_V4.safetensors", "Qwen-Edit-2509-Multiple-angles.safetensors", "Qwen-Image-2512-Lightning-4steps-V1.0-fp32.safetensors", "Qwen-Image-Edit-2509-Lightning-4steps-V1.0-bf16.safetensors", "Qwen-Image-Lightning-4steps-V1.0.safetensors", "SexGod_Handjobs_LTX23_Rank64_v1.safetensors", "ltx-2-19b-ic-lora-detailer.safetensors", "ltx-2.3-22b-distilled-lora-384.safetensors", "ltx-2.3-22b-ic-lora-lipdub-0.9.safetensors", "ltx-2.3-22b-ic-lora-motion-track-control-ref0.5.safetensors", "ltx-2.3-22b-ic-lora-refocus.safetensors", "ltx-2.3-id-lora-talkvid-3k.safetensors", "ltx2.3-transition.safetensors", "ltx23_edit_anything_global_rank128_v1_9000steps_adamw.safetensors", "ltxdeepthroat_v01.safetensors"]], "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": [["ace_step_1.5_turbo_aio.safetensors", "ltx-2.3-22b-dev-fp8.safetensors", "ltx-2.3-22b-distilled-1.1.safetensors", "sd_xl_base_1.0.safetensors", "sd_xl_refiner_1.0.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": [["ace_step_1.5_turbo_aio.safetensors", "ltx-2.3-22b-dev-fp8.safetensors", "ltx-2.3-22b-distilled-1.1.safetensors", "sd_xl_base_1.0.safetensors", "sd_xl_refiner_1.0.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"]}, "Load3D": {"input": {"required": {"model_file": ["COMBO", {"multiselect": false, "options": [], "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"], "output_is_list": [false, false, false, false, false, false, false], "output_name": ["image", "mask", "mesh_path", "normal", "camera_info", "recording_video", "model_3d"], "output_tooltips": [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}, "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": "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": "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": "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", {}], "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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)", "description": "", "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}, "VoxelToMesh": {"input": {"required": {"voxel": ["VOXEL", {}], "algorithm": ["COMBO", {"advanced": true, "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": "", "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": "utils/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": "utils/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": "utils/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": "utils/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": "utils/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}]}}, "input_order": {"required": ["model", "strength"]}, "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": "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": ["EVA02_CLIP_L_336_psz14_s6B.pt", "clip_l.safetensors", "gemma-3-12b-it-abliterated-sikaworld-high-fidelity-edition.safetensors", "gemma_3_12B_it_fp4_mixed.safetensors", "ltx-2.3_text_projection_bf16.safetensors", "qwen_0.6b_ace15.safetensors", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "qwen_3_4b.safetensors", "qwen_4b_ace15.safetensors", "t5xxl_fp8_e4m3fn.safetensors"]}], "clip_name2": ["COMBO", {"multiselect": false, "options": ["EVA02_CLIP_L_336_psz14_s6B.pt", "clip_l.safetensors", "gemma-3-12b-it-abliterated-sikaworld-high-fidelity-edition.safetensors", "gemma_3_12B_it_fp4_mixed.safetensors", "ltx-2.3_text_projection_bf16.safetensors", "qwen_0.6b_ace15.safetensors", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "qwen_3_4b.safetensors", "qwen_4b_ace15.safetensors", "t5xxl_fp8_e4m3fn.safetensors"]}], "clip_name3": ["COMBO", {"multiselect": false, "options": ["EVA02_CLIP_L_336_psz14_s6B.pt", "clip_l.safetensors", "gemma-3-12b-it-abliterated-sikaworld-high-fidelity-edition.safetensors", "gemma_3_12B_it_fp4_mixed.safetensors", "ltx-2.3_text_projection_bf16.safetensors", "qwen_0.6b_ace15.safetensors", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "qwen_3_4b.safetensors", "qwen_4b_ace15.safetensors", "t5xxl_fp8_e4m3fn.safetensors"]}], "clip_name4": ["COMBO", {"multiselect": false, "options": ["EVA02_CLIP_L_336_psz14_s6B.pt", "clip_l.safetensors", "gemma-3-12b-it-abliterated-sikaworld-high-fidelity-edition.safetensors", "gemma_3_12B_it_fp4_mixed.safetensors", "ltx-2.3_text_projection_bf16.safetensors", "qwen_0.6b_ace15.safetensors", "qwen_2.5_vl_7b_fp8_scaled.safetensors", "qwen_3_4b.safetensors", "qwen_4b_ace15.safetensors", "t5xxl_fp8_e4m3fn.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": "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": "utils", "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": "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": "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": "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": "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": "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_patches", "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_patches", "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": "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": "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}]}}, "input_order": {"required": ["model", "preserve_wrapper", "start_sigma", "end_sigma", "nerf_tile_size"]}, "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_patches/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}, "ModelPatchLoader": {"input": {"required": {"name": [[]]}}, "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": "advanced/model_patches/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_patches/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": "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": "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": "advanced/model_patches", "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": "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": "utils", "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}, "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": "utils", "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": [["LTX2.3-22B_IC-LoRA-Cameraman_v1_10500.safetensors", "LTX2.3_AudioReactiveV1.safetensors", "Ltx2.3-Licon-VBVR-I2V-96000-R32.safetensors", "Penile_Praxis_V4.safetensors", "Qwen-Edit-2509-Multiple-angles.safetensors", "Qwen-Image-2512-Lightning-4steps-V1.0-fp32.safetensors", "Qwen-Image-Edit-2509-Lightning-4steps-V1.0-bf16.safetensors", "Qwen-Image-Lightning-4steps-V1.0.safetensors", "SexGod_Handjobs_LTX23_Rank64_v1.safetensors", "ltx-2-19b-ic-lora-detailer.safetensors", "ltx-2.3-22b-distilled-lora-384.safetensors", "ltx-2.3-22b-ic-lora-lipdub-0.9.safetensors", "ltx-2.3-22b-ic-lora-motion-track-control-ref0.5.safetensors", "ltx-2.3-22b-ic-lora-refocus.safetensors", "ltx-2.3-id-lora-talkvid-3k.safetensors", "ltx2.3-transition.safetensors", "ltx23_edit_anything_global_rank128_v1_9000steps_adamw.safetensors", "ltxdeepthroat_v01.safetensors"], {"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": "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": [["LTX2.3-22B_IC-LoRA-Cameraman_v1_10500.safetensors", "LTX2.3_AudioReactiveV1.safetensors", "Ltx2.3-Licon-VBVR-I2V-96000-R32.safetensors", "Penile_Praxis_V4.safetensors", "Qwen-Edit-2509-Multiple-angles.safetensors", "Qwen-Image-2512-Lightning-4steps-V1.0-fp32.safetensors", "Qwen-Image-Edit-2509-Lightning-4steps-V1.0-bf16.safetensors", "Qwen-Image-Lightning-4steps-V1.0.safetensors", "SexGod_Handjobs_LTX23_Rank64_v1.safetensors", "ltx-2-19b-ic-lora-detailer.safetensors", "ltx-2.3-22b-distilled-lora-384.safetensors", "ltx-2.3-22b-ic-lora-lipdub-0.9.safetensors", "ltx-2.3-22b-ic-lora-motion-track-control-ref0.5.safetensors", "ltx-2.3-22b-ic-lora-refocus.safetensors", "ltx-2.3-id-lora-talkvid-3k.safetensors", "ltx2.3-transition.safetensors", "ltx23_edit_anything_global_rank128_v1_9000steps_adamw.safetensors", "ltxdeepthroat_v01.safetensors"]], "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": "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": "utils", "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": "logic", "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": "logic", "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": "utils", "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": "utils", "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": "utils", "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "MoGe Inference", "description": "", "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": null, "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": "MoGe Panorama Inference", "description": "", "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": null, "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": "MoGe Render", "description": "", "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": null, "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": "MoGe Point Map to Mesh", "description": "", "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": 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 before stopping.", "advanced": true, "default": 16000, "min": 32, "max": 32000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}}, {"key": "Opus 4.6", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate before stopping.", "advanced": true, "default": 16000, "min": 32, "max": 32000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}}, {"key": "Sonnet 4.6", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate before stopping.", "advanced": true, "default": 16000, "min": 32, "max": 32000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}}, {"key": "Sonnet 4.5", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate before stopping.", "advanced": true, "default": 16000, "min": 32, "max": 32000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}}, {"key": "Haiku 4.5", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate before stopping.", "advanced": true, "default": 16000, "min": 32, "max": 32000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7.", "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": "api node/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}, "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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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}, "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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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.", "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.", "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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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", "grok-imagine-image-beta"]}], "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": "api node/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", "grok-imagine-image-beta"]}], "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": "api node/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": "api node/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", {"multiselect": false, "options": ["grok-imagine-video", "grok-imagine-video-beta"]}], "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", {}]}, "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": "api node/video/Grok", "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": ["image"], "input_groups": []}, "expr": "\n                (\n                  $rate := widgets.resolution = \"720p\" ? 0.07 : 0.05;\n                  $base := $rate * widgets.duration;\n                  {\"type\":\"usd\",\"usd\": inputs.image.connected ? $base + 0.002 : $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": "api node/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", "grok-imagine-video-beta"]}], "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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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}, "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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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}, "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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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}, "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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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}, "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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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}, "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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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": "api node/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}, "AudioSegmenter": {"input": {"required": {"audio": ["AUDIO"], "max_length_s": ["INT", {"default": 10, "min": 1, "max": 3600, "step": 1}], "silence_thresh_db": ["INT", {"default": -40, "min": -100, "max": 0, "step": 1}]}}, "input_order": {"required": ["audio", "max_length_s", "silence_thresh_db"]}, "is_input_list": false, "output": ["*", "INT"], "output_is_list": [false, false], "output_name": ["audio_list", "count"], "name": "AudioSegmenter", "display_name": "Audio Segmenter", "description": "", "python_module": "custom_nodes.audiosegment", "category": "Audio/Segmentation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "AudioSegmentByParagraph": {"input": {"required": {"audio": ["AUDIO"], "text": ["STRING", {"multiline": true, "default": "\u5728\u6b64\u5904\u8f93\u5165\u6309\u6bb5\u843d\u5206\u9694\u7684\u6587\u672c..."}], "model": [["base", "large-v1", "large-v2", "large-v3", "medium", "small", "tiny"]]}}, "input_order": {"required": ["audio", "text", "model"]}, "is_input_list": false, "output": ["*", "INT", "STRING"], "output_is_list": [false, false, false], "output_name": ["AudioClip list", "size", "srt"], "name": "AudioSegmentByParagraph", "display_name": "Audio Segment By Paragraph", "description": "", "python_module": "custom_nodes.audiosegment", "category": "Audio/Segmentation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SelectAudioFromList": {"input": {"required": {"audio_list": ["*"], "index": ["INT", {"default": 0, "min": 0, "step": 1}]}}, "input_order": {"required": ["audio_list", "index"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "name": "SelectAudioFromList", "display_name": "Select Audio From List", "description": "", "python_module": "custom_nodes.audiosegment", "category": "Audio/Segmentation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SelectAudioClipFromList": {"input": {"required": {"audio_clip_list": ["*"], "index": ["INT", {"default": 0, "min": 0, "step": 1}]}}, "input_order": {"required": ["audio_clip_list", "index"]}, "is_input_list": false, "output": ["AUDIO", "STRING"], "output_is_list": [false, false], "output_name": ["audio", "text"], "name": "SelectAudioClipFromList", "display_name": "Select AudioClip From List", "description": "", "python_module": "custom_nodes.audiosegment", "category": "Audio/Segmentation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "AudioListToBatch": {"input": {"required": {"audio_list": ["*"]}}, "input_order": {"required": ["audio_list"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "name": "AudioListToBatch", "display_name": "Audio List to Batch", "description": "", "python_module": "custom_nodes.audiosegment", "category": "Audio/Segmentation", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FikoYT_MVD_AudioLoader": {"input": {"required": {"audio_file": [["\u00c7\u00fcr\u00fcd\u00fc-kald\u0131.mp3", "\u015fip-\u015fak-2.mp3"]]}, "optional": {"custom_path": ["STRING", {"default": "", "multiline": false, "placeholder": "Tam yol: D:\\muzik\\sarki.mp3"}]}}, "input_order": {"required": ["audio_file"], "optional": ["custom_path"]}, "is_input_list": false, "output": ["AUDIO_BYTES", "STRING"], "output_is_list": [false, false], "output_name": ["audio_bytes", "file_path"], "name": "FikoYT_MVD_AudioLoader", "display_name": "\ud83c\udfb5 FikoYT | Audio Loader", "description": "", "python_module": "custom_nodes.ComfyUI-MusicVideoDirector", "category": "FikoYT/MusicVideoDirector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FikoYT_MVD_WhisperTranscriber": {"input": {"required": {"audio_bytes": ["AUDIO_BYTES"], "model_size": [["large-v3", "medium", "small", "base", "tiny"]], "language": [["tr", "en", "auto"]], "device": [["cuda", "cpu"]], "vad_filter": ["BOOLEAN", {"default": false, "label_on": "VAD Acik (muzik icin KAPALI onerilir)", "label_off": "VAD Kapali (tum ses alinir)"}], "min_seg_secs": ["FLOAT", {"default": 8.0, "min": 1.0, "max": 30.0, "step": 0.5}], "max_seg_secs": ["FLOAT", {"default": 20.0, "min": 5.0, "max": 60.0, "step": 1.0}]}}, "input_order": {"required": ["audio_bytes", "model_size", "language", "device", "vad_filter", "min_seg_secs", "max_seg_secs"]}, "is_input_list": false, "output": ["MVD_SEGMENTS", "STRING"], "output_is_list": [false, false], "output_name": ["segments", "full_text"], "name": "FikoYT_MVD_WhisperTranscriber", "display_name": "\ud83c\udfa4 FikoYT | Whisper Transcriber", "description": "", "python_module": "custom_nodes.ComfyUI-MusicVideoDirector", "category": "FikoYT/MusicVideoDirector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FikoYT_MVD_SmartSegmenter": {"input": {"required": {"raw_segments": ["MVD_SEGMENTS"], "ollama_url": ["STRING", {"default": "http://127.0.0.1:11434", "multiline": false}], "ollama_model": [["qwen2.5vl:7b", "deepseek-v4-pro:cloud", "qwen3:8b-q4_K_M", "llama3.1:8b-instruct-q4_K_M", "llama3.2:1b-instruct-q4_K_M", "qwen2.5:7b-instruct-q4_K_M", "llama3.2:3b-instruct-q4_K_M", "tinyllama:1.1b-chat-v1-q4_K_M", "gpt-oss:20b", "qwen3:8b", "sorc/qwen3.5-claude-4.6-opus-q4:latest"], {"default": "qwen2.5vl:7b"}], "target_count": ["INT", {"default": 0, "min": 0, "max": 12, "step": 1, "tooltip": "0 = Otomatik (sarki suresine gore)"}], "min_seg_sec": ["FLOAT", {"default": 12.0, "min": 5.0, "max": 30.0, "step": 1.0}], "max_seg_sec": ["FLOAT", {"default": 30.0, "min": 15.0, "max": 60.0, "step": 1.0}]}, "optional": {"song_context": ["STRING", {"default": "", "multiline": true, "placeholder": "Sarkinin temasi/duygusu (opsiyonel ipucu)"}]}}, "input_order": {"required": ["raw_segments", "ollama_url", "ollama_model", "target_count", "min_seg_sec", "max_seg_sec"], "optional": ["song_context"]}, "is_input_list": false, "output": ["MVD_SEGMENTS", "STRING"], "output_is_list": [false, false], "output_name": ["segments", "analysis"], "name": "FikoYT_MVD_SmartSegmenter", "display_name": "\ud83e\udde0 FikoYT | Smart Segmenter (AI)", "description": "", "python_module": "custom_nodes.ComfyUI-MusicVideoDirector", "category": "FikoYT/MusicVideoDirector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FikoYT_MVD_SegmentEditor": {"input": {"required": {"segments_json": ["STRING", {"multiline": true, "default": "[\n  {\n    \"start\": 0,\n    \"end\": 25,\n    \"text\": \"Kita sozleri buraya\",\n    \"type\": \"verse\"\n  },\n  {\n    \"start\": 25,\n    \"end\": 50,\n    \"text\": \"Nakarat sozleri buraya\",\n    \"type\": \"chorus\"\n  }\n]"}]}, "optional": {"segments_in": ["MVD_SEGMENTS"]}}, "input_order": {"required": ["segments_json"], "optional": ["segments_in"]}, "is_input_list": false, "output": ["MVD_SEGMENTS"], "output_is_list": [false], "output_name": ["segments"], "name": "FikoYT_MVD_SegmentEditor", "display_name": "\u270f\ufe0f FikoYT | Segment Editor", "description": "", "python_module": "custom_nodes.ComfyUI-MusicVideoDirector", "category": "FikoYT/MusicVideoDirector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FikoYT_MVD_AudioSplitter": {"input": {"required": {"audio_file_path": ["STRING", {"forceInput": true}], "segments": ["MVD_SEGMENTS"], "project_name": ["STRING", {"default": "Sarki", "multiline": false}], "output_format": [["mp3", "wav", "ogg"]]}, "optional": {"reuse_existing": ["BOOLEAN", {"default": false, "label_on": "Mevcut projeyi GUNCELLE", "label_off": "Yeni klasor olustur"}], "pre_padding_ms": ["INT", {"default": 500, "min": 0, "max": 5000, "step": 50}], "post_padding_ms": ["INT", {"default": 1000, "min": 0, "max": 8000, "step": 50}], "fade_ms": ["INT", {"default": 30, "min": 0, "max": 1000, "step": 10}], "mp3_quality": ["INT", {"default": 2, "min": 0, "max": 9, "step": 1}]}}, "input_order": {"required": ["audio_file_path", "segments", "project_name", "output_format"], "optional": ["reuse_existing", "pre_padding_ms", "post_padding_ms", "fade_ms", "mp3_quality"]}, "is_input_list": false, "output": ["MVD_SEGMENTS", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["segments", "project_dir", "report"], "name": "FikoYT_MVD_AudioSplitter", "display_name": "\u2702\ufe0f FikoYT | Audio Splitter", "description": "", "python_module": "custom_nodes.ComfyUI-MusicVideoDirector", "category": "FikoYT/MusicVideoDirector", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "FikoYT_MVD_OllamaPromptGen": {"input": {"required": {"segments": ["MVD_SEGMENTS"], "ollama_url": ["STRING", {"default": "http://127.0.0.1:11434", "multiline": false}], "ollama_model": [["qwen2.5vl:7b", "deepseek-v4-pro:cloud", "qwen3:8b-q4_K_M", "llama3.1:8b-instruct-q4_K_M", "llama3.2:1b-instruct-q4_K_M", "qwen2.5:7b-instruct-q4_K_M", "llama3.2:3b-instruct-q4_K_M", "tinyllama:1.1b-chat-v1-q4_K_M", "gpt-oss:20b", "qwen3:8b", "sorc/qwen3.5-claude-4.6-opus-q4:latest"], {"default": "qwen2.5vl:7b"}], "song_name": ["STRING", {"default": "", "multiline": false, "placeholder": "Sarki adi"}], "artist_style": ["STRING", {"default": "", "multiline": false, "placeholder": "orn. Haluk Levent tarzi"}], "song_description": ["STRING", {"default": "", "multiline": true, "placeholder": "Sarkinin konusu, atmosferi..."}], "color_palette": ["STRING", {"default": "natural lighting, balanced color grading, subtle warm tone", "multiline": false}], "camera_style": ["STRING", {"default": "medium shot tracking, eye-level, subject-focused", "multiline": false}], "main_location": ["STRING", {"default": "Istanbul Bosphorus, Turkey", "multiline": false}], "extra_style_notes": ["STRING", {"default": "", "multiline": true, "placeholder": "Ek gorsel notlar..."}], "ltx_resolution": [["1280x720", "1920x1080", "768x512"]], "ltx_clip_duration": ["INT", {"default": 5, "min": 2, "max": 10, "step": 1}], "list_handling_mode": [["Reference Guide (AI ilham alir)", "Strict Cycle (her segmente sirayla)", "Random Selection (her segmente rastgele)", "Free Interpretation (tum listeyi ipucu kabul et)"], {"default": "Reference Guide (AI ilham alir)", "tooltip": "Color palette / camera style / location alanlarinda VIRGUL veya YENI SATIR ile cok deger verildiginde nasil kullanilacagini belirler. Bos liste = tek deger normal."}], "prompt_structure_mode": [["Character-Focused (karakter once)", "Environment-Focused (ortam once)", "Action-Focused (etki/hareket once)", "Cycle Through (her segmente farkli yapi)", "Dynamic Choice (AI segmente gore secsin)"], {"default": "Character-Focused (karakter once)", "tooltip": "8-block prompt yapisinin SIRALANISI. Karakter once = sanatci her zaman cikis noktasi. Ortam once = lokasyon vurgulu. Etki once = aksiyon sahnesi. Cycle = her segment farkli sira (gorsel cesitlilik). Dynamic = AI secimini segment turune gore yapsin."}]}}, "input_order": {"required": ["segments", "ollama_url", "ollama_model", "song_name", "artist_style", "song_description", "color_palette", "camera_style", "main_location", "extra_style_notes", "ltx_resolution", "ltx_clip_duration", "list_handling_mode", "prompt_structure_mode"]}, "is_input_list": false, "output": ["MVD_PROMPT_LIST", "STRING"], "output_is_list": [false, false], "output_name": ["prompt_list", "prompt_json"], "name": "FikoYT_MVD_OllamaPromptGen", "display_name": "\ud83e\udd16 FikoYT | Ollama Prompt Gen", "description": "", "python_module": "custom_nodes.ComfyUI-MusicVideoDirector", "category": "FikoYT/MusicVideoDirector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FikoYT_MVD_CharacterBank": {"input": {"required": {"character_ids": ["STRING", {"default": "", "multiline": false, "placeholder": "Virg\u00fclle ayr\u0131lm\u0131\u015f ID'ler (\u00f6rn: lead_singer,guitarist) veya BO\u015e = t\u00fcm karakterler"}]}}, "input_order": {"required": ["character_ids"]}, "is_input_list": false, "output": ["MVD_CHAR_BANK", "STRING"], "output_is_list": [false, false], "output_name": ["bank", "info"], "name": "FikoYT_MVD_CharacterBank", "display_name": "\ud83c\udfad FikoYT | Character Bank (Global)", "description": "", "python_module": "custom_nodes.ComfyUI-MusicVideoDirector", "category": "FikoYT/MusicVideoDirector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FikoYT_MVD_CharacterLoader": {"input": {"required": {"character_id": [["Zekiye"]], "resize_to": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 64, "tooltip": "Square center-crop boyutu"}]}}, "input_order": {"required": ["character_id", "resize_to"]}, "is_input_list": false, "output": ["IMAGE", "STRING", "STRING", "STRING", "STRING"], "output_is_list": [false, false, false, false, false], "output_name": ["image", "name", "trigger", "notes", "char_id"], "name": "FikoYT_MVD_CharacterLoader", "display_name": "\ud83d\udc64 FikoYT | Character Loader (tek)", "description": "", "python_module": "custom_nodes.ComfyUI-MusicVideoDirector", "category": "FikoYT/MusicVideoDirector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FikoYT_MVD_CharacterRefsBatch": {"input": {"required": {"character_id": [["Zekiye"]], "resize_to": ["INT", {"default": 512, "min": 256, "max": 1024, "step": 64, "tooltip": "PuLID i\u00e7in 512, LoRA i\u00e7in 768-1024"}], "include_main_ref": ["BOOLEAN", {"default": true, "label_on": "Ana ref dahil", "label_off": "Sadece extras"}]}}, "input_order": {"required": ["character_id", "resize_to", "include_main_ref"]}, "is_input_list": false, "output": ["IMAGE", "STRING", "INT", "STRING"], "output_is_list": [false, false, false, false], "output_name": ["images_batch", "captions_joined", "count", "trigger"], "name": "FikoYT_MVD_CharacterRefsBatch", "display_name": "\ud83d\udcda FikoYT | Character Refs Batch (multi)", "description": "", "python_module": "custom_nodes.ComfyUI-MusicVideoDirector", "category": "FikoYT/MusicVideoDirector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FikoYT_MVD_CinematicPost": {"input": {"required": {"image": ["IMAGE"], "film_grain": ["FLOAT", {"default": 0.04, "min": 0.0, "max": 0.3, "step": 0.01, "tooltip": "0=off, 0.03-0.06 cinematic, 0.1+ heavy"}], "grain_mono": ["BOOLEAN", {"default": true, "label_on": "Mono grain (cinematic)", "label_off": "RGB grain (gritty)"}], "sharpen_amount": ["FLOAT", {"default": 0.4, "min": 0.0, "max": 2.0, "step": 0.05, "tooltip": "0=off, 0.3-0.5 dengeli, 1.0+ keskin"}], "sharpen_radius": ["FLOAT", {"default": 1.0, "min": 0.5, "max": 3.0, "step": 0.1}]}, "optional": {"color_match_ref": ["IMAGE", {"tooltip": "LAB color matching i\u00e7in referans g\u00f6rsel (varsa, sahneler aras\u0131 ton tutarl\u0131\u011f\u0131)"}], "color_match_strength": ["FLOAT", {"default": 0.6, "min": 0.0, "max": 1.0, "step": 0.05}]}}, "input_order": {"required": ["image", "film_grain", "grain_mono", "sharpen_amount", "sharpen_radius"], "optional": ["color_match_ref", "color_match_strength"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [false, false], "output_name": ["image", "report"], "name": "FikoYT_MVD_CinematicPost", "display_name": "\ud83c\udf9e FikoYT | Cinematic Post (Grain+Sharpen+ColorMatch)", "description": "", "python_module": "custom_nodes.ComfyUI-MusicVideoDirector", "category": "FikoYT/MusicVideoDirector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FikoYT_MVD_LoraStacker": {"input": {"required": {"model": ["MODEL"], "clip": ["CLIP"]}, "optional": {"lora_1": [["(yok)", "LTX2.3-22B_IC-LoRA-Cameraman_v1_10500.safetensors", "LTX2.3_AudioReactiveV1.safetensors", "Ltx2.3-Licon-VBVR-I2V-96000-R32.safetensors", "Penile_Praxis_V4.safetensors", "Qwen-Edit-2509-Multiple-angles.safetensors", "Qwen-Image-2512-Lightning-4steps-V1.0-fp32.safetensors", "Qwen-Image-Edit-2509-Lightning-4steps-V1.0-bf16.safetensors", "Qwen-Image-Lightning-4steps-V1.0.safetensors", "SexGod_Handjobs_LTX23_Rank64_v1.safetensors", "ltx-2-19b-ic-lora-detailer.safetensors", "ltx-2.3-22b-distilled-lora-384.safetensors", "ltx-2.3-22b-ic-lora-lipdub-0.9.safetensors", "ltx-2.3-22b-ic-lora-motion-track-control-ref0.5.safetensors", "ltx-2.3-22b-ic-lora-refocus.safetensors", "ltx-2.3-id-lora-talkvid-3k.safetensors", "ltx2.3-transition.safetensors", "ltx23_edit_anything_global_rank128_v1_9000steps_adamw.safetensors", "ltxdeepthroat_v01.safetensors"], {"default": "(yok)"}], "strength_1": ["FLOAT", {"default": 0.8, "min": -2.0, "max": 2.0, "step": 0.05}], "lora_2": [["(yok)", "LTX2.3-22B_IC-LoRA-Cameraman_v1_10500.safetensors", "LTX2.3_AudioReactiveV1.safetensors", "Ltx2.3-Licon-VBVR-I2V-96000-R32.safetensors", "Penile_Praxis_V4.safetensors", "Qwen-Edit-2509-Multiple-angles.safetensors", "Qwen-Image-2512-Lightning-4steps-V1.0-fp32.safetensors", "Qwen-Image-Edit-2509-Lightning-4steps-V1.0-bf16.safetensors", "Qwen-Image-Lightning-4steps-V1.0.safetensors", "SexGod_Handjobs_LTX23_Rank64_v1.safetensors", "ltx-2-19b-ic-lora-detailer.safetensors", "ltx-2.3-22b-distilled-lora-384.safetensors", "ltx-2.3-22b-ic-lora-lipdub-0.9.safetensors", "ltx-2.3-22b-ic-lora-motion-track-control-ref0.5.safetensors", "ltx-2.3-22b-ic-lora-refocus.safetensors", "ltx-2.3-id-lora-talkvid-3k.safetensors", "ltx2.3-transition.safetensors", "ltx23_edit_anything_global_rank128_v1_9000steps_adamw.safetensors", "ltxdeepthroat_v01.safetensors"], {"default": "(yok)"}], "strength_2": ["FLOAT", {"default": 0.8, "min": -2.0, "max": 2.0, "step": 0.05}], "lora_3": [["(yok)", "LTX2.3-22B_IC-LoRA-Cameraman_v1_10500.safetensors", "LTX2.3_AudioReactiveV1.safetensors", "Ltx2.3-Licon-VBVR-I2V-96000-R32.safetensors", "Penile_Praxis_V4.safetensors", "Qwen-Edit-2509-Multiple-angles.safetensors", "Qwen-Image-2512-Lightning-4steps-V1.0-fp32.safetensors", "Qwen-Image-Edit-2509-Lightning-4steps-V1.0-bf16.safetensors", "Qwen-Image-Lightning-4steps-V1.0.safetensors", "SexGod_Handjobs_LTX23_Rank64_v1.safetensors", "ltx-2-19b-ic-lora-detailer.safetensors", "ltx-2.3-22b-distilled-lora-384.safetensors", "ltx-2.3-22b-ic-lora-lipdub-0.9.safetensors", "ltx-2.3-22b-ic-lora-motion-track-control-ref0.5.safetensors", "ltx-2.3-22b-ic-lora-refocus.safetensors", "ltx-2.3-id-lora-talkvid-3k.safetensors", "ltx2.3-transition.safetensors", "ltx23_edit_anything_global_rank128_v1_9000steps_adamw.safetensors", "ltxdeepthroat_v01.safetensors"], {"default": "(yok)"}], "strength_3": ["FLOAT", {"default": 0.8, "min": -2.0, "max": 2.0, "step": 0.05}], "lora_specs_json": ["STRING", {"default": "", "multiline": true, "placeholder": "[{\"filename\":\"my_lora.safetensors\",\"strength\":0.7}, ...] (ek manuel LoRA list, opsiyonel)"}], "character_bank": ["MVD_CHAR_BANK"], "include_character_loras": ["BOOLEAN", {"default": true, "label_on": "Karakter LoRA'lari OTOMATIK uygula", "label_off": "Sadece manuel LoRA'lar"}]}}, "input_order": {"required": ["model", "clip"], "optional": ["lora_1", "strength_1", "lora_2", "strength_2", "lora_3", "strength_3", "lora_specs_json", "character_bank", "include_character_loras"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "STRING"], "output_is_list": [false, false, false], "output_name": ["model", "clip", "applied_info"], "name": "FikoYT_MVD_LoraStacker", "display_name": "\ud83d\udce6 FikoYT | LoRA Stacker (multi + character-aware)", "description": "", "python_module": "custom_nodes.ComfyUI-MusicVideoDirector", "category": "FikoYT/MusicVideoDirector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FikoYT_LLMChat": {"input": {"required": {"system_prompt": ["STRING", {"multiline": true, "default": "You are a helpful assistant. Respond concisely."}], "user_prompt": ["STRING", {"multiline": true, "default": "Hello! Tell me a fun fact about music."}]}, "optional": {"engine": [["auto", "ollama", "local"], {"default": "auto", "tooltip": "auto: Settings'teki llm_engine; ollama: harici; local: in-process GGUF"}], "model": [["(otomatik)", "local:supergemma4-26b-uncensored-fast-v2-Q4_K_M.gguf"], {"default": "(otomatik)", "tooltip": "Bo\u015fsa OllamaPromptGen'in modeli; 'local:' prefix = GGUF dosyas\u0131"}], "model_override": ["STRING", {"default": "supergemma4-26b-uncensored-fast-v2-Q4_K_M.gguf", "multiline": false, "placeholder": "Local: GGUF dosya ad\u0131 | Ollama: model tag"}], "ollama_url": ["STRING", {"default": "http://127.0.0.1:11434"}], "temperature": ["FLOAT", {"default": 0.6, "min": 0.0, "max": 2.0, "step": 0.05}], "max_tokens": ["INT", {"default": 2048, "min": 64, "max": 32768, "step": 64}], "timeout": ["INT", {"default": 300, "min": 10, "max": 1200, "tooltip": "Yan\u0131t i\u00e7in max saniye"}], "auto_free_comfy": ["BOOLEAN", {"default": true, "label_on": "Comfy VRAM auto-free (\u00f6nerilen)", "label_off": "Comfy VRAM serbest b\u0131rakma"}], "auto_unload_after": ["BOOLEAN", {"default": false, "label_on": "Bitince model unload", "label_off": "Model bellekte kals\u0131n"}]}}, "input_order": {"required": ["system_prompt", "user_prompt"], "optional": ["engine", "model", "model_override", "ollama_url", "temperature", "max_tokens", "timeout", "auto_free_comfy", "auto_unload_after"]}, "is_input_list": false, "output": ["STRING", "STRING"], "output_is_list": [false, false], "output_name": ["response", "info"], "name": "FikoYT_LLMChat", "display_name": "\ud83e\udd99 FikoYT | LLM Chat (Ollama / Local GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-MusicVideoDirector", "category": "FikoYT/MusicVideoDirector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FikoYT_MVD_SegmentImageGen": {"input": {"required": {"prompt_list": ["MVD_PROMPT_LIST"], "model": ["MODEL"], "clip": ["CLIP"], "vae": ["VAE"], "width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 64}], "height": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 64}], "steps": ["INT", {"default": 20, "min": 1, "max": 150, "tooltip": "Flux Dev: 20, Flux Schnell: 4, SDXL: 25-30"}], "cfg": ["FLOAT", {"default": 1.0, "min": 1.0, "max": 20.0, "step": 0.5, "tooltip": "Flux: 1.0 (distilled), SDXL: 5-8"}], "flux_guidance": ["FLOAT", {"default": 3.5, "min": 0.0, "max": 10.0, "step": 0.1, "tooltip": "Flux Dev: 2.5-4.0 (SART). SDXL: 0 (devre disi)"}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}], "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"], {"default": "euler"}], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"], {"default": "beta"}]}, "optional": {"project_dir": ["STRING", {"default": "", "multiline": false, "tooltip": "Bos birakirsan otomatik 'Sarki' projesi olusturulur. AudioLoader veya SmartSegmenter cikisini baglayabilirsin."}], "skip_existing": ["BOOLEAN", {"default": true, "label_on": "Mevcut PNG'leri ATLA", "label_off": "TUMUNU yeniden uret"}], "extra_positive": ["STRING", {"default": "subject in sharp focus, detailed face, eyes clearly visible, professional photography, cinematic lighting, high detail", "multiline": false}], "target_index": ["INT", {"default": -1, "min": -1, "max": 999, "step": 1, "tooltip": "-1 = TUM segmentler, 0+ = sadece bu indexteki"}], "character_image": ["IMAGE"], "character_notes": ["STRING", {"default": "", "multiline": true, "placeholder": "Karakter ozellikleri: 'kisa kahverengi sacli, mavi gozlu kadin, 30 yas, hafif gulumseme, beyaz keten gomlek'. Degisiklikler de buraya: 'sacini topla', 'gulumsemeden ciddi yuze'."}], "scene_image": ["IMAGE"], "scene_notes": ["STRING", {"default": "", "multiline": true, "placeholder": "Ortam: 'Istanbul Galata kulesi onunde, gun batimi, narin sis, yagmur sonrasi islak tas zemin'."}], "ref_strength": ["FLOAT", {"default": 0.7, "min": 0.0, "max": 1.5, "step": 0.05, "tooltip": "PuLID agirligi \u2014 0.7 dengeli, 0.9+ asiri (model bozulabilir)"}], "vlm_model": ["STRING", {"default": "qwen2.5vl:7b", "multiline": false, "placeholder": "Ollama vision modeli (orn: qwen2.5vl:7b, llava:13b, llama3.2-vision)"}], "vlm_url": ["STRING", {"default": "http://127.0.0.1:11434", "multiline": false}], "character_bank": ["MVD_CHAR_BANK"], "disable_pulid": ["BOOLEAN", {"default": false, "label_on": "PuLID KAPALI (text-only)", "label_off": "PuLID ACIK (var ise)"}], "disable_char_bank": ["BOOLEAN", {"default": false, "label_on": "Bank KAPALI", "label_off": "Bank ACIK"}]}}, "input_order": {"required": ["prompt_list", "model", "clip", "vae", "width", "height", "steps", "cfg", "flux_guidance", "seed", "sampler_name", "scheduler"], "optional": ["project_dir", "skip_existing", "extra_positive", "target_index", "character_image", "character_notes", "scene_image", "scene_notes", "ref_strength", "vlm_model", "vlm_url", "character_bank", "disable_pulid", "disable_char_bank"]}, "is_input_list": false, "output": ["MVD_PROMPT_LIST", "IMAGE", "STRING"], "output_is_list": [false, false, false], "output_name": ["prompt_list", "last_image", "report"], "name": "FikoYT_MVD_SegmentImageGen", "display_name": "\ud83d\uddbc FikoYT | Segment Image Gen", "description": "", "python_module": "custom_nodes.ComfyUI-MusicVideoDirector", "category": "FikoYT/MusicVideoDirector", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "FikoYT_MVD_PromptOutput": {"input": {"required": {"prompt_list": ["MVD_PROMPT_LIST"], "segment_index": ["INT", {"default": 0, "min": 0, "max": 99, "step": 1}]}}, "input_order": {"required": ["prompt_list", "segment_index"]}, "is_input_list": false, "output": ["STRING", "STRING", "STRING", "STRING", "FLOAT", "FLOAT", "STRING", "STRING"], "output_is_list": [false, false, false, false, false, false, false, false], "output_name": ["positive_prompt", "negative_prompt", "image_prompt", "lyrics", "start_time", "end_time", "audio_path", "image_path"], "name": "FikoYT_MVD_PromptOutput", "display_name": "\ud83d\udce4 FikoYT | Prompt Output", "description": "", "python_module": "custom_nodes.ComfyUI-MusicVideoDirector", "category": "FikoYT/MusicVideoDirector", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FikoYT_MVD_PromptDisplay": {"input": {"required": {"prompt_list": ["MVD_PROMPT_LIST"], "song_name": ["STRING", {"default": "Sarki"}]}}, "input_order": {"required": ["prompt_list", "song_name"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["report"], "name": "FikoYT_MVD_PromptDisplay", "display_name": "\ud83d\udccb FikoYT | Prompt Display", "description": "", "python_module": "custom_nodes.ComfyUI-MusicVideoDirector", "category": "FikoYT/MusicVideoDirector", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "FikoYT_MVD_ProjectSaver": {"input": {"required": {"prompt_list": ["MVD_PROMPT_LIST"], "song_name": ["STRING", {"default": "Sarki"}], "artist": ["STRING", {"default": ""}]}, "optional": {"project_dir": ["STRING", {"default": "", "multiline": false, "tooltip": "Bos birakirsan song_name'den proje olusturulur."}], "segments": ["MVD_SEGMENTS"], "notes": ["STRING", {"default": "", "multiline": true, "placeholder": "Proje notlari (opsiyonel)"}]}}, "input_order": {"required": ["prompt_list", "song_name", "artist"], "optional": ["project_dir", "segments", "notes"]}, "is_input_list": false, "output": ["STRING", "STRING"], "output_is_list": [false, false], "output_name": ["project_dir", "summary"], "name": "FikoYT_MVD_ProjectSaver", "display_name": "\ud83d\udcbe FikoYT | Project Saver", "description": "", "python_module": "custom_nodes.ComfyUI-MusicVideoDirector", "category": "FikoYT/MusicVideoDirector", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "PulidFluxModelLoader": {"input": {"required": {"pulid_file": [["pulid_flux_v0.9.1.safetensors"]]}}, "input_order": {"required": ["pulid_file"]}, "is_input_list": false, "output": ["PULIDFLUX"], "output_is_list": [false], "output_name": ["PULIDFLUX"], "name": "PulidFluxModelLoader", "display_name": "Load PuLID Flux Model", "description": "", "python_module": "custom_nodes.ComfyUI_PuLID_Flux_ll", "category": "pulid", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PulidFluxInsightFaceLoader": {"input": {"required": {"provider": [["CPU", "CUDA", "ROCM"]]}}, "input_order": {"required": ["provider"]}, "is_input_list": false, "output": ["FACEANALYSIS"], "output_is_list": [false], "output_name": ["FACEANALYSIS"], "name": "PulidFluxInsightFaceLoader", "display_name": "Load InsightFace (PuLID Flux)", "description": "", "python_module": "custom_nodes.ComfyUI_PuLID_Flux_ll", "category": "pulid", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PulidFluxEvaClipLoader": {"input": {"required": {}}, "input_order": {"required": []}, "is_input_list": false, "output": ["EVA_CLIP"], "output_is_list": [false], "output_name": ["EVA_CLIP"], "name": "PulidFluxEvaClipLoader", "display_name": "Load Eva Clip (PuLID Flux)", "description": "", "python_module": "custom_nodes.ComfyUI_PuLID_Flux_ll", "category": "pulid", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ApplyPulidFlux": {"input": {"required": {"model": ["MODEL"], "pulid_flux": ["PULIDFLUX"], "eva_clip": ["EVA_CLIP"], "face_analysis": ["FACEANALYSIS"], "image": ["IMAGE"], "weight": ["FLOAT", {"default": 1.0, "min": -1.0, "max": 5.0, "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}]}, "optional": {"attn_mask": ["MASK"], "options": ["OPTIONS"]}, "hidden": {"unique_id": "UNIQUE_ID"}}, "input_order": {"required": ["model", "pulid_flux", "eva_clip", "face_analysis", "image", "weight", "start_at", "end_at"], "optional": ["attn_mask", "options"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ApplyPulidFlux", "display_name": "Apply PuLID Flux", "description": "", "python_module": "custom_nodes.ComfyUI_PuLID_Flux_ll", "category": "pulid", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "FixPulidFluxPatch": {"input": {"required": {"model": ["MODEL"]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "FixPulidFluxPatch", "display_name": "Fix PuLID Flux Patch", "description": "", "python_module": "custom_nodes.ComfyUI_PuLID_Flux_ll", "category": "pulid", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PulidFluxOptions": {"input": {"required": {"input_faces_order": [["left-right", "right-left", "top-bottom", "bottom-top", "small-large", "large-small"], {"default": "large-small", "tooltip": "left-right: Sort the left boundary of bbox by column from left to right.\nright-left: Reverse order of left-right (Sort the left boundary of bbox by column from right to left).\ntop-bottom: Sort the top boundary of bbox by row from top to bottom.\nbottom-top: Reverse order of top-bottom (Sort the top boundary of bbox by row from bottom to top).\nsmall-large: Sort the area of bbox from small to large.\nlarge-small: Sort the area of bbox from large to small."}], "input_faces_index": ["INT", {"default": 0, "min": 0, "max": 1000, "step": 1, "tooltip": "If the value is greater than the size of bboxes, will set value to 0."}], "input_faces_align_mode": ["INT", {"default": 1, "min": 0, "max": 1, "step": 1, "tooltip": "Align face mode.\n0: align_face and embed_face use different detectors. The results maybe different.\n1: align_face and embed_face use the same detector."}]}}, "input_order": {"required": ["input_faces_order", "input_faces_index", "input_faces_align_mode"]}, "is_input_list": false, "output": ["OPTIONS"], "output_is_list": [false], "output_name": ["OPTIONS"], "name": "PulidFluxOptions", "display_name": "Pulid Flux Options", "description": "", "python_module": "custom_nodes.ComfyUI_PuLID_Flux_ll", "category": "pulid", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PulidFluxFaceDetector": {"input": {"required": {"face_analysis": ["FACEANALYSIS"], "image": ["IMAGE"], "options": ["OPTIONS"]}}, "input_order": {"required": ["face_analysis", "image", "options"]}, "is_input_list": false, "output": ["IMAGE", "IMAGE", "IMAGE"], "output_is_list": [true, true, true], "output_name": ["embed_face", "align_face", "face_bbox_image"], "name": "PulidFluxFaceDetector", "display_name": "Pulid Flux Face Detector", "description": "", "python_module": "custom_nodes.ComfyUI_PuLID_Flux_ll", "category": "pulid", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PulidFluxFaceNetLoader": {"input": {"required": {"provider": [["CPU", "CUDA"]]}}, "input_order": {"required": ["provider"]}, "is_input_list": false, "output": ["FACEANALYSIS"], "output_is_list": [false], "output_name": ["FACEANALYSIS"], "name": "PulidFluxFaceNetLoader", "display_name": "Load FaceNet (PuLID Flux)", "description": "", "python_module": "custom_nodes.ComfyUI_PuLID_Flux_ll", "category": "pulid", "output_node": false, "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": []}}