{
  "AddNoise": {
    "display_name": "AddNoise",
    "inputs": {
      "model": {
        "name": "model"
      },
      "noise": {
        "name": "noise"
      },
      "sigmas": {
        "name": "sigmas"
      },
      "latent_image": {
        "name": "latent_image"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "AddTextPrefix": {
    "display_name": "Add Text Prefix (DEPRECATED)",
    "inputs": {
      "texts": {
        "name": "texts",
        "tooltip": "Text to process."
      },
      "prefix": {
        "name": "prefix",
        "tooltip": "Prefix to add."
      }
    },
    "outputs": {
      "0": {
        "name": "texts",
        "tooltip": "Processed texts"
      }
    }
  },
  "AddTextSuffix": {
    "display_name": "Add Text Suffix (DEPRECATED)",
    "inputs": {
      "texts": {
        "name": "texts",
        "tooltip": "Text to process."
      },
      "suffix": {
        "name": "suffix",
        "tooltip": "Suffix to add."
      }
    },
    "outputs": {
      "0": {
        "name": "texts",
        "tooltip": "Processed texts"
      }
    }
  },
  "AdjustBrightness": {
    "display_name": "Adjust Brightness",
    "description": "Adjust the brightness of an image.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "Image to process."
      },
      "factor": {
        "name": "factor",
        "tooltip": "Brightness factor. 1.0 = no change, <1.0 = darker, >1.0 = brighter."
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": "Processed images"
      }
    }
  },
  "AdjustContrast": {
    "display_name": "Adjust Contrast",
    "description": "Adjust the contrast of an image.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "Image to process."
      },
      "factor": {
        "name": "factor",
        "tooltip": "Contrast factor. 1.0 = no change, <1.0 = less contrast, >1.0 = more contrast."
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": "Processed images"
      }
    }
  },
  "AlignYourStepsScheduler": {
    "display_name": "AlignYourStepsScheduler",
    "inputs": {
      "model_type": {
        "name": "model_type"
      },
      "steps": {
        "name": "steps"
      },
      "denoise": {
        "name": "denoise"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "AnimaLLLiteApply": {
    "display_name": "Apply Anima LLLite",
    "inputs": {
      "model": {
        "name": "model"
      },
      "model_patch": {
        "name": "model_patch"
      },
      "image": {
        "name": "image"
      },
      "strength": {
        "name": "strength"
      },
      "start_percent": {
        "name": "start_percent"
      },
      "end_percent": {
        "name": "end_percent"
      },
      "mask": {
        "name": "mask"
      }
    }
  },
  "APG": {
    "display_name": "Adaptive Projected Guidance",
    "inputs": {
      "model": {
        "name": "model"
      },
      "eta": {
        "name": "eta",
        "tooltip": "Controls the scale of the parallel guidance vector. Default CFG behavior at a setting of 1."
      },
      "norm_threshold": {
        "name": "norm_threshold",
        "tooltip": "Normalize guidance vector to this value, normalization disable at a setting of 0."
      },
      "momentum": {
        "name": "momentum",
        "tooltip": "Controls a running average of guidance during diffusion, disabled at a setting of 0."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ARVideoI2V": {
    "display_name": "ARVideoI2V",
    "inputs": {
      "model": {
        "name": "model"
      },
      "vae": {
        "name": "vae"
      },
      "start_image": {
        "name": "start_image"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "tooltip": null
      }
    }
  },
  "AudioAdjustVolume": {
    "display_name": "Adjust Audio Volume",
    "description": "Adjust the volume of the audio by a specified amount in decibels (dB).",
    "inputs": {
      "audio": {
        "name": "audio"
      },
      "volume": {
        "name": "volume",
        "tooltip": "Volume adjustment in decibels (dB). 0 = no change, +6 = double, -6 = half, etc"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "AudioConcat": {
    "display_name": "Concatenate Audio",
    "description": "Concatenates the audio1 to audio2 in the specified direction.",
    "inputs": {
      "audio1": {
        "name": "audio1"
      },
      "audio2": {
        "name": "audio2"
      },
      "direction": {
        "name": "direction",
        "tooltip": "Whether to append audio2 after or before audio1."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "AudioEncoderEncode": {
    "display_name": "AudioEncoderEncode",
    "inputs": {
      "audio_encoder": {
        "name": "audio_encoder"
      },
      "audio": {
        "name": "audio"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "AudioEncoderLoader": {
    "display_name": "Load Audio Encoder",
    "inputs": {
      "audio_encoder_name": {
        "name": "audio_encoder_name"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "AudioEqualizer3Band": {
    "display_name": "Audio Equalizer (3-Band)",
    "inputs": {
      "audio": {
        "name": "audio"
      },
      "low_gain_dB": {
        "name": "low_gain_dB",
        "tooltip": "Gain for Low frequencies (Bass)"
      },
      "low_freq": {
        "name": "low_freq",
        "tooltip": "Cutoff frequency for Low shelf"
      },
      "mid_gain_dB": {
        "name": "mid_gain_dB",
        "tooltip": "Gain for Mid frequencies"
      },
      "mid_freq": {
        "name": "mid_freq",
        "tooltip": "Center frequency for Mids"
      },
      "mid_q": {
        "name": "mid_q",
        "tooltip": "Q factor (bandwidth) for Mids"
      },
      "high_gain_dB": {
        "name": "high_gain_dB",
        "tooltip": "Gain for High frequencies (Treble)"
      },
      "high_freq": {
        "name": "high_freq",
        "tooltip": "Cutoff frequency for High shelf"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "AudioMerge": {
    "display_name": "Merge Audio",
    "description": "Combine two audio tracks by overlaying their waveforms.",
    "inputs": {
      "audio1": {
        "name": "audio1"
      },
      "audio2": {
        "name": "audio2"
      },
      "merge_method": {
        "name": "merge_method",
        "tooltip": "The method used to combine the audio waveforms."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "BasicGuider": {
    "display_name": "Basic Guider",
    "inputs": {
      "model": {
        "name": "model"
      },
      "conditioning": {
        "name": "conditioning"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "BasicScheduler": {
    "display_name": "BasicScheduler",
    "inputs": {
      "model": {
        "name": "model"
      },
      "scheduler": {
        "name": "scheduler"
      },
      "steps": {
        "name": "steps"
      },
      "denoise": {
        "name": "denoise"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "BatchImagesNode": {
    "display_name": "Batch Images",
    "inputs": {
      "images": {
        "name": "images"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "BatchLatentsNode": {
    "display_name": "Batch Latents",
    "inputs": {
      "latents": {
        "name": "latents"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "BatchMasksNode": {
    "display_name": "Batch Masks",
    "inputs": {
      "masks": {
        "name": "masks"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "BeebleSwitchXImageEdit": {
    "display_name": "Beeble SwitchX Image Edit",
    "description": "Edit a single image with Beeble SwitchX. Switches anything in the scene (background, lighting, costume) while preserving the original subject's pixels. Provide a reference image and/or text prompt to describe the new look. Max ~2.77MP.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Text description of the desired output (max 2000 chars). At least one of 'prompt' or 'reference_image' is required."
      },
      "alpha_mode": {
        "name": "alpha_mode",
        "tooltip": "Controls how SwitchX decides what to keep vs. regenerate. 'auto' isolates the main subject automatically. 'fill' regenerates the entire frame while preserving geometry. 'select' propagates a first-frame keyframe across the clip. 'custom' uses a per-frame alpha matte you provide."
      },
      "max_resolution": {
        "name": "max_resolution",
        "tooltip": "Maximum output resolution."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "reference_image": {
        "name": "reference_image",
        "tooltip": "Reference image whose look (background, lighting, costume) the result should adopt. At least one of 'reference_image' or 'prompt' is required."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "image",
        "tooltip": null
      },
      "1": {
        "name": "alpha",
        "tooltip": "The alpha matte Beeble used. Empty for 'fill' mode, which has no separate matte."
      }
    }
  },
  "BeebleSwitchXVideoEdit": {
    "display_name": "Beeble SwitchX Video Edit",
    "description": "Edit a video with Beeble SwitchX. Switches anything in the scene (background, lighting, costume) while preserving the original subject's pixels and motion. Provide a reference image and/or text prompt to describe the new look. Max 240 frames, max ~2.77MP per frame.",
    "inputs": {
      "video": {
        "name": "video"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Text description of the desired output (max 2000 chars). At least one of 'prompt' or 'reference_image' is required."
      },
      "alpha_mode": {
        "name": "alpha_mode",
        "tooltip": "Controls how SwitchX decides what to keep vs. regenerate. 'auto' isolates the main subject automatically. 'fill' regenerates the entire frame while preserving geometry. 'select' propagates a first-frame keyframe across the clip. 'custom' uses a per-frame alpha matte you provide."
      },
      "max_resolution": {
        "name": "max_resolution",
        "tooltip": "Maximum output resolution."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "reference_image": {
        "name": "reference_image",
        "tooltip": "Reference image whose look (background, lighting, costume) the result should adopt. At least one of 'reference_image' or 'prompt' is required."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "video",
        "tooltip": null
      },
      "1": {
        "name": "alpha",
        "tooltip": "The alpha matte Beeble used. Empty for 'fill' mode, which has no separate matte."
      }
    }
  },
  "BerniniConditioning": {
    "display_name": "Bernini Conditioning",
    "description": "Conditioning node for Bernini in-context video/image conditioning. It can be used for the following tasks: t2v (text-to-video), v2v (video-to-video), rv2v (reference-guided video editing), r2v (reference-to-video), ads2v (insert image/video into video).Reference images injected as in-context tokens (r2v, rv2v) are encoded independently at their own native aspect ratio (long edge capped at ref_max_size)",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "source_video": {
        "name": "source_video",
        "tooltip": "Source video to edit or restyle (v2v, rv2v). Resized to width/height and trimmed to length."
      },
      "reference_video": {
        "name": "reference_video",
        "tooltip": "Video to insert into the source video (ads2v)."
      },
      "reference_images": {
        "name": "reference_images"
      },
      "ref_max_size": {
        "name": "ref_max_size",
        "tooltip": "Max size for the long edge of reference_video and reference_images. Resized with preserved aspect ratio and snapped to 16px."
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "BetaSamplingScheduler": {
    "display_name": "BetaSamplingScheduler",
    "inputs": {
      "model": {
        "name": "model"
      },
      "steps": {
        "name": "steps"
      },
      "alpha": {
        "name": "alpha"
      },
      "beta": {
        "name": "beta"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "BriaImageEditNode": {
    "display_name": "Bria FIBO Image Edit",
    "description": "Edit images using Bria latest model",
    "inputs": {
      "model": {
        "name": "model"
      },
      "image": {
        "name": "image"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Instruction to edit image"
      },
      "negative_prompt": {
        "name": "negative_prompt"
      },
      "structured_prompt": {
        "name": "structured_prompt",
        "tooltip": "A string containing the structured edit prompt in JSON format. Use this instead of usual prompt for precise, programmatic control."
      },
      "seed": {
        "name": "seed"
      },
      "guidance_scale": {
        "name": "guidance_scale",
        "tooltip": "Higher value makes the image follow the prompt more closely."
      },
      "steps": {
        "name": "steps"
      },
      "moderation": {
        "name": "moderation",
        "tooltip": "Moderation settings"
      },
      "mask": {
        "name": "mask",
        "tooltip": "If omitted, the edit applies to the entire image."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "structured_prompt",
        "tooltip": null
      }
    }
  },
  "BriaRemoveImageBackground": {
    "display_name": "Bria Remove Image Background",
    "description": "Remove the background from an image using Bria RMBG 2.0.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "moderation": {
        "name": "moderation",
        "tooltip": "Moderation settings"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "BriaRemoveVideoBackground": {
    "display_name": "Bria Remove Video Background",
    "description": "Remove the background from a video using Bria. ",
    "inputs": {
      "video": {
        "name": "video"
      },
      "background_color": {
        "name": "background_color",
        "tooltip": "Background color for the output video."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "BriaTransparentVideoBackground": {
    "display_name": "Bria Remove Video Background (Transparent)",
    "description": "Remove the background from a video using Bria and return the cut-out frames plus an alpha mask. Connect both to a compositing node, or feed them to Save WEBM to write a transparent video.",
    "inputs": {
      "video": {
        "name": "video"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": null
      },
      "1": {
        "name": "mask",
        "tooltip": null
      }
    }
  },
  "BriaVideoGreenScreen": {
    "display_name": "Bria Video Green Screen",
    "description": "Replace a video's background with a solid chroma-key screen using Bria.",
    "inputs": {
      "video": {
        "name": "video"
      },
      "green_shade": {
        "name": "green_shade",
        "tooltip": "Solid chroma-key shade applied behind the foreground: broadcast_green (#00B140), chroma_green (#00FF00), or blue_screen (#0000FF)."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "BriaVideoReplaceBackground": {
    "display_name": "Bria Video Replace Background",
    "description": "Replace a video's background with a supplied image or video using Bria. The output keeps the foreground's resolution and frame rate; a background with a different aspect ratio is stretched to fit, so match it for undistorted results.",
    "inputs": {
      "video": {
        "name": "video",
        "tooltip": "Foreground video whose background is replaced."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "background_image": {
        "name": "background_image",
        "tooltip": "Background image to composite behind the foreground. Provide either a background image or a background video, not both."
      },
      "background_video": {
        "name": "background_video",
        "tooltip": "Background video to composite behind the foreground. Provide either a background image or a background video, not both."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "BuildJsonPromptIdeogram": {
    "display_name": "Build JSON Prompt (Ideogram)",
    "description": "Build a JSON prompt for the Ideogram 4 model.",
    "inputs": {
      "element": {
        "name": "element",
        "tooltip": "Prompt elements from the node Create Bounding Boxes."
      },
      "high_level_description": {
        "name": "high_level_description",
        "tooltip": "Optional description of the image in one or two sentences. Strongly recommended."
      },
      "background": {
        "name": "background",
        "tooltip": "Mandatory description of the image background or environment."
      },
      "style": {
        "name": "style"
      },
      "aesthetics": {
        "name": "aesthetics",
        "tooltip": "Mandatory aesthetic keywords (e.g. moody, cinematic, desaturated)."
      },
      "lighting": {
        "name": "lighting",
        "tooltip": "Mandatory lighting description (e.g. golden hour, rim light, dramatic shadows)."
      },
      "medium": {
        "name": "medium",
        "tooltip": "Mandatory medium type (e.g. photograph, illustration, 3d_render, painting, graphic_design). When style = photo, set to photograph."
      },
      "color_palette": {
        "name": "color_palette",
        "tooltip": "Hex color codes that steer the image's dominant colors. Up to 16 entries."
      }
    },
    "outputs": {
      "0": {
        "name": "prompt",
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Seedance 2.0 for maximum quality; Fast for speed optimization; Mini for the fastest, lowest-cost generation."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add a watermark to the video."
      },
      "first_frame": {
        "name": "first_frame",
        "tooltip": "First frame image for the video."
      },
      "last_frame": {
        "name": "last_frame",
        "tooltip": "Last frame image for the video."
      },
      "first_frame_asset_id": {
        "name": "first_frame_asset_id",
        "tooltip": "Seedance asset_id to use as the first frame. Mutually exclusive with the first_frame image input."
      },
      "last_frame_asset_id": {
        "name": "last_frame_asset_id",
        "tooltip": "Seedance asset_id to use as the last frame. Mutually exclusive with the last_frame image input."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_generate_audio": {
        "name": "generate_audio"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_ratio": {
        "name": "ratio"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Seedance 2.0 for maximum quality; Fast for speed optimization; Mini for the fastest, lowest-cost generation."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add a watermark to the video."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_auto_downscale": {
        "name": "auto_downscale"
      },
      "model_auto_upscale": {
        "name": "auto_upscale"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_generate_audio": {
        "name": "generate_audio"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_ratio": {
        "name": "ratio"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ByteDance2TextToVideoNode": {
    "display_name": "ByteDance Seedance 2.0 Text to Video",
    "description": "Generate video using Seedance 2.0 models based on a text prompt.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Seedance 2.0 for maximum quality; Fast for speed optimization; Mini for the fastest, lowest-cost generation."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add a watermark to the video."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_generate_audio": {
        "name": "generate_audio"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_ratio": {
        "name": "ratio"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "image": {
        "name": "image",
        "tooltip": "Image to register as a personal asset."
      },
      "group_id": {
        "name": "group_id",
        "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."
      }
    },
    "outputs": {
      "0": {
        "name": "asset_id",
        "tooltip": null
      },
      "1": {
        "name": "group_id",
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "video": {
        "name": "video",
        "tooltip": "Video to register as a personal asset."
      },
      "group_id": {
        "name": "group_id",
        "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."
      }
    },
    "outputs": {
      "0": {
        "name": "asset_id",
        "tooltip": null
      },
      "1": {
        "name": "group_id",
        "tooltip": null
      }
    }
  },
  "ByteDanceFirstLastFrameNode": {
    "display_name": "ByteDance First-Last-Frame to Video",
    "description": "Generate video using prompt and first and last frames.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "The text prompt used to generate the video."
      },
      "first_frame": {
        "name": "first_frame",
        "tooltip": "First frame to be used for the video."
      },
      "last_frame": {
        "name": "last_frame",
        "tooltip": "Last frame to be used for the video."
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "The resolution of the output video."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "The aspect ratio of the output video."
      },
      "duration": {
        "name": "duration",
        "tooltip": "The duration of the output video in seconds."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "camera_fixed": {
        "name": "camera_fixed",
        "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."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an \"AI generated\" watermark to the video."
      },
      "generate_audio": {
        "name": "generate_audio",
        "tooltip": "This parameter is ignored for any model except seedance-1-5-pro."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ByteDanceImageNode": {
    "display_name": "ByteDance Image",
    "description": "Generate images using ByteDance models via api based on prompt",
    "inputs": {
      "model": {
        "name": "model"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "The text prompt used to generate the image"
      },
      "size_preset": {
        "name": "size_preset",
        "tooltip": "Pick a recommended size. Select Custom to use the width and height below"
      },
      "width": {
        "name": "width",
        "tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`"
      },
      "height": {
        "name": "height",
        "tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation"
      },
      "guidance_scale": {
        "name": "guidance_scale",
        "tooltip": "Higher value makes the image follow the prompt more closely"
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an \"AI generated\" watermark to the image"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ByteDanceImageReferenceNode": {
    "display_name": "ByteDance Reference Images to Video",
    "description": "Generate video using prompt and reference images.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "The text prompt used to generate the video."
      },
      "images": {
        "name": "images",
        "tooltip": "One to four images."
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "The resolution of the output video."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "The aspect ratio of the output video."
      },
      "duration": {
        "name": "duration",
        "tooltip": "The duration of the output video in seconds."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an \"AI generated\" watermark to the video."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ByteDanceImageToVideoNode": {
    "display_name": "ByteDance Image to Video",
    "description": "Generate video using ByteDance models via api based on image and prompt",
    "inputs": {
      "model": {
        "name": "model"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "The text prompt used to generate the video."
      },
      "image": {
        "name": "image",
        "tooltip": "First frame to be used for the video."
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "The resolution of the output video."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "The aspect ratio of the output video."
      },
      "duration": {
        "name": "duration",
        "tooltip": "The duration of the output video in seconds."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "camera_fixed": {
        "name": "camera_fixed",
        "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."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an \"AI generated\" watermark to the video."
      },
      "generate_audio": {
        "name": "generate_audio",
        "tooltip": "This parameter is ignored for any model except seedance-1-5-pro."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ByteDanceSeedAudio": {
    "display_name": "ByteDance Seed Audio 1.0",
    "description": "Generate speech, music, sound effects and multi-speaker dialogue from a single prompt with ByteDance Seed Audio 1.0. Describe the voice(s), emotion, ambience, background music and sound effects in the prompt, and include the lines to speak. Optionally pick a built-in preset voice, clone voices from up to 3 reference clips (tagged {'@'}Audio1-3 in the prompt), or derive a voice from a character image. Up to 2 minutes of audio per run. The multilingual model supports 20 languages and timestamp-based timing control.",
    "inputs": {
      "text_prompt": {
        "name": "text_prompt",
        "tooltip": "Describe the voice(s), emotion, pacing, ambience, background music and sound effects, and include the lines to speak (name characters inline for dialogue). In 'audio reference' mode, refer to connected clips by order as @Audio1, @Audio2, @Audio3. With the multilingual model, a quoted line can start with a timestamp range that controls when and how long it is spoken, e.g. \"[5.5s:8.0s] Wait for me!\". Write the prompt in the same language as the lines to speak. Maximum 3000 characters."
      },
      "reference_mode": {
        "name": "reference_mode",
        "tooltip": "How to condition the voice: 'text only' (describe everything in the prompt), 'audio reference' (clone up to 3 voices, tagged @Audio1-3), 'image reference' (derive a voice from one character image), or 'preset voice' (pick a built-in named voice that reads the prompt)."
      },
      "sample_rate": {
        "name": "sample_rate",
        "tooltip": "Output sample rate in Hz."
      },
      "speech_rate": {
        "name": "speech_rate",
        "tooltip": "Speaking speed. 0 = normal, 100 = 2.0x, -50 = 0.5x."
      },
      "loudness_rate": {
        "name": "loudness_rate",
        "tooltip": "Loudness. 0 = normal, 100 = 2.0x, -50 = 0.5x."
      },
      "pitch_rate": {
        "name": "pitch_rate",
        "tooltip": "Pitch shift in semitones (-12 to 12)."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "model": {
        "name": "model",
        "tooltip": "seed-audio-1.0-multilingual: 20 languages (English, Chinese, Japanese, Korean, Mexican & Castilian Spanish, Indonesian, German, Brazilian Portuguese, French, Thai, Vietnamese, Malay, Filipino, Italian, Russian, Dutch, Polish, Turkish, Swedish) plus per-sentence timing control via \"[5.5s:8.0s] ...\" timestamps. seed-audio-1.0: English and Chinese only, no timing control."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text input to the model."
      },
      "model": {
        "name": "model",
        "tooltip": "The Seed model used to generate the response."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "system_prompt": {
        "name": "system_prompt",
        "tooltip": "Foundational instructions that dictate the model's behavior."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_temperature": {
        "name": "temperature"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for creating or editing an image."
      },
      "size_preset": {
        "name": "size_preset",
        "tooltip": "Pick a recommended size. Select Custom to use the width and height below."
      },
      "image": {
        "name": "image",
        "tooltip": "Input image(s) for image-to-image generation. Reference image(s) for single or multi-reference generation."
      },
      "width": {
        "name": "width",
        "tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`"
      },
      "height": {
        "name": "height",
        "tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`"
      },
      "sequential_image_generation": {
        "name": "sequential_image_generation",
        "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)."
      },
      "max_images": {
        "name": "max_images",
        "tooltip": "Maximum number of images to generate when sequential_image_generation='auto'. Total images (input + generated) cannot exceed 15."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an \"AI generated\" watermark to the image."
      },
      "fail_on_partial": {
        "name": "fail_on_partial",
        "tooltip": "If enabled, abort execution if any requested images are missing or return an error."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for creating or editing an image."
      },
      "model": {
        "name": "model"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an \"AI generated\" watermark to the image."
      },
      "thinking": {
        "name": "thinking",
        "tooltip": "Enable the model's prompt-optimization reasoning ('thinking') for better adherence. Can substantially increase generation time — notably on Seedream 5.0 Pro. Can only be disabled for text-to-image (not when reference images are provided)."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_height": {
        "name": "height"
      },
      "model_size_preset": {
        "name": "size_preset"
      },
      "model_width": {
        "name": "width"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ByteDanceTextToVideoNode": {
    "display_name": "ByteDance Text to Video",
    "description": "Generate video using ByteDance models via api based on prompt",
    "inputs": {
      "model": {
        "name": "model"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "The text prompt used to generate the video."
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "The resolution of the output video."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "The aspect ratio of the output video."
      },
      "duration": {
        "name": "duration",
        "tooltip": "The duration of the output video in seconds."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "camera_fixed": {
        "name": "camera_fixed",
        "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."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an \"AI generated\" watermark to the video."
      },
      "generate_audio": {
        "name": "generate_audio",
        "tooltip": "This parameter is ignored for any model except seedance-1-5-pro."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Canny": {
    "display_name": "Detect Edges (Canny)",
    "inputs": {
      "image": {
        "name": "image"
      },
      "low_threshold": {
        "name": "low_threshold"
      },
      "high_threshold": {
        "name": "high_threshold"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CaseConverter": {
    "display_name": "Convert Text Case",
    "inputs": {
      "string": {
        "name": "string"
      },
      "mode": {
        "name": "mode"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CenterCropImages": {
    "display_name": "Crop Image (Center)",
    "description": "Center crop an image to the specified dimensions.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "Image to process."
      },
      "width": {
        "name": "width",
        "tooltip": "Crop width."
      },
      "height": {
        "name": "height",
        "tooltip": "Crop height."
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": "Processed images"
      }
    }
  },
  "CFGGuider": {
    "display_name": "CFG Guider",
    "inputs": {
      "model": {
        "name": "model"
      },
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "cfg": {
        "name": "cfg"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CFGNorm": {
    "display_name": "CFGNorm",
    "inputs": {
      "model": {
        "name": "model"
      },
      "strength": {
        "name": "strength"
      },
      "pre_cfg": {
        "name": "pre_cfg",
        "tooltip": "If true, rescale the combined noise BEFORE the sampler's CFG combine, without clamping (can amplify). Matches the norm-scaled CFG used by models like Lens. Default false keeps the original post-CFG x0-space attenuate-only behavior."
      }
    },
    "outputs": {
      "0": {
        "name": "patched_model",
        "tooltip": null
      }
    }
  },
  "CFGOverride": {
    "display_name": "CFG Override",
    "description": "Override cfg to a fixed value over a [start, end] percent (sigma) range. With multiple overrides, the one nearest the sampler wins on overlap.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "cfg": {
        "name": "cfg"
      },
      "start_percent": {
        "name": "start_percent"
      },
      "end_percent": {
        "name": "end_percent"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CFGZeroStar": {
    "display_name": "CFGZeroStar",
    "inputs": {
      "model": {
        "name": "model"
      }
    },
    "outputs": {
      "0": {
        "name": "patched_model",
        "tooltip": null
      }
    }
  },
  "CheckpointLoader": {
    "display_name": "Load Checkpoint With Config (DEPRECATED)",
    "inputs": {
      "config_name": {
        "name": "config_name"
      },
      "ckpt_name": {
        "name": "ckpt_name"
      }
    }
  },
  "CheckpointLoaderSimple": {
    "display_name": "Load Checkpoint",
    "description": "Loads a diffusion model checkpoint, diffusion models are used to denoise latents.",
    "inputs": {
      "ckpt_name": {
        "name": "ckpt_name",
        "tooltip": "The name of the checkpoint (model) to load."
      }
    },
    "outputs": {
      "0": {
        "tooltip": "The model used for denoising latents."
      },
      "1": {
        "tooltip": "The CLIP model used for encoding text prompts."
      },
      "2": {
        "tooltip": "The VAE model used for encoding and decoding images to and from latent space."
      }
    }
  },
  "CheckpointSave": {
    "display_name": "Save Checkpoint",
    "inputs": {
      "model": {
        "name": "model"
      },
      "clip": {
        "name": "clip"
      },
      "vae": {
        "name": "vae"
      },
      "filename_prefix": {
        "name": "filename_prefix"
      }
    }
  },
  "ChromaRadianceOptions": {
    "display_name": "ChromaRadianceOptions",
    "description": "Allows setting advanced options for the Chroma Radiance model.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "preserve_wrapper": {
        "name": "preserve_wrapper",
        "tooltip": "When enabled, will delegate to an existing model function wrapper if it exists. Generally should be left enabled."
      },
      "start_sigma": {
        "name": "start_sigma",
        "tooltip": "First sigma that these options will be in effect."
      },
      "end_sigma": {
        "name": "end_sigma",
        "tooltip": "Last sigma that these options will be in effect."
      },
      "nerf_tile_size": {
        "name": "nerf_tile_size",
        "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)."
      },
      "force_sequential_txt_ids": {
        "name": "force_sequential_txt_ids",
        "tooltip": "Force usage of sequential text token IDs instead of zeroes. Should be used for checkpoints from 2026-05-22 to 2026-06-01 that are trained in this way but do not contain the __sequential__ key in the state dict."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text input to the model."
      },
      "model": {
        "name": "model",
        "tooltip": "The Claude model used to generate the response."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "images": {
        "name": "images",
        "tooltip": "Optional image(s) to use as context for the model. Up to 20 images."
      },
      "system_prompt": {
        "name": "system_prompt",
        "tooltip": "Foundational instructions that dictate the model's behavior."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_max_tokens": {
        "name": "max_tokens"
      },
      "model_reasoning_effort": {
        "name": "reasoning_effort"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CLIPAttentionMultiply": {
    "display_name": "CLIPAttentionMultiply",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "q": {
        "name": "q"
      },
      "k": {
        "name": "k"
      },
      "v": {
        "name": "v"
      },
      "out": {
        "name": "out"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CLIPLoader": {
    "display_name": "Load CLIP",
    "description": "Recipes:\nsd: 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\nhidream: llama-3.1 (Recommend) or t5\nomnigen2: qwen vl 2.5 3B\njoyimage: qwen3-vl 8B\nlens: gpt-oss-20b\npixeldit: gemma 2 2B elm",
    "inputs": {
      "clip_name": {
        "name": "clip_name"
      },
      "type": {
        "name": "type"
      },
      "device": {
        "name": "device"
      }
    }
  },
  "CLIPMergeAdd": {
    "display_name": "CLIPMergeAdd",
    "inputs": {
      "clip1": {
        "name": "clip1"
      },
      "clip2": {
        "name": "clip2"
      }
    }
  },
  "CLIPMergeSimple": {
    "display_name": "CLIPMergeSimple",
    "inputs": {
      "clip1": {
        "name": "clip1"
      },
      "clip2": {
        "name": "clip2"
      },
      "ratio": {
        "name": "ratio"
      }
    }
  },
  "CLIPMergeSubtract": {
    "display_name": "CLIPMergeSubtract",
    "inputs": {
      "clip1": {
        "name": "clip1"
      },
      "clip2": {
        "name": "clip2"
      },
      "multiplier": {
        "name": "multiplier"
      }
    }
  },
  "CLIPSave": {
    "display_name": "CLIPSave",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "filename_prefix": {
        "name": "filename_prefix"
      }
    }
  },
  "CLIPSetLastLayer": {
    "display_name": "CLIP Set Last Layer",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "stop_at_clip_layer": {
        "name": "stop_at_clip_layer"
      }
    }
  },
  "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.",
    "inputs": {
      "text": {
        "name": "text",
        "tooltip": "The text to be encoded."
      },
      "clip": {
        "name": "clip",
        "tooltip": "The CLIP model used for encoding the text."
      }
    },
    "outputs": {
      "0": {
        "tooltip": "A conditioning containing the embedded text used to guide the diffusion model."
      }
    }
  },
  "CLIPTextEncodeControlnet": {
    "display_name": "CLIP Text Encode (Controlnet)",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "conditioning": {
        "name": "conditioning"
      },
      "text": {
        "name": "text"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CLIPTextEncodeFlux": {
    "display_name": "CLIPTextEncodeFlux",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "clip_l": {
        "name": "clip_l"
      },
      "t5xxl": {
        "name": "t5xxl"
      },
      "guidance": {
        "name": "guidance"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CLIPTextEncodeHiDream": {
    "display_name": "CLIP Text Encode (HiDream)",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "clip_l": {
        "name": "clip_l"
      },
      "clip_g": {
        "name": "clip_g"
      },
      "t5xxl": {
        "name": "t5xxl"
      },
      "llama": {
        "name": "llama"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CLIPTextEncodeHunyuanDiT": {
    "display_name": "CLIP Text Encode (Hunyuan Image)",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "bert": {
        "name": "bert"
      },
      "mt5xl": {
        "name": "mt5xl"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CLIPTextEncodeKandinsky5": {
    "display_name": "CLIP Text Encode (Kandinsky 5)",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "clip_l": {
        "name": "clip_l"
      },
      "qwen25_7b": {
        "name": "qwen25_7b"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CLIPTextEncodeLumina2": {
    "display_name": "CLIP Text Encode (Lumina 2)",
    "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.",
    "inputs": {
      "system_prompt": {
        "name": "system_prompt",
        "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."
      },
      "user_prompt": {
        "name": "user_prompt",
        "tooltip": "The text to be encoded."
      },
      "clip": {
        "name": "clip",
        "tooltip": "The CLIP model used for encoding the text."
      }
    },
    "outputs": {
      "0": {
        "tooltip": "A conditioning containing the embedded text used to guide the diffusion model."
      }
    }
  },
  "CLIPTextEncodePixArtAlpha": {
    "display_name": "CLIP Text Encode (PixArt Alpha)",
    "description": "Encodes text and sets the resolution conditioning for PixArt Alpha. Does not apply to PixArt Sigma.",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "text": {
        "name": "text"
      },
      "clip": {
        "name": "clip"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CLIPTextEncodeSD3": {
    "display_name": "CLIP Text Encode (SD3)",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "clip_l": {
        "name": "clip_l"
      },
      "clip_g": {
        "name": "clip_g"
      },
      "t5xxl": {
        "name": "t5xxl"
      },
      "empty_padding": {
        "name": "empty_padding"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CLIPTextEncodeSDXL": {
    "display_name": "CLIP Text Encode (SDXL)",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "crop_w": {
        "name": "crop_w"
      },
      "crop_h": {
        "name": "crop_h"
      },
      "target_width": {
        "name": "target_width"
      },
      "target_height": {
        "name": "target_height"
      },
      "text_g": {
        "name": "text_g"
      },
      "text_l": {
        "name": "text_l"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CLIPTextEncodeSDXLRefiner": {
    "display_name": "CLIP Text Encode (SDXL Refiner)",
    "inputs": {
      "ascore": {
        "name": "ascore"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "text": {
        "name": "text"
      },
      "clip": {
        "name": "clip"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CLIPVisionEncode": {
    "display_name": "CLIP Vision Encode",
    "inputs": {
      "clip_vision": {
        "name": "clip_vision"
      },
      "image": {
        "name": "image"
      },
      "crop": {
        "name": "crop"
      }
    }
  },
  "CLIPVisionLoader": {
    "display_name": "Load CLIP Vision",
    "inputs": {
      "clip_name": {
        "name": "clip_name"
      }
    }
  },
  "ColorToRGBInt": {
    "display_name": "Color Picker",
    "description": "Return a color RGB integer value and hexadecimal representation.",
    "inputs": {
      "color": {
        "name": "color"
      }
    },
    "outputs": {
      "0": {
        "name": "rgb_int",
        "tooltip": null
      },
      "1": {
        "name": "hex",
        "tooltip": null
      },
      "2": {
        "name": "alpha",
        "tooltip": null
      }
    }
  },
  "ColorTransfer": {
    "display_name": "Transfer Color",
    "description": "Match the colors of one image to another using various algorithms.",
    "inputs": {
      "image_target": {
        "name": "image_target",
        "tooltip": "Image(s) to apply the color transform to."
      },
      "image_ref": {
        "name": "image_ref",
        "tooltip": "Reference image(s) to match colors to."
      },
      "method": {
        "name": "method"
      },
      "source_stats": {
        "name": "source_stats",
        "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)"
      },
      "strength": {
        "name": "strength"
      }
    },
    "outputs": {
      "0": {
        "name": "image",
        "tooltip": null
      }
    }
  },
  "CombineHooks2": {
    "display_name": "Combine Hooks [2]",
    "inputs": {
      "hooks_A": {
        "name": "hooks_A"
      },
      "hooks_B": {
        "name": "hooks_B"
      }
    }
  },
  "CombineHooks4": {
    "display_name": "Combine Hooks [4]",
    "inputs": {
      "hooks_A": {
        "name": "hooks_A"
      },
      "hooks_B": {
        "name": "hooks_B"
      },
      "hooks_C": {
        "name": "hooks_C"
      },
      "hooks_D": {
        "name": "hooks_D"
      }
    }
  },
  "CombineHooks8": {
    "display_name": "Combine Hooks [8]",
    "inputs": {
      "hooks_A": {
        "name": "hooks_A"
      },
      "hooks_B": {
        "name": "hooks_B"
      },
      "hooks_C": {
        "name": "hooks_C"
      },
      "hooks_D": {
        "name": "hooks_D"
      },
      "hooks_E": {
        "name": "hooks_E"
      },
      "hooks_F": {
        "name": "hooks_F"
      },
      "hooks_G": {
        "name": "hooks_G"
      },
      "hooks_H": {
        "name": "hooks_H"
      }
    }
  },
  "ComfyAndNode": {
    "display_name": "And",
    "description": "Logical AND operation. Returns true if all of the values are truthy. Uses Python's rules for truthiness.",
    "inputs": {
      "values": {
        "name": "values"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ComfyMathExpression": {
    "display_name": "Math Expression",
    "inputs": {
      "expression": {
        "name": "expression"
      },
      "values": {
        "name": "values"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "tooltip": null
      },
      "2": {
        "name": "BOOL",
        "tooltip": null
      }
    }
  },
  "ComfyNotNode": {
    "display_name": "Not",
    "description": "Logical NOT operation. Returns true if the value is falsy. Uses Python's rules for truthiness.",
    "inputs": {
      "value": {
        "name": "value"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ComfyNumberConvert": {
    "display_name": "Convert Number",
    "inputs": {
      "value": {
        "name": "value"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "tooltip": null
      }
    }
  },
  "ComfyOrNode": {
    "display_name": "Or",
    "description": "Logical OR operation. Returns true if any of the values are truthy. Uses Python's rules for truthiness.",
    "inputs": {
      "values": {
        "name": "values"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ComfySwitchNode": {
    "display_name": "If/Else Switch",
    "inputs": {
      "switch": {
        "name": "switch"
      },
      "on_false": {
        "name": "on_false"
      },
      "on_true": {
        "name": "on_true"
      }
    },
    "outputs": {
      "0": {
        "name": "output",
        "tooltip": null
      }
    }
  },
  "ConditioningAverage": {
    "display_name": "Conditioning (Average)",
    "inputs": {
      "conditioning_to": {
        "name": "conditioning_to"
      },
      "conditioning_from": {
        "name": "conditioning_from"
      },
      "conditioning_to_strength": {
        "name": "conditioning_to_strength"
      }
    }
  },
  "ConditioningCombine": {
    "display_name": "Conditioning (Combine)",
    "inputs": {
      "conditioning_1": {
        "name": "conditioning_1"
      },
      "conditioning_2": {
        "name": "conditioning_2"
      }
    }
  },
  "ConditioningConcat": {
    "display_name": "Conditioning (Concat)",
    "inputs": {
      "conditioning_to": {
        "name": "conditioning_to"
      },
      "conditioning_from": {
        "name": "conditioning_from"
      }
    }
  },
  "ConditioningMultiply": {
    "display_name": "Conditioning (Multiply)",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      },
      "multiplier": {
        "name": "multiplier"
      }
    }
  },
  "ConditioningSetArea": {
    "display_name": "Conditioning (Set Area)",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "x": {
        "name": "x"
      },
      "y": {
        "name": "y"
      },
      "strength": {
        "name": "strength"
      }
    }
  },
  "ConditioningSetAreaPercentage": {
    "display_name": "Conditioning (Set Area with Percentage)",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "x": {
        "name": "x"
      },
      "y": {
        "name": "y"
      },
      "strength": {
        "name": "strength"
      }
    }
  },
  "ConditioningSetAreaPercentageVideo": {
    "display_name": "Conditioning (Set Area with Percentage for Video)",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "temporal": {
        "name": "temporal"
      },
      "x": {
        "name": "x"
      },
      "y": {
        "name": "y"
      },
      "z": {
        "name": "z"
      },
      "strength": {
        "name": "strength"
      }
    }
  },
  "ConditioningSetAreaStrength": {
    "display_name": "Conditioning (Set Area Strength)",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      },
      "strength": {
        "name": "strength"
      }
    }
  },
  "ConditioningSetDefaultCombine": {
    "display_name": "Cond Set Default Combine",
    "inputs": {
      "cond": {
        "name": "cond"
      },
      "cond_DEFAULT": {
        "name": "cond_DEFAULT"
      },
      "hooks": {
        "name": "hooks"
      }
    }
  },
  "ConditioningSetMask": {
    "display_name": "Conditioning (Set Mask)",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      },
      "mask": {
        "name": "mask"
      },
      "strength": {
        "name": "strength"
      },
      "set_cond_area": {
        "name": "set_cond_area"
      }
    }
  },
  "ConditioningSetProperties": {
    "display_name": "Cond Set Props",
    "inputs": {
      "cond_NEW": {
        "name": "cond_NEW"
      },
      "strength": {
        "name": "strength"
      },
      "set_cond_area": {
        "name": "set_cond_area"
      },
      "mask": {
        "name": "mask"
      },
      "hooks": {
        "name": "hooks"
      },
      "timesteps": {
        "name": "timesteps"
      }
    }
  },
  "ConditioningSetPropertiesAndCombine": {
    "display_name": "Cond Set Props Combine",
    "inputs": {
      "cond": {
        "name": "cond"
      },
      "cond_NEW": {
        "name": "cond_NEW"
      },
      "strength": {
        "name": "strength"
      },
      "set_cond_area": {
        "name": "set_cond_area"
      },
      "mask": {
        "name": "mask"
      },
      "hooks": {
        "name": "hooks"
      },
      "timesteps": {
        "name": "timesteps"
      }
    }
  },
  "ConditioningSetTimestepRange": {
    "display_name": "ConditioningSetTimestepRange",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      },
      "start": {
        "name": "start"
      },
      "end": {
        "name": "end"
      }
    }
  },
  "ConditioningStableAudio": {
    "display_name": "ConditioningStableAudio",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "seconds_start": {
        "name": "seconds_start"
      },
      "seconds_total": {
        "name": "seconds_total"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      }
    }
  },
  "ConditioningTimestepsRange": {
    "display_name": "Timesteps Range",
    "inputs": {
      "start_percent": {
        "name": "start_percent"
      },
      "end_percent": {
        "name": "end_percent"
      }
    },
    "outputs": {
      "1": {
        "name": "BEFORE_RANGE"
      },
      "2": {
        "name": "AFTER_RANGE"
      }
    }
  },
  "ConditioningZeroOut": {
    "display_name": "Conditioning Zero Out",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      }
    }
  },
  "ContextWindowsManual": {
    "display_name": "Context Windows (Manual)",
    "description": "Manually set context windows.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The model to apply context windows to during sampling."
      },
      "context_length": {
        "name": "context_length",
        "tooltip": "The length of the context window."
      },
      "context_overlap": {
        "name": "context_overlap",
        "tooltip": "The overlap of the context window."
      },
      "context_schedule": {
        "name": "context_schedule",
        "tooltip": "Step-dependent scheduling algorithm for context windows."
      },
      "context_stride": {
        "name": "context_stride",
        "tooltip": "The stride of the context window; only applicable to uniform schedules."
      },
      "closed_loop": {
        "name": "closed_loop",
        "tooltip": "Whether to close the context window loop; only applicable to looped schedules."
      },
      "fuse_method": {
        "name": "fuse_method",
        "tooltip": "The method to use to fuse the context windows."
      },
      "dim": {
        "name": "dim",
        "tooltip": "The dimension to apply the context windows to."
      },
      "freenoise": {
        "name": "freenoise",
        "tooltip": "Whether to apply FreeNoise noise shuffling, improves window blending."
      },
      "cond_retain_index_list": {
        "name": "cond_retain_index_list",
        "tooltip": "List of latent indices to retain in the conditioning tensors for each window. For concat-style I2V models (e.g. Wan I2V, HunyuanVideo I2V, Cosmos I2V, SVD) the encoded start image lives in the c_concat conditioning channels; setting this to '0' will retain that start image content at sub-pos 0 of every window."
      },
      "split_conds_to_windows": {
        "name": "split_conds_to_windows",
        "tooltip": "Whether to split multiple conditionings (created by ConditionCombine) to each window based on region index."
      },
      "latent_retain_index_list": {
        "name": "latent_retain_index_list",
        "tooltip": "List of latent indices to retain in the noise latent itself for each window. Use for workflows where reference content (e.g. a start image) lives directly in the noise latent rather than in separate conditioning channels (e.g. inplace-style I2V like LTXV, AnimateDiff). Independent of cond_retain_index_list."
      },
      "causal_window_fix": {
        "name": "causal_window_fix",
        "tooltip": "Whether to add a causal fix frame to non-0-indexed context windows."
      }
    },
    "outputs": {
      "0": {
        "tooltip": "The model with context windows applied during sampling."
      }
    }
  },
  "ControlNetApply": {
    "display_name": "Apply ControlNet (DEPRECATED)",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      },
      "control_net": {
        "name": "control_net"
      },
      "image": {
        "name": "image"
      },
      "strength": {
        "name": "strength"
      }
    }
  },
  "ControlNetApplyAdvanced": {
    "display_name": "Apply ControlNet",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "control_net": {
        "name": "control_net"
      },
      "image": {
        "name": "image"
      },
      "strength": {
        "name": "strength"
      },
      "start_percent": {
        "name": "start_percent"
      },
      "end_percent": {
        "name": "end_percent"
      },
      "vae": {
        "name": "vae"
      }
    },
    "outputs": {
      "0": {
        "name": "positive"
      },
      "1": {
        "name": "negative"
      }
    }
  },
  "ControlNetApplySD3": {
    "display_name": "Apply Controlnet with VAE",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "control_net": {
        "name": "control_net"
      },
      "vae": {
        "name": "vae"
      },
      "image": {
        "name": "image"
      },
      "strength": {
        "name": "strength"
      },
      "start_percent": {
        "name": "start_percent"
      },
      "end_percent": {
        "name": "end_percent"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      }
    }
  },
  "ControlNetInpaintingAliMamaApply": {
    "display_name": "Apply ControlNet Inpainting (AliMama)",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "control_net": {
        "name": "control_net"
      },
      "vae": {
        "name": "vae"
      },
      "image": {
        "name": "image"
      },
      "mask": {
        "name": "mask"
      },
      "strength": {
        "name": "strength"
      },
      "start_percent": {
        "name": "start_percent"
      },
      "end_percent": {
        "name": "end_percent"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      }
    }
  },
  "ControlNetLoader": {
    "display_name": "Load ControlNet Model",
    "inputs": {
      "control_net_name": {
        "name": "control_net_name"
      }
    }
  },
  "ConvertArrayToString": {
    "display_name": "Convert Array to String",
    "inputs": {
      "array": {
        "name": "array"
      },
      "indent": {
        "name": "indent",
        "tooltip": "Spaces per indent level. 0 produces compact single-line string."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ConvertDictionaryToString": {
    "display_name": "Convert Dictionary to String",
    "inputs": {
      "dictionary": {
        "name": "dictionary"
      },
      "indent": {
        "name": "indent",
        "tooltip": "Spaces per indent level. 0 produces compact single-line string."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CosmosImageToVideoLatent": {
    "display_name": "CosmosImageToVideoLatent",
    "inputs": {
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "start_image": {
        "name": "start_image"
      },
      "end_image": {
        "name": "end_image"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CosmosPredict2ImageToVideoLatent": {
    "display_name": "CosmosPredict2ImageToVideoLatent",
    "inputs": {
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "start_image": {
        "name": "start_image"
      },
      "end_image": {
        "name": "end_image"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CreateBoundingBoxes": {
    "display_name": "Create Bounding Boxes",
    "description": "Draw bounding boxes in a canvas. Outputs Ideogram prompt elements, pixel-space bounding boxes, and a preview image.",
    "inputs": {
      "width": {
        "name": "width",
        "tooltip": "Width of the canvas and the pixel grid for the bounding boxes."
      },
      "height": {
        "name": "height",
        "tooltip": "Height of the canvas and the pixel grid for the bounding boxes."
      },
      "editor_state": {
        "name": "editor_state",
        "tooltip": "Draw bounding boxes and set each box type, text, description, color palette. Start with background element first and foreground last."
      },
      "background": {
        "name": "background",
        "tooltip": "Optional image used as background in the canvas and preview."
      },
      "bboxes": {
        "name": "bboxes",
        "tooltip": "Bounding boxes, elements, or a JSON string to initialize the canvas. A new upstream value initializes the canvas; edits made on the canvas take priority and are kept until the upstream value changes again."
      },
      "last_incoming": {
        "name": "last_incoming",
        "tooltip": "Internal state managed by the canvas: the upstream bboxes value that last initialized it. Leave empty to re-initialize the canvas from the bboxes input on the next run."
      }
    },
    "outputs": {
      "0": {
        "name": "preview",
        "tooltip": null
      },
      "1": {
        "name": "bboxes",
        "tooltip": null
      },
      "2": {
        "name": "elements",
        "tooltip": null
      }
    }
  },
  "CreateCameraInfo": {
    "display_name": "Create Camera Info",
    "description": "Build a camera_infoMode 'orbit' aims with yaw/pitch/distance around the target; 'look_at' places the camera at world position. Coordinates are the viewer's world space (right-handed,Y-up).",
    "inputs": {
      "mode": {
        "name": "mode",
        "tooltip": "How to define the camera: orbit angles, an explicit position, or a position + quaternion."
      },
      "target_x": {
        "name": "target_x",
        "tooltip": "Look-at point (orbit pivot / aim). In orbit mode, move it to pan/translate the whole camera. Ignored in quaternion mode. Defaults to the origin."
      },
      "target_y": {
        "name": "target_y"
      },
      "target_z": {
        "name": "target_z"
      },
      "roll": {
        "name": "roll",
        "tooltip": "Camera roll about the view axis, degrees."
      },
      "fov": {
        "name": "fov",
        "tooltip": "Vertical field of view in degrees."
      },
      "zoom": {
        "name": "zoom",
        "tooltip": "Digital zoom (focal-length multiplier). >1 zooms in without moving the camera."
      },
      "camera_type": {
        "name": "camera_type",
        "tooltip": "Projection used by Render Splat: perspective (foreshortening) or orthographic (parallel)."
      },
      "mode_distance": {
        "name": "distance"
      },
      "mode_pitch": {
        "name": "pitch"
      },
      "mode_yaw": {
        "name": "yaw"
      }
    },
    "outputs": {
      "0": {
        "name": "camera_info",
        "tooltip": null
      }
    }
  },
  "CreateHookKeyframe": {
    "display_name": "Create Hook Keyframe",
    "inputs": {
      "strength_mult": {
        "name": "strength_mult"
      },
      "start_percent": {
        "name": "start_percent"
      },
      "prev_hook_kf": {
        "name": "prev_hook_kf"
      }
    },
    "outputs": {
      "0": {
        "name": "HOOK_KF"
      }
    }
  },
  "CreateHookKeyframesFromFloats": {
    "display_name": "Create Hook Keyframes From Floats",
    "inputs": {
      "floats_strength": {
        "name": "floats_strength"
      },
      "start_percent": {
        "name": "start_percent"
      },
      "end_percent": {
        "name": "end_percent"
      },
      "print_keyframes": {
        "name": "print_keyframes"
      },
      "prev_hook_kf": {
        "name": "prev_hook_kf"
      }
    },
    "outputs": {
      "0": {
        "name": "HOOK_KF"
      }
    }
  },
  "CreateHookKeyframesInterpolated": {
    "display_name": "Create Hook Keyframes Interp.",
    "inputs": {
      "strength_start": {
        "name": "strength_start"
      },
      "strength_end": {
        "name": "strength_end"
      },
      "interpolation": {
        "name": "interpolation"
      },
      "start_percent": {
        "name": "start_percent"
      },
      "end_percent": {
        "name": "end_percent"
      },
      "keyframes_count": {
        "name": "keyframes_count"
      },
      "print_keyframes": {
        "name": "print_keyframes"
      },
      "prev_hook_kf": {
        "name": "prev_hook_kf"
      }
    },
    "outputs": {
      "0": {
        "name": "HOOK_KF"
      }
    }
  },
  "CreateHookLora": {
    "display_name": "Create Hook LoRA",
    "inputs": {
      "lora_name": {
        "name": "lora_name"
      },
      "strength_model": {
        "name": "strength_model"
      },
      "strength_clip": {
        "name": "strength_clip"
      },
      "prev_hooks": {
        "name": "prev_hooks"
      }
    }
  },
  "CreateHookLoraModelOnly": {
    "display_name": "Create Hook LoRA (MO)",
    "inputs": {
      "lora_name": {
        "name": "lora_name"
      },
      "strength_model": {
        "name": "strength_model"
      },
      "prev_hooks": {
        "name": "prev_hooks"
      }
    }
  },
  "CreateHookModelAsLora": {
    "display_name": "Create Hook Model as LoRA",
    "inputs": {
      "ckpt_name": {
        "name": "ckpt_name"
      },
      "strength_model": {
        "name": "strength_model"
      },
      "strength_clip": {
        "name": "strength_clip"
      },
      "prev_hooks": {
        "name": "prev_hooks"
      }
    }
  },
  "CreateHookModelAsLoraModelOnly": {
    "display_name": "Create Hook Model as LoRA (MO)",
    "inputs": {
      "ckpt_name": {
        "name": "ckpt_name"
      },
      "strength_model": {
        "name": "strength_model"
      },
      "prev_hooks": {
        "name": "prev_hooks"
      }
    }
  },
  "CreateList": {
    "display_name": "Create List",
    "inputs": {
      "inputs": {
        "name": "inputs"
      }
    },
    "outputs": {
      "0": {
        "name": "list",
        "tooltip": null
      }
    }
  },
  "CreateVideo": {
    "display_name": "Create Video",
    "description": "Create a video from images.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "The images to create a video from."
      },
      "fps": {
        "name": "fps"
      },
      "audio": {
        "name": "audio",
        "tooltip": "The audio to add to the video."
      },
      "bit_depth": {
        "name": "bit_depth",
        "tooltip": "Bit depth of the created video. 10-bit keeps smoother gradients with less banding, but some players and downstream nodes may not support it."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CropByBBoxes": {
    "display_name": "Crop By Bounding Boxes",
    "description": "Crop and resize regions from the input image batch based on provided bounding boxes.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "bboxes": {
        "name": "bboxes"
      },
      "output_width": {
        "name": "output_width",
        "tooltip": "Width each crop is resized to."
      },
      "output_height": {
        "name": "output_height",
        "tooltip": "Height each crop is resized to."
      },
      "padding": {
        "name": "padding",
        "tooltip": "Extra padding in pixels added on each side of the bbox before cropping."
      },
      "keep_aspect": {
        "name": "keep_aspect",
        "tooltip": "Whether to stretch the crop to fit the output size, or pad with black pixels to preserve aspect ratio."
      }
    },
    "outputs": {
      "0": {
        "tooltip": "All crops stacked into a single image batch."
      }
    }
  },
  "CropMask": {
    "display_name": "Crop Mask",
    "inputs": {
      "mask": {
        "name": "mask"
      },
      "x": {
        "name": "x"
      },
      "y": {
        "name": "y"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "CurveEditor": {
    "display_name": "Curve Editor",
    "inputs": {
      "curve": {
        "name": "curve"
      },
      "histogram": {
        "name": "histogram"
      }
    },
    "outputs": {
      "0": {
        "name": "curve",
        "tooltip": null
      }
    }
  },
  "CustomCombo": {
    "display_name": "Custom Combo",
    "inputs": {
      "choice": {
        "name": "choice"
      },
      "index": {},
      "option1": {}
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "INDEX",
        "tooltip": null
      }
    }
  },
  "DA3GeometryToMesh": {
    "display_name": "Convert DA3 Geometry to Mesh",
    "description": "Convert a depth map into a triangulated 3D mesh.",
    "inputs": {
      "da3_geometry": {
        "name": "da3_geometry"
      },
      "batch_index": {
        "name": "batch_index",
        "tooltip": "Which image of a batch to convert. Per-image vertex counts differ so batches cannot be stacked."
      },
      "decimation": {
        "name": "decimation",
        "tooltip": "Vertex stride. 1 = full resolution, 2 = half, etc."
      },
      "discontinuity_threshold": {
        "name": "discontinuity_threshold",
        "tooltip": "Drop triangles whose 3x3 depth span exceeds this fraction. 0 = off."
      },
      "confidence_threshold": {
        "name": "confidence_threshold",
        "tooltip": "Exclude pixels whose per-image normalised confidence is below this value (0 = keep all, 1 = keep only the single most confident pixel). Used when the geometry has a confidence map (Small/Base models)."
      },
      "use_sky_mask": {
        "name": "use_sky_mask",
        "tooltip": "Exclude sky-probability pixels (sky >= 0.5) from the mesh. Used when the geometry has a sky map (Mono/Metric models)."
      },
      "texture": {
        "name": "texture",
        "tooltip": "Use the source image as a base color texture."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "DA3Inference": {
    "display_name": "Run Depth Anything 3",
    "description": "Run Depth Anything 3 on an image. In multi-view mode each image is treated as a separate view of the same scene.",
    "inputs": {
      "da3_model": {
        "name": "da3_model"
      },
      "image": {
        "name": "image"
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "Resolution the model runs at (longest side, multiple of 14).\nLower = faster / less VRAM.\nHigher = more detail.\nOutput is upsampled back to the original size."
      },
      "resize_method": {
        "name": "resize_method",
        "tooltip": "upper_bound_resize: scale so the longest side = resolution (caps memory, default).\nlower_bound_resize: scale so the shortest side = resolution (preserves more detail on tall/wide images, uses more memory)."
      },
      "mode": {
        "name": "mode",
        "tooltip": "mono: single view image (works with any model variant).\nmultiview: all images processed together for geometric consistency + camera pose (for Small/Base models only)."
      }
    },
    "outputs": {
      "0": {
        "name": "da3_geometry",
        "tooltip": "Dictionary of non-normalized tensors.\nAlways has the keys: depth, image, mode.\nOptional keys: sky (for Mono/Metric), confidence (for Small/Base), extrinsics + intrinsics (for multi-view)."
      }
    }
  },
  "DA3Render": {
    "display_name": "Render Depth Anything 3",
    "description": "Render a depth map, confidence map, or sky mask from Depth Anything 3 geometry data.",
    "inputs": {
      "da3_geometry": {
        "name": "da3_geometry"
      },
      "output": {
        "name": "output",
        "tooltip": "- depth: normalised greyscale depth image.\n- depth_colored: depth mapped through the Turbo colormap.\n- sky_mask: sky probability in [0, 1] (for Mono/Metric models only).\n- confidence: normalised depth confidence (for Small/Base models only)."
      },
      "output_apply_sky_clip": {
        "name": "apply_sky_clip"
      },
      "output_normalization": {
        "name": "normalization"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "DiffControlNetLoader": {
    "display_name": "Load ControlNet Model (diff)",
    "inputs": {
      "model": {
        "name": "model"
      },
      "control_net_name": {
        "name": "control_net_name"
      }
    }
  },
  "DifferentialDiffusion": {
    "display_name": "Differential Diffusion",
    "inputs": {
      "model": {
        "name": "model"
      },
      "strength": {
        "name": "strength"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "DiffusersLoader": {
    "display_name": "Load Diffusers Model (DEPRECATED)",
    "inputs": {
      "model_path": {
        "name": "model_path"
      }
    }
  },
  "DisableNoise": {
    "display_name": "DisableNoise",
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "DrawBBoxes": {
    "display_name": "Draw BBoxes",
    "inputs": {
      "bboxes": {
        "name": "bboxes"
      },
      "image": {
        "name": "image"
      }
    },
    "outputs": {
      "0": {
        "name": "out_image",
        "tooltip": null
      }
    }
  },
  "DualCFGGuider": {
    "display_name": "Dual CFG Guider",
    "inputs": {
      "model": {
        "name": "model"
      },
      "cond1": {
        "name": "cond1"
      },
      "cond2": {
        "name": "cond2"
      },
      "negative": {
        "name": "negative"
      },
      "cfg_conds": {
        "name": "cfg_conds"
      },
      "cfg_cond2_negative": {
        "name": "cfg_cond2_negative"
      },
      "style": {
        "name": "style"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "DualCLIPLoader": {
    "display_name": "Load CLIP (Dual)",
    "description": "Recipes:\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",
    "inputs": {
      "clip_name1": {
        "name": "clip_name1"
      },
      "clip_name2": {
        "name": "clip_name2"
      },
      "type": {
        "name": "type"
      },
      "device": {
        "name": "device"
      }
    }
  },
  "DualModelGuider": {
    "display_name": "Dual Model CFG Guider",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Model used for the positive (conditional) pass."
      },
      "positive": {
        "name": "positive"
      },
      "cfg": {
        "name": "cfg"
      },
      "model_negative": {
        "name": "model_negative",
        "tooltip": "Model used for the negative (unconditional) pass. Use the same model for ordinary CFG."
      },
      "negative": {
        "name": "negative",
        "tooltip": "Negative conditioning run on the negative model. Leave unconnected for a text-free (image-only) unconditional pass."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EasyCache": {
    "display_name": "EasyCache",
    "description": "Native EasyCache implementation.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The model to add EasyCache to."
      },
      "reuse_threshold": {
        "name": "reuse_threshold",
        "tooltip": "The threshold for reusing cached steps."
      },
      "start_percent": {
        "name": "start_percent",
        "tooltip": "The relative sampling step to begin use of EasyCache."
      },
      "end_percent": {
        "name": "end_percent",
        "tooltip": "The relative sampling step to end use of EasyCache."
      },
      "verbose": {
        "name": "verbose",
        "tooltip": "Whether to log verbose information."
      }
    },
    "outputs": {
      "0": {
        "tooltip": "The model with EasyCache."
      }
    }
  },
  "ElevenLabsAudioIsolation": {
    "display_name": "ElevenLabs Voice Isolation",
    "description": "Remove background noise from audio, isolating vocals or speech.",
    "inputs": {
      "audio": {
        "name": "audio",
        "tooltip": "Audio to process for background noise removal."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "files": {
        "name": "files",
        "tooltip": "Audio recordings for voice cloning."
      },
      "remove_background_noise": {
        "name": "remove_background_noise",
        "tooltip": "Remove background noise from voice samples using audio isolation."
      }
    },
    "outputs": {
      "0": {
        "name": "voice",
        "tooltip": null
      }
    }
  },
  "ElevenLabsSpeechToSpeech": {
    "display_name": "ElevenLabs Speech to Speech",
    "description": "Transform speech from one voice to another while preserving the original content and emotion.",
    "inputs": {
      "voice": {
        "name": "voice",
        "tooltip": "Target voice for the transformation. Connect from Voice Selector or Instant Voice Clone."
      },
      "audio": {
        "name": "audio",
        "tooltip": "Source audio to transform."
      },
      "stability": {
        "name": "stability",
        "tooltip": "Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech."
      },
      "model": {
        "name": "model",
        "tooltip": "Model to use for speech-to-speech transformation."
      },
      "output_format": {
        "name": "output_format",
        "tooltip": "Audio output format."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for reproducibility."
      },
      "remove_background_noise": {
        "name": "remove_background_noise",
        "tooltip": "Remove background noise from input audio using audio isolation."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_similarity_boost": {
        "name": "similarity_boost"
      },
      "model_speed": {
        "name": "speed"
      },
      "model_style": {
        "name": "style"
      },
      "model_use_speaker_boost": {
        "name": "use_speaker_boost"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ElevenLabsSpeechToText": {
    "display_name": "ElevenLabs Speech to Text",
    "description": "Transcribe audio to text. Supports automatic language detection, speaker diarization, and audio event tagging.",
    "inputs": {
      "audio": {
        "name": "audio",
        "tooltip": "Audio to transcribe."
      },
      "model": {
        "name": "model",
        "tooltip": "Model to use for transcription."
      },
      "language_code": {
        "name": "language_code",
        "tooltip": "ISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection."
      },
      "num_speakers": {
        "name": "num_speakers",
        "tooltip": "Maximum number of speakers to predict. Set to 0 for automatic detection."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for reproducibility (determinism not guaranteed)."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_diarization_threshold": {
        "name": "diarization_threshold"
      },
      "model_diarize": {
        "name": "diarize"
      },
      "model_tag_audio_events": {
        "name": "tag_audio_events"
      },
      "model_temperature": {
        "name": "temperature"
      },
      "model_timestamps_granularity": {
        "name": "timestamps_granularity"
      }
    },
    "outputs": {
      "0": {
        "name": "text",
        "tooltip": null
      },
      "1": {
        "name": "language_code",
        "tooltip": null
      },
      "2": {
        "name": "words_json",
        "tooltip": null
      }
    }
  },
  "ElevenLabsTextToDialogue": {
    "display_name": "ElevenLabs Text to Dialogue",
    "description": "Generate multi-speaker dialogue from text. Each dialogue entry has its own text and voice.",
    "inputs": {
      "stability": {
        "name": "stability",
        "tooltip": "Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech."
      },
      "apply_text_normalization": {
        "name": "apply_text_normalization",
        "tooltip": "Text normalization mode. 'auto' lets the system decide, 'on' always applies normalization, 'off' skips it."
      },
      "model": {
        "name": "model",
        "tooltip": "Model to use for dialogue generation."
      },
      "inputs": {
        "name": "inputs",
        "tooltip": "Number of dialogue entries."
      },
      "language_code": {
        "name": "language_code",
        "tooltip": "ISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for reproducibility."
      },
      "output_format": {
        "name": "output_format",
        "tooltip": "Audio output format."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "inputs_text1": {
        "name": "text1"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ElevenLabsTextToSoundEffects": {
    "display_name": "ElevenLabs Text to Sound Effects",
    "description": "Generate sound effects from text descriptions.",
    "inputs": {
      "text": {
        "name": "text",
        "tooltip": "Text description of the sound effect to generate."
      },
      "model": {
        "name": "model",
        "tooltip": "Model to use for sound effect generation."
      },
      "output_format": {
        "name": "output_format",
        "tooltip": "Audio output format."
      },
      "model_duration": {
        "name": "duration"
      },
      "model_loop": {
        "name": "loop"
      },
      "model_prompt_influence": {
        "name": "prompt_influence"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ElevenLabsTextToSpeech": {
    "display_name": "ElevenLabs Text to Speech",
    "description": "Convert text to speech.",
    "inputs": {
      "voice": {
        "name": "voice",
        "tooltip": "Voice to use for speech synthesis. Connect from Voice Selector or Instant Voice Clone."
      },
      "text": {
        "name": "text",
        "tooltip": "The text to convert to speech."
      },
      "stability": {
        "name": "stability",
        "tooltip": "Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech."
      },
      "apply_text_normalization": {
        "name": "apply_text_normalization",
        "tooltip": "Text normalization mode. 'auto' lets the system decide, 'on' always applies normalization, 'off' skips it."
      },
      "model": {
        "name": "model",
        "tooltip": "Model to use for text-to-speech."
      },
      "language_code": {
        "name": "language_code",
        "tooltip": "ISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for reproducibility (determinism not guaranteed)."
      },
      "output_format": {
        "name": "output_format",
        "tooltip": "Audio output format."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_similarity_boost": {
        "name": "similarity_boost"
      },
      "model_speed": {
        "name": "speed"
      },
      "model_style": {
        "name": "style"
      },
      "model_use_speaker_boost": {
        "name": "use_speaker_boost"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ElevenLabsVoiceSelector": {
    "display_name": "ElevenLabs Voice Selector",
    "description": "Select a predefined ElevenLabs voice for text-to-speech generation.",
    "inputs": {
      "voice": {
        "name": "voice",
        "tooltip": "Choose a voice from the predefined ElevenLabs voices."
      }
    },
    "outputs": {
      "0": {
        "name": "voice",
        "tooltip": null
      }
    }
  },
  "EmptyAceStep1_5LatentAudio": {
    "display_name": "Empty Ace Step 1.5 Latent Audio",
    "inputs": {
      "seconds": {
        "name": "seconds"
      },
      "batch_size": {
        "name": "batch_size",
        "tooltip": "The number of latent images in the batch."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EmptyAceStepLatentAudio": {
    "display_name": "Empty Ace Step 1.0 Latent Audio",
    "inputs": {
      "seconds": {
        "name": "seconds"
      },
      "batch_size": {
        "name": "batch_size",
        "tooltip": "The number of latent images in the batch."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EmptyARVideoLatent": {
    "display_name": "EmptyARVideoLatent",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EmptyAudio": {
    "display_name": "Empty Audio",
    "inputs": {
      "duration": {
        "name": "duration",
        "tooltip": "Duration of the empty audio clip in seconds"
      },
      "sample_rate": {
        "name": "sample_rate",
        "tooltip": "Sample rate of the empty audio clip."
      },
      "channels": {
        "name": "channels",
        "tooltip": "Number of audio channels (1 for mono, 2 for stereo)."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EmptyChromaRadianceLatentImage": {
    "display_name": "EmptyChromaRadianceLatentImage",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EmptyCosmosLatentVideo": {
    "display_name": "EmptyCosmosLatentVideo",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EmptyFlux2LatentImage": {
    "display_name": "Empty Flux 2 Latent",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EmptyHunyuanImageLatent": {
    "display_name": "EmptyHunyuanImageLatent",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EmptyHunyuanLatentVideo": {
    "display_name": "Empty HunyuanVideo 1.0 Latent",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EmptyHunyuanVideo15Latent": {
    "display_name": "Empty HunyuanVideo 1.5 Latent",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EmptyImage": {
    "display_name": "Empty Image",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "color": {
        "name": "color"
      }
    }
  },
  "EmptyLatentAudio": {
    "display_name": "Empty Latent Audio",
    "inputs": {
      "seconds": {
        "name": "seconds"
      },
      "batch_size": {
        "name": "batch_size",
        "tooltip": "The number of latent images in the batch."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EmptyLatentHunyuan3Dv2": {
    "display_name": "EmptyLatentHunyuan3Dv2",
    "inputs": {
      "resolution": {
        "name": "resolution"
      },
      "batch_size": {
        "name": "batch_size",
        "tooltip": "The number of latent images in the batch."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EmptyLatentImage": {
    "display_name": "Empty Latent Image",
    "description": "Create a new batch of empty latent images to be denoised via sampling.",
    "inputs": {
      "width": {
        "name": "width",
        "tooltip": "The width of the latent images in pixels."
      },
      "height": {
        "name": "height",
        "tooltip": "The height of the latent images in pixels."
      },
      "batch_size": {
        "name": "batch_size",
        "tooltip": "The number of latent images in the batch."
      }
    },
    "outputs": {
      "0": {
        "tooltip": "The empty latent image batch."
      }
    }
  },
  "EmptyLTXVLatentVideo": {
    "display_name": "EmptyLTXVLatentVideo",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EmptyMiniMaxH3LatentAV": {
    "display_name": "Empty MiniMax H3 AV Latent",
    "description": "Joint video+audio latent for MiniMax H3. Duration snaps to the model's 17k+5 frame grid at 24 fps.",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length",
        "tooltip": "Frame count at 24 fps, snapped up to the model's 17k+5 grid (124 = ~5s; trained range is ~124-362, longer is untested)"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EmptyMochiLatentVideo": {
    "display_name": "EmptyMochiLatentVideo",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EmptyQwenImageLayeredLatentImage": {
    "display_name": "Empty Qwen Image Layered Latent",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "layers": {
        "name": "layers"
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "EmptySD3LatentImage": {
    "display_name": "EmptySD3LatentImage",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Epsilon Scaling": {
    "display_name": "Epsilon Scaling",
    "inputs": {
      "model": {
        "name": "model"
      },
      "scaling_factor": {
        "name": "scaling_factor"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ExponentialScheduler": {
    "display_name": "ExponentialScheduler",
    "inputs": {
      "steps": {
        "name": "steps"
      },
      "sigma_max": {
        "name": "sigma_max"
      },
      "sigma_min": {
        "name": "sigma_min"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ExtendIntermediateSigmas": {
    "display_name": "ExtendIntermediateSigmas",
    "inputs": {
      "sigmas": {
        "name": "sigmas"
      },
      "steps": {
        "name": "steps"
      },
      "start_at_sigma": {
        "name": "start_at_sigma"
      },
      "end_at_sigma": {
        "name": "end_at_sigma"
      },
      "spacing": {
        "name": "spacing"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "FeatherMask": {
    "display_name": "Feather Mask",
    "inputs": {
      "mask": {
        "name": "mask"
      },
      "left": {
        "name": "left"
      },
      "top": {
        "name": "top"
      },
      "right": {
        "name": "right"
      },
      "bottom": {
        "name": "bottom"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "File3DToSplat": {
    "display_name": "Get Splat",
    "description": "Parse a splat File3D into a gaussian splat. Inverse of Create 3D File (from Splat). Supported format:  PLY, SPLAT, KSPLAT, SPZ. PLY carries full spherical harmonics, the other formats are base color only. Format is auto-detected from the file contents.",
    "inputs": {
      "model_3d": {
        "name": "model_3d",
        "tooltip": "A gaussian splat 3D file"
      }
    },
    "outputs": {
      "0": {
        "name": "splat",
        "tooltip": null
      }
    }
  },
  "FlipSigmas": {
    "display_name": "FlipSigmas",
    "inputs": {
      "sigmas": {
        "name": "sigmas"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Flux2ImageNode": {
    "display_name": "Flux.2 Image",
    "description": "Generate images via Flux.2 [pro] or Flux.2 [max] from a prompt and optional reference images.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation or edit"
      },
      "model": {
        "name": "model"
      },
      "seed": {
        "name": "seed",
        "tooltip": "The random seed used for creating the noise."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_height": {
        "name": "height"
      },
      "model_width": {
        "name": "width"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Flux2MaxImageNode": {
    "display_name": "Flux.2 [max] Image",
    "description": "Generates images synchronously based on prompt and resolution.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation or edit"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "seed": {
        "name": "seed",
        "tooltip": "The random seed used for creating the noise."
      },
      "prompt_upsampling": {
        "name": "prompt_upsampling",
        "tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation."
      },
      "images": {
        "name": "images",
        "tooltip": "Up to 9 images to be used as references."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Flux2ProImageNode": {
    "display_name": "Flux.2 [pro] Image",
    "description": "Generates images synchronously based on prompt and resolution.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation or edit"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "seed": {
        "name": "seed",
        "tooltip": "The random seed used for creating the noise."
      },
      "prompt_upsampling": {
        "name": "prompt_upsampling",
        "tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation."
      },
      "images": {
        "name": "images",
        "tooltip": "Up to 9 images to be used as references."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Flux2Scheduler": {
    "display_name": "Flux2Scheduler",
    "inputs": {
      "steps": {
        "name": "steps"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Flux3ImageToVideoNode": {
    "display_name": "Flux 3 Image to Video",
    "description": "Animates 1 to 10 images with FLUX 3. Each image becomes a frame of the clip: one image opens it, two morph from the first to the second, and more are spread across it or pinned to times you choose.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "How the scene should move and sound; the prompt is interpreted and expanded before generation."
      },
      "keyframes": {
        "name": "keyframes",
        "tooltip": "1 to 10 images, in playback order. Minimum 256x256 pixels each."
      },
      "placement": {
        "name": "placement",
        "tooltip": "'spread across the clip' lets FLUX 3 place the images (one opens the clip, two become its start and end); 'at times' pins every image to a second you choose."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "Output aspect ratio. 'auto' picks one from the prompt and inputs."
      },
      "duration": {
        "name": "duration",
        "tooltip": "Clip length in seconds. 'auto' fits the length to the content."
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "Output resolution."
      },
      "generate_audio": {
        "name": "generate_audio",
        "tooltip": "Generate synchronized audio (ambient, speech, effects). Off produces a video with no audio track."
      },
      "safety_tolerance": {
        "name": "safety_tolerance",
        "tooltip": "Moderation tolerance, 0 is the strictest. Requests that send images or video are capped at 2 whatever you set here."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; FLUX 3 picks its own seed, so actual results are nondeterministic regardless of this value."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Flux3TextToVideoNode": {
    "display_name": "Flux 3 Text to Video",
    "description": "Generates a video with synchronized audio from a text prompt via FLUX 3.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "What you want, in plain language; the prompt is interpreted and expanded before generation. Describe ambient sound, music and speech separately for layered audio."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "Output aspect ratio. 'auto' picks one from the prompt and inputs."
      },
      "duration": {
        "name": "duration",
        "tooltip": "Clip length in seconds. 'auto' fits the length to the content."
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "Output resolution."
      },
      "generate_audio": {
        "name": "generate_audio",
        "tooltip": "Generate synchronized audio (ambient, speech, effects). Off produces a video with no audio track."
      },
      "safety_tolerance": {
        "name": "safety_tolerance",
        "tooltip": "Moderation tolerance, 0 is the strictest. Requests that send images or video are capped at 2 whatever you set here."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; FLUX 3 picks its own seed, so actual results are nondeterministic regardless of this value."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Flux3VideoContinuationNode": {
    "display_name": "Flux 3 Video Continuation",
    "description": "Continues a video with FLUX 3: the new clip carries on from the final frames of the one you provide.",
    "inputs": {
      "video": {
        "name": "video",
        "tooltip": "The clip to continue."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "What the continuation should show; the prompt is interpreted and expanded before generation."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "Output aspect ratio. 'auto' picks one from the prompt and inputs."
      },
      "duration": {
        "name": "duration",
        "tooltip": "Clip length in seconds. 'auto' fits the length to the content."
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "Output resolution."
      },
      "generate_audio": {
        "name": "generate_audio",
        "tooltip": "Generate synchronized audio (ambient, speech, effects). Off produces a video with no audio track."
      },
      "safety_tolerance": {
        "name": "safety_tolerance",
        "tooltip": "Moderation tolerance, 0 is the strictest. Requests that send images or video are capped at 2 whatever you set here."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; FLUX 3 picks its own seed, so actual results are nondeterministic regardless of this value."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "FluxDisableGuidance": {
    "display_name": "FluxDisableGuidance",
    "description": "This node completely disables the guidance embed on Flux and Flux like models",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "FluxEraseNode": {
    "display_name": "Flux Erase Image",
    "description": "Removes the masked object from an image and reconstructs the background. Paint the mask over what you want to erase.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "mask": {
        "name": "mask",
        "tooltip": "White areas are removed; black areas are preserved."
      },
      "dilate_pixels": {
        "name": "dilate_pixels",
        "tooltip": "Expands the mask boundaries to ensure clean coverage of the object's edges."
      },
      "seed": {
        "name": "seed",
        "tooltip": "The random seed used for creating the noise."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "FluxGuidance": {
    "display_name": "FluxGuidance",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      },
      "guidance": {
        "name": "guidance"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "FluxKontextImageScale": {
    "display_name": "FluxKontextImageScale",
    "description": "This node resizes the image to one that is more optimal for flux kontext.",
    "inputs": {
      "image": {
        "name": "image"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "FluxKontextMaxImageNode": {
    "display_name": "Flux.1 Kontext [max] Image",
    "description": "Edits images using Flux.1 Kontext [pro] via api based on prompt and aspect ratio.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation - specify what and how to edit."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "Aspect ratio of image; must be between 1:4 and 4:1."
      },
      "guidance": {
        "name": "guidance",
        "tooltip": "Guidance strength for the image generation process"
      },
      "steps": {
        "name": "steps",
        "tooltip": "Number of steps for the image generation process"
      },
      "seed": {
        "name": "seed",
        "tooltip": "The random seed used for creating the noise."
      },
      "prompt_upsampling": {
        "name": "prompt_upsampling",
        "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)."
      },
      "input_image": {
        "name": "input_image"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "FluxKontextMultiReferenceLatentMethod": {
    "display_name": "Edit Model Reference Method",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      },
      "reference_latents_method": {
        "name": "reference_latents_method"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "FluxKontextProImageNode": {
    "display_name": "Flux.1 Kontext [pro] Image",
    "description": "Edits images using Flux.1 Kontext [pro] via api based on prompt and aspect ratio.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation - specify what and how to edit."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "Aspect ratio of image; must be between 1:4 and 4:1."
      },
      "guidance": {
        "name": "guidance",
        "tooltip": "Guidance strength for the image generation process"
      },
      "steps": {
        "name": "steps",
        "tooltip": "Number of steps for the image generation process"
      },
      "seed": {
        "name": "seed",
        "tooltip": "The random seed used for creating the noise."
      },
      "prompt_upsampling": {
        "name": "prompt_upsampling",
        "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)."
      },
      "input_image": {
        "name": "input_image"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "FluxKVCache": {
    "display_name": "Flux KV Cache",
    "description": "Enables KV Cache optimization for reference images on Flux family models.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The model to use KV Cache on."
      }
    },
    "outputs": {
      "0": {
        "tooltip": "The patched model with KV Cache enabled."
      }
    }
  },
  "FluxProExpandNode": {
    "display_name": "Flux.1 Expand Image",
    "description": "Outpaints image based on prompt.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation"
      },
      "prompt_upsampling": {
        "name": "prompt_upsampling",
        "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)."
      },
      "top": {
        "name": "top",
        "tooltip": "Number of pixels to expand at the top of the image"
      },
      "bottom": {
        "name": "bottom",
        "tooltip": "Number of pixels to expand at the bottom of the image"
      },
      "left": {
        "name": "left",
        "tooltip": "Number of pixels to expand at the left of the image"
      },
      "right": {
        "name": "right",
        "tooltip": "Number of pixels to expand at the right of the image"
      },
      "guidance": {
        "name": "guidance",
        "tooltip": "Guidance strength for the image generation process"
      },
      "steps": {
        "name": "steps",
        "tooltip": "Number of steps for the image generation process"
      },
      "seed": {
        "name": "seed",
        "tooltip": "The random seed used for creating the noise."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "FluxProFillNode": {
    "display_name": "Flux.1 Fill Image",
    "description": "Inpaints image based on mask and prompt.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "mask": {
        "name": "mask"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation"
      },
      "prompt_upsampling": {
        "name": "prompt_upsampling",
        "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)."
      },
      "guidance": {
        "name": "guidance",
        "tooltip": "Guidance strength for the image generation process"
      },
      "steps": {
        "name": "steps",
        "tooltip": "Number of steps for the image generation process"
      },
      "seed": {
        "name": "seed",
        "tooltip": "The random seed used for creating the noise."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation"
      },
      "prompt_upsampling": {
        "name": "prompt_upsampling",
        "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)."
      },
      "seed": {
        "name": "seed",
        "tooltip": "The random seed used for creating the noise."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "Aspect ratio of image; must be between 1:4 and 4:1."
      },
      "raw": {
        "name": "raw",
        "tooltip": "When True, generate less processed, more natural-looking images."
      },
      "image_prompt": {
        "name": "image_prompt"
      },
      "image_prompt_strength": {
        "name": "image_prompt_strength",
        "tooltip": "Blend between the prompt and the image prompt."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "FluxVTONode": {
    "display_name": "Flux Virtual Try-On",
    "description": "Virtual try-on: dresses the person in the provided garment.",
    "inputs": {
      "person": {
        "name": "person",
        "tooltip": "Image of the person to dress."
      },
      "garment": {
        "name": "garment",
        "tooltip": "Image of the garment to apply."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Optional natural-language styling instruction (e.g. how the garment should fit)."
      },
      "seed": {
        "name": "seed",
        "tooltip": "The random seed used for creating the noise."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "FrameInterpolate": {
    "display_name": "Run Frame Interpolation Model",
    "inputs": {
      "interp_model": {
        "name": "interp_model"
      },
      "images": {
        "name": "images"
      },
      "multiplier": {
        "name": "multiplier"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "FrameInterpolationModelLoader": {
    "display_name": "Load Frame Interpolation Model",
    "inputs": {
      "model_name": {
        "name": "model_name",
        "tooltip": "Select a frame interpolation model to load. Models must be placed in the 'frame_interpolation' folder."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "FreeU": {
    "display_name": "FreeU",
    "inputs": {
      "model": {
        "name": "model"
      },
      "b1": {
        "name": "b1"
      },
      "b2": {
        "name": "b2"
      },
      "s1": {
        "name": "s1"
      },
      "s2": {
        "name": "s2"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "FreeU_V2": {
    "display_name": "FreeU_V2",
    "inputs": {
      "model": {
        "name": "model"
      },
      "b1": {
        "name": "b1"
      },
      "b2": {
        "name": "b2"
      },
      "s1": {
        "name": "s1"
      },
      "s2": {
        "name": "s2"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "FreSca": {
    "display_name": "FreSca",
    "description": "Applies frequency-dependent scaling to the guidance",
    "inputs": {
      "model": {
        "name": "model"
      },
      "scale_low": {
        "name": "scale_low",
        "tooltip": "Scaling factor for low-frequency components"
      },
      "scale_high": {
        "name": "scale_high",
        "tooltip": "Scaling factor for high-frequency components"
      },
      "freq_cutoff": {
        "name": "freq_cutoff",
        "tooltip": "Number of frequency indices around center to consider as low-frequency"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "GeminiImage2Node": {
    "display_name": "Nano Banana Pro (Google Gemini Image)",
    "description": "Generate or edit images synchronously via Google Vertex API.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt describing the image to generate or the edits to apply. Include any constraints, styles, or details the model should follow."
      },
      "model": {
        "name": "model"
      },
      "seed": {
        "name": "seed",
        "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."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "If set to 'auto', matches your input image's aspect ratio; if no image is provided, a 16:9 square is usually generated."
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "Target output resolution. For 2K/4K the native Gemini upscaler is used."
      },
      "response_modalities": {
        "name": "response_modalities",
        "tooltip": "Choose 'IMAGE' for image-only output, or 'IMAGE+TEXT' to return both the generated image and a text response."
      },
      "images": {
        "name": "images",
        "tooltip": "Optional reference image(s). To include multiple images, use the Batch Images node (up to 14)."
      },
      "files": {
        "name": "files",
        "tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."
      },
      "system_prompt": {
        "name": "system_prompt",
        "tooltip": "Foundational instructions that dictate an AI's behavior."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "tooltip": null
      }
    }
  },
  "GeminiImageNode": {
    "display_name": "Nano Banana (Google Gemini Image)",
    "description": "Edit images synchronously via Google API.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for generation"
      },
      "model": {
        "name": "model",
        "tooltip": "The Gemini model to use for generating responses."
      },
      "seed": {
        "name": "seed",
        "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."
      },
      "images": {
        "name": "images",
        "tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node."
      },
      "files": {
        "name": "files",
        "tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "Defaults to matching the output image size to that of your input image, or otherwise generates 1:1 squares."
      },
      "response_modalities": {
        "name": "response_modalities",
        "tooltip": "Choose 'IMAGE' for image-only output, or 'IMAGE+TEXT' to return both the generated image and a text response."
      },
      "system_prompt": {
        "name": "system_prompt",
        "tooltip": "Foundational instructions that dictate an AI's behavior."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "tooltip": null
      }
    }
  },
  "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. 🛈 TIP: Can be chained together with other Gemini Input File nodes.",
    "inputs": {
      "file": {
        "name": "file",
        "tooltip": "Input files to include as context for the model. Only accepts text (.txt) and PDF (.pdf) files for now."
      },
      "GEMINI_INPUT_FILES": {
        "name": "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."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "GeminiNanoBanana2": {
    "display_name": "Nano Banana 2",
    "description": "Generate or edit images synchronously via Google Vertex API.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt describing the image to generate or the edits to apply. Include any constraints, styles, or details the model should follow."
      },
      "model": {
        "name": "model"
      },
      "seed": {
        "name": "seed",
        "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."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "If set to 'auto', matches your input image's aspect ratio; if no image is provided, a 16:9 square is usually generated."
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "Target output resolution. For 2K/4K the native Gemini upscaler is used."
      },
      "response_modalities": {
        "name": "response_modalities"
      },
      "thinking_level": {
        "name": "thinking_level"
      },
      "images": {
        "name": "images",
        "tooltip": "Optional reference image(s). To include multiple images, use the Batch Images node (up to 14)."
      },
      "files": {
        "name": "files",
        "tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."
      },
      "system_prompt": {
        "name": "system_prompt",
        "tooltip": "Foundational instructions that dictate an AI's behavior."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "tooltip": null
      },
      "2": {
        "name": "thought_image",
        "tooltip": "First image from the model's thinking process. Only available with thinking_level HIGH and IMAGE+TEXT modality."
      }
    }
  },
  "GeminiNanoBanana2V2": {
    "display_name": "Nano Banana 2",
    "description": "Generate or edit images synchronously via Google Vertex API.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt describing the image to generate or the edits to apply. Include any constraints, styles, or details the model should follow."
      },
      "model": {
        "name": "model"
      },
      "seed": {
        "name": "seed",
        "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."
      },
      "response_modalities": {
        "name": "response_modalities"
      },
      "system_prompt": {
        "name": "system_prompt",
        "tooltip": "Foundational instructions that dictate an AI's behavior."
      },
      "temperature": {
        "name": "temperature",
        "tooltip": "Controls randomness in generation. Lower is more focused/deterministic."
      },
      "top_p": {
        "name": "top_p",
        "tooltip": "Nucleus sampling threshold. Lower is more focused, higher more diverse."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_aspect_ratio": {
        "name": "aspect_ratio"
      },
      "model_resolution": {
        "name": "resolution"
      },
      "model_thinking_level": {
        "name": "thinking_level"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "tooltip": null
      },
      "2": {
        "name": "thought_image",
        "tooltip": "First image from the model's thinking process. Only available with thinking_level HIGH and IMAGE+TEXT modality."
      }
    }
  },
  "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.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text inputs to the model, used to generate a response. You can include detailed instructions, questions, or context for the model."
      },
      "model": {
        "name": "model",
        "tooltip": "The Gemini model to use for generating responses."
      },
      "seed": {
        "name": "seed",
        "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."
      },
      "images": {
        "name": "images",
        "tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node."
      },
      "audio": {
        "name": "audio",
        "tooltip": "Optional audio to use as context for the model."
      },
      "video": {
        "name": "video",
        "tooltip": "Optional video to use as context for the model."
      },
      "files": {
        "name": "files",
        "tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."
      },
      "system_prompt": {
        "name": "system_prompt",
        "tooltip": "Foundational instructions that dictate an AI's behavior."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "GeminiNodeV2": {
    "display_name": "Google Gemini",
    "description": "Generate text responses with Google's Gemini models. Provide a text prompt and, optionally, one or more images, audio clips, videos, or files as multimodal context.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text input to the model. Include detailed instructions, questions, or context."
      },
      "model": {
        "name": "model",
        "tooltip": "The Gemini model used to generate the response."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for sampling. Set to 0 for a random seed. Deterministic output isn't guaranteed."
      },
      "system_prompt": {
        "name": "system_prompt",
        "tooltip": "Foundational instructions that dictate the model's behavior."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_max_output_tokens": {
        "name": "max_output_tokens"
      },
      "model_temperature": {
        "name": "temperature"
      },
      "model_thinking_level": {
        "name": "thinking_level"
      },
      "model_top_p": {
        "name": "top_p"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "GeminiVideoOmni": {
    "display_name": "Google Gemini Omni (Video)",
    "description": "Generate a video with audio from a text prompt using Google's Gemini Omni Flash model. Optionally provide reference images and/or videos to guide or edit the result. Describe the desired length (3-10s) and aspect ratio (16:9 or 9:16) directly in the prompt.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The Gemini video model used to generate the video."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_temperature": {
        "name": "temperature"
      },
      "model_top_p": {
        "name": "top_p"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "tooltip": null
      }
    }
  },
  "GenerateTracks": {
    "display_name": "Generate Video Tracks",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "start_x": {
        "name": "start_x",
        "tooltip": "Normalized X coordinate (0-1) for start position."
      },
      "start_y": {
        "name": "start_y",
        "tooltip": "Normalized Y coordinate (0-1) for start position."
      },
      "end_x": {
        "name": "end_x",
        "tooltip": "Normalized X coordinate (0-1) for end position."
      },
      "end_y": {
        "name": "end_y",
        "tooltip": "Normalized Y coordinate (0-1) for end position."
      },
      "num_frames": {
        "name": "num_frames"
      },
      "num_tracks": {
        "name": "num_tracks"
      },
      "track_spread": {
        "name": "track_spread",
        "tooltip": "Normalized distance between tracks. Tracks are spread perpendicular to the motion direction."
      },
      "bezier": {
        "name": "bezier",
        "tooltip": "Enable Bezier curve path using the mid point as control point."
      },
      "mid_x": {
        "name": "mid_x",
        "tooltip": "Normalized X control point for Bezier curve. Only used when 'bezier' is enabled."
      },
      "mid_y": {
        "name": "mid_y",
        "tooltip": "Normalized Y control point for Bezier curve. Only used when 'bezier' is enabled."
      },
      "interpolation": {
        "name": "interpolation",
        "tooltip": "Controls the timing/speed of movement along the path."
      },
      "track_mask": {
        "name": "track_mask",
        "tooltip": "Optional mask to indicate visible frames."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "track_length",
        "tooltip": null
      }
    }
  },
  "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).",
    "inputs": {
      "iclora_model": {
        "name": "iclora_model",
        "tooltip": "Direct output from a LoRA Loader for the specific IC-LoRA from which to extract the metadata."
      }
    },
    "outputs": {
      "0": {
        "name": "iclora_parameters",
        "tooltip": "IC-LoRA parameters extracted from the LoRA metadata (eg. reference_downscale_factor). Connect to LTXVAddGuide if the LoRA requires special handling of the guides."
      }
    }
  },
  "GetImageSize": {
    "display_name": "Get Image Size",
    "description": "Returns width and height of the image, and passes it through unchanged.",
    "inputs": {
      "image": {
        "name": "image"
      }
    },
    "outputs": {
      "0": {
        "name": "width",
        "tooltip": null
      },
      "1": {
        "name": "height",
        "tooltip": null
      },
      "2": {
        "name": "batch_size",
        "tooltip": null
      }
    }
  },
  "GetSplatCount": {
    "display_name": "Get Splat Count",
    "description": "Returns the number of splats summed across the batch.",
    "inputs": {
      "splat": {
        "name": "splat"
      }
    },
    "outputs": {
      "0": {
        "name": "splat",
        "tooltip": null
      },
      "1": {
        "name": "count",
        "tooltip": null
      }
    }
  },
  "GetVideoComponents": {
    "display_name": "Get Video Components",
    "description": "Extracts all components from a video: frames, audio, framerate, and bit depth.",
    "inputs": {
      "video": {
        "name": "video",
        "tooltip": "The video to extract components from."
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": null
      },
      "1": {
        "name": "audio",
        "tooltip": null
      },
      "2": {
        "name": "fps",
        "tooltip": null
      },
      "3": {
        "name": "bit_depth",
        "tooltip": null
      }
    }
  },
  "GITSScheduler": {
    "display_name": "GITSScheduler",
    "inputs": {
      "coeff": {
        "name": "coeff"
      },
      "steps": {
        "name": "steps"
      },
      "denoise": {
        "name": "denoise"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "GLIGENLoader": {
    "display_name": "Load GLIGEN Model",
    "inputs": {
      "gligen_name": {
        "name": "gligen_name"
      }
    }
  },
  "GLIGENTextBoxApply": {
    "display_name": "Apply GLIGEN Text Box",
    "inputs": {
      "conditioning_to": {
        "name": "conditioning_to"
      },
      "clip": {
        "name": "clip"
      },
      "gligen_textbox_model": {
        "name": "gligen_textbox_model"
      },
      "text": {
        "name": "text"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "x": {
        "name": "x"
      },
      "y": {
        "name": "y"
      }
    }
  },
  "GLSLShader": {
    "display_name": "GLSL Shader",
    "description": "Apply GLSL ES fragment shaders to images. u_resolution (vec2) is always available.",
    "inputs": {
      "fragment_shader": {
        "name": "fragment_shader",
        "tooltip": "GLSL fragment shader source code (GLSL ES 3.00 / WebGL 2.0 compatible)"
      },
      "size_mode": {
        "name": "size_mode",
        "tooltip": "Output size: 'from_input' uses first input image dimensions, 'custom' allows manual size"
      },
      "images": {
        "name": "images",
        "tooltip": "Images are available as u_image0-4 (sampler2D) in the shader code"
      },
      "floats": {
        "name": "floats",
        "tooltip": "Floats are available as u_float0-19 in the shader code"
      },
      "ints": {
        "name": "ints",
        "tooltip": "Ints are available as u_int0-19 in the shader code"
      },
      "bools": {
        "name": "bools",
        "tooltip": "Booleans are available as u_bool0-9 (bool) in the shader code"
      },
      "curves": {
        "name": "curves",
        "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"
      }
    },
    "outputs": {
      "0": {
        "name": "IMAGE0",
        "tooltip": "Available via layout(location = 0) out vec4 fragColor0 in the shader code"
      },
      "1": {
        "name": "IMAGE1",
        "tooltip": "Available via layout(location = 1) out vec4 fragColor1 in the shader code"
      },
      "2": {
        "name": "IMAGE2",
        "tooltip": "Available via layout(location = 2) out vec4 fragColor2 in the shader code"
      },
      "3": {
        "name": "IMAGE3",
        "tooltip": "Available via layout(location = 3) out vec4 fragColor3 in the shader code"
      }
    }
  },
  "GrokImageEditNode": {
    "display_name": "Grok Image Edit",
    "description": "Modify an existing image based on a text prompt",
    "inputs": {
      "model": {
        "name": "model"
      },
      "image": {
        "name": "image"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "The text prompt used to generate the image"
      },
      "resolution": {
        "name": "resolution"
      },
      "number_of_images": {
        "name": "number_of_images",
        "tooltip": "Number of edited images to generate"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "Only allowed when multiple images are connected to the image input."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "GrokImageEditNodeV2": {
    "display_name": "Grok Image Edit",
    "description": "Modify an existing image based on a text prompt",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "The text prompt used to generate the image"
      },
      "model": {
        "name": "model"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_aspect_ratio": {
        "name": "aspect_ratio"
      },
      "model_number_of_images": {
        "name": "number_of_images"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "GrokImageNode": {
    "display_name": "Grok Image",
    "description": "Generate images using Grok based on a text prompt",
    "inputs": {
      "model": {
        "name": "model"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "The text prompt used to generate the image"
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "number_of_images": {
        "name": "number_of_images",
        "tooltip": "Number of images to generate"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "resolution": {
        "name": "resolution"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "GrokVideoEditNode": {
    "display_name": "Grok Video Edit",
    "description": "Edit an existing video based on a text prompt.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Text description of the desired video."
      },
      "video": {
        "name": "video",
        "tooltip": "Maximum supported duration is 8.7 seconds and 50MB file size."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "GrokVideoExtendNode": {
    "display_name": "Grok Video Extend",
    "description": "Extend an existing video with a seamless continuation based on a text prompt.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text description of what should happen next in the video."
      },
      "video": {
        "name": "video",
        "tooltip": "Source video to extend. MP4 format, 2-15 seconds."
      },
      "model": {
        "name": "model",
        "tooltip": "The model to use for video extension."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_duration": {
        "name": "duration"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "GrokVideoNode": {
    "display_name": "Grok Video",
    "description": "Generate video from a prompt or an image",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The model to use for video generation."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Text description of the desired video. Optional for grok-imagine-video-1.5 when an input image is provided."
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "The resolution of the output video. 1080p is only available for grok-imagine-video-1.5."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "The aspect ratio of the output video."
      },
      "duration": {
        "name": "duration",
        "tooltip": "The duration of the output video in seconds."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "image": {
        "name": "image",
        "tooltip": "Optional starting image. If omitted, the video is generated from the text prompt alone."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "GrokVideoReferenceNode": {
    "display_name": "Grok Reference-to-Video",
    "description": "Generate video guided by reference images, with optional preset voice references.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text description of the desired video."
      },
      "model": {
        "name": "model",
        "tooltip": "The model to use for video generation."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_aspect_ratio": {
        "name": "aspect_ratio"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_resolution": {
        "name": "resolution"
      },
      "model_voice_1": {
        "name": "voice_1"
      },
      "model_voice_2": {
        "name": "voice_2"
      },
      "model_voice_3": {
        "name": "voice_3"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "GrowMask": {
    "display_name": "Grow Mask",
    "inputs": {
      "mask": {
        "name": "mask"
      },
      "expand": {
        "name": "expand"
      },
      "tapered_corners": {
        "name": "tapered_corners"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "HappyHorseImageToVideoApi": {
    "display_name": "HappyHorse Image to Video",
    "description": "Generate a video from a first-frame image using the HappyHorse model.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "first_frame": {
        "name": "first_frame",
        "tooltip": "First frame image. The output aspect ratio is derived from this image."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AI-generated watermark to the result."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AI-generated watermark to the result."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_ratio": {
        "name": "ratio"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "HappyHorseTextToVideoApi": {
    "display_name": "HappyHorse Text to Video",
    "description": "Generates a video based on a text prompt using the HappyHorse model.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AI-generated watermark to the result."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_ratio": {
        "name": "ratio"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "video": {
        "name": "video",
        "tooltip": "The video to edit."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AI-generated watermark to the result."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_ratio": {
        "name": "ratio"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "HeyGenAvatarVideoNode": {
    "display_name": "HeyGen Avatar Video",
    "description": "Generate a talking-presenter video from a HeyGen avatar. Includes HeyGen's most popular public avatars; any look ID can be supplied as an override.",
    "inputs": {
      "engine": {
        "name": "engine",
        "tooltip": "Rendering engine; each choice lists only the avatars that support it. 'auto' offers every avatar and picks its best engine (Avatar IV preferred). Avatar V is highest fidelity, Avatar III is the most affordable."
      },
      "speech": {
        "name": "speech",
        "tooltip": "Drive the avatar with a text script (HeyGen text-to-speech) or your own audio."
      },
      "custom_avatar_id": {
        "name": "custom_avatar_id",
        "tooltip": "Optional HeyGen avatar look ID. When set, overrides the avatar selected above. Any of HeyGen's 3000+ public looks (or your private avatars) can be used."
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "Output video resolution."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "Output aspect ratio. 'auto' follows the avatar's source footage."
      },
      "background_color": {
        "name": "background_color",
        "tooltip": "Optional solid background color as a hex code (e.g. '#00ff00'). Leave empty for the avatar's own background."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Not sent to HeyGen; change it to force a re-run."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "engine_avatar": {
        "name": "avatar"
      },
      "speech_custom_voice_id": {
        "name": "custom_voice_id"
      },
      "speech_text": {
        "name": "text"
      },
      "speech_voice": {
        "name": "voice"
      },
      "speech_voice_speed": {
        "name": "voice_speed"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "HeyGenCreateAvatarNode": {
    "display_name": "HeyGen Create Avatar",
    "description": "Create your own reusable HeyGen avatar from a photo of a person or from a text prompt (a generated character). Feed the resulting avatar_id into HeyGen Avatar Video's custom_avatar_id — and save the ID somewhere to reuse the avatar in future workflows.",
    "inputs": {
      "source": {
        "name": "source",
        "tooltip": "Generate a new character from a text prompt, or create the avatar from a connected photo of a person."
      },
      "source_prompt": {
        "name": "prompt"
      }
    },
    "outputs": {
      "0": {
        "name": "avatar_id",
        "tooltip": "Avatar look ID. Pass it to HeyGen Avatar Video's custom_avatar_id; save it to reuse the avatar later."
      },
      "1": {
        "name": "preview",
        "tooltip": null
      }
    }
  },
  "HeyGenTalkingPhotoNode": {
    "display_name": "HeyGen Talking Photo",
    "description": "Animate any image of a person into a lip-synced talking video (HeyGen Avatar IV). Drive it with a text script or your own audio.",
    "inputs": {
      "image": {
        "name": "image",
        "tooltip": "Image of a person to animate. Downscaled automatically if larger than 2K."
      },
      "speech": {
        "name": "speech",
        "tooltip": "Drive the avatar with a text script (HeyGen text-to-speech) or your own audio."
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "Output video resolution."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "Output aspect ratio. 'auto' follows the input image."
      },
      "expressiveness": {
        "name": "expressiveness",
        "tooltip": "How expressive the animated face and gestures are."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Not sent to HeyGen; change it to force a re-run."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "speech_custom_voice_id": {
        "name": "custom_voice_id"
      },
      "speech_text": {
        "name": "text"
      },
      "speech_voice": {
        "name": "voice"
      },
      "speech_voice_speed": {
        "name": "voice_speed"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "HeyGenTextToSpeechNode": {
    "display_name": "HeyGen Text to Speech",
    "description": "Generate speech audio from text using HeyGen's Starfish TTS engine. Includes HeyGen's most popular voices across 17 languages.",
    "inputs": {
      "text": {
        "name": "text",
        "tooltip": "Text to synthesize (up to 5000 characters). The generated speech must be at least 1 second long."
      },
      "voice": {
        "name": "voice",
        "tooltip": "Voice to use (curated from HeyGen's most popular Starfish-compatible voices)."
      },
      "custom_voice_id": {
        "name": "custom_voice_id",
        "tooltip": "Optional HeyGen voice ID. When set, overrides the voice selected above. The voice must support the Starfish engine."
      },
      "speed": {
        "name": "speed",
        "tooltip": "Speech speed multiplier."
      },
      "ssml": {
        "name": "ssml",
        "tooltip": "Treat the text as SSML markup (for pauses, emphasis, and pronunciation control)."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Not sent to HeyGen; change it to force a re-run."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "HeyGenVideoTranslateNode": {
    "display_name": "HeyGen Video Translate",
    "description": "Translate a spoken video into another language. Clones the original speaker's voice and re-animates the mouth to match the translated speech.",
    "inputs": {
      "video": {
        "name": "video",
        "tooltip": "Video with speech to translate."
      },
      "output_language": {
        "name": "output_language",
        "tooltip": "Target language for the translated video."
      },
      "mode": {
        "name": "mode",
        "tooltip": "'speed' is faster; 'precision' produces higher-quality lip sync at twice the price."
      },
      "translate_audio_only": {
        "name": "translate_audio_only",
        "tooltip": "Only swap the audio track, keeping the original mouth movements (no lip sync)."
      },
      "speaker_count": {
        "name": "speaker_count",
        "tooltip": "Number of speakers in the video. 0 = detect automatically."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Not sent to HeyGen; change it to force a re-run."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "start_percent": {
        "name": "start_percent",
        "tooltip": "Sampling progress (0=start, 1=end) at which the blend turns ON."
      },
      "end_percent": {
        "name": "end_percent",
        "tooltip": "Sampling progress at which the blend turns OFF."
      },
      "pattern": {
        "name": "pattern",
        "tooltip": "Shift layout. single_shift: one pass at the natural patch grid + others offset. symmetric: all passes off-grid, shifts split around origin."
      },
      "passes": {
        "name": "passes",
        "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)."
      },
      "blend": {
        "name": "blend",
        "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."
      },
      "strength": {
        "name": "strength",
        "tooltip": "Interpolation between the natural-grid pred (0) and the averaged result (1)."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "HiDreamO1ReferenceImages": {
    "display_name": "HiDream-O1 Reference Images",
    "description": "Attach 1-10 reference images to conditioning, one for edit instructionor multiple for subject-driven personalization.",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "images": {
        "name": "images",
        "tooltip": "Reference images. 1 image = instruction edit; 2-10 images = multi reference."
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      }
    }
  },
  "HitPawGeneralImageEnhance": {
    "display_name": "HitPaw General Image Enhance",
    "description": "Upscale low-resolution images to super-resolution, eliminate artifacts and noise. Maximum output: 32 megapixels.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "image": {
        "name": "image"
      },
      "upscale_factor": {
        "name": "upscale_factor"
      },
      "auto_downscale": {
        "name": "auto_downscale",
        "tooltip": "Automatically downscale input image if output would exceed the limit."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "video": {
        "name": "video"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Hunyuan3Dv2Conditioning": {
    "display_name": "Hunyuan3Dv2Conditioning",
    "inputs": {
      "clip_vision_output": {
        "name": "clip_vision_output"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      }
    }
  },
  "Hunyuan3Dv2ConditioningMultiView": {
    "display_name": "Hunyuan3Dv2ConditioningMultiView",
    "inputs": {
      "front": {
        "name": "front"
      },
      "left": {
        "name": "left"
      },
      "back": {
        "name": "back"
      },
      "right": {
        "name": "right"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      }
    }
  },
  "HunyuanImageToVideo": {
    "display_name": "HunyuanImageToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "guidance_type": {
        "name": "guidance_type"
      },
      "start_image": {
        "name": "start_image"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "HunyuanRefinerLatent": {
    "display_name": "Hunyuan Latent Refiner",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "latent": {
        "name": "latent"
      },
      "noise_augmentation": {
        "name": "noise_augmentation"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "HunyuanVideo15ImageToVideo": {
    "display_name": "HunyuanVideo15ImageToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "start_image": {
        "name": "start_image"
      },
      "clip_vision_output": {
        "name": "clip_vision_output"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "HunyuanVideo15LatentUpscaleWithModel": {
    "display_name": "Hunyuan Video 15 Latent Upscale With Model",
    "inputs": {
      "model": {
        "name": "model"
      },
      "samples": {
        "name": "samples"
      },
      "upscale_method": {
        "name": "upscale_method"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "crop": {
        "name": "crop"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "HunyuanVideo15SuperResolution": {
    "display_name": "Hunyuan Video 1.5 Super Resolution",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "latent": {
        "name": "latent"
      },
      "noise_augmentation": {
        "name": "noise_augmentation"
      },
      "vae": {
        "name": "vae"
      },
      "start_image": {
        "name": "start_image"
      },
      "clip_vision_output": {
        "name": "clip_vision_output"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "HypernetworkLoader": {
    "display_name": "Load Hypernetwork",
    "inputs": {
      "model": {
        "name": "model"
      },
      "hypernetwork_name": {
        "name": "hypernetwork_name"
      },
      "strength": {
        "name": "strength"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "HyperTile": {
    "display_name": "HyperTile",
    "inputs": {
      "model": {
        "name": "model"
      },
      "tile_size": {
        "name": "tile_size"
      },
      "swap_size": {
        "name": "swap_size"
      },
      "max_depth": {
        "name": "max_depth"
      },
      "scale_depth": {
        "name": "scale_depth"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Ideogram4Scheduler": {
    "display_name": "Ideogram 4 Scheduler",
    "inputs": {
      "steps": {
        "name": "steps"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "mu": {
        "name": "mu"
      },
      "std": {
        "name": "std"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "IdeogramPImage": {
    "display_name": "Ideogram P-Image",
    "description": "Generates images using P-Image, Ideogram's fast text-to-image model. Strong typography and photorealism; supports Ideogram 4.0 structured JSON captions for exact text, colors and layout.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt. Also accepts an Ideogram 4.0 structured JSON caption (exact colors as #RRGGBB hexes, exact text strings, bounding-box layout) — set prompt_upsampling to OFF to use it verbatim."
      },
      "quality": {
        "name": "quality",
        "tooltip": "Speed/price/quality tier. MEDIUM is the everyday default; HIGH for complex prompts, fine detail and difficult text; VERY_LOW/LOW for drafts at scale. Difficult text renders poorly below MEDIUM."
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "Output size class (exact pixels follow the aspect ratio, e.g. 16:9 gives 1280x720 at 1K and 2560x1440 at 2K). Prefer HIGH + 2K for crisp typography."
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "The aspect ratio for image generation."
      },
      "prompt_upsampling": {
        "name": "prompt_upsampling",
        "tooltip": "Expands short prompts into a detailed structured caption before generation (the rewritten prompt is returned as final_prompt). Set OFF when supplying your own JSON caption or exact wording."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for reproducible generation. With prompt_upsampling OFF, the same seed and settings return the same image; with ON/AUTO the prompt rewrite varies per run — reproduce a result by reusing its final_prompt output with prompt_upsampling OFF and the same seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "final_prompt",
        "tooltip": "The prompt the image was actually generated from (the rewritten structured caption when prompt_upsampling ran, else your prompt). Feed it back with prompt_upsampling OFF and the same seed to reproduce this image."
      }
    }
  },
  "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.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation or editing"
      },
      "image": {
        "name": "image",
        "tooltip": "Optional reference image for image editing."
      },
      "mask": {
        "name": "mask",
        "tooltip": "Optional mask for inpainting (white areas will be replaced)"
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "The aspect ratio for image generation. Ignored if resolution is not set to Auto."
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "The resolution for image generation. If not set to Auto, this overrides the aspect_ratio setting."
      },
      "magic_prompt_option": {
        "name": "magic_prompt_option",
        "tooltip": "Determine if MagicPrompt should be used in generation"
      },
      "seed": {
        "name": "seed"
      },
      "num_images": {
        "name": "num_images"
      },
      "rendering_speed": {
        "name": "rendering_speed",
        "tooltip": "Controls the trade-off between generation speed and quality"
      },
      "character_image": {
        "name": "character_image",
        "tooltip": "Image to use as character reference."
      },
      "character_mask": {
        "name": "character_mask",
        "tooltip": "Optional mask for character reference image."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "IdeogramV4": {
    "display_name": "Ideogram V4",
    "description": "Generates images using the Ideogram 4.0 model from a text prompt.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for the image generation."
      },
      "resolution": {
        "name": "resolution"
      },
      "rendering_speed": {
        "name": "rendering_speed",
        "tooltip": "Controls the trade-off between generation speed and quality."
      },
      "seed": {
        "name": "seed"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageAddNoise": {
    "display_name": "Add Noise to Image",
    "inputs": {
      "image": {
        "name": "image"
      },
      "seed": {
        "name": "seed",
        "tooltip": "The random seed used for creating the noise."
      },
      "strength": {
        "name": "strength"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageBatch": {
    "display_name": "Batch Images (DEPRECATED)",
    "inputs": {
      "image1": {
        "name": "image1"
      },
      "image2": {
        "name": "image2"
      }
    }
  },
  "ImageBlend": {
    "display_name": "Blend Images",
    "inputs": {
      "image1": {
        "name": "image1"
      },
      "image2": {
        "name": "image2"
      },
      "blend_factor": {
        "name": "blend_factor"
      },
      "blend_mode": {
        "name": "blend_mode"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageBlur": {
    "display_name": "Blur Image",
    "inputs": {
      "image": {
        "name": "image"
      },
      "blur_radius": {
        "name": "blur_radius"
      },
      "sigma": {
        "name": "sigma"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageColorToMask": {
    "display_name": "Convert Image Color to Mask",
    "inputs": {
      "image": {
        "name": "image"
      },
      "color": {
        "name": "color"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageCompare": {
    "display_name": "Compare Images",
    "description": "Compares two images side by side with a slider.",
    "inputs": {
      "compare_view": {
        "name": "compare_view"
      },
      "image_a": {
        "name": "image_a"
      },
      "image_b": {
        "name": "image_b"
      }
    }
  },
  "ImageCompositeMasked": {
    "display_name": "Image Composite Masked",
    "inputs": {
      "destination": {
        "name": "destination"
      },
      "source": {
        "name": "source"
      },
      "x": {
        "name": "x"
      },
      "y": {
        "name": "y"
      },
      "resize_source": {
        "name": "resize_source"
      },
      "mask": {
        "name": "mask"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageCrop": {
    "display_name": "Crop Image (DEPRECATED)",
    "inputs": {
      "image": {
        "name": "image"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "x": {
        "name": "x"
      },
      "y": {
        "name": "y"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageCropV2": {
    "display_name": "Crop Image",
    "description": "Crop an image to the specified dimensions.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "crop_region": {
        "name": "crop_region"
      },
      "height": {},
      "width": {},
      "x": {},
      "y": {}
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageDeduplication": {
    "display_name": "Deduplicate Images",
    "description": "Remove duplicate or very similar images from a list.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "List of images to process."
      },
      "similarity_threshold": {
        "name": "similarity_threshold",
        "tooltip": "Similarity threshold (0-1). Higher means more similar. Images above this threshold are considered duplicates."
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": "Processed images"
      }
    }
  },
  "ImageFlip": {
    "display_name": "Flip Image",
    "inputs": {
      "image": {
        "name": "image"
      },
      "flip_method": {
        "name": "flip_method"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageFromBatch": {
    "display_name": "Get Image from Batch",
    "inputs": {
      "image": {
        "name": "image"
      },
      "batch_index": {
        "name": "batch_index"
      },
      "length": {
        "name": "length"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageGrid": {
    "display_name": "Make Image Grid",
    "description": "Arrange multiple images into a grid layout.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "List of images to process."
      },
      "columns": {
        "name": "columns",
        "tooltip": "Number of columns in the grid."
      },
      "cell_width": {
        "name": "cell_width",
        "tooltip": "Width of each cell in the grid."
      },
      "cell_height": {
        "name": "cell_height",
        "tooltip": "Height of each cell in the grid."
      },
      "padding": {
        "name": "padding",
        "tooltip": "Padding between images."
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": "Processed images"
      }
    }
  },
  "ImageHistogram": {
    "display_name": "Image Histogram",
    "inputs": {
      "image": {
        "name": "image"
      }
    },
    "outputs": {
      "0": {
        "name": "rgb",
        "tooltip": null
      },
      "1": {
        "name": "luminance",
        "tooltip": null
      },
      "2": {
        "name": "red",
        "tooltip": null
      },
      "3": {
        "name": "green",
        "tooltip": null
      },
      "4": {
        "name": "blue",
        "tooltip": null
      }
    }
  },
  "ImageInvert": {
    "display_name": "Invert Image Colors",
    "inputs": {
      "image": {
        "name": "image"
      }
    }
  },
  "ImageMergeTileList": {
    "display_name": "Merge List of Tiles to Image",
    "inputs": {
      "image_list": {
        "name": "image_list"
      },
      "final_width": {
        "name": "final_width"
      },
      "final_height": {
        "name": "final_height"
      },
      "overlap": {
        "name": "overlap"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageOnlyCheckpointLoader": {
    "display_name": "Load Checkpoint Image Only (img2vid model)",
    "inputs": {
      "ckpt_name": {
        "name": "ckpt_name"
      }
    }
  },
  "ImageOnlyCheckpointSave": {
    "display_name": "ImageOnlyCheckpointSave",
    "inputs": {
      "model": {
        "name": "model"
      },
      "clip_vision": {
        "name": "clip_vision"
      },
      "vae": {
        "name": "vae"
      },
      "filename_prefix": {
        "name": "filename_prefix"
      }
    }
  },
  "ImagePadForOutpaint": {
    "display_name": "Pad Image for Outpainting",
    "inputs": {
      "image": {
        "name": "image"
      },
      "left": {
        "name": "left"
      },
      "top": {
        "name": "top"
      },
      "right": {
        "name": "right"
      },
      "bottom": {
        "name": "bottom"
      },
      "feathering": {
        "name": "feathering"
      }
    }
  },
  "ImageQuantize": {
    "display_name": "Quantize Image",
    "inputs": {
      "image": {
        "name": "image"
      },
      "colors": {
        "name": "colors"
      },
      "dither": {
        "name": "dither"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageRGBToYUV": {
    "display_name": "Image RGB to YUV",
    "inputs": {
      "image": {
        "name": "image"
      }
    },
    "outputs": {
      "0": {
        "name": "Y",
        "tooltip": null
      },
      "1": {
        "name": "U",
        "tooltip": null
      },
      "2": {
        "name": "V",
        "tooltip": null
      }
    }
  },
  "ImageRotate": {
    "display_name": "Rotate Image",
    "inputs": {
      "image": {
        "name": "image"
      },
      "rotation": {
        "name": "rotation"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageScale": {
    "display_name": "Upscale Image",
    "inputs": {
      "image": {
        "name": "image"
      },
      "upscale_method": {
        "name": "upscale_method"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "crop": {
        "name": "crop"
      }
    }
  },
  "ImageScaleBy": {
    "display_name": "Upscale Image By",
    "inputs": {
      "image": {
        "name": "image"
      },
      "upscale_method": {
        "name": "upscale_method"
      },
      "scale_by": {
        "name": "scale_by"
      }
    }
  },
  "ImageScaleToMaxDimension": {
    "display_name": "Scale Image to Max Dimension",
    "inputs": {
      "image": {
        "name": "image"
      },
      "upscale_method": {
        "name": "upscale_method"
      },
      "largest_size": {
        "name": "largest_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageScaleToTotalPixels": {
    "display_name": "Scale Image to Total Pixels",
    "inputs": {
      "image": {
        "name": "image"
      },
      "upscale_method": {
        "name": "upscale_method"
      },
      "megapixels": {
        "name": "megapixels"
      },
      "resolution_steps": {
        "name": "resolution_steps"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageSharpen": {
    "display_name": "Sharpen Image",
    "inputs": {
      "image": {
        "name": "image"
      },
      "sharpen_radius": {
        "name": "sharpen_radius"
      },
      "sigma": {
        "name": "sigma"
      },
      "alpha": {
        "name": "alpha"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "image1": {
        "name": "image1"
      },
      "direction": {
        "name": "direction"
      },
      "match_image_size": {
        "name": "match_image_size"
      },
      "spacing_width": {
        "name": "spacing_width"
      },
      "spacing_color": {
        "name": "spacing_color"
      },
      "image2": {
        "name": "image2"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageToMask": {
    "display_name": "Convert Image to Mask",
    "inputs": {
      "image": {
        "name": "image"
      },
      "channel": {
        "name": "channel"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageUpscaleWithModel": {
    "display_name": "Upscale Image (using Model)",
    "inputs": {
      "upscale_model": {
        "name": "upscale_model"
      },
      "image": {
        "name": "image"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ImageYUVToRGB": {
    "display_name": "Image YUV to RGB",
    "inputs": {
      "Y": {
        "name": "Y"
      },
      "U": {
        "name": "U"
      },
      "V": {
        "name": "V"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "InpaintModelConditioning": {
    "display_name": "InpaintModelConditioning",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "pixels": {
        "name": "pixels"
      },
      "mask": {
        "name": "mask"
      },
      "noise_mask": {
        "name": "noise_mask",
        "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."
      }
    },
    "outputs": {
      "0": {
        "name": "positive"
      },
      "1": {
        "name": "negative"
      },
      "2": {
        "name": "latent"
      }
    }
  },
  "InstructPixToPixConditioning": {
    "display_name": "InstructPixToPixConditioning",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "pixels": {
        "name": "pixels"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "InvertMask": {
    "display_name": "Invert Mask",
    "inputs": {
      "mask": {
        "name": "mask"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "JoinAudioChannels": {
    "display_name": "Join Audio Channels",
    "description": "Joins left and right mono audio channels into a stereo audio.",
    "inputs": {
      "audio_left": {
        "name": "audio_left"
      },
      "audio_right": {
        "name": "audio_right"
      }
    },
    "outputs": {
      "0": {
        "name": "audio",
        "tooltip": null
      }
    }
  },
  "JoinImageWithAlpha": {
    "display_name": "Join Image with Alpha",
    "inputs": {
      "image": {
        "name": "image"
      },
      "alpha": {
        "name": "alpha"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "JsonExtractString": {
    "display_name": "Extract Text from JSON",
    "inputs": {
      "json_string": {
        "name": "json_string"
      },
      "key": {
        "name": "key"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Kandinsky5ImageToVideo": {
    "display_name": "Kandinsky5ImageToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "start_image": {
        "name": "start_image"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": "Empty video latent"
      },
      "3": {
        "name": "cond_latent",
        "tooltip": "Clean encoded start images, used to replace the noisy start of the model output latents"
      }
    }
  },
  "KarrasScheduler": {
    "display_name": "KarrasScheduler",
    "inputs": {
      "steps": {
        "name": "steps"
      },
      "sigma_max": {
        "name": "sigma_max"
      },
      "sigma_min": {
        "name": "sigma_min"
      },
      "rho": {
        "name": "rho"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "KlingAvatarNode": {
    "display_name": "Kling Avatar 2.0",
    "description": "Generate broadcast-style digital human videos from a single photo and an audio file.",
    "inputs": {
      "image": {
        "name": "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": {
        "name": "sound_file",
        "tooltip": "Audio input. Must be between 2 and 300 seconds in duration."
      },
      "mode": {
        "name": "mode"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Optional prompt to define avatar actions, emotions, and camera movements."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "KlingFirstLastFrameNode": {
    "display_name": "Kling 3.0 First-Last-Frame to Video",
    "description": "Generate videos with Kling V3 using first and last frames.",
    "inputs": {
      "prompt": {
        "name": "prompt"
      },
      "duration": {
        "name": "duration"
      },
      "first_frame": {
        "name": "first_frame"
      },
      "end_frame": {
        "name": "end_frame"
      },
      "generate_audio": {
        "name": "generate_audio"
      },
      "model": {
        "name": "model",
        "tooltip": "Model and generation settings."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "KlingImage2VideoNode": {
    "display_name": "Kling Image(First Frame) to Video",
    "inputs": {
      "start_frame": {
        "name": "start_frame",
        "tooltip": "The reference image used to generate the video."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Positive text prompt"
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "Negative text prompt"
      },
      "model_name": {
        "name": "model_name"
      },
      "cfg_scale": {
        "name": "cfg_scale"
      },
      "mode": {
        "name": "mode"
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "duration": {
        "name": "duration"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "video_id",
        "tooltip": null
      },
      "2": {
        "name": "duration",
        "tooltip": null
      }
    }
  },
  "KlingImageGenerationNode": {
    "display_name": "Kling 3.0 Image",
    "description": "Kling Image Generation Node. Generate an image from a text prompt with an optional reference image.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Positive text prompt"
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "Negative text prompt"
      },
      "image_type": {
        "name": "image_type"
      },
      "image_fidelity": {
        "name": "image_fidelity",
        "tooltip": "Reference intensity for user-uploaded images"
      },
      "human_fidelity": {
        "name": "human_fidelity",
        "tooltip": "Subject reference similarity"
      },
      "model_name": {
        "name": "model_name"
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "n": {
        "name": "n",
        "tooltip": "Number of generated images"
      },
      "image": {
        "name": "image"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "KlingImageToVideoWithAudio": {
    "display_name": "Kling 2.6 Image(First Frame) to Video with Audio",
    "inputs": {
      "model_name": {
        "name": "model_name"
      },
      "start_frame": {
        "name": "start_frame"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Positive text prompt."
      },
      "mode": {
        "name": "mode"
      },
      "duration": {
        "name": "duration"
      },
      "generate_audio": {
        "name": "generate_audio"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "video": {
        "name": "video"
      },
      "audio": {
        "name": "audio"
      },
      "voice_language": {
        "name": "voice_language"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "video_id",
        "tooltip": null
      },
      "2": {
        "name": "duration",
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "video": {
        "name": "video"
      },
      "text": {
        "name": "text",
        "tooltip": "Text Content for Lip-Sync Video Generation. Required when mode is text2video. Maximum length is 120 characters."
      },
      "voice": {
        "name": "voice"
      },
      "voice_speed": {
        "name": "voice_speed",
        "tooltip": "Speech Rate. Valid range: 0.8~2.0, accurate to one decimal place."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "video_id",
        "tooltip": null
      },
      "2": {
        "name": "duration",
        "tooltip": null
      }
    }
  },
  "KlingMotionControl": {
    "display_name": "Kling Motion Control",
    "inputs": {
      "prompt": {
        "name": "prompt"
      },
      "reference_image": {
        "name": "reference_image"
      },
      "reference_video": {
        "name": "reference_video",
        "tooltip": "Motion reference video used to drive movement/expression.\nDuration limits depend on character_orientation:\n - image: 3–10s (max 10s)\n - video: 3–30s (max 30s)"
      },
      "keep_original_sound": {
        "name": "keep_original_sound"
      },
      "character_orientation": {
        "name": "character_orientation",
        "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)."
      },
      "mode": {
        "name": "mode"
      },
      "model": {
        "name": "model"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "KlingOmniProEditVideoNode": {
    "display_name": "Kling 3.0 Omni Edit Video",
    "description": "Edit an existing video with the latest model from Kling.",
    "inputs": {
      "model_name": {
        "name": "model_name"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions."
      },
      "video": {
        "name": "video",
        "tooltip": "Video for editing. The output video length will be the same."
      },
      "keep_original_sound": {
        "name": "keep_original_sound"
      },
      "reference_images": {
        "name": "reference_images",
        "tooltip": "Up to 4 additional reference images."
      },
      "resolution": {
        "name": "resolution"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model_name": {
        "name": "model_name"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions. Ignored when storyboards are enabled."
      },
      "duration": {
        "name": "duration"
      },
      "first_frame": {
        "name": "first_frame"
      },
      "end_frame": {
        "name": "end_frame",
        "tooltip": "An optional end frame for the video. This cannot be used simultaneously with 'reference_images'. Does not work with storyboards."
      },
      "reference_images": {
        "name": "reference_images",
        "tooltip": "Up to 6 additional reference images."
      },
      "resolution": {
        "name": "resolution"
      },
      "storyboards": {
        "name": "storyboards",
        "tooltip": "Generate a series of video segments with individual prompts and durations. Only supported for kling-v3-omni."
      },
      "generate_audio": {
        "name": "generate_audio",
        "tooltip": "Generate audio for the video. Only supported for kling-v3-omni."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "KlingOmniProImageNode": {
    "display_name": "Kling 3.0 Omni Image",
    "description": "Create or edit images with the latest model from Kling.",
    "inputs": {
      "model_name": {
        "name": "model_name"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "A text prompt describing the image content. This can include both positive and negative descriptions."
      },
      "resolution": {
        "name": "resolution"
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "series_amount": {
        "name": "series_amount",
        "tooltip": "Generate a series of images. Not supported for kling-image-o1."
      },
      "reference_images": {
        "name": "reference_images",
        "tooltip": "Up to 10 additional reference images."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model_name": {
        "name": "model_name"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions. Ignored when storyboards are enabled."
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "duration": {
        "name": "duration"
      },
      "reference_images": {
        "name": "reference_images",
        "tooltip": "Up to 7 reference images."
      },
      "resolution": {
        "name": "resolution"
      },
      "storyboards": {
        "name": "storyboards",
        "tooltip": "Generate a series of video segments with individual prompts and durations. Only supported for kling-v3-omni."
      },
      "generate_audio": {
        "name": "generate_audio",
        "tooltip": "Generate audio for the video. Only supported for kling-v3-omni."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "KlingOmniProTextToVideoNode": {
    "display_name": "Kling 3.0 Omni Text to Video",
    "description": "Use text prompts to generate videos with the latest Kling model.",
    "inputs": {
      "model_name": {
        "name": "model_name"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions. Ignored when storyboards are enabled."
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "duration": {
        "name": "duration"
      },
      "resolution": {
        "name": "resolution"
      },
      "storyboards": {
        "name": "storyboards",
        "tooltip": "Generate a series of video segments with individual prompts and durations. Ignored for o1 model."
      },
      "generate_audio": {
        "name": "generate_audio"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model_name": {
        "name": "model_name"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions."
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "duration": {
        "name": "duration"
      },
      "reference_video": {
        "name": "reference_video",
        "tooltip": "Video to use as a reference."
      },
      "keep_original_sound": {
        "name": "keep_original_sound"
      },
      "reference_images": {
        "name": "reference_images",
        "tooltip": "Up to 4 additional reference images."
      },
      "resolution": {
        "name": "resolution"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "start_frame": {
        "name": "start_frame",
        "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": {
        "name": "end_frame",
        "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": {
        "name": "prompt",
        "tooltip": "Positive text prompt"
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "Negative text prompt"
      },
      "cfg_scale": {
        "name": "cfg_scale"
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "mode": {
        "name": "mode",
        "tooltip": "The configuration to use for the video generation following the format: mode / duration / model_name."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "video_id",
        "tooltip": null
      },
      "2": {
        "name": "duration",
        "tooltip": null
      }
    }
  },
  "KlingTextToVideoNode": {
    "display_name": "Kling Text to Video",
    "description": "Kling Text to Video Node",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Positive text prompt"
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "Negative text prompt"
      },
      "cfg_scale": {
        "name": "cfg_scale"
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "mode": {
        "name": "mode",
        "tooltip": "The configuration to use for the video generation following the format: mode / duration / model_name."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "video_id",
        "tooltip": null
      },
      "2": {
        "name": "duration",
        "tooltip": null
      }
    }
  },
  "KlingTextToVideoWithAudio": {
    "display_name": "Kling 2.6 Text to Video with Audio",
    "inputs": {
      "model_name": {
        "name": "model_name"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Positive text prompt."
      },
      "mode": {
        "name": "mode"
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "duration": {
        "name": "duration"
      },
      "generate_audio": {
        "name": "generate_audio"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Positive text prompt for guiding the video extension"
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "Negative text prompt for elements to avoid in the extended video"
      },
      "cfg_scale": {
        "name": "cfg_scale"
      },
      "video_id": {
        "name": "video_id",
        "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."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "video_id",
        "tooltip": null
      },
      "2": {
        "name": "duration",
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "multi_shot": {
        "name": "multi_shot",
        "tooltip": "Generate a series of video segments with individual prompts and durations."
      },
      "generate_audio": {
        "name": "generate_audio",
        "tooltip": "'kling-3.0-turbo' always generates native audio, so the audio toggle is ignored."
      },
      "model": {
        "name": "model",
        "tooltip": "Model and generation settings."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "start_frame": {
        "name": "start_frame",
        "tooltip": "Optional start frame image. When connected, switches to image-to-video mode."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_aspect_ratio": {
        "name": "aspect_ratio"
      },
      "model_resolution": {
        "name": "resolution"
      },
      "multi_shot_duration": {
        "name": "duration"
      },
      "multi_shot_negative_prompt": {
        "name": "negative_prompt"
      },
      "multi_shot_prompt": {
        "name": "prompt"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Krea2ImageNode": {
    "display_name": "Krea 2 Image",
    "description": "Generate images via Krea 2 — pick Medium (expressive illustrations) or Large (expressive photorealism). Supports an optional moodboard and up to 10 chained image style references.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for the image."
      },
      "model": {
        "name": "model",
        "tooltip": "Krea 2 Medium is best for expressive illustrations; Krea 2 Large is best for expressive photorealism."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Random seed for reproducibility."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_aspect_ratio": {
        "name": "aspect_ratio"
      },
      "model_creativity": {
        "name": "creativity"
      },
      "model_moodboard_id": {
        "name": "moodboard_id"
      },
      "model_moodboard_strength": {
        "name": "moodboard_strength"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Krea2StyleReferenceNode": {
    "display_name": "Krea 2 Style Reference",
    "description": "Add an image style reference to a Krea 2 generation. Chain multiple Krea 2 Style Reference nodes (max 10) and feed the final `style_reference` output into Krea 2 Image. Each image is uploaded to ComfyAPI storage and passed as URL.",
    "inputs": {
      "image": {
        "name": "image",
        "tooltip": "Reference image whose style influences the generation."
      },
      "strength": {
        "name": "strength",
        "tooltip": "Reference strength; negative values invert the style influence."
      },
      "style_reference": {
        "name": "style_reference",
        "tooltip": "Optional incoming chain of style references; this node appends one more."
      }
    },
    "outputs": {
      "0": {
        "name": "style_reference",
        "tooltip": null
      }
    }
  },
  "KSampler": {
    "display_name": "KSampler",
    "description": "Uses the provided model, positive and negative conditioning to denoise the latent image.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The model used for denoising the input latent."
      },
      "seed": {
        "name": "seed",
        "tooltip": "The random seed used for creating the noise."
      },
      "steps": {
        "name": "steps",
        "tooltip": "The number of steps used in the denoising process."
      },
      "cfg": {
        "name": "cfg",
        "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": {
        "name": "sampler_name",
        "tooltip": "The algorithm used when sampling, this can affect the quality, speed, and style of the generated output."
      },
      "scheduler": {
        "name": "scheduler",
        "tooltip": "The scheduler controls how noise is gradually removed to form the image."
      },
      "positive": {
        "name": "positive",
        "tooltip": "The conditioning describing the attributes you want to include in the image."
      },
      "negative": {
        "name": "negative",
        "tooltip": "The conditioning describing the attributes you want to exclude from the image."
      },
      "latent_image": {
        "name": "latent_image",
        "tooltip": "The latent image to denoise."
      },
      "denoise": {
        "name": "denoise",
        "tooltip": "The amount of denoising applied, lower values will maintain the structure of the initial image allowing for image to image sampling."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": "The denoised latent."
      }
    }
  },
  "KSamplerAdvanced": {
    "display_name": "KSampler (Advanced)",
    "inputs": {
      "model": {
        "name": "model"
      },
      "add_noise": {
        "name": "add_noise"
      },
      "noise_seed": {
        "name": "noise_seed"
      },
      "steps": {
        "name": "steps"
      },
      "cfg": {
        "name": "cfg"
      },
      "sampler_name": {
        "name": "sampler_name"
      },
      "scheduler": {
        "name": "scheduler"
      },
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "latent_image": {
        "name": "latent_image"
      },
      "start_at_step": {
        "name": "start_at_step"
      },
      "end_at_step": {
        "name": "end_at_step"
      },
      "return_with_leftover_noise": {
        "name": "return_with_leftover_noise"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    }
  },
  "KSamplerSelect": {
    "display_name": "KSamplerSelect",
    "inputs": {
      "sampler_name": {
        "name": "sampler_name"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LaplaceScheduler": {
    "display_name": "LaplaceScheduler",
    "inputs": {
      "steps": {
        "name": "steps"
      },
      "sigma_max": {
        "name": "sigma_max"
      },
      "sigma_min": {
        "name": "sigma_min"
      },
      "mu": {
        "name": "mu"
      },
      "beta": {
        "name": "beta"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LatentAdd": {
    "display_name": "LatentAdd",
    "inputs": {
      "samples1": {
        "name": "samples1"
      },
      "samples2": {
        "name": "samples2"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LatentApplyOperation": {
    "display_name": "LatentApplyOperation",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "operation": {
        "name": "operation"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LatentApplyOperationCFG": {
    "display_name": "LatentApplyOperationCFG",
    "inputs": {
      "model": {
        "name": "model"
      },
      "operation": {
        "name": "operation"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LatentBatch": {
    "display_name": "Batch Latents (DEPRECATED)",
    "inputs": {
      "samples1": {
        "name": "samples1"
      },
      "samples2": {
        "name": "samples2"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LatentBatchSeedBehavior": {
    "display_name": "LatentBatchSeedBehavior",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "seed_behavior": {
        "name": "seed_behavior"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LatentBlend": {
    "display_name": "Latent Blend",
    "inputs": {
      "samples1": {
        "name": "samples1"
      },
      "samples2": {
        "name": "samples2"
      },
      "blend_factor": {
        "name": "blend_factor"
      }
    }
  },
  "LatentComposite": {
    "display_name": "Latent Composite",
    "inputs": {
      "samples_to": {
        "name": "samples_to"
      },
      "samples_from": {
        "name": "samples_from"
      },
      "x": {
        "name": "x"
      },
      "y": {
        "name": "y"
      },
      "feather": {
        "name": "feather"
      }
    }
  },
  "LatentCompositeMasked": {
    "display_name": "Latent Composite Masked",
    "inputs": {
      "destination": {
        "name": "destination"
      },
      "source": {
        "name": "source"
      },
      "x": {
        "name": "x"
      },
      "y": {
        "name": "y"
      },
      "resize_source": {
        "name": "resize_source"
      },
      "mask": {
        "name": "mask"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LatentConcat": {
    "display_name": "LatentConcat",
    "inputs": {
      "samples1": {
        "name": "samples1"
      },
      "samples2": {
        "name": "samples2"
      },
      "dim": {
        "name": "dim"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LatentCrop": {
    "display_name": "Crop Latent",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "x": {
        "name": "x"
      },
      "y": {
        "name": "y"
      }
    }
  },
  "LatentCut": {
    "display_name": "LatentCut",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "dim": {
        "name": "dim"
      },
      "index": {
        "name": "index"
      },
      "amount": {
        "name": "amount"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LatentCutToBatch": {
    "display_name": "LatentCutToBatch",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "dim": {
        "name": "dim"
      },
      "slice_size": {
        "name": "slice_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LatentFlip": {
    "display_name": "Flip Latent",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "flip_method": {
        "name": "flip_method"
      }
    }
  },
  "LatentFromBatch": {
    "display_name": "Get Latent From Batch",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "batch_index": {
        "name": "batch_index"
      },
      "length": {
        "name": "length"
      }
    }
  },
  "LatentInterpolate": {
    "display_name": "LatentInterpolate",
    "inputs": {
      "samples1": {
        "name": "samples1"
      },
      "samples2": {
        "name": "samples2"
      },
      "ratio": {
        "name": "ratio"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LatentMultiply": {
    "display_name": "LatentMultiply",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "multiplier": {
        "name": "multiplier"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LatentOperationSharpen": {
    "display_name": "LatentOperationSharpen",
    "inputs": {
      "sharpen_radius": {
        "name": "sharpen_radius"
      },
      "sigma": {
        "name": "sigma"
      },
      "alpha": {
        "name": "alpha"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LatentOperationTonemapReinhard": {
    "display_name": "LatentOperationTonemapReinhard",
    "inputs": {
      "multiplier": {
        "name": "multiplier"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LatentRotate": {
    "display_name": "Rotate Latent",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "rotation": {
        "name": "rotation"
      }
    }
  },
  "LatentSubtract": {
    "display_name": "LatentSubtract",
    "inputs": {
      "samples1": {
        "name": "samples1"
      },
      "samples2": {
        "name": "samples2"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LatentUpscale": {
    "display_name": "Upscale Latent",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "upscale_method": {
        "name": "upscale_method"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "crop": {
        "name": "crop"
      }
    }
  },
  "LatentUpscaleBy": {
    "display_name": "Upscale Latent By",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "upscale_method": {
        "name": "upscale_method"
      },
      "scale_by": {
        "name": "scale_by"
      }
    }
  },
  "LatentUpscaleModelLoader": {
    "display_name": "Load Latent Upscale Model",
    "inputs": {
      "model_name": {
        "name": "model_name"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The model to add LazyCache to."
      },
      "reuse_threshold": {
        "name": "reuse_threshold",
        "tooltip": "The threshold for reusing cached steps."
      },
      "start_percent": {
        "name": "start_percent",
        "tooltip": "The relative sampling step to begin use of LazyCache."
      },
      "end_percent": {
        "name": "end_percent",
        "tooltip": "The relative sampling step to end use of LazyCache."
      },
      "verbose": {
        "name": "verbose",
        "tooltip": "Whether to log verbose information."
      }
    },
    "outputs": {
      "0": {
        "tooltip": "The model with LazyCache."
      }
    }
  },
  "Load3D": {
    "display_name": "Load 3D & Animation",
    "inputs": {
      "model_file": {
        "name": "model_file"
      },
      "image": {
        "name": "image"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "clear": {},
      "upload 3d model": {},
      "upload extra resources": {}
    },
    "outputs": {
      "0": {
        "name": "image",
        "tooltip": null
      },
      "1": {
        "name": "mask",
        "tooltip": null
      },
      "2": {
        "name": "mesh_path",
        "tooltip": null
      },
      "3": {
        "name": "normal",
        "tooltip": null
      },
      "4": {
        "name": "camera_info",
        "tooltip": null
      },
      "5": {
        "name": "recording_video",
        "tooltip": null
      },
      "6": {
        "name": "model_3d",
        "tooltip": null
      },
      "7": {
        "name": "model_3d_info",
        "tooltip": null
      }
    }
  },
  "Load3DAdvanced": {
    "display_name": "Load 3D (Advanced)",
    "inputs": {
      "model_file": {
        "name": "model_file"
      },
      "viewport_state": {
        "name": "viewport_state"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      }
    },
    "outputs": {
      "0": {
        "name": "model_3d",
        "tooltip": null
      },
      "1": {
        "name": "model_3d_info",
        "tooltip": null
      },
      "2": {
        "name": "camera_info",
        "tooltip": null
      },
      "3": {
        "name": "width",
        "tooltip": null
      },
      "4": {
        "name": "height",
        "tooltip": null
      }
    }
  },
  "LoadAudio": {
    "display_name": "Load Audio",
    "inputs": {
      "audio": {
        "name": "audio"
      },
      "audioUI": {
        "name": "audioUI"
      },
      "upload": {
        "name": "choose file to upload"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LoadBackgroundRemovalModel": {
    "display_name": "Load Background Removal Model",
    "inputs": {
      "bg_removal_name": {
        "name": "bg_removal_name",
        "tooltip": "The model used to remove backgrounds from images"
      }
    },
    "outputs": {
      "0": {
        "name": "bg_model",
        "tooltip": null
      }
    }
  },
  "LoadDA3Model": {
    "display_name": "Load Depth Anything 3",
    "inputs": {
      "model_name": {
        "name": "model_name"
      },
      "weight_dtype": {
        "name": "weight_dtype"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LoadImage": {
    "display_name": "Load Image",
    "inputs": {
      "image": {
        "name": "image"
      },
      "upload": {
        "name": "choose file to upload"
      }
    }
  },
  "LoadImageDataSetFromFolder": {
    "display_name": "Load Image (from Folder)",
    "description": "Load a dataset of images from a specified folder and return a list of images. Supported formats: PNG, JPG, JPEG, WEBP.",
    "inputs": {
      "folder": {
        "name": "folder",
        "tooltip": "The folder to load images from."
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": "List of loaded images"
      }
    }
  },
  "LoadImageMask": {
    "display_name": "Load Image (as Mask)",
    "inputs": {
      "image": {
        "name": "image"
      },
      "channel": {
        "name": "channel"
      },
      "upload": {
        "name": "choose file to upload"
      }
    }
  },
  "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.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "Auto-refresh after generation": {},
      "refresh": {},
      "upload": {
        "name": "choose file to upload"
      }
    }
  },
  "LoadImageTextDataSetFromFolder": {
    "display_name": "Load Image-Text (from Folder)",
    "description": "Load a dataset of pairs of images and text captions from a specified folder and return them as a list. Supported formats: PNG, JPG, JPEG, WEBP.",
    "inputs": {
      "folder": {
        "name": "folder",
        "tooltip": "The folder to load images and text captions from."
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": "List of loaded images"
      },
      "1": {
        "name": "texts",
        "tooltip": "List of text captions"
      }
    }
  },
  "LoadLatent": {
    "display_name": "Load Latent",
    "inputs": {
      "latent": {
        "name": "latent"
      }
    }
  },
  "LoadMediaPipeFaceLandmarker": {
    "display_name": "Load Face Detection Model (MediaPipe)",
    "inputs": {
      "model_name": {
        "name": "model_name",
        "tooltip": "Face detection model from models/detection/."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LoadMoGeModel": {
    "display_name": "Load MoGe Model",
    "inputs": {
      "model_name": {
        "name": "model_name"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LoadTrainingDataset": {
    "display_name": "Load Training Dataset",
    "description": "Load encoded training dataset (latents + conditioning) from disk for use in training.",
    "inputs": {
      "folder_name": {
        "name": "folder_name",
        "tooltip": "Saved dataset to load, from the datasets directory."
      }
    },
    "outputs": {
      "0": {
        "name": "latents",
        "tooltip": "List of latent dicts"
      },
      "1": {
        "name": "conditioning",
        "tooltip": "List of conditioning lists"
      }
    }
  },
  "LoadVideo": {
    "display_name": "Load Video",
    "inputs": {
      "file": {
        "name": "file"
      },
      "upload": {
        "name": "choose file to upload"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LoadVideoDataSetFromFolder": {
    "display_name": "Load Video (from Folder)",
    "description": "Load a dataset of videos from a specified folder and return a list of videos. Supported formats: MP4, AVI, MOV, WEBM, MKV, FLV.",
    "inputs": {
      "folder": {
        "name": "folder",
        "tooltip": "The folder containing video files."
      }
    },
    "outputs": {
      "0": {
        "name": "videos",
        "tooltip": "Lazy video references; frames are decoded only when needed downstream."
      }
    }
  },
  "LoadVideoTextDataSetFromFolder": {
    "display_name": "Load Video-Text (from Folder)",
    "description": "Load a dataset of pairs of videos and text captions from a specified folder and return them as a list. Supported formats: MP4, AVI, MOV, WEBM, MKV, FLV.",
    "inputs": {
      "folder": {
        "name": "folder",
        "tooltip": "The folder containing video files and .txt captions."
      }
    },
    "outputs": {
      "0": {
        "name": "videos",
        "tooltip": "Lazy video references; frames are decoded only when needed downstream."
      },
      "1": {
        "name": "texts",
        "tooltip": "List of text captions."
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The diffusion model the LoRA will be applied to."
      },
      "clip": {
        "name": "clip",
        "tooltip": "The CLIP model the LoRA will be applied to."
      },
      "lora_name": {
        "name": "lora_name",
        "tooltip": "The name of the LoRA."
      },
      "strength_model": {
        "name": "strength_model",
        "tooltip": "How strongly to modify the diffusion model. This value can be negative."
      },
      "strength_clip": {
        "name": "strength_clip",
        "tooltip": "How strongly to modify the CLIP model. This value can be negative."
      }
    },
    "outputs": {
      "0": {
        "tooltip": "The modified diffusion model."
      },
      "1": {
        "tooltip": "The modified CLIP model."
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The diffusion model the LoRA will be applied to."
      },
      "clip": {
        "name": "clip",
        "tooltip": "The CLIP model the LoRA will be applied to."
      },
      "lora_name": {
        "name": "lora_name",
        "tooltip": "The name of the LoRA."
      },
      "strength_model": {
        "name": "strength_model",
        "tooltip": "How strongly to modify the diffusion model. This value can be negative."
      },
      "strength_clip": {
        "name": "strength_clip",
        "tooltip": "How strongly to modify the CLIP model. This value can be negative."
      }
    },
    "outputs": {
      "0": {
        "tooltip": "The modified diffusion model."
      },
      "1": {
        "tooltip": "The modified CLIP model."
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "lora_name": {
        "name": "lora_name"
      },
      "strength_model": {
        "name": "strength_model"
      }
    },
    "outputs": {
      "0": {
        "tooltip": "The modified diffusion model."
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "lora_name": {
        "name": "lora_name"
      },
      "strength_model": {
        "name": "strength_model"
      }
    },
    "outputs": {
      "0": {
        "tooltip": "The modified diffusion model."
      }
    }
  },
  "LoraModelLoader": {
    "display_name": "Load LoRA Model",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The diffusion model the LoRA will be applied to."
      },
      "lora": {
        "name": "lora",
        "tooltip": "The LoRA model to apply to the diffusion model."
      },
      "strength_model": {
        "name": "strength_model",
        "tooltip": "How strongly to modify the diffusion model. This value can be negative."
      },
      "bypass": {
        "name": "bypass",
        "tooltip": "When enabled, applies LoRA in bypass mode without modifying base model weights. Useful for training and when model weights are offloaded."
      }
    },
    "outputs": {
      "0": {
        "name": "model",
        "tooltip": "The modified diffusion model."
      }
    }
  },
  "LoraSave": {
    "display_name": "Extract and Save Lora",
    "inputs": {
      "filename_prefix": {
        "name": "filename_prefix"
      },
      "rank": {
        "name": "rank"
      },
      "lora_type": {
        "name": "lora_type"
      },
      "bias_diff": {
        "name": "bias_diff"
      },
      "model_diff": {
        "name": "model_diff",
        "tooltip": "The ModelSubtract output to be converted to a lora."
      },
      "text_encoder_diff": {
        "name": "text_encoder_diff",
        "tooltip": "The CLIPSubtract output to be converted to a lora."
      }
    }
  },
  "LossGraphNode": {
    "display_name": "Plot Loss Graph",
    "inputs": {
      "loss": {
        "name": "loss",
        "tooltip": "Loss map from training node."
      },
      "filename_prefix": {
        "name": "filename_prefix",
        "tooltip": "Prefix for the saved loss graph image."
      }
    }
  },
  "LotusConditioning": {
    "display_name": "LotusConditioning",
    "outputs": {
      "0": {
        "name": "conditioning",
        "tooltip": null
      }
    }
  },
  "LTXAVTextEncoderLoader": {
    "display_name": "Load LTXV Audio Text Encoder",
    "description": "Recipes:\nltxav: gemma 3 12B",
    "inputs": {
      "text_encoder": {
        "name": "text_encoder"
      },
      "ckpt_name": {
        "name": "ckpt_name"
      },
      "device": {
        "name": "device"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LTXVAddGuide": {
    "display_name": "LTXVAddGuide",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "latent": {
        "name": "latent"
      },
      "image": {
        "name": "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": {
        "name": "frame_idx",
        "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."
      },
      "strength": {
        "name": "strength"
      },
      "attention_mask": {
        "name": "attention_mask",
        "tooltip": "Optional pixel-space spatial mask. Controls per-region conditioning influence via self-attention, multiplied by strength."
      },
      "iclora_parameters": {
        "name": "iclora_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."
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "LtxvApiImageToVideo": {
    "display_name": "LTXV Image To Video",
    "description": "Professional-quality videos with customizable duration and resolution based on start image.",
    "inputs": {
      "image": {
        "name": "image",
        "tooltip": "First frame to be used for the video."
      },
      "model": {
        "name": "model"
      },
      "prompt": {
        "name": "prompt"
      },
      "duration": {
        "name": "duration"
      },
      "resolution": {
        "name": "resolution"
      },
      "fps": {
        "name": "fps"
      },
      "generate_audio": {
        "name": "generate_audio",
        "tooltip": "When true, the generated video will include AI-generated audio matching the scene."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LtxvApiTextToVideo": {
    "display_name": "LTXV Text To Video",
    "description": "Professional-quality videos with customizable duration and resolution.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "prompt": {
        "name": "prompt"
      },
      "duration": {
        "name": "duration"
      },
      "resolution": {
        "name": "resolution"
      },
      "fps": {
        "name": "fps"
      },
      "generate_audio": {
        "name": "generate_audio",
        "tooltip": "When true, the generated video will include AI-generated audio matching the scene."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LTXVAudioVAEDecode": {
    "display_name": "LTXV Audio VAE Decode",
    "inputs": {
      "samples": {
        "name": "samples",
        "tooltip": "The latent to be decoded."
      },
      "audio_vae": {
        "name": "audio_vae",
        "tooltip": "The Audio VAE model used for decoding the latent."
      }
    },
    "outputs": {
      "0": {
        "name": "Audio",
        "tooltip": null
      }
    }
  },
  "LTXVAudioVAEEncode": {
    "display_name": "LTXV Audio VAE Encode",
    "inputs": {
      "audio": {
        "name": "audio",
        "tooltip": "The audio to be encoded."
      },
      "audio_vae": {
        "name": "audio_vae",
        "tooltip": "The Audio VAE model to use for encoding."
      }
    },
    "outputs": {
      "0": {
        "name": "Audio Latent",
        "tooltip": null
      }
    }
  },
  "LTXVAudioVAELoader": {
    "display_name": "Load LTXV Audio VAE",
    "inputs": {
      "ckpt_name": {
        "name": "ckpt_name",
        "tooltip": "Audio VAE checkpoint to load."
      }
    },
    "outputs": {
      "0": {
        "name": "Audio VAE",
        "tooltip": null
      }
    }
  },
  "LTXVConcatAVLatent": {
    "display_name": "Concat AV Latent",
    "description": "Merge a video latent and an audio latent into a joint AV latent (any AV model, e.g. LTXV or MiniMax H3).",
    "inputs": {
      "video_latent": {
        "name": "video_latent"
      },
      "audio_latent": {
        "name": "audio_latent"
      }
    },
    "outputs": {
      "0": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "LTXVConditioning": {
    "display_name": "LTXVConditioning",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "frame_rate": {
        "name": "frame_rate"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      }
    }
  },
  "LTXVContextWindows": {
    "display_name": "LTXV Context Windows",
    "description": "Set context windows for LTXV-like models.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The model to apply context windows to during sampling."
      },
      "context_length": {
        "name": "context_length",
        "tooltip": "The length of the context window in real frames. Must be 8*n + 1."
      },
      "context_overlap": {
        "name": "context_overlap",
        "tooltip": "The overlap of the context window in real frames."
      },
      "context_schedule": {
        "name": "context_schedule",
        "tooltip": "Step-dependent scheduling algorithm for context windows."
      },
      "context_stride": {
        "name": "context_stride",
        "tooltip": "The stride of the context window; only applicable to uniform schedules."
      },
      "closed_loop": {
        "name": "closed_loop",
        "tooltip": "Whether to close the context window loop; only applicable to looped schedules."
      },
      "fuse_method": {
        "name": "fuse_method",
        "tooltip": "The method to use to fuse the context windows."
      },
      "freenoise": {
        "name": "freenoise",
        "tooltip": "Whether to apply FreeNoise noise shuffling, improves window blending."
      },
      "retain_first_frame": {
        "name": "retain_first_frame",
        "tooltip": "Retain the first latent frame in every context window (may help retain initial reference)."
      },
      "split_conds_to_windows": {
        "name": "split_conds_to_windows",
        "tooltip": "Whether to split multiple conditionings (created by ConditionCombine) to each window based on region index."
      }
    },
    "outputs": {
      "0": {
        "tooltip": "The model with context windows applied during sampling."
      }
    }
  },
  "LTXVCropGuides": {
    "display_name": "LTXVCropGuides",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "latent": {
        "name": "latent"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "LTXVEmptyLatentAudio": {
    "display_name": "LTXV Empty Latent Audio",
    "inputs": {
      "frames_number": {
        "name": "frames_number",
        "tooltip": "Number of frames."
      },
      "frame_rate": {
        "name": "frame_rate",
        "tooltip": "Number of frames per second."
      },
      "batch_size": {
        "name": "batch_size",
        "tooltip": "The number of latent audio samples in the batch."
      },
      "audio_vae": {
        "name": "audio_vae",
        "tooltip": "The Audio VAE model to get configuration from."
      }
    },
    "outputs": {
      "0": {
        "name": "Latent",
        "tooltip": null
      }
    }
  },
  "LTXVImgToVideo": {
    "display_name": "LTXVImgToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "image": {
        "name": "image"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "strength": {
        "name": "strength"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "LTXVImgToVideoInplace": {
    "display_name": "LTXVImgToVideoInplace",
    "inputs": {
      "vae": {
        "name": "vae"
      },
      "image": {
        "name": "image"
      },
      "latent": {
        "name": "latent"
      },
      "strength": {
        "name": "strength"
      },
      "bypass": {
        "name": "bypass",
        "tooltip": "Bypass the conditioning."
      }
    },
    "outputs": {
      "0": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "LTXVLatentUpsampler": {
    "display_name": "LTXVLatentUpsampler",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "upscale_model": {
        "name": "upscale_model"
      },
      "vae": {
        "name": "vae"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LTXVPreprocess": {
    "display_name": "LTXV Preprocess",
    "inputs": {
      "image": {
        "name": "image"
      },
      "img_compression": {
        "name": "img_compression",
        "tooltip": "Amount of compression to apply on image."
      }
    },
    "outputs": {
      "0": {
        "name": "output_image",
        "tooltip": null
      }
    }
  },
  "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).",
    "inputs": {
      "model": {
        "name": "model"
      },
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "reference_audio": {
        "name": "reference_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": {
        "name": "audio_vae",
        "tooltip": "LTXV Audio VAE for encoding."
      },
      "identity_guidance_scale": {
        "name": "identity_guidance_scale",
        "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)."
      },
      "start_percent": {
        "name": "start_percent",
        "tooltip": "Start of the sigma range where identity guidance is active."
      },
      "end_percent": {
        "name": "end_percent",
        "tooltip": "End of the sigma range where identity guidance is active."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "positive",
        "tooltip": null
      },
      "2": {
        "name": "negative",
        "tooltip": null
      }
    }
  },
  "LTXVScheduler": {
    "display_name": "LTXVScheduler",
    "inputs": {
      "steps": {
        "name": "steps"
      },
      "max_shift": {
        "name": "max_shift"
      },
      "base_shift": {
        "name": "base_shift"
      },
      "stretch": {
        "name": "stretch",
        "tooltip": "Stretch the sigmas to be in the range [terminal, 1]."
      },
      "terminal": {
        "name": "terminal",
        "tooltip": "The terminal value of the sigmas after stretching."
      },
      "latent": {
        "name": "latent"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LTXVSeparateAVLatent": {
    "display_name": "Separate AV Latent",
    "description": "Split a joint AV latent into its video and audio latents (any AV model, e.g. LTXV or MiniMax H3).",
    "inputs": {
      "av_latent": {
        "name": "av_latent"
      }
    },
    "outputs": {
      "0": {
        "name": "video_latent",
        "tooltip": null
      },
      "1": {
        "name": "audio_latent",
        "tooltip": null
      }
    }
  },
  "LumaConceptsNode": {
    "display_name": "Luma Concepts",
    "description": "Camera Concepts for use with Luma Text to Video and Luma Image to Video nodes.",
    "inputs": {
      "concept1": {
        "name": "concept1"
      },
      "concept2": {
        "name": "concept2"
      },
      "concept3": {
        "name": "concept3"
      },
      "concept4": {
        "name": "concept4"
      },
      "luma_concepts": {
        "name": "luma_concepts",
        "tooltip": "Optional Camera Concepts to add to the ones chosen here."
      }
    },
    "outputs": {
      "0": {
        "name": "luma_concepts",
        "tooltip": null
      }
    }
  },
  "LumaImageEditNode2": {
    "display_name": "Luma UNI-1 Image Edit",
    "description": "Edit an existing image with a text prompt using the Luma UNI-1 model.",
    "inputs": {
      "source": {
        "name": "source",
        "tooltip": "Source image to edit."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Description of the desired edit. 1–6000 characters."
      },
      "model": {
        "name": "model",
        "tooltip": "Model to use for editing."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_style": {
        "name": "style"
      },
      "model_web_search": {
        "name": "web_search"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LumaImageModifyNode": {
    "display_name": "Luma Image to Image",
    "description": "Modifies images synchronously based on prompt and aspect ratio.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation"
      },
      "image_weight": {
        "name": "image_weight",
        "tooltip": "Weight of the image; the closer to 1.0, the less the image will be modified."
      },
      "model": {
        "name": "model"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LumaImageNode": {
    "display_name": "Luma Text to Image",
    "description": "Generates images synchronously based on prompt and aspect ratio.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation"
      },
      "model": {
        "name": "model"
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "style_image_weight": {
        "name": "style_image_weight",
        "tooltip": "Weight of style image. Ignored if no style_image provided."
      },
      "image_luma_ref": {
        "name": "image_luma_ref",
        "tooltip": "Luma Reference node connection to influence generation with input images; up to 4 images can be considered."
      },
      "style_image": {
        "name": "style_image",
        "tooltip": "Style reference image; only 1 image will be used."
      },
      "character_image": {
        "name": "character_image",
        "tooltip": "Character reference images; can be a batch of multiple, up to 4 images can be considered."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LumaImageNode2": {
    "display_name": "Luma UNI-1 Image",
    "description": "Generate images from text using the Luma UNI-1 model.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text description of the desired image. 1–6000 characters."
      },
      "model": {
        "name": "model",
        "tooltip": "Model to use for generation."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_aspect_ratio": {
        "name": "aspect_ratio"
      },
      "model_style": {
        "name": "style"
      },
      "model_web_search": {
        "name": "web_search"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LumaImageToVideoNode": {
    "display_name": "Luma Image to Video",
    "description": "Generates videos synchronously based on prompt, input images, and output_size.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the video generation"
      },
      "model": {
        "name": "model"
      },
      "resolution": {
        "name": "resolution"
      },
      "duration": {
        "name": "duration"
      },
      "loop": {
        "name": "loop"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "first_image": {
        "name": "first_image",
        "tooltip": "First frame of generated video."
      },
      "last_image": {
        "name": "last_image",
        "tooltip": "Last frame of generated video."
      },
      "luma_concepts": {
        "name": "luma_concepts",
        "tooltip": "Optional Camera Concepts to dictate camera motion via the Luma Concepts node."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "LumaRay32ExtendVideoNode": {
    "display_name": "Luma Ray 3.2 Extend Video",
    "description": "Extend a previous Ray 3.2 generation forward (continue after it) or backward (lead-in before it). Connect the generation_id output of a prior Luma Ray 3.2 node. Extensions are always 5 seconds.",
    "inputs": {
      "source_generation_id": {
        "name": "source_generation_id",
        "tooltip": "generation_id of the prior Ray 3.2 video to extend. Connect the generation_id output of another Luma Ray 3.2 node."
      },
      "direction": {
        "name": "direction",
        "tooltip": "Forward continues after the prior clip; backward is prepended before it."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for the new content."
      },
      "resolution": {
        "name": "resolution"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "direction_loop": {
        "name": "loop"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "generation_id",
        "tooltip": null
      }
    }
  },
  "LumaRay32ImageToVideoNode": {
    "display_name": "Luma Ray 3.2 Image to Video",
    "description": "Generate a video from a start and/or end frame using Luma's Ray 3.2 model. Image-anchored generations are always 5 seconds.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for the video generation."
      },
      "resolution": {
        "name": "resolution"
      },
      "loop": {
        "name": "loop",
        "tooltip": "Make the video loop seamlessly. Not available when an end_frame is set."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed."
      },
      "start_frame": {
        "name": "start_frame",
        "tooltip": "First frame of the generated video."
      },
      "end_frame": {
        "name": "end_frame",
        "tooltip": "Last frame of the generated video."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "generation_id",
        "tooltip": null
      }
    }
  },
  "LumaRay32KeyframeNode": {
    "display_name": "Luma Ray 3.2 Keyframe",
    "description": "Anchor a guide image to a position on the Ray 3.2 output video timeline. Connect this to the 'keyframes' input of the Luma Ray 3.2 Keyframes to Video node; chain several together via the optional 'keyframes' input below.",
    "inputs": {
      "image": {
        "name": "image",
        "tooltip": "Guide image to place at the chosen moment of the output video."
      },
      "position": {
        "name": "position",
        "tooltip": "How to place this image on the output video's timeline."
      },
      "keyframes": {
        "name": "keyframes",
        "tooltip": "Optional earlier keyframes to chain with this one."
      },
      "position_fraction": {
        "name": "fraction"
      }
    },
    "outputs": {
      "0": {
        "name": "keyframes",
        "tooltip": null
      }
    }
  },
  "LumaRay32KeyframesToVideoNode": {
    "display_name": "Luma Ray 3.2 Keyframes to Video",
    "description": "Generate a video that interpolates through a sequence of guide images, each anchored to a position on the timeline, using Luma Ray 3.2. Build the sequence with Luma Ray 3.2 Keyframe nodes (at least 2).",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for the video generation."
      },
      "resolution": {
        "name": "resolution"
      },
      "duration": {
        "name": "duration"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed."
      },
      "keyframes": {
        "name": "keyframes",
        "tooltip": "Keyframe sequence from Luma Ray 3.2 Keyframe nodes (at least 2)."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "generation_id",
        "tooltip": null
      }
    }
  },
  "LumaRay32TextToVideoNode": {
    "display_name": "Luma Ray 3.2 Text to Video",
    "description": "Generate a video from a text prompt using Luma's Ray 3.2 model.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for the video generation."
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "resolution": {
        "name": "resolution"
      },
      "duration": {
        "name": "duration"
      },
      "loop": {
        "name": "loop",
        "tooltip": "Make the video loop seamlessly. Only available with 5s duration."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "generation_id",
        "tooltip": null
      }
    }
  },
  "LumaRay32VideoEditNode": {
    "display_name": "Luma Ray 3.2 Video Edit",
    "description": "Re-render an existing video under a new prompt using Luma Ray 3.2 (restyle, relight, add or remove elements) while keeping the original motion. Source video up to 18 seconds; the edited video keeps the source's length.",
    "inputs": {
      "video": {
        "name": "video",
        "tooltip": "Source video to edit. Up to 18 seconds."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Describes the desired edit."
      },
      "resolution": {
        "name": "resolution"
      },
      "strength": {
        "name": "strength",
        "tooltip": "How strongly to preserve vs. reimagine the source. 'auto' lets Ray 3.2 choose; adhere_* preserves the most, flex_* is balanced, reimagine_* changes the most."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "generation_id",
        "tooltip": null
      }
    }
  },
  "LumaRay32VideoReframeNode": {
    "display_name": "Luma Ray 3.2 Video Reframe",
    "description": "Change the aspect ratio of an existing video, using Luma Ray 3.2 to fill the newly exposed canvas areas. Source video up to 30 seconds. Billed per second of output.",
    "inputs": {
      "video": {
        "name": "video",
        "tooltip": "Source video to reframe. Up to 30 seconds."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Describes how the newly exposed canvas areas should be filled."
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "resolution": {
        "name": "resolution"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "generation_id",
        "tooltip": null
      }
    }
  },
  "LumaReferenceNode": {
    "display_name": "Luma Reference",
    "description": "Holds an image and weight for use with Luma Generate Image node.",
    "inputs": {
      "image": {
        "name": "image",
        "tooltip": "Image to use as reference."
      },
      "weight": {
        "name": "weight",
        "tooltip": "Weight of image reference."
      },
      "luma_ref": {
        "name": "luma_ref"
      }
    },
    "outputs": {
      "0": {
        "name": "luma_ref",
        "tooltip": null
      }
    }
  },
  "LumaVideoNode": {
    "display_name": "Luma Text to Video",
    "description": "Generates videos synchronously based on prompt and output_size.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the video generation"
      },
      "model": {
        "name": "model"
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "resolution": {
        "name": "resolution"
      },
      "duration": {
        "name": "duration"
      },
      "loop": {
        "name": "loop"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "luma_concepts": {
        "name": "luma_concepts",
        "tooltip": "Optional Camera Concepts to dictate camera motion via the Luma Concepts node."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MagnificImageRelightNode": {
    "display_name": "Magnific Image Relight",
    "description": "Relight an image with lighting adjustments and optional reference-based light transfer.",
    "inputs": {
      "image": {
        "name": "image",
        "tooltip": "The image to relight."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Descriptive guidance for lighting. Supports emphasis notation (1-1.4)."
      },
      "light_transfer_strength": {
        "name": "light_transfer_strength",
        "tooltip": "Intensity of light transfer application."
      },
      "style": {
        "name": "style",
        "tooltip": "Stylistic output preference."
      },
      "interpolate_from_original": {
        "name": "interpolate_from_original",
        "tooltip": "Restricts generation freedom to match original more closely."
      },
      "change_background": {
        "name": "change_background",
        "tooltip": "Modifies background based on prompt/reference."
      },
      "preserve_details": {
        "name": "preserve_details",
        "tooltip": "Maintains texture and fine details from original."
      },
      "advanced_settings": {
        "name": "advanced_settings",
        "tooltip": "Fine-tuning options for advanced lighting control."
      },
      "reference_image": {
        "name": "reference_image",
        "tooltip": "Optional reference image to transfer lighting from."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MagnificImageSkinEnhancerNode": {
    "display_name": "Magnific Image Skin Enhancer",
    "description": "Skin enhancement for portraits with multiple processing modes.",
    "inputs": {
      "image": {
        "name": "image",
        "tooltip": "The portrait image to enhance."
      },
      "sharpen": {
        "name": "sharpen",
        "tooltip": "Sharpening intensity level."
      },
      "smart_grain": {
        "name": "smart_grain",
        "tooltip": "Smart grain intensity level."
      },
      "mode": {
        "name": "mode",
        "tooltip": "Processing mode: creative for artistic enhancement, faithful for preserving original appearance, flexible for targeted optimization."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MagnificImageStyleTransferNode": {
    "display_name": "Magnific Image Style Transfer",
    "description": "Transfer the style from a reference image to your input image.",
    "inputs": {
      "image": {
        "name": "image",
        "tooltip": "The image to apply style transfer to."
      },
      "reference_image": {
        "name": "reference_image",
        "tooltip": "The reference image to extract style from."
      },
      "prompt": {
        "name": "prompt"
      },
      "style_strength": {
        "name": "style_strength",
        "tooltip": "Percentage of style strength."
      },
      "structure_strength": {
        "name": "structure_strength",
        "tooltip": "Maintains the structure of the original image."
      },
      "flavor": {
        "name": "flavor",
        "tooltip": "Style transfer flavor."
      },
      "engine": {
        "name": "engine",
        "tooltip": "Processing engine selection."
      },
      "portrait_mode": {
        "name": "portrait_mode",
        "tooltip": "Enable portrait mode for facial enhancements."
      },
      "fixed_generation": {
        "name": "fixed_generation",
        "tooltip": "When disabled, expect each generation to introduce a degree of randomness, leading to more diverse outcomes."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MagnificImageUpscalerCreativeNode": {
    "display_name": "Magnific Image Upscale (Creative)",
    "description": "Prompt‑guided enhancement, stylization, and 2x/4x/8x/16x upscaling. Maximum output: 25.3 megapixels.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "prompt": {
        "name": "prompt"
      },
      "scale_factor": {
        "name": "scale_factor"
      },
      "optimized_for": {
        "name": "optimized_for"
      },
      "creativity": {
        "name": "creativity"
      },
      "hdr": {
        "name": "hdr",
        "tooltip": "The level of definition and detail."
      },
      "resemblance": {
        "name": "resemblance",
        "tooltip": "The level of resemblance to the original image."
      },
      "fractality": {
        "name": "fractality",
        "tooltip": "The strength of the prompt and intricacy per square pixel."
      },
      "engine": {
        "name": "engine"
      },
      "auto_downscale": {
        "name": "auto_downscale",
        "tooltip": "Automatically downscale input image if output would exceed maximum pixel limit."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MagnificImageUpscalerPreciseV2Node": {
    "display_name": "Magnific Image Upscale (Precise V2)",
    "description": "High-fidelity upscaling with fine control over sharpness, grain, and detail. Maximum output: 10060×10060 pixels.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "scale_factor": {
        "name": "scale_factor"
      },
      "flavor": {
        "name": "flavor",
        "tooltip": "Processing style: sublime for general use, photo for photographs, photo_denoiser for noisy photos."
      },
      "sharpen": {
        "name": "sharpen",
        "tooltip": "Image sharpness intensity. Higher values increase edge definition and clarity."
      },
      "smart_grain": {
        "name": "smart_grain",
        "tooltip": "Intelligent grain/texture enhancement to prevent the image from looking too smooth or artificial."
      },
      "ultra_detail": {
        "name": "ultra_detail",
        "tooltip": "Controls fine detail, textures, and micro-details added during upscaling."
      },
      "auto_downscale": {
        "name": "auto_downscale",
        "tooltip": "Automatically downscale input image if output would exceed maximum resolution."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model"
      }
    },
    "outputs": {
      "0": {
        "name": "patched_model",
        "tooltip": null
      }
    }
  },
  "MakeTrainingDataset": {
    "display_name": "Make Training Dataset",
    "description": "Encode images with VAE and texts with CLIP to create a training dataset of latents and conditionings.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "List of images to encode."
      },
      "vae": {
        "name": "vae",
        "tooltip": "VAE model for encoding images to latents."
      },
      "clip": {
        "name": "clip",
        "tooltip": "CLIP model for encoding text to conditioning."
      },
      "texts": {
        "name": "texts",
        "tooltip": "List of text captions. Can be length n (matching images), 1 (repeated for all), or omitted (uses empty string)."
      }
    },
    "outputs": {
      "0": {
        "name": "latents",
        "tooltip": "List of latent dicts"
      },
      "1": {
        "name": "conditioning",
        "tooltip": "List of conditioning lists"
      }
    }
  },
  "ManualSigmas": {
    "display_name": "ManualSigmas",
    "inputs": {
      "sigmas": {
        "name": "sigmas"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MaskComposite": {
    "display_name": "Combine Masks",
    "inputs": {
      "destination": {
        "name": "destination"
      },
      "source": {
        "name": "source"
      },
      "x": {
        "name": "x"
      },
      "y": {
        "name": "y"
      },
      "operation": {
        "name": "operation"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MaskPreview": {
    "display_name": "Preview Mask",
    "description": "Preview the masks without saving them to the ComfyUI output directory.",
    "inputs": {
      "mask": {
        "name": "mask"
      }
    },
    "outputs": {
      "0": {
        "name": "mask",
        "tooltip": null
      }
    }
  },
  "MaskToImage": {
    "display_name": "Convert Mask to Image",
    "inputs": {
      "mask": {
        "name": "mask"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MediaPipeFaceLandmarker": {
    "display_name": "Detect Face Landmarks (MediaPipe)",
    "description": "Detects facial landmarks using MediaPipe model.",
    "inputs": {
      "face_detection_model": {
        "name": "face_detection_model"
      },
      "image": {
        "name": "image"
      },
      "detector_variant": {
        "name": "detector_variant",
        "tooltip": "Face detector range. 'short' is tuned for close-up faces (within ~2 m of the camera); 'full' covers farther / smaller faces (up to ~5 m) but is slower. 'both' runs both detectors and keeps whichever found more faces per frame (~2× detection cost)."
      },
      "num_faces": {
        "name": "num_faces",
        "tooltip": "Maximum faces to return per frame. 0 = no cap (return all detected)."
      },
      "min_confidence": {
        "name": "min_confidence",
        "tooltip": "BlazeFace score threshold. Lower to catch small/occluded faces."
      },
      "missing_frame_fallback": {
        "name": "missing_frame_fallback",
        "tooltip": "Per-frame behaviour when detection fails in a batch. 'empty' leaves the frame faceless. 'previous' copies the most recent successful detection. 'interpolate' lerps landmarks/bbox/blendshapes between bracketing successful frames. Multi-face: pairs faces across frames by greedy bbox-centre NN."
      }
    },
    "outputs": {
      "0": {
        "name": "face_landmarks",
        "tooltip": null
      },
      "1": {
        "name": "bboxes",
        "tooltip": null
      }
    }
  },
  "MediaPipeFaceMask": {
    "display_name": "Draw Face Mask (MediaPipe)",
    "description": "Draws a mask from face landmarks.",
    "inputs": {
      "face_landmarks": {
        "name": "face_landmarks"
      },
      "regions": {
        "name": "regions",
        "tooltip": "'all' = union of face_oval+lips+eyes+irises (which collapses to face_oval since it encloses the rest). 'custom' = toggle each region individually for combos like lips+eyes."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MediaPipeFaceMeshVisualize": {
    "display_name": "Visualize Face Landmarks (MediaPipe)",
    "description": "Draws face landmarks mesh on the input image.",
    "inputs": {
      "face_landmarks": {
        "name": "face_landmarks"
      },
      "connections": {
        "name": "connections",
        "tooltip": "'all' = oval+eyes+brows+lips+irises+nose. 'fill' = solid face_oval polygon (silhouette mask). 'custom' = toggle each feature individually (including 'tesselation', the full 2547-edge wireframe)."
      },
      "color": {
        "name": "color"
      },
      "thickness": {
        "name": "thickness",
        "tooltip": "Edge line thickness in pixels. 0 disables edge drawing."
      },
      "point_size": {
        "name": "point_size",
        "tooltip": "Landmark dot radius in pixels. 0 disables point drawing."
      },
      "image": {
        "name": "image",
        "tooltip": "If not connected, a black canvas will be used."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MergeImageLists": {
    "display_name": "Merge Image Lists (DEPRECATED)",
    "description": "Concatenate multiple image lists into one.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "List of images to process."
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": "Processed images"
      }
    }
  },
  "MergeSplat": {
    "display_name": "Merge Splats",
    "description": "Concatenate any number of gaussian splats into one. Unioning several decodes of the same latent at different seeds densifies the surface, this can improve surface quality when meshing.",
    "inputs": {
      "splats": {
        "name": "splats"
      }
    },
    "outputs": {
      "0": {
        "name": "splat",
        "tooltip": null
      }
    }
  },
  "MergeTextLists": {
    "display_name": "Merge Text Lists (DEPRECATED)",
    "inputs": {
      "texts": {
        "name": "texts",
        "tooltip": "List of texts to process."
      }
    },
    "outputs": {
      "0": {
        "name": "texts",
        "tooltip": "Processed texts"
      }
    }
  },
  "MeshyAnimateModelNode": {
    "display_name": "Meshy: Animate Model",
    "description": "Apply a specific animation action to a previously rigged character.",
    "inputs": {
      "rig_task_id": {
        "name": "rig_task_id"
      },
      "action_id": {
        "name": "action_id",
        "tooltip": "Visit https://docs.meshy.ai/en/api/animation-library for a list of available values."
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "GLB",
        "tooltip": null
      },
      "2": {
        "name": "FBX",
        "tooltip": null
      }
    }
  },
  "MeshyImageToModelNode": {
    "display_name": "Meshy: Image to Model",
    "inputs": {
      "model": {
        "name": "model"
      },
      "image": {
        "name": "image"
      },
      "should_remesh": {
        "name": "should_remesh",
        "tooltip": "When set to false, returns an unprocessed triangular mesh."
      },
      "symmetry_mode": {
        "name": "symmetry_mode"
      },
      "should_texture": {
        "name": "should_texture",
        "tooltip": "Determines whether textures are generated. Setting it to false skips the texture phase and returns a mesh without textures."
      },
      "pose_mode": {
        "name": "pose_mode",
        "tooltip": "Specify the pose mode for the generated model."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "should_remesh_target_polycount": {
        "name": "target_polycount"
      },
      "should_remesh_topology": {
        "name": "topology"
      },
      "should_texture_enable_pbr": {
        "name": "enable_pbr"
      },
      "should_texture_texture_prompt": {
        "name": "texture_prompt"
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "meshy_task_id",
        "tooltip": null
      },
      "2": {
        "name": "GLB",
        "tooltip": null
      },
      "3": {
        "name": "FBX",
        "tooltip": null
      }
    }
  },
  "MeshyMultiImageToModelNode": {
    "display_name": "Meshy: Multi-Image to Model",
    "inputs": {
      "model": {
        "name": "model"
      },
      "images": {
        "name": "images"
      },
      "should_remesh": {
        "name": "should_remesh",
        "tooltip": "When set to false, returns an unprocessed triangular mesh."
      },
      "symmetry_mode": {
        "name": "symmetry_mode"
      },
      "should_texture": {
        "name": "should_texture",
        "tooltip": "Determines whether textures are generated. Setting it to false skips the texture phase and returns a mesh without textures."
      },
      "pose_mode": {
        "name": "pose_mode",
        "tooltip": "Specify the pose mode for the generated model."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "should_remesh_target_polycount": {
        "name": "target_polycount"
      },
      "should_remesh_topology": {
        "name": "topology"
      },
      "should_texture_enable_pbr": {
        "name": "enable_pbr"
      },
      "should_texture_texture_prompt": {
        "name": "texture_prompt"
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "meshy_task_id",
        "tooltip": null
      },
      "2": {
        "name": "GLB",
        "tooltip": null
      },
      "3": {
        "name": "FBX",
        "tooltip": null
      }
    }
  },
  "MeshyRefineNode": {
    "display_name": "Meshy: Refine Draft Model",
    "description": "Refine a previously created draft model.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "meshy_task_id": {
        "name": "meshy_task_id"
      },
      "enable_pbr": {
        "name": "enable_pbr",
        "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."
      },
      "texture_prompt": {
        "name": "texture_prompt",
        "tooltip": "Provide a text prompt to guide the texturing process. Maximum 600 characters. Cannot be used at the same time as 'texture_image'."
      },
      "texture_image": {
        "name": "texture_image",
        "tooltip": "Only one of 'texture_image' or 'texture_prompt' may be used at the same time."
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "meshy_task_id",
        "tooltip": null
      },
      "2": {
        "name": "GLB",
        "tooltip": null
      },
      "3": {
        "name": "FBX",
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "meshy_task_id": {
        "name": "meshy_task_id"
      },
      "height_meters": {
        "name": "height_meters",
        "tooltip": "The approximate height of the character model in meters. This aids in scaling and rigging accuracy."
      },
      "texture_image": {
        "name": "texture_image",
        "tooltip": "The model's UV-unwrapped base color texture image."
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "rig_task_id",
        "tooltip": null
      },
      "2": {
        "name": "GLB",
        "tooltip": null
      },
      "3": {
        "name": "FBX",
        "tooltip": null
      }
    }
  },
  "MeshyTextToModelNode": {
    "display_name": "Meshy: Text to Model",
    "inputs": {
      "model": {
        "name": "model"
      },
      "prompt": {
        "name": "prompt"
      },
      "style": {
        "name": "style"
      },
      "should_remesh": {
        "name": "should_remesh",
        "tooltip": "When set to false, returns an unprocessed triangular mesh."
      },
      "symmetry_mode": {
        "name": "symmetry_mode"
      },
      "pose_mode": {
        "name": "pose_mode",
        "tooltip": "Specify the pose mode for the generated model."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "should_remesh_target_polycount": {
        "name": "target_polycount"
      },
      "should_remesh_topology": {
        "name": "topology"
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "meshy_task_id",
        "tooltip": null
      },
      "2": {
        "name": "GLB",
        "tooltip": null
      },
      "3": {
        "name": "FBX",
        "tooltip": null
      }
    }
  },
  "MeshyTextureNode": {
    "display_name": "Meshy: Texture Model",
    "inputs": {
      "model": {
        "name": "model"
      },
      "meshy_task_id": {
        "name": "meshy_task_id"
      },
      "enable_original_uv": {
        "name": "enable_original_uv",
        "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."
      },
      "pbr": {
        "name": "pbr"
      },
      "text_style_prompt": {
        "name": "text_style_prompt",
        "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'."
      },
      "image_style": {
        "name": "image_style",
        "tooltip": "A 2d image to guide the texturing process. Can not be used at the same time with 'text_style_prompt'."
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "meshy_task_id",
        "tooltip": null
      },
      "2": {
        "name": "GLB",
        "tooltip": null
      },
      "3": {
        "name": "FBX",
        "tooltip": null
      }
    }
  },
  "MiniMaxH3ImageToVideo": {
    "display_name": "MiniMax H3 Image to Video",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "vae": {
        "name": "vae"
      },
      "prompt": {
        "name": "prompt"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length",
        "tooltip": "Frame count at 24 fps, snapped up to the model's 17k+5 grid (124 = ~5s; trained range is ~124-362, longer is untested)"
      },
      "first_frame": {
        "name": "first_frame"
      },
      "last_frame": {
        "name": "last_frame"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "tooltip": null
      }
    }
  },
  "MiniMaxH3ReferenceToVideo": {
    "display_name": "MiniMax H3 Reference to Video",
    "description": "<Picture i> / <Video k> / <Audio j> reference conditioning for MiniMax H3. Use the same tags when prompting.",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "vae": {
        "name": "vae"
      },
      "audio_vae": {
        "name": "audio_vae"
      },
      "prompt": {
        "name": "prompt"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length",
        "tooltip": "Frame count at 24 fps, (124 = ~5s, trained range is ~124-362)"
      },
      "ref_image_size": {
        "name": "ref_image_size",
        "tooltip": "Reference image sizing. 'match' scales each ref (down only, keeping aspect) to the generation's pixel area; 'max' uses the reference pipeline's 2048px short edge for best identity fidelity. Reference tokens ride through every sampling step, so 'max' can be several times slower."
      },
      "ref_images": {
        "name": "ref_images"
      },
      "ref_videos": {
        "name": "ref_videos"
      },
      "ref_video_audios": {
        "name": "ref_video_audios"
      },
      "ref_audios": {
        "name": "ref_audios"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "tooltip": null
      }
    }
  },
  "MiniMaxH3SigmaShift": {
    "display_name": "ModelSamplingMiniMaxH3",
    "description": "Set the video/audio flow shifts.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "shift_video": {
        "name": "shift_video"
      },
      "shift_audio": {
        "name": "shift_audio"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MinimaxHailuo03FirstLastFrameNode": {
    "display_name": "MiniMax H3 First-Last-Frame to Video",
    "description": "Generate video from a first frame image and an optional last frame image using the MiniMax H3 model. The aspect ratio of the video follows the supplied images.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Model to use for video generation."
      },
      "first_frame": {
        "name": "first_frame",
        "tooltip": "First frame image for the video."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Random seed. The same request with the same seed gives similar, but not guaranteed identical, results."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AIGC watermark to the video."
      },
      "last_frame": {
        "name": "last_frame",
        "tooltip": "Optional last frame image for the video."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MinimaxHailuo03ReferenceNode": {
    "display_name": "MiniMax H3 Reference to Video",
    "description": "Generate video conditioned on reference images, videos, and audio using the MiniMax H3 model. Refer to the references in the prompt by their order: 'Image 1', 'Image 2', 'Video 1', 'Audio 1', and so on.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Model to use for video generation."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Random seed. The same request with the same seed gives similar, but not guaranteed identical, results."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AIGC watermark to the video."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_ratio": {
        "name": "ratio"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MinimaxHailuo03TextToVideoNode": {
    "display_name": "MiniMax H3 Text to Video",
    "description": "Generate video from a text prompt using the MiniMax H3 model.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Model to use for video generation."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Random seed. The same request with the same seed gives similar, but not guaranteed identical, results."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AIGC watermark to the video."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_ratio": {
        "name": "ratio"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MinimaxHailuoVideoNode": {
    "display_name": "MiniMax Hailuo 02 Video",
    "description": "Generates videos from prompt, with optional start frame using the MiniMax Hailuo-02 model.",
    "inputs": {
      "prompt_text": {
        "name": "prompt_text",
        "tooltip": "Text prompt to guide the video generation."
      },
      "seed": {
        "name": "seed",
        "tooltip": "The random seed used for creating the noise."
      },
      "first_frame_image": {
        "name": "first_frame_image",
        "tooltip": "Optional image to use as the first frame to generate a video."
      },
      "prompt_optimizer": {
        "name": "prompt_optimizer",
        "tooltip": "Optimize prompt to improve generation quality when needed."
      },
      "duration": {
        "name": "duration",
        "tooltip": "The length of the output video in seconds."
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "The dimensions of the video display. 1080p is 1920x1080, 768p is 1366x768."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MinimaxImageToVideoNode": {
    "display_name": "MiniMax Image to Video",
    "description": "Generates videos synchronously based on an image and prompt, and optional parameters.",
    "inputs": {
      "image": {
        "name": "image",
        "tooltip": "Image to use as first frame of video generation"
      },
      "prompt_text": {
        "name": "prompt_text",
        "tooltip": "Text prompt to guide the video generation"
      },
      "model": {
        "name": "model",
        "tooltip": "Model to use for video generation"
      },
      "seed": {
        "name": "seed",
        "tooltip": "The random seed used for creating the noise."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MinimaxTextToVideoNode": {
    "display_name": "MiniMax Text to Video",
    "description": "Generates videos synchronously based on a prompt, and optional parameters.",
    "inputs": {
      "prompt_text": {
        "name": "prompt_text",
        "tooltip": "Text prompt to guide the video generation"
      },
      "model": {
        "name": "model",
        "tooltip": "Model to use for video generation"
      },
      "seed": {
        "name": "seed",
        "tooltip": "The random seed used for creating the noise."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ModelComputeDtype": {
    "display_name": "ModelComputeDtype",
    "inputs": {
      "model": {
        "name": "model"
      },
      "dtype": {
        "name": "dtype"
      }
    }
  },
  "ModelMergeAdd": {
    "display_name": "ModelMergeAdd",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      }
    }
  },
  "ModelMergeAuraflow": {
    "display_name": "ModelMergeAuraflow",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "init_x_linear_": {
        "name": "init_x_linear."
      },
      "positional_encoding": {
        "name": "positional_encoding"
      },
      "cond_seq_linear_": {
        "name": "cond_seq_linear."
      },
      "register_tokens": {
        "name": "register_tokens"
      },
      "t_embedder_": {
        "name": "t_embedder."
      },
      "double_layers_0_": {
        "name": "double_layers.0."
      },
      "double_layers_1_": {
        "name": "double_layers.1."
      },
      "double_layers_2_": {
        "name": "double_layers.2."
      },
      "double_layers_3_": {
        "name": "double_layers.3."
      },
      "single_layers_0_": {
        "name": "single_layers.0."
      },
      "single_layers_1_": {
        "name": "single_layers.1."
      },
      "single_layers_2_": {
        "name": "single_layers.2."
      },
      "single_layers_3_": {
        "name": "single_layers.3."
      },
      "single_layers_4_": {
        "name": "single_layers.4."
      },
      "single_layers_5_": {
        "name": "single_layers.5."
      },
      "single_layers_6_": {
        "name": "single_layers.6."
      },
      "single_layers_7_": {
        "name": "single_layers.7."
      },
      "single_layers_8_": {
        "name": "single_layers.8."
      },
      "single_layers_9_": {
        "name": "single_layers.9."
      },
      "single_layers_10_": {
        "name": "single_layers.10."
      },
      "single_layers_11_": {
        "name": "single_layers.11."
      },
      "single_layers_12_": {
        "name": "single_layers.12."
      },
      "single_layers_13_": {
        "name": "single_layers.13."
      },
      "single_layers_14_": {
        "name": "single_layers.14."
      },
      "single_layers_15_": {
        "name": "single_layers.15."
      },
      "single_layers_16_": {
        "name": "single_layers.16."
      },
      "single_layers_17_": {
        "name": "single_layers.17."
      },
      "single_layers_18_": {
        "name": "single_layers.18."
      },
      "single_layers_19_": {
        "name": "single_layers.19."
      },
      "single_layers_20_": {
        "name": "single_layers.20."
      },
      "single_layers_21_": {
        "name": "single_layers.21."
      },
      "single_layers_22_": {
        "name": "single_layers.22."
      },
      "single_layers_23_": {
        "name": "single_layers.23."
      },
      "single_layers_24_": {
        "name": "single_layers.24."
      },
      "single_layers_25_": {
        "name": "single_layers.25."
      },
      "single_layers_26_": {
        "name": "single_layers.26."
      },
      "single_layers_27_": {
        "name": "single_layers.27."
      },
      "single_layers_28_": {
        "name": "single_layers.28."
      },
      "single_layers_29_": {
        "name": "single_layers.29."
      },
      "single_layers_30_": {
        "name": "single_layers.30."
      },
      "single_layers_31_": {
        "name": "single_layers.31."
      },
      "modF_": {
        "name": "modF."
      },
      "final_linear_": {
        "name": "final_linear."
      }
    }
  },
  "ModelMergeBlocks": {
    "display_name": "ModelMergeBlocks",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "input": {
        "name": "input"
      },
      "middle": {
        "name": "middle"
      },
      "out": {
        "name": "out"
      }
    }
  },
  "ModelMergeCosmos14B": {
    "display_name": "ModelMergeCosmos14B",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "pos_embedder_": {
        "name": "pos_embedder."
      },
      "extra_pos_embedder_": {
        "name": "extra_pos_embedder."
      },
      "x_embedder_": {
        "name": "x_embedder."
      },
      "t_embedder_": {
        "name": "t_embedder."
      },
      "affline_norm_": {
        "name": "affline_norm."
      },
      "blocks_block0_": {
        "name": "blocks.block0."
      },
      "blocks_block1_": {
        "name": "blocks.block1."
      },
      "blocks_block2_": {
        "name": "blocks.block2."
      },
      "blocks_block3_": {
        "name": "blocks.block3."
      },
      "blocks_block4_": {
        "name": "blocks.block4."
      },
      "blocks_block5_": {
        "name": "blocks.block5."
      },
      "blocks_block6_": {
        "name": "blocks.block6."
      },
      "blocks_block7_": {
        "name": "blocks.block7."
      },
      "blocks_block8_": {
        "name": "blocks.block8."
      },
      "blocks_block9_": {
        "name": "blocks.block9."
      },
      "blocks_block10_": {
        "name": "blocks.block10."
      },
      "blocks_block11_": {
        "name": "blocks.block11."
      },
      "blocks_block12_": {
        "name": "blocks.block12."
      },
      "blocks_block13_": {
        "name": "blocks.block13."
      },
      "blocks_block14_": {
        "name": "blocks.block14."
      },
      "blocks_block15_": {
        "name": "blocks.block15."
      },
      "blocks_block16_": {
        "name": "blocks.block16."
      },
      "blocks_block17_": {
        "name": "blocks.block17."
      },
      "blocks_block18_": {
        "name": "blocks.block18."
      },
      "blocks_block19_": {
        "name": "blocks.block19."
      },
      "blocks_block20_": {
        "name": "blocks.block20."
      },
      "blocks_block21_": {
        "name": "blocks.block21."
      },
      "blocks_block22_": {
        "name": "blocks.block22."
      },
      "blocks_block23_": {
        "name": "blocks.block23."
      },
      "blocks_block24_": {
        "name": "blocks.block24."
      },
      "blocks_block25_": {
        "name": "blocks.block25."
      },
      "blocks_block26_": {
        "name": "blocks.block26."
      },
      "blocks_block27_": {
        "name": "blocks.block27."
      },
      "blocks_block28_": {
        "name": "blocks.block28."
      },
      "blocks_block29_": {
        "name": "blocks.block29."
      },
      "blocks_block30_": {
        "name": "blocks.block30."
      },
      "blocks_block31_": {
        "name": "blocks.block31."
      },
      "blocks_block32_": {
        "name": "blocks.block32."
      },
      "blocks_block33_": {
        "name": "blocks.block33."
      },
      "blocks_block34_": {
        "name": "blocks.block34."
      },
      "blocks_block35_": {
        "name": "blocks.block35."
      },
      "final_layer_": {
        "name": "final_layer."
      }
    }
  },
  "ModelMergeCosmos7B": {
    "display_name": "ModelMergeCosmos7B",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "pos_embedder_": {
        "name": "pos_embedder."
      },
      "extra_pos_embedder_": {
        "name": "extra_pos_embedder."
      },
      "x_embedder_": {
        "name": "x_embedder."
      },
      "t_embedder_": {
        "name": "t_embedder."
      },
      "affline_norm_": {
        "name": "affline_norm."
      },
      "blocks_block0_": {
        "name": "blocks.block0."
      },
      "blocks_block1_": {
        "name": "blocks.block1."
      },
      "blocks_block2_": {
        "name": "blocks.block2."
      },
      "blocks_block3_": {
        "name": "blocks.block3."
      },
      "blocks_block4_": {
        "name": "blocks.block4."
      },
      "blocks_block5_": {
        "name": "blocks.block5."
      },
      "blocks_block6_": {
        "name": "blocks.block6."
      },
      "blocks_block7_": {
        "name": "blocks.block7."
      },
      "blocks_block8_": {
        "name": "blocks.block8."
      },
      "blocks_block9_": {
        "name": "blocks.block9."
      },
      "blocks_block10_": {
        "name": "blocks.block10."
      },
      "blocks_block11_": {
        "name": "blocks.block11."
      },
      "blocks_block12_": {
        "name": "blocks.block12."
      },
      "blocks_block13_": {
        "name": "blocks.block13."
      },
      "blocks_block14_": {
        "name": "blocks.block14."
      },
      "blocks_block15_": {
        "name": "blocks.block15."
      },
      "blocks_block16_": {
        "name": "blocks.block16."
      },
      "blocks_block17_": {
        "name": "blocks.block17."
      },
      "blocks_block18_": {
        "name": "blocks.block18."
      },
      "blocks_block19_": {
        "name": "blocks.block19."
      },
      "blocks_block20_": {
        "name": "blocks.block20."
      },
      "blocks_block21_": {
        "name": "blocks.block21."
      },
      "blocks_block22_": {
        "name": "blocks.block22."
      },
      "blocks_block23_": {
        "name": "blocks.block23."
      },
      "blocks_block24_": {
        "name": "blocks.block24."
      },
      "blocks_block25_": {
        "name": "blocks.block25."
      },
      "blocks_block26_": {
        "name": "blocks.block26."
      },
      "blocks_block27_": {
        "name": "blocks.block27."
      },
      "final_layer_": {
        "name": "final_layer."
      }
    }
  },
  "ModelMergeCosmosPredict2_14B": {
    "display_name": "ModelMergeCosmosPredict2_14B",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "pos_embedder_": {
        "name": "pos_embedder."
      },
      "x_embedder_": {
        "name": "x_embedder."
      },
      "t_embedder_": {
        "name": "t_embedder."
      },
      "t_embedding_norm_": {
        "name": "t_embedding_norm."
      },
      "blocks_0_": {
        "name": "blocks.0."
      },
      "blocks_1_": {
        "name": "blocks.1."
      },
      "blocks_2_": {
        "name": "blocks.2."
      },
      "blocks_3_": {
        "name": "blocks.3."
      },
      "blocks_4_": {
        "name": "blocks.4."
      },
      "blocks_5_": {
        "name": "blocks.5."
      },
      "blocks_6_": {
        "name": "blocks.6."
      },
      "blocks_7_": {
        "name": "blocks.7."
      },
      "blocks_8_": {
        "name": "blocks.8."
      },
      "blocks_9_": {
        "name": "blocks.9."
      },
      "blocks_10_": {
        "name": "blocks.10."
      },
      "blocks_11_": {
        "name": "blocks.11."
      },
      "blocks_12_": {
        "name": "blocks.12."
      },
      "blocks_13_": {
        "name": "blocks.13."
      },
      "blocks_14_": {
        "name": "blocks.14."
      },
      "blocks_15_": {
        "name": "blocks.15."
      },
      "blocks_16_": {
        "name": "blocks.16."
      },
      "blocks_17_": {
        "name": "blocks.17."
      },
      "blocks_18_": {
        "name": "blocks.18."
      },
      "blocks_19_": {
        "name": "blocks.19."
      },
      "blocks_20_": {
        "name": "blocks.20."
      },
      "blocks_21_": {
        "name": "blocks.21."
      },
      "blocks_22_": {
        "name": "blocks.22."
      },
      "blocks_23_": {
        "name": "blocks.23."
      },
      "blocks_24_": {
        "name": "blocks.24."
      },
      "blocks_25_": {
        "name": "blocks.25."
      },
      "blocks_26_": {
        "name": "blocks.26."
      },
      "blocks_27_": {
        "name": "blocks.27."
      },
      "blocks_28_": {
        "name": "blocks.28."
      },
      "blocks_29_": {
        "name": "blocks.29."
      },
      "blocks_30_": {
        "name": "blocks.30."
      },
      "blocks_31_": {
        "name": "blocks.31."
      },
      "blocks_32_": {
        "name": "blocks.32."
      },
      "blocks_33_": {
        "name": "blocks.33."
      },
      "blocks_34_": {
        "name": "blocks.34."
      },
      "blocks_35_": {
        "name": "blocks.35."
      },
      "final_layer_": {
        "name": "final_layer."
      }
    }
  },
  "ModelMergeCosmosPredict2_2B": {
    "display_name": "ModelMergeCosmosPredict2_2B",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "pos_embedder_": {
        "name": "pos_embedder."
      },
      "x_embedder_": {
        "name": "x_embedder."
      },
      "t_embedder_": {
        "name": "t_embedder."
      },
      "t_embedding_norm_": {
        "name": "t_embedding_norm."
      },
      "blocks_0_": {
        "name": "blocks.0."
      },
      "blocks_1_": {
        "name": "blocks.1."
      },
      "blocks_2_": {
        "name": "blocks.2."
      },
      "blocks_3_": {
        "name": "blocks.3."
      },
      "blocks_4_": {
        "name": "blocks.4."
      },
      "blocks_5_": {
        "name": "blocks.5."
      },
      "blocks_6_": {
        "name": "blocks.6."
      },
      "blocks_7_": {
        "name": "blocks.7."
      },
      "blocks_8_": {
        "name": "blocks.8."
      },
      "blocks_9_": {
        "name": "blocks.9."
      },
      "blocks_10_": {
        "name": "blocks.10."
      },
      "blocks_11_": {
        "name": "blocks.11."
      },
      "blocks_12_": {
        "name": "blocks.12."
      },
      "blocks_13_": {
        "name": "blocks.13."
      },
      "blocks_14_": {
        "name": "blocks.14."
      },
      "blocks_15_": {
        "name": "blocks.15."
      },
      "blocks_16_": {
        "name": "blocks.16."
      },
      "blocks_17_": {
        "name": "blocks.17."
      },
      "blocks_18_": {
        "name": "blocks.18."
      },
      "blocks_19_": {
        "name": "blocks.19."
      },
      "blocks_20_": {
        "name": "blocks.20."
      },
      "blocks_21_": {
        "name": "blocks.21."
      },
      "blocks_22_": {
        "name": "blocks.22."
      },
      "blocks_23_": {
        "name": "blocks.23."
      },
      "blocks_24_": {
        "name": "blocks.24."
      },
      "blocks_25_": {
        "name": "blocks.25."
      },
      "blocks_26_": {
        "name": "blocks.26."
      },
      "blocks_27_": {
        "name": "blocks.27."
      },
      "final_layer_": {
        "name": "final_layer."
      }
    }
  },
  "ModelMergeFlux1": {
    "display_name": "ModelMergeFlux1",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "img_in_": {
        "name": "img_in."
      },
      "time_in_": {
        "name": "time_in."
      },
      "guidance_in": {
        "name": "guidance_in"
      },
      "vector_in_": {
        "name": "vector_in."
      },
      "txt_in_": {
        "name": "txt_in."
      },
      "double_blocks_0_": {
        "name": "double_blocks.0."
      },
      "double_blocks_1_": {
        "name": "double_blocks.1."
      },
      "double_blocks_2_": {
        "name": "double_blocks.2."
      },
      "double_blocks_3_": {
        "name": "double_blocks.3."
      },
      "double_blocks_4_": {
        "name": "double_blocks.4."
      },
      "double_blocks_5_": {
        "name": "double_blocks.5."
      },
      "double_blocks_6_": {
        "name": "double_blocks.6."
      },
      "double_blocks_7_": {
        "name": "double_blocks.7."
      },
      "double_blocks_8_": {
        "name": "double_blocks.8."
      },
      "double_blocks_9_": {
        "name": "double_blocks.9."
      },
      "double_blocks_10_": {
        "name": "double_blocks.10."
      },
      "double_blocks_11_": {
        "name": "double_blocks.11."
      },
      "double_blocks_12_": {
        "name": "double_blocks.12."
      },
      "double_blocks_13_": {
        "name": "double_blocks.13."
      },
      "double_blocks_14_": {
        "name": "double_blocks.14."
      },
      "double_blocks_15_": {
        "name": "double_blocks.15."
      },
      "double_blocks_16_": {
        "name": "double_blocks.16."
      },
      "double_blocks_17_": {
        "name": "double_blocks.17."
      },
      "double_blocks_18_": {
        "name": "double_blocks.18."
      },
      "single_blocks_0_": {
        "name": "single_blocks.0."
      },
      "single_blocks_1_": {
        "name": "single_blocks.1."
      },
      "single_blocks_2_": {
        "name": "single_blocks.2."
      },
      "single_blocks_3_": {
        "name": "single_blocks.3."
      },
      "single_blocks_4_": {
        "name": "single_blocks.4."
      },
      "single_blocks_5_": {
        "name": "single_blocks.5."
      },
      "single_blocks_6_": {
        "name": "single_blocks.6."
      },
      "single_blocks_7_": {
        "name": "single_blocks.7."
      },
      "single_blocks_8_": {
        "name": "single_blocks.8."
      },
      "single_blocks_9_": {
        "name": "single_blocks.9."
      },
      "single_blocks_10_": {
        "name": "single_blocks.10."
      },
      "single_blocks_11_": {
        "name": "single_blocks.11."
      },
      "single_blocks_12_": {
        "name": "single_blocks.12."
      },
      "single_blocks_13_": {
        "name": "single_blocks.13."
      },
      "single_blocks_14_": {
        "name": "single_blocks.14."
      },
      "single_blocks_15_": {
        "name": "single_blocks.15."
      },
      "single_blocks_16_": {
        "name": "single_blocks.16."
      },
      "single_blocks_17_": {
        "name": "single_blocks.17."
      },
      "single_blocks_18_": {
        "name": "single_blocks.18."
      },
      "single_blocks_19_": {
        "name": "single_blocks.19."
      },
      "single_blocks_20_": {
        "name": "single_blocks.20."
      },
      "single_blocks_21_": {
        "name": "single_blocks.21."
      },
      "single_blocks_22_": {
        "name": "single_blocks.22."
      },
      "single_blocks_23_": {
        "name": "single_blocks.23."
      },
      "single_blocks_24_": {
        "name": "single_blocks.24."
      },
      "single_blocks_25_": {
        "name": "single_blocks.25."
      },
      "single_blocks_26_": {
        "name": "single_blocks.26."
      },
      "single_blocks_27_": {
        "name": "single_blocks.27."
      },
      "single_blocks_28_": {
        "name": "single_blocks.28."
      },
      "single_blocks_29_": {
        "name": "single_blocks.29."
      },
      "single_blocks_30_": {
        "name": "single_blocks.30."
      },
      "single_blocks_31_": {
        "name": "single_blocks.31."
      },
      "single_blocks_32_": {
        "name": "single_blocks.32."
      },
      "single_blocks_33_": {
        "name": "single_blocks.33."
      },
      "single_blocks_34_": {
        "name": "single_blocks.34."
      },
      "single_blocks_35_": {
        "name": "single_blocks.35."
      },
      "single_blocks_36_": {
        "name": "single_blocks.36."
      },
      "single_blocks_37_": {
        "name": "single_blocks.37."
      },
      "final_layer_": {
        "name": "final_layer."
      }
    }
  },
  "ModelMergeKrea2": {
    "display_name": "ModelMergeKrea2",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "first_": {
        "name": "first."
      },
      "tmlp_": {
        "name": "tmlp."
      },
      "txtmlp_": {
        "name": "txtmlp."
      },
      "tproj_": {
        "name": "tproj."
      },
      "txtfusion_layerwise_blocks_0_": {
        "name": "txtfusion.layerwise_blocks.0."
      },
      "txtfusion_layerwise_blocks_1_": {
        "name": "txtfusion.layerwise_blocks.1."
      },
      "txtfusion_projector_": {
        "name": "txtfusion.projector."
      },
      "txtfusion_refiner_blocks_0_": {
        "name": "txtfusion.refiner_blocks.0."
      },
      "txtfusion_refiner_blocks_1_": {
        "name": "txtfusion.refiner_blocks.1."
      },
      "blocks_0_": {
        "name": "blocks.0."
      },
      "blocks_1_": {
        "name": "blocks.1."
      },
      "blocks_2_": {
        "name": "blocks.2."
      },
      "blocks_3_": {
        "name": "blocks.3."
      },
      "blocks_4_": {
        "name": "blocks.4."
      },
      "blocks_5_": {
        "name": "blocks.5."
      },
      "blocks_6_": {
        "name": "blocks.6."
      },
      "blocks_7_": {
        "name": "blocks.7."
      },
      "blocks_8_": {
        "name": "blocks.8."
      },
      "blocks_9_": {
        "name": "blocks.9."
      },
      "blocks_10_": {
        "name": "blocks.10."
      },
      "blocks_11_": {
        "name": "blocks.11."
      },
      "blocks_12_": {
        "name": "blocks.12."
      },
      "blocks_13_": {
        "name": "blocks.13."
      },
      "blocks_14_": {
        "name": "blocks.14."
      },
      "blocks_15_": {
        "name": "blocks.15."
      },
      "blocks_16_": {
        "name": "blocks.16."
      },
      "blocks_17_": {
        "name": "blocks.17."
      },
      "blocks_18_": {
        "name": "blocks.18."
      },
      "blocks_19_": {
        "name": "blocks.19."
      },
      "blocks_20_": {
        "name": "blocks.20."
      },
      "blocks_21_": {
        "name": "blocks.21."
      },
      "blocks_22_": {
        "name": "blocks.22."
      },
      "blocks_23_": {
        "name": "blocks.23."
      },
      "blocks_24_": {
        "name": "blocks.24."
      },
      "blocks_25_": {
        "name": "blocks.25."
      },
      "blocks_26_": {
        "name": "blocks.26."
      },
      "blocks_27_": {
        "name": "blocks.27."
      },
      "last_": {
        "name": "last."
      }
    }
  },
  "ModelMergeLTXV": {
    "display_name": "ModelMergeLTXV",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "patchify_proj_": {
        "name": "patchify_proj."
      },
      "adaln_single_": {
        "name": "adaln_single."
      },
      "caption_projection_": {
        "name": "caption_projection."
      },
      "transformer_blocks_0_": {
        "name": "transformer_blocks.0."
      },
      "transformer_blocks_1_": {
        "name": "transformer_blocks.1."
      },
      "transformer_blocks_2_": {
        "name": "transformer_blocks.2."
      },
      "transformer_blocks_3_": {
        "name": "transformer_blocks.3."
      },
      "transformer_blocks_4_": {
        "name": "transformer_blocks.4."
      },
      "transformer_blocks_5_": {
        "name": "transformer_blocks.5."
      },
      "transformer_blocks_6_": {
        "name": "transformer_blocks.6."
      },
      "transformer_blocks_7_": {
        "name": "transformer_blocks.7."
      },
      "transformer_blocks_8_": {
        "name": "transformer_blocks.8."
      },
      "transformer_blocks_9_": {
        "name": "transformer_blocks.9."
      },
      "transformer_blocks_10_": {
        "name": "transformer_blocks.10."
      },
      "transformer_blocks_11_": {
        "name": "transformer_blocks.11."
      },
      "transformer_blocks_12_": {
        "name": "transformer_blocks.12."
      },
      "transformer_blocks_13_": {
        "name": "transformer_blocks.13."
      },
      "transformer_blocks_14_": {
        "name": "transformer_blocks.14."
      },
      "transformer_blocks_15_": {
        "name": "transformer_blocks.15."
      },
      "transformer_blocks_16_": {
        "name": "transformer_blocks.16."
      },
      "transformer_blocks_17_": {
        "name": "transformer_blocks.17."
      },
      "transformer_blocks_18_": {
        "name": "transformer_blocks.18."
      },
      "transformer_blocks_19_": {
        "name": "transformer_blocks.19."
      },
      "transformer_blocks_20_": {
        "name": "transformer_blocks.20."
      },
      "transformer_blocks_21_": {
        "name": "transformer_blocks.21."
      },
      "transformer_blocks_22_": {
        "name": "transformer_blocks.22."
      },
      "transformer_blocks_23_": {
        "name": "transformer_blocks.23."
      },
      "transformer_blocks_24_": {
        "name": "transformer_blocks.24."
      },
      "transformer_blocks_25_": {
        "name": "transformer_blocks.25."
      },
      "transformer_blocks_26_": {
        "name": "transformer_blocks.26."
      },
      "transformer_blocks_27_": {
        "name": "transformer_blocks.27."
      },
      "scale_shift_table": {
        "name": "scale_shift_table"
      },
      "proj_out_": {
        "name": "proj_out."
      }
    }
  },
  "ModelMergeMochiPreview": {
    "display_name": "ModelMergeMochiPreview",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "pos_frequencies_": {
        "name": "pos_frequencies."
      },
      "t_embedder_": {
        "name": "t_embedder."
      },
      "t5_y_embedder_": {
        "name": "t5_y_embedder."
      },
      "t5_yproj_": {
        "name": "t5_yproj."
      },
      "blocks_0_": {
        "name": "blocks.0."
      },
      "blocks_1_": {
        "name": "blocks.1."
      },
      "blocks_2_": {
        "name": "blocks.2."
      },
      "blocks_3_": {
        "name": "blocks.3."
      },
      "blocks_4_": {
        "name": "blocks.4."
      },
      "blocks_5_": {
        "name": "blocks.5."
      },
      "blocks_6_": {
        "name": "blocks.6."
      },
      "blocks_7_": {
        "name": "blocks.7."
      },
      "blocks_8_": {
        "name": "blocks.8."
      },
      "blocks_9_": {
        "name": "blocks.9."
      },
      "blocks_10_": {
        "name": "blocks.10."
      },
      "blocks_11_": {
        "name": "blocks.11."
      },
      "blocks_12_": {
        "name": "blocks.12."
      },
      "blocks_13_": {
        "name": "blocks.13."
      },
      "blocks_14_": {
        "name": "blocks.14."
      },
      "blocks_15_": {
        "name": "blocks.15."
      },
      "blocks_16_": {
        "name": "blocks.16."
      },
      "blocks_17_": {
        "name": "blocks.17."
      },
      "blocks_18_": {
        "name": "blocks.18."
      },
      "blocks_19_": {
        "name": "blocks.19."
      },
      "blocks_20_": {
        "name": "blocks.20."
      },
      "blocks_21_": {
        "name": "blocks.21."
      },
      "blocks_22_": {
        "name": "blocks.22."
      },
      "blocks_23_": {
        "name": "blocks.23."
      },
      "blocks_24_": {
        "name": "blocks.24."
      },
      "blocks_25_": {
        "name": "blocks.25."
      },
      "blocks_26_": {
        "name": "blocks.26."
      },
      "blocks_27_": {
        "name": "blocks.27."
      },
      "blocks_28_": {
        "name": "blocks.28."
      },
      "blocks_29_": {
        "name": "blocks.29."
      },
      "blocks_30_": {
        "name": "blocks.30."
      },
      "blocks_31_": {
        "name": "blocks.31."
      },
      "blocks_32_": {
        "name": "blocks.32."
      },
      "blocks_33_": {
        "name": "blocks.33."
      },
      "blocks_34_": {
        "name": "blocks.34."
      },
      "blocks_35_": {
        "name": "blocks.35."
      },
      "blocks_36_": {
        "name": "blocks.36."
      },
      "blocks_37_": {
        "name": "blocks.37."
      },
      "blocks_38_": {
        "name": "blocks.38."
      },
      "blocks_39_": {
        "name": "blocks.39."
      },
      "blocks_40_": {
        "name": "blocks.40."
      },
      "blocks_41_": {
        "name": "blocks.41."
      },
      "blocks_42_": {
        "name": "blocks.42."
      },
      "blocks_43_": {
        "name": "blocks.43."
      },
      "blocks_44_": {
        "name": "blocks.44."
      },
      "blocks_45_": {
        "name": "blocks.45."
      },
      "blocks_46_": {
        "name": "blocks.46."
      },
      "blocks_47_": {
        "name": "blocks.47."
      },
      "final_layer_": {
        "name": "final_layer."
      }
    }
  },
  "ModelMergeQwenImage": {
    "display_name": "ModelMergeQwenImage",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "pos_embeds_": {
        "name": "pos_embeds."
      },
      "img_in_": {
        "name": "img_in."
      },
      "txt_norm_": {
        "name": "txt_norm."
      },
      "txt_in_": {
        "name": "txt_in."
      },
      "time_text_embed_": {
        "name": "time_text_embed."
      },
      "transformer_blocks_0_": {
        "name": "transformer_blocks.0."
      },
      "transformer_blocks_1_": {
        "name": "transformer_blocks.1."
      },
      "transformer_blocks_2_": {
        "name": "transformer_blocks.2."
      },
      "transformer_blocks_3_": {
        "name": "transformer_blocks.3."
      },
      "transformer_blocks_4_": {
        "name": "transformer_blocks.4."
      },
      "transformer_blocks_5_": {
        "name": "transformer_blocks.5."
      },
      "transformer_blocks_6_": {
        "name": "transformer_blocks.6."
      },
      "transformer_blocks_7_": {
        "name": "transformer_blocks.7."
      },
      "transformer_blocks_8_": {
        "name": "transformer_blocks.8."
      },
      "transformer_blocks_9_": {
        "name": "transformer_blocks.9."
      },
      "transformer_blocks_10_": {
        "name": "transformer_blocks.10."
      },
      "transformer_blocks_11_": {
        "name": "transformer_blocks.11."
      },
      "transformer_blocks_12_": {
        "name": "transformer_blocks.12."
      },
      "transformer_blocks_13_": {
        "name": "transformer_blocks.13."
      },
      "transformer_blocks_14_": {
        "name": "transformer_blocks.14."
      },
      "transformer_blocks_15_": {
        "name": "transformer_blocks.15."
      },
      "transformer_blocks_16_": {
        "name": "transformer_blocks.16."
      },
      "transformer_blocks_17_": {
        "name": "transformer_blocks.17."
      },
      "transformer_blocks_18_": {
        "name": "transformer_blocks.18."
      },
      "transformer_blocks_19_": {
        "name": "transformer_blocks.19."
      },
      "transformer_blocks_20_": {
        "name": "transformer_blocks.20."
      },
      "transformer_blocks_21_": {
        "name": "transformer_blocks.21."
      },
      "transformer_blocks_22_": {
        "name": "transformer_blocks.22."
      },
      "transformer_blocks_23_": {
        "name": "transformer_blocks.23."
      },
      "transformer_blocks_24_": {
        "name": "transformer_blocks.24."
      },
      "transformer_blocks_25_": {
        "name": "transformer_blocks.25."
      },
      "transformer_blocks_26_": {
        "name": "transformer_blocks.26."
      },
      "transformer_blocks_27_": {
        "name": "transformer_blocks.27."
      },
      "transformer_blocks_28_": {
        "name": "transformer_blocks.28."
      },
      "transformer_blocks_29_": {
        "name": "transformer_blocks.29."
      },
      "transformer_blocks_30_": {
        "name": "transformer_blocks.30."
      },
      "transformer_blocks_31_": {
        "name": "transformer_blocks.31."
      },
      "transformer_blocks_32_": {
        "name": "transformer_blocks.32."
      },
      "transformer_blocks_33_": {
        "name": "transformer_blocks.33."
      },
      "transformer_blocks_34_": {
        "name": "transformer_blocks.34."
      },
      "transformer_blocks_35_": {
        "name": "transformer_blocks.35."
      },
      "transformer_blocks_36_": {
        "name": "transformer_blocks.36."
      },
      "transformer_blocks_37_": {
        "name": "transformer_blocks.37."
      },
      "transformer_blocks_38_": {
        "name": "transformer_blocks.38."
      },
      "transformer_blocks_39_": {
        "name": "transformer_blocks.39."
      },
      "transformer_blocks_40_": {
        "name": "transformer_blocks.40."
      },
      "transformer_blocks_41_": {
        "name": "transformer_blocks.41."
      },
      "transformer_blocks_42_": {
        "name": "transformer_blocks.42."
      },
      "transformer_blocks_43_": {
        "name": "transformer_blocks.43."
      },
      "transformer_blocks_44_": {
        "name": "transformer_blocks.44."
      },
      "transformer_blocks_45_": {
        "name": "transformer_blocks.45."
      },
      "transformer_blocks_46_": {
        "name": "transformer_blocks.46."
      },
      "transformer_blocks_47_": {
        "name": "transformer_blocks.47."
      },
      "transformer_blocks_48_": {
        "name": "transformer_blocks.48."
      },
      "transformer_blocks_49_": {
        "name": "transformer_blocks.49."
      },
      "transformer_blocks_50_": {
        "name": "transformer_blocks.50."
      },
      "transformer_blocks_51_": {
        "name": "transformer_blocks.51."
      },
      "transformer_blocks_52_": {
        "name": "transformer_blocks.52."
      },
      "transformer_blocks_53_": {
        "name": "transformer_blocks.53."
      },
      "transformer_blocks_54_": {
        "name": "transformer_blocks.54."
      },
      "transformer_blocks_55_": {
        "name": "transformer_blocks.55."
      },
      "transformer_blocks_56_": {
        "name": "transformer_blocks.56."
      },
      "transformer_blocks_57_": {
        "name": "transformer_blocks.57."
      },
      "transformer_blocks_58_": {
        "name": "transformer_blocks.58."
      },
      "transformer_blocks_59_": {
        "name": "transformer_blocks.59."
      },
      "proj_out_": {
        "name": "proj_out."
      }
    }
  },
  "ModelMergeSD1": {
    "display_name": "ModelMergeSD1",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "time_embed_": {
        "name": "time_embed."
      },
      "label_emb_": {
        "name": "label_emb."
      },
      "input_blocks_0_": {
        "name": "input_blocks.0."
      },
      "input_blocks_1_": {
        "name": "input_blocks.1."
      },
      "input_blocks_2_": {
        "name": "input_blocks.2."
      },
      "input_blocks_3_": {
        "name": "input_blocks.3."
      },
      "input_blocks_4_": {
        "name": "input_blocks.4."
      },
      "input_blocks_5_": {
        "name": "input_blocks.5."
      },
      "input_blocks_6_": {
        "name": "input_blocks.6."
      },
      "input_blocks_7_": {
        "name": "input_blocks.7."
      },
      "input_blocks_8_": {
        "name": "input_blocks.8."
      },
      "input_blocks_9_": {
        "name": "input_blocks.9."
      },
      "input_blocks_10_": {
        "name": "input_blocks.10."
      },
      "input_blocks_11_": {
        "name": "input_blocks.11."
      },
      "middle_block_0_": {
        "name": "middle_block.0."
      },
      "middle_block_1_": {
        "name": "middle_block.1."
      },
      "middle_block_2_": {
        "name": "middle_block.2."
      },
      "output_blocks_0_": {
        "name": "output_blocks.0."
      },
      "output_blocks_1_": {
        "name": "output_blocks.1."
      },
      "output_blocks_2_": {
        "name": "output_blocks.2."
      },
      "output_blocks_3_": {
        "name": "output_blocks.3."
      },
      "output_blocks_4_": {
        "name": "output_blocks.4."
      },
      "output_blocks_5_": {
        "name": "output_blocks.5."
      },
      "output_blocks_6_": {
        "name": "output_blocks.6."
      },
      "output_blocks_7_": {
        "name": "output_blocks.7."
      },
      "output_blocks_8_": {
        "name": "output_blocks.8."
      },
      "output_blocks_9_": {
        "name": "output_blocks.9."
      },
      "output_blocks_10_": {
        "name": "output_blocks.10."
      },
      "output_blocks_11_": {
        "name": "output_blocks.11."
      },
      "out_": {
        "name": "out."
      }
    }
  },
  "ModelMergeSD2": {
    "display_name": "ModelMergeSD2",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "time_embed_": {
        "name": "time_embed."
      },
      "label_emb_": {
        "name": "label_emb."
      },
      "input_blocks_0_": {
        "name": "input_blocks.0."
      },
      "input_blocks_1_": {
        "name": "input_blocks.1."
      },
      "input_blocks_2_": {
        "name": "input_blocks.2."
      },
      "input_blocks_3_": {
        "name": "input_blocks.3."
      },
      "input_blocks_4_": {
        "name": "input_blocks.4."
      },
      "input_blocks_5_": {
        "name": "input_blocks.5."
      },
      "input_blocks_6_": {
        "name": "input_blocks.6."
      },
      "input_blocks_7_": {
        "name": "input_blocks.7."
      },
      "input_blocks_8_": {
        "name": "input_blocks.8."
      },
      "input_blocks_9_": {
        "name": "input_blocks.9."
      },
      "input_blocks_10_": {
        "name": "input_blocks.10."
      },
      "input_blocks_11_": {
        "name": "input_blocks.11."
      },
      "middle_block_0_": {
        "name": "middle_block.0."
      },
      "middle_block_1_": {
        "name": "middle_block.1."
      },
      "middle_block_2_": {
        "name": "middle_block.2."
      },
      "output_blocks_0_": {
        "name": "output_blocks.0."
      },
      "output_blocks_1_": {
        "name": "output_blocks.1."
      },
      "output_blocks_2_": {
        "name": "output_blocks.2."
      },
      "output_blocks_3_": {
        "name": "output_blocks.3."
      },
      "output_blocks_4_": {
        "name": "output_blocks.4."
      },
      "output_blocks_5_": {
        "name": "output_blocks.5."
      },
      "output_blocks_6_": {
        "name": "output_blocks.6."
      },
      "output_blocks_7_": {
        "name": "output_blocks.7."
      },
      "output_blocks_8_": {
        "name": "output_blocks.8."
      },
      "output_blocks_9_": {
        "name": "output_blocks.9."
      },
      "output_blocks_10_": {
        "name": "output_blocks.10."
      },
      "output_blocks_11_": {
        "name": "output_blocks.11."
      },
      "out_": {
        "name": "out."
      }
    }
  },
  "ModelMergeSD3_2B": {
    "display_name": "ModelMergeSD3_2B",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "pos_embed_": {
        "name": "pos_embed."
      },
      "x_embedder_": {
        "name": "x_embedder."
      },
      "context_embedder_": {
        "name": "context_embedder."
      },
      "y_embedder_": {
        "name": "y_embedder."
      },
      "t_embedder_": {
        "name": "t_embedder."
      },
      "joint_blocks_0_": {
        "name": "joint_blocks.0."
      },
      "joint_blocks_1_": {
        "name": "joint_blocks.1."
      },
      "joint_blocks_2_": {
        "name": "joint_blocks.2."
      },
      "joint_blocks_3_": {
        "name": "joint_blocks.3."
      },
      "joint_blocks_4_": {
        "name": "joint_blocks.4."
      },
      "joint_blocks_5_": {
        "name": "joint_blocks.5."
      },
      "joint_blocks_6_": {
        "name": "joint_blocks.6."
      },
      "joint_blocks_7_": {
        "name": "joint_blocks.7."
      },
      "joint_blocks_8_": {
        "name": "joint_blocks.8."
      },
      "joint_blocks_9_": {
        "name": "joint_blocks.9."
      },
      "joint_blocks_10_": {
        "name": "joint_blocks.10."
      },
      "joint_blocks_11_": {
        "name": "joint_blocks.11."
      },
      "joint_blocks_12_": {
        "name": "joint_blocks.12."
      },
      "joint_blocks_13_": {
        "name": "joint_blocks.13."
      },
      "joint_blocks_14_": {
        "name": "joint_blocks.14."
      },
      "joint_blocks_15_": {
        "name": "joint_blocks.15."
      },
      "joint_blocks_16_": {
        "name": "joint_blocks.16."
      },
      "joint_blocks_17_": {
        "name": "joint_blocks.17."
      },
      "joint_blocks_18_": {
        "name": "joint_blocks.18."
      },
      "joint_blocks_19_": {
        "name": "joint_blocks.19."
      },
      "joint_blocks_20_": {
        "name": "joint_blocks.20."
      },
      "joint_blocks_21_": {
        "name": "joint_blocks.21."
      },
      "joint_blocks_22_": {
        "name": "joint_blocks.22."
      },
      "joint_blocks_23_": {
        "name": "joint_blocks.23."
      },
      "final_layer_": {
        "name": "final_layer."
      }
    }
  },
  "ModelMergeSD35_Large": {
    "display_name": "ModelMergeSD35_Large",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "pos_embed_": {
        "name": "pos_embed."
      },
      "x_embedder_": {
        "name": "x_embedder."
      },
      "context_embedder_": {
        "name": "context_embedder."
      },
      "y_embedder_": {
        "name": "y_embedder."
      },
      "t_embedder_": {
        "name": "t_embedder."
      },
      "joint_blocks_0_": {
        "name": "joint_blocks.0."
      },
      "joint_blocks_1_": {
        "name": "joint_blocks.1."
      },
      "joint_blocks_2_": {
        "name": "joint_blocks.2."
      },
      "joint_blocks_3_": {
        "name": "joint_blocks.3."
      },
      "joint_blocks_4_": {
        "name": "joint_blocks.4."
      },
      "joint_blocks_5_": {
        "name": "joint_blocks.5."
      },
      "joint_blocks_6_": {
        "name": "joint_blocks.6."
      },
      "joint_blocks_7_": {
        "name": "joint_blocks.7."
      },
      "joint_blocks_8_": {
        "name": "joint_blocks.8."
      },
      "joint_blocks_9_": {
        "name": "joint_blocks.9."
      },
      "joint_blocks_10_": {
        "name": "joint_blocks.10."
      },
      "joint_blocks_11_": {
        "name": "joint_blocks.11."
      },
      "joint_blocks_12_": {
        "name": "joint_blocks.12."
      },
      "joint_blocks_13_": {
        "name": "joint_blocks.13."
      },
      "joint_blocks_14_": {
        "name": "joint_blocks.14."
      },
      "joint_blocks_15_": {
        "name": "joint_blocks.15."
      },
      "joint_blocks_16_": {
        "name": "joint_blocks.16."
      },
      "joint_blocks_17_": {
        "name": "joint_blocks.17."
      },
      "joint_blocks_18_": {
        "name": "joint_blocks.18."
      },
      "joint_blocks_19_": {
        "name": "joint_blocks.19."
      },
      "joint_blocks_20_": {
        "name": "joint_blocks.20."
      },
      "joint_blocks_21_": {
        "name": "joint_blocks.21."
      },
      "joint_blocks_22_": {
        "name": "joint_blocks.22."
      },
      "joint_blocks_23_": {
        "name": "joint_blocks.23."
      },
      "joint_blocks_24_": {
        "name": "joint_blocks.24."
      },
      "joint_blocks_25_": {
        "name": "joint_blocks.25."
      },
      "joint_blocks_26_": {
        "name": "joint_blocks.26."
      },
      "joint_blocks_27_": {
        "name": "joint_blocks.27."
      },
      "joint_blocks_28_": {
        "name": "joint_blocks.28."
      },
      "joint_blocks_29_": {
        "name": "joint_blocks.29."
      },
      "joint_blocks_30_": {
        "name": "joint_blocks.30."
      },
      "joint_blocks_31_": {
        "name": "joint_blocks.31."
      },
      "joint_blocks_32_": {
        "name": "joint_blocks.32."
      },
      "joint_blocks_33_": {
        "name": "joint_blocks.33."
      },
      "joint_blocks_34_": {
        "name": "joint_blocks.34."
      },
      "joint_blocks_35_": {
        "name": "joint_blocks.35."
      },
      "joint_blocks_36_": {
        "name": "joint_blocks.36."
      },
      "joint_blocks_37_": {
        "name": "joint_blocks.37."
      },
      "final_layer_": {
        "name": "final_layer."
      }
    }
  },
  "ModelMergeSDXL": {
    "display_name": "ModelMergeSDXL",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "time_embed_": {
        "name": "time_embed."
      },
      "label_emb_": {
        "name": "label_emb."
      },
      "input_blocks_0": {
        "name": "input_blocks.0"
      },
      "input_blocks_1": {
        "name": "input_blocks.1"
      },
      "input_blocks_2": {
        "name": "input_blocks.2"
      },
      "input_blocks_3": {
        "name": "input_blocks.3"
      },
      "input_blocks_4": {
        "name": "input_blocks.4"
      },
      "input_blocks_5": {
        "name": "input_blocks.5"
      },
      "input_blocks_6": {
        "name": "input_blocks.6"
      },
      "input_blocks_7": {
        "name": "input_blocks.7"
      },
      "input_blocks_8": {
        "name": "input_blocks.8"
      },
      "middle_block_0": {
        "name": "middle_block.0"
      },
      "middle_block_1": {
        "name": "middle_block.1"
      },
      "middle_block_2": {
        "name": "middle_block.2"
      },
      "output_blocks_0": {
        "name": "output_blocks.0"
      },
      "output_blocks_1": {
        "name": "output_blocks.1"
      },
      "output_blocks_2": {
        "name": "output_blocks.2"
      },
      "output_blocks_3": {
        "name": "output_blocks.3"
      },
      "output_blocks_4": {
        "name": "output_blocks.4"
      },
      "output_blocks_5": {
        "name": "output_blocks.5"
      },
      "output_blocks_6": {
        "name": "output_blocks.6"
      },
      "output_blocks_7": {
        "name": "output_blocks.7"
      },
      "output_blocks_8": {
        "name": "output_blocks.8"
      },
      "out_": {
        "name": "out."
      }
    }
  },
  "ModelMergeSimple": {
    "display_name": "ModelMergeSimple",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "ratio": {
        "name": "ratio"
      }
    }
  },
  "ModelMergeSubtract": {
    "display_name": "ModelMergeSubtract",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "multiplier": {
        "name": "multiplier"
      }
    }
  },
  "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.",
    "inputs": {
      "model1": {
        "name": "model1"
      },
      "model2": {
        "name": "model2"
      },
      "patch_embedding_": {
        "name": "patch_embedding."
      },
      "time_embedding_": {
        "name": "time_embedding."
      },
      "time_projection_": {
        "name": "time_projection."
      },
      "text_embedding_": {
        "name": "text_embedding."
      },
      "img_emb_": {
        "name": "img_emb."
      },
      "blocks_0_": {
        "name": "blocks.0."
      },
      "blocks_1_": {
        "name": "blocks.1."
      },
      "blocks_2_": {
        "name": "blocks.2."
      },
      "blocks_3_": {
        "name": "blocks.3."
      },
      "blocks_4_": {
        "name": "blocks.4."
      },
      "blocks_5_": {
        "name": "blocks.5."
      },
      "blocks_6_": {
        "name": "blocks.6."
      },
      "blocks_7_": {
        "name": "blocks.7."
      },
      "blocks_8_": {
        "name": "blocks.8."
      },
      "blocks_9_": {
        "name": "blocks.9."
      },
      "blocks_10_": {
        "name": "blocks.10."
      },
      "blocks_11_": {
        "name": "blocks.11."
      },
      "blocks_12_": {
        "name": "blocks.12."
      },
      "blocks_13_": {
        "name": "blocks.13."
      },
      "blocks_14_": {
        "name": "blocks.14."
      },
      "blocks_15_": {
        "name": "blocks.15."
      },
      "blocks_16_": {
        "name": "blocks.16."
      },
      "blocks_17_": {
        "name": "blocks.17."
      },
      "blocks_18_": {
        "name": "blocks.18."
      },
      "blocks_19_": {
        "name": "blocks.19."
      },
      "blocks_20_": {
        "name": "blocks.20."
      },
      "blocks_21_": {
        "name": "blocks.21."
      },
      "blocks_22_": {
        "name": "blocks.22."
      },
      "blocks_23_": {
        "name": "blocks.23."
      },
      "blocks_24_": {
        "name": "blocks.24."
      },
      "blocks_25_": {
        "name": "blocks.25."
      },
      "blocks_26_": {
        "name": "blocks.26."
      },
      "blocks_27_": {
        "name": "blocks.27."
      },
      "blocks_28_": {
        "name": "blocks.28."
      },
      "blocks_29_": {
        "name": "blocks.29."
      },
      "blocks_30_": {
        "name": "blocks.30."
      },
      "blocks_31_": {
        "name": "blocks.31."
      },
      "blocks_32_": {
        "name": "blocks.32."
      },
      "blocks_33_": {
        "name": "blocks.33."
      },
      "blocks_34_": {
        "name": "blocks.34."
      },
      "blocks_35_": {
        "name": "blocks.35."
      },
      "blocks_36_": {
        "name": "blocks.36."
      },
      "blocks_37_": {
        "name": "blocks.37."
      },
      "blocks_38_": {
        "name": "blocks.38."
      },
      "blocks_39_": {
        "name": "blocks.39."
      },
      "head_": {
        "name": "head."
      }
    }
  },
  "ModelNoiseScale": {
    "display_name": "ModelNoiseScale",
    "inputs": {
      "model": {
        "name": "model"
      },
      "noise_scale": {
        "name": "noise_scale",
        "tooltip": "Absolute training noise scale. For example HiDream-O1 base: 8.0, dev: 7.5."
      }
    }
  },
  "ModelPatchLoader": {
    "display_name": "Load Model Patch",
    "inputs": {
      "name": {
        "name": "name"
      }
    }
  },
  "ModelSamplingAuraFlow": {
    "display_name": "ModelSamplingAuraFlow",
    "inputs": {
      "model": {
        "name": "model"
      },
      "shift": {
        "name": "shift"
      }
    }
  },
  "ModelSamplingContinuousEDM": {
    "display_name": "ModelSamplingContinuousEDM",
    "inputs": {
      "model": {
        "name": "model"
      },
      "sampling": {
        "name": "sampling"
      },
      "sigma_max": {
        "name": "sigma_max"
      },
      "sigma_min": {
        "name": "sigma_min"
      }
    }
  },
  "ModelSamplingContinuousV": {
    "display_name": "ModelSamplingContinuousV",
    "inputs": {
      "model": {
        "name": "model"
      },
      "sampling": {
        "name": "sampling"
      },
      "sigma_max": {
        "name": "sigma_max"
      },
      "sigma_min": {
        "name": "sigma_min"
      }
    }
  },
  "ModelSamplingDiscrete": {
    "display_name": "ModelSamplingDiscrete",
    "inputs": {
      "model": {
        "name": "model"
      },
      "sampling": {
        "name": "sampling"
      },
      "zsnr": {
        "name": "zsnr"
      }
    }
  },
  "ModelSamplingFlux": {
    "display_name": "ModelSamplingFlux",
    "inputs": {
      "model": {
        "name": "model"
      },
      "max_shift": {
        "name": "max_shift"
      },
      "base_shift": {
        "name": "base_shift"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      }
    }
  },
  "ModelSamplingLTXV": {
    "display_name": "ModelSamplingLTXV",
    "inputs": {
      "model": {
        "name": "model"
      },
      "max_shift": {
        "name": "max_shift"
      },
      "base_shift": {
        "name": "base_shift"
      },
      "latent": {
        "name": "latent"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ModelSamplingSD3": {
    "display_name": "ModelSamplingSD3",
    "inputs": {
      "model": {
        "name": "model"
      },
      "shift": {
        "name": "shift"
      }
    }
  },
  "ModelSamplingStableCascade": {
    "display_name": "ModelSamplingStableCascade",
    "inputs": {
      "model": {
        "name": "model"
      },
      "shift": {
        "name": "shift"
      }
    }
  },
  "ModelSave": {
    "display_name": "ModelSave",
    "inputs": {
      "model": {
        "name": "model"
      },
      "filename_prefix": {
        "name": "filename_prefix"
      }
    }
  },
  "MoGeInference": {
    "display_name": "Run MoGe Inference",
    "description": "Run MoGe on a single image to estimate depth and geometry.",
    "inputs": {
      "moge_model": {
        "name": "moge_model"
      },
      "image": {
        "name": "image"
      },
      "resolution_level": {
        "name": "resolution_level",
        "tooltip": "0 = fastest, 9 = most detail."
      },
      "fov_x_degrees": {
        "name": "fov_x_degrees",
        "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."
      },
      "batch_size": {
        "name": "batch_size",
        "tooltip": "Images per inference call. Lower if you OOM on a long video / image set."
      },
      "force_projection": {
        "name": "force_projection"
      },
      "apply_mask": {
        "name": "apply_mask",
        "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."
      }
    },
    "outputs": {
      "0": {
        "name": "moge_geometry",
        "tooltip": null
      }
    }
  },
  "MoGePanoramaInference": {
    "display_name": "Run MoGe Panorama Inference",
    "description": "Run MoGe on an equirectangular panorama by splitting it into 12 perspective views, running inference on each, and merging the results into a single depth map.",
    "inputs": {
      "moge_model": {
        "name": "moge_model"
      },
      "image": {
        "name": "image",
        "tooltip": "Equirectangular panorama (any aspect)."
      },
      "resolution_level": {
        "name": "resolution_level",
        "tooltip": "Per-view detail (0 = fastest, 9 = most detailed)."
      },
      "split_resolution": {
        "name": "split_resolution",
        "tooltip": "Resolution of each perspective split."
      },
      "merge_resolution": {
        "name": "merge_resolution",
        "tooltip": "Long-side resolution of the merged equirect distance map."
      },
      "batch_size": {
        "name": "batch_size",
        "tooltip": "Views per inference batch (12 splits total)."
      }
    },
    "outputs": {
      "0": {
        "name": "moge_geometry",
        "tooltip": null
      }
    }
  },
  "MoGePointMapToMesh": {
    "display_name": "Convert MoGe Point Map to Mesh",
    "description": "Convert a MoGe point map into a 3D mesh.",
    "inputs": {
      "moge_geometry": {
        "name": "moge_geometry"
      },
      "batch_index": {
        "name": "batch_index",
        "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."
      },
      "decimation": {
        "name": "decimation",
        "tooltip": "Vertex stride; 1 = full resolution."
      },
      "discontinuity_threshold": {
        "name": "discontinuity_threshold",
        "tooltip": "Drop pixels whose 3x3 depth span exceeds this fraction. 0 = off."
      },
      "texture": {
        "name": "texture",
        "tooltip": "Carry the source image through as the baseColor texture."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MoGeRender": {
    "display_name": "Render MoGe Geometry",
    "description": "Render a depth map or normal map from geometry data",
    "inputs": {
      "moge_geometry": {
        "name": "moge_geometry"
      },
      "output": {
        "name": "output",
        "tooltip": "DirectX vs OpenGL controls the normal-map green-channel convention. DirectX: green = -Y down (Unreal). OpenGL: green = +Y up (Blender, Substance, Unity, glTF)."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Morphology": {
    "display_name": "Apply Morphology",
    "inputs": {
      "image": {
        "name": "image"
      },
      "operation": {
        "name": "operation"
      },
      "kernel_size": {
        "name": "kernel_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "MultiGPU_WorkUnits": {
    "display_name": "MultiGPU CFG Split",
    "description": "Prepares model to have sampling accelerated via splitting work units.\n\nShould be placed after nodes that modify the model object itself, such as compile or attention-switch nodes.\n\nOther than those exceptions, this node can be placed in any order.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "max_gpus": {
        "name": "max_gpus"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "NAGuidance": {
    "display_name": "Normalized Attention Guidance",
    "description": "Applies Normalized Attention Guidance to models, enabling negative prompts on distilled/schnell models.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The model to apply NAG to."
      },
      "nag_scale": {
        "name": "nag_scale",
        "tooltip": "The guidance scale factor. Higher values push further from the negative prompt."
      },
      "nag_alpha": {
        "name": "nag_alpha",
        "tooltip": "Blending factor for the normalized attention. 1.0 is full replacement, 0.0 is no effect."
      },
      "nag_tau": {
        "name": "nag_tau"
      }
    },
    "outputs": {
      "0": {
        "tooltip": "The patched model with NAG enabled."
      }
    }
  },
  "NormalizeImages": {
    "display_name": "Normalize Image Colors",
    "description": "Normalize images using mean and standard deviation.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "Image to process."
      },
      "mean": {
        "name": "mean",
        "tooltip": "Mean value for normalization."
      },
      "std": {
        "name": "std",
        "tooltip": "Standard deviation for normalization."
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": "Processed images"
      }
    }
  },
  "NormalizeVideoLatentStart": {
    "display_name": "NormalizeVideoLatentStart",
    "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.",
    "inputs": {
      "latent": {
        "name": "latent"
      },
      "start_frame_count": {
        "name": "start_frame_count",
        "tooltip": "Number of latent frames to normalize, counted from the start"
      },
      "reference_frame_count": {
        "name": "reference_frame_count",
        "tooltip": "Number of latent frames after the start frames to use as reference"
      }
    },
    "outputs": {
      "0": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "OpenAIChatConfig": {
    "display_name": "OpenAI ChatGPT Advanced Options",
    "description": "Allows specifying advanced configuration options for the OpenAI Chat Nodes.",
    "inputs": {
      "truncation": {
        "name": "truncation",
        "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"
      },
      "max_output_tokens": {
        "name": "max_output_tokens",
        "tooltip": "An upper bound for the number of tokens that can be generated for a response, including visible output tokens"
      },
      "instructions": {
        "name": "instructions",
        "tooltip": "Instructions for the model on how to generate the response"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "OpenAIChatNode": {
    "display_name": "OpenAI ChatGPT",
    "description": "Generate text responses from an OpenAI model.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text inputs to the model, used to generate a response."
      },
      "persist_context": {
        "name": "persist_context",
        "tooltip": "This parameter is deprecated and has no effect."
      },
      "model": {
        "name": "model",
        "tooltip": "The model used to generate the response"
      },
      "images": {
        "name": "images",
        "tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node."
      },
      "files": {
        "name": "files",
        "tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the OpenAI Chat Input Files node."
      },
      "advanced_options": {
        "name": "advanced_options",
        "tooltip": "Optional configuration for the model. Accepts inputs from the OpenAI Chat Advanced Options node."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "OpenAIDalle2": {
    "display_name": "OpenAI DALL·E 2",
    "description": "Generates images synchronously via OpenAI's DALL·E 2 endpoint.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for DALL·E"
      },
      "seed": {
        "name": "seed",
        "tooltip": "not implemented yet in backend"
      },
      "size": {
        "name": "size",
        "tooltip": "Image size"
      },
      "n": {
        "name": "n",
        "tooltip": "How many images to generate"
      },
      "image": {
        "name": "image",
        "tooltip": "Optional reference image for image editing."
      },
      "mask": {
        "name": "mask",
        "tooltip": "Optional mask for inpainting (white areas will be replaced)"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "OpenAIDalle3": {
    "display_name": "OpenAI DALL·E 3",
    "description": "Generates images synchronously via OpenAI's DALL·E 3 endpoint.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for DALL·E"
      },
      "seed": {
        "name": "seed",
        "tooltip": "not implemented yet in backend"
      },
      "quality": {
        "name": "quality",
        "tooltip": "Image quality"
      },
      "style": {
        "name": "style",
        "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."
      },
      "size": {
        "name": "size",
        "tooltip": "Image size"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "OpenAIGPTImage1": {
    "display_name": "OpenAI GPT Image 2",
    "description": "Generates images synchronously via OpenAI's GPT Image endpoint.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for GPT Image"
      },
      "seed": {
        "name": "seed",
        "tooltip": "not implemented yet in backend"
      },
      "quality": {
        "name": "quality",
        "tooltip": "Image quality, affects cost and generation time."
      },
      "background": {
        "name": "background",
        "tooltip": "Return image with or without background"
      },
      "size": {
        "name": "size",
        "tooltip": "Image size. Select 'Custom' to use the custom width and height (GPT Image 2 only)."
      },
      "n": {
        "name": "n",
        "tooltip": "How many images to generate"
      },
      "image": {
        "name": "image",
        "tooltip": "Optional reference image for image editing."
      },
      "mask": {
        "name": "mask",
        "tooltip": "Optional mask for inpainting (white areas will be replaced)"
      },
      "model": {
        "name": "model"
      },
      "custom_width": {
        "name": "custom_width",
        "tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16 (GPT Image 2 only)."
      },
      "custom_height": {
        "name": "custom_height",
        "tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16 (GPT Image 2 only)."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "OpenAIGPTImageNodeV2": {
    "display_name": "OpenAI GPT Image 2",
    "description": "Generates images via OpenAI's GPT Image endpoint.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for GPT Image"
      },
      "model": {
        "name": "model"
      },
      "n": {
        "name": "n",
        "tooltip": "How many images to generate"
      },
      "seed": {
        "name": "seed",
        "tooltip": "not implemented yet in backend"
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_background": {
        "name": "background"
      },
      "model_custom_height": {
        "name": "custom_height"
      },
      "model_custom_width": {
        "name": "custom_width"
      },
      "model_quality": {
        "name": "quality"
      },
      "model_size": {
        "name": "size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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. 🛈 TIP: Can be chained together with other OpenAI Input File nodes.",
    "inputs": {
      "file": {
        "name": "file",
        "tooltip": "Input files to include as context for the model. Only accepts text (.txt) and PDF (.pdf) files for now."
      },
      "OPENAI_INPUT_FILES": {
        "name": "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."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Guiding text; may be empty if an input image is present."
      },
      "size": {
        "name": "size"
      },
      "duration": {
        "name": "duration"
      },
      "image": {
        "name": "image"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "OpenRouterLLMNode": {
    "display_name": "OpenRouter LLM",
    "description": "Generate text responses through OpenRouter. Routes to a curated set of popular models from Anthropic (Claude), OpenAI (GPT), Google (Gemini), xAI (Grok), DeepSeek, Qwen, Mistral, Z.AI (GLM), Moonshot (Kimi), and Perplexity Sonar.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text input to the model."
      },
      "model": {
        "name": "model",
        "tooltip": "The OpenRouter model used to generate the response."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for sampling. Set to 0 to omit. Most models treat this as a hint only."
      },
      "system_prompt": {
        "name": "system_prompt",
        "tooltip": "Foundational instructions that dictate the model's behavior."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_reasoning_effort": {
        "name": "reasoning_effort"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "OpticalFlowLoader": {
    "display_name": "Load Optical Flow Model",
    "inputs": {
      "model_name": {
        "name": "model_name",
        "tooltip": "Optical flow model to load.  Files must be placed in the 'optical_flow' folder.  Today only torchvision's raft_large.pth is supported."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "OptimalStepsScheduler": {
    "display_name": "OptimalStepsScheduler",
    "inputs": {
      "model_type": {
        "name": "model_type"
      },
      "steps": {
        "name": "steps"
      },
      "denoise": {
        "name": "denoise"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Painter": {
    "display_name": "Painter",
    "inputs": {
      "mask": {
        "name": "mask"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "bg_color": {
        "name": "bg_color"
      },
      "image": {
        "name": "image",
        "tooltip": "Optional base image to paint over"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "tooltip": null
      }
    }
  },
  "PairConditioningCombine": {
    "display_name": "Cond Pair Combine",
    "inputs": {
      "positive_A": {
        "name": "positive_A"
      },
      "negative_A": {
        "name": "negative_A"
      },
      "positive_B": {
        "name": "positive_B"
      },
      "negative_B": {
        "name": "negative_B"
      }
    },
    "outputs": {
      "0": {
        "name": "positive"
      },
      "1": {
        "name": "negative"
      }
    }
  },
  "PairConditioningSetDefaultCombine": {
    "display_name": "Cond Pair Set Default Combine",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "positive_DEFAULT": {
        "name": "positive_DEFAULT"
      },
      "negative_DEFAULT": {
        "name": "negative_DEFAULT"
      },
      "hooks": {
        "name": "hooks"
      }
    },
    "outputs": {
      "0": {
        "name": "positive"
      },
      "1": {
        "name": "negative"
      }
    }
  },
  "PairConditioningSetProperties": {
    "display_name": "Cond Pair Set Props",
    "inputs": {
      "positive_NEW": {
        "name": "positive_NEW"
      },
      "negative_NEW": {
        "name": "negative_NEW"
      },
      "strength": {
        "name": "strength"
      },
      "set_cond_area": {
        "name": "set_cond_area"
      },
      "mask": {
        "name": "mask"
      },
      "hooks": {
        "name": "hooks"
      },
      "timesteps": {
        "name": "timesteps"
      }
    },
    "outputs": {
      "0": {
        "name": "positive"
      },
      "1": {
        "name": "negative"
      }
    }
  },
  "PairConditioningSetPropertiesAndCombine": {
    "display_name": "Cond Pair Set Props Combine",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "positive_NEW": {
        "name": "positive_NEW"
      },
      "negative_NEW": {
        "name": "negative_NEW"
      },
      "strength": {
        "name": "strength"
      },
      "set_cond_area": {
        "name": "set_cond_area"
      },
      "mask": {
        "name": "mask"
      },
      "hooks": {
        "name": "hooks"
      },
      "timesteps": {
        "name": "timesteps"
      }
    },
    "outputs": {
      "0": {
        "name": "positive"
      },
      "1": {
        "name": "negative"
      }
    }
  },
  "PatchModelAddDownscale": {
    "display_name": "PatchModelAddDownscale (Kohya Deep Shrink)",
    "inputs": {
      "model": {
        "name": "model"
      },
      "block_number": {
        "name": "block_number"
      },
      "downscale_factor": {
        "name": "downscale_factor"
      },
      "start_percent": {
        "name": "start_percent"
      },
      "end_percent": {
        "name": "end_percent"
      },
      "downscale_after_skip": {
        "name": "downscale_after_skip"
      },
      "downscale_method": {
        "name": "downscale_method"
      },
      "upscale_method": {
        "name": "upscale_method"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "PerpNeg": {
    "display_name": "Perp-Neg (DEPRECATED by Perp-Neg Guider)",
    "inputs": {
      "model": {
        "name": "model"
      },
      "empty_conditioning": {
        "name": "empty_conditioning"
      },
      "neg_scale": {
        "name": "neg_scale"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "PerpNegGuider": {
    "display_name": "Perp-Neg Guider",
    "inputs": {
      "model": {
        "name": "model"
      },
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "empty_conditioning": {
        "name": "empty_conditioning"
      },
      "cfg": {
        "name": "cfg"
      },
      "neg_scale": {
        "name": "neg_scale"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "PerturbedAttentionGuidance": {
    "display_name": "PerturbedAttentionGuidance",
    "inputs": {
      "model": {
        "name": "model"
      },
      "scale": {
        "name": "scale"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "PhotoMakerEncode": {
    "display_name": "PhotoMaker Encode",
    "inputs": {
      "photomaker": {
        "name": "photomaker"
      },
      "image": {
        "name": "image"
      },
      "clip": {
        "name": "clip"
      },
      "text": {
        "name": "text"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "PhotoMakerLoader": {
    "display_name": "Load PhotoMaker Model",
    "inputs": {
      "photomaker_model_name": {
        "name": "photomaker_model_name"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "PiDConditioning": {
    "display_name": "PiD Conditioning",
    "description": "Attaches a latent and a degrade_sigma scalar to a CONDITIONING for PiD decoding/upscaling",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "latent": {
        "name": "latent",
        "tooltip": "latent (from VAEEncode or a KSampler)."
      },
      "latent_format": {
        "name": "latent_format",
        "tooltip": "Flux1 (16-ch) and Flux2 (128-ch) latents are auto-detected from channel dim under 'flux'. For SD3 (16-ch), SDXL (4-ch), or QwenImage (16-ch), select manually."
      },
      "degrade_sigma": {
        "name": "degrade_sigma",
        "tooltip": "0 = clean latent. Increase to denoise corrupted latent outputs."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "PixverseImageToVideoNode": {
    "display_name": "PixVerse Image to Video",
    "description": "Generates videos based on prompt and output_size.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the video generation"
      },
      "quality": {
        "name": "quality"
      },
      "duration_seconds": {
        "name": "duration_seconds"
      },
      "motion_mode": {
        "name": "motion_mode"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for video generation."
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "An optional text description of undesired elements on an image."
      },
      "pixverse_template": {
        "name": "pixverse_template",
        "tooltip": "An optional template to influence style of generation, created by the PixVerse Template node."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "PixverseTemplateNode": {
    "display_name": "PixVerse Template",
    "inputs": {
      "template": {
        "name": "template"
      }
    },
    "outputs": {
      "0": {
        "name": "pixverse_template",
        "tooltip": null
      }
    }
  },
  "PixverseTextToVideoNode": {
    "display_name": "PixVerse Text to Video",
    "description": "Generates videos based on prompt and output_size.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the video generation"
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "quality": {
        "name": "quality"
      },
      "duration_seconds": {
        "name": "duration_seconds"
      },
      "motion_mode": {
        "name": "motion_mode"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for video generation."
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "An optional text description of undesired elements on an image."
      },
      "pixverse_template": {
        "name": "pixverse_template",
        "tooltip": "An optional template to influence style of generation, created by the PixVerse Template node."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "PixverseTransitionVideoNode": {
    "display_name": "PixVerse Transition Video",
    "description": "Generates videos based on prompt and output_size.",
    "inputs": {
      "first_frame": {
        "name": "first_frame"
      },
      "last_frame": {
        "name": "last_frame"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the video generation"
      },
      "quality": {
        "name": "quality"
      },
      "duration_seconds": {
        "name": "duration_seconds"
      },
      "motion_mode": {
        "name": "motion_mode"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for video generation."
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "An optional text description of undesired elements on an image."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "PolyexponentialScheduler": {
    "display_name": "PolyexponentialScheduler",
    "inputs": {
      "steps": {
        "name": "steps"
      },
      "sigma_max": {
        "name": "sigma_max"
      },
      "sigma_min": {
        "name": "sigma_min"
      },
      "rho": {
        "name": "rho"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "PorterDuffImageComposite": {
    "display_name": "Porter-Duff Image Composite",
    "inputs": {
      "source": {
        "name": "source"
      },
      "source_alpha": {
        "name": "source_alpha"
      },
      "destination": {
        "name": "destination"
      },
      "destination_alpha": {
        "name": "destination_alpha"
      },
      "mode": {
        "name": "mode"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "tooltip": null
      }
    }
  },
  "Preview3D": {
    "display_name": "Preview 3D & Animation",
    "description": "Preview a 3D model file without saving it to the ComfyUI output directory.",
    "inputs": {
      "model_file": {
        "name": "model_file",
        "tooltip": "3D model file or path string"
      },
      "camera_info": {
        "name": "camera_info"
      },
      "bg_image": {
        "name": "bg_image"
      },
      "image": {
        "name": "image"
      }
    }
  },
  "Preview3DAdvanced": {
    "display_name": "Preview 3D (Advanced)",
    "description": "Preview a 3D model file without saving it to the ComfyUI output directory.",
    "inputs": {
      "model_3d": {
        "name": "model_3d",
        "tooltip": "3D model file from an upstream 3D node."
      },
      "viewport_state": {
        "name": "viewport_state"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "model_3d_info": {
        "name": "model_3d_info"
      },
      "camera_info": {
        "name": "camera_info"
      }
    },
    "outputs": {
      "0": {
        "name": "model_3d",
        "tooltip": null
      },
      "1": {
        "name": "model_3d_info",
        "tooltip": null
      },
      "2": {
        "name": "camera_info",
        "tooltip": null
      },
      "3": {
        "name": "width",
        "tooltip": null
      },
      "4": {
        "name": "height",
        "tooltip": null
      }
    }
  },
  "PreviewAny": {
    "display_name": "Preview as Text",
    "description": "Preview any input value as text.",
    "inputs": {
      "source": {
        "name": "source"
      },
      "preview_mode": {},
      "preview_text": {}
    }
  },
  "PreviewAudio": {
    "display_name": "Preview Audio",
    "description": "Preview the audio without saving it to the ComfyUI output directory.",
    "inputs": {
      "audio": {
        "name": "audio"
      },
      "audioUI": {
        "name": "audioUI"
      }
    },
    "outputs": {
      "0": {
        "name": "audio",
        "tooltip": null
      }
    }
  },
  "PreviewGaussianSplat": {
    "display_name": "Preview Splat",
    "description": "Preview a gaussian splat 3D file without saving it to the ComfyUI output directory.",
    "inputs": {
      "model_3d": {
        "name": "model_3d",
        "tooltip": "A gaussian splat 3D file."
      },
      "viewport_state": {
        "name": "viewport_state"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "model_3d_info": {
        "name": "model_3d_info"
      },
      "camera_info": {
        "name": "camera_info"
      }
    },
    "outputs": {
      "0": {
        "name": "model_3d",
        "tooltip": null
      },
      "1": {
        "name": "model_3d_info",
        "tooltip": null
      },
      "2": {
        "name": "camera_info",
        "tooltip": null
      },
      "3": {
        "name": "width",
        "tooltip": null
      },
      "4": {
        "name": "height",
        "tooltip": null
      }
    }
  },
  "PreviewImage": {
    "display_name": "Preview Image",
    "description": "Preview the images without saving them to the ComfyUI output directory.",
    "inputs": {
      "images": {
        "name": "images"
      }
    },
    "outputs": {
      "0": {
        "name": "images"
      }
    }
  },
  "PreviewPointCloud": {
    "display_name": "Preview Point Cloud",
    "description": "Preview a point cloud 3D file without saving it to the ComfyUI output directory.",
    "inputs": {
      "model_3d": {
        "name": "model_3d",
        "tooltip": "Point cloud file (.ply)"
      },
      "viewport_state": {
        "name": "viewport_state"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "model_3d_info": {
        "name": "model_3d_info"
      },
      "camera_info": {
        "name": "camera_info"
      }
    },
    "outputs": {
      "0": {
        "name": "model_3d",
        "tooltip": null
      },
      "1": {
        "name": "model_3d_info",
        "tooltip": null
      },
      "2": {
        "name": "camera_info",
        "tooltip": null
      },
      "3": {
        "name": "width",
        "tooltip": null
      },
      "4": {
        "name": "height",
        "tooltip": null
      }
    }
  },
  "PrimitiveBoolean": {
    "display_name": "Boolean",
    "inputs": {
      "value": {
        "name": "value"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "PrimitiveBoundingBox": {
    "display_name": "Bounding Box",
    "inputs": {
      "x": {
        "name": "x"
      },
      "y": {
        "name": "y"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "PrimitiveFloat": {
    "display_name": "Float",
    "inputs": {
      "value": {
        "name": "value"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "PrimitiveInt": {
    "display_name": "Int",
    "inputs": {
      "value": {
        "name": "value"
      },
      "fixed": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "PrimitiveString": {
    "display_name": "Text",
    "inputs": {
      "value": {
        "name": "value"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "PrimitiveStringMultiline": {
    "display_name": "Text (Multiline)",
    "inputs": {
      "value": {
        "name": "value"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "QuadrupleCLIPLoader": {
    "display_name": "Load CLIP (Quadruple)",
    "description": "Recipes:\nhidream: long clip-l, long clip-g, t5xxl, llama_8b_3.1_instruct",
    "inputs": {
      "clip_name1": {
        "name": "clip_name1"
      },
      "clip_name2": {
        "name": "clip_name2"
      },
      "clip_name3": {
        "name": "clip_name3"
      },
      "clip_name4": {
        "name": "clip_name4"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "QuiverImageToSVGNode": {
    "display_name": "Quiver Image to SVG",
    "description": "Vectorize a raster image into SVG using Quiver AI.",
    "inputs": {
      "image": {
        "name": "image",
        "tooltip": "Input image to vectorize."
      },
      "auto_crop": {
        "name": "auto_crop",
        "tooltip": "Automatically crop to the dominant subject."
      },
      "model": {
        "name": "model",
        "tooltip": "Model to use for SVG vectorization."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_presence_penalty": {
        "name": "presence_penalty"
      },
      "model_target_size": {
        "name": "target_size"
      },
      "model_temperature": {
        "name": "temperature"
      },
      "model_top_p": {
        "name": "top_p"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "QuiverTextToSVGNode": {
    "display_name": "Quiver Text to SVG",
    "description": "Generate an SVG from a text prompt using Quiver AI.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text description of the desired SVG output."
      },
      "model": {
        "name": "model",
        "tooltip": "Model to use for SVG generation."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "instructions": {
        "name": "instructions",
        "tooltip": "Additional style or formatting guidance."
      },
      "reference_images": {
        "name": "reference_images",
        "tooltip": "Up to 4 reference images to guide the generation."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_presence_penalty": {
        "name": "presence_penalty"
      },
      "model_temperature": {
        "name": "temperature"
      },
      "model_top_p": {
        "name": "top_p"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "QwenImageDiffsynthControlnet": {
    "display_name": "Apply Qwen Image DiffSynth ControlNet",
    "inputs": {
      "model": {
        "name": "model"
      },
      "model_patch": {
        "name": "model_patch"
      },
      "vae": {
        "name": "vae"
      },
      "image": {
        "name": "image"
      },
      "strength": {
        "name": "strength"
      },
      "mask": {
        "name": "mask"
      }
    }
  },
  "RandomCropImages": {
    "display_name": "Crop Image (Random)",
    "description": "Randomly crop an image to the specified dimensions.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "Image to process."
      },
      "width": {
        "name": "width",
        "tooltip": "Crop width."
      },
      "height": {
        "name": "height",
        "tooltip": "Crop height."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Random seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": "Processed images"
      }
    }
  },
  "RandomNoise": {
    "display_name": "RandomNoise",
    "inputs": {
      "noise_seed": {
        "name": "noise_seed"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RebatchImages": {
    "display_name": "Rebatch Images",
    "inputs": {
      "images": {
        "name": "images"
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RebatchLatents": {
    "display_name": "Rebatch Latents",
    "inputs": {
      "latents": {
        "name": "latents"
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RecordAudio": {
    "display_name": "Record Audio",
    "inputs": {
      "audio": {
        "name": "audio"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RecraftColorRGB": {
    "display_name": "Recraft Color RGB",
    "description": "Create Recraft Color by choosing specific RGB values.",
    "inputs": {
      "r": {
        "name": "r",
        "tooltip": "Red value of color."
      },
      "g": {
        "name": "g",
        "tooltip": "Green value of color."
      },
      "b": {
        "name": "b",
        "tooltip": "Blue value of color."
      },
      "recraft_color": {
        "name": "recraft_color"
      }
    },
    "outputs": {
      "0": {
        "name": "recraft_color",
        "tooltip": null
      }
    }
  },
  "RecraftControls": {
    "display_name": "Recraft Controls",
    "description": "Create Recraft Controls for customizing Recraft generation.",
    "inputs": {
      "colors": {
        "name": "colors"
      },
      "background_color": {
        "name": "background_color"
      }
    },
    "outputs": {
      "0": {
        "name": "recraft_controls",
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "style": {
        "name": "style",
        "tooltip": "The base style of the generated images."
      },
      "images": {
        "name": "images"
      }
    },
    "outputs": {
      "0": {
        "name": "style_id",
        "tooltip": null
      }
    }
  },
  "RecraftCreativeUpscaleNode": {
    "display_name": "Recraft Creative Upscale Image",
    "description": "Upscale image synchronously.\nEnhances a given raster image using ‘creative upscale’ tool, boosting resolution with a focus on refining small details and faces.",
    "inputs": {
      "image": {
        "name": "image"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RecraftCrispUpscaleNode": {
    "display_name": "Recraft Crisp Upscale Image",
    "description": "Upscale image synchronously.\nEnhances a given raster image using ‘crisp upscale’ tool, increasing image resolution, making the image sharper and cleaner.",
    "inputs": {
      "image": {
        "name": "image"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RecraftImageInpaintingNode": {
    "display_name": "Recraft Image Inpainting",
    "description": "Modify image based on prompt and mask.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "mask": {
        "name": "mask"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation."
      },
      "n": {
        "name": "n",
        "tooltip": "The number of images to generate."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "recraft_style": {
        "name": "recraft_style"
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "An optional text description of undesired elements on an image."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RecraftImageToImageNode": {
    "display_name": "Recraft V3 Image to Image",
    "description": "Modify image based on prompt and strength.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation."
      },
      "n": {
        "name": "n",
        "tooltip": "The number of images to generate."
      },
      "strength": {
        "name": "strength",
        "tooltip": "Defines the difference with the original image, should lie in [0, 1], where 0 means almost identical, and 1 means miserable similarity."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "recraft_style": {
        "name": "recraft_style"
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "An optional text description of undesired elements on an image."
      },
      "recraft_controls": {
        "name": "recraft_controls",
        "tooltip": "Optional additional controls over the generation via the Recraft Controls node."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RecraftRemoveBackgroundNode": {
    "display_name": "Recraft Remove Background",
    "description": "Remove background from image, and return processed image and mask.",
    "inputs": {
      "image": {
        "name": "image"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "tooltip": null
      }
    }
  },
  "RecraftReplaceBackgroundNode": {
    "display_name": "Recraft Replace Background",
    "description": "Replace background on image, based on provided prompt.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation."
      },
      "n": {
        "name": "n",
        "tooltip": "The number of images to generate."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "recraft_style": {
        "name": "recraft_style"
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "An optional text description of undesired elements on an image."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RecraftStyleV3DigitalIllustration": {
    "display_name": "Recraft Style - Digital Illustration",
    "description": "Select realistic_image style and optional substyle.",
    "inputs": {
      "substyle": {
        "name": "substyle"
      }
    },
    "outputs": {
      "0": {
        "name": "recraft_style",
        "tooltip": null
      }
    }
  },
  "RecraftStyleV3InfiniteStyleLibrary": {
    "display_name": "Recraft Style - Infinite Style Library",
    "description": "Choose style based on preexisting UUID from Recraft's Infinite Style Library.",
    "inputs": {
      "style_id": {
        "name": "style_id",
        "tooltip": "UUID of style from Infinite Style Library."
      }
    },
    "outputs": {
      "0": {
        "name": "recraft_style",
        "tooltip": null
      }
    }
  },
  "RecraftStyleV3LogoRaster": {
    "display_name": "Recraft Style - Logo Raster",
    "description": "Select realistic_image style and optional substyle.",
    "inputs": {
      "substyle": {
        "name": "substyle"
      }
    },
    "outputs": {
      "0": {
        "name": "recraft_style",
        "tooltip": null
      }
    }
  },
  "RecraftStyleV3RealisticImage": {
    "display_name": "Recraft Style - Realistic Image",
    "description": "Select realistic_image style and optional substyle.",
    "inputs": {
      "substyle": {
        "name": "substyle"
      }
    },
    "outputs": {
      "0": {
        "name": "recraft_style",
        "tooltip": null
      }
    }
  },
  "RecraftTextToImageNode": {
    "display_name": "Recraft V3 Text to Image",
    "description": "Generates images synchronously based on prompt and resolution.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation."
      },
      "size": {
        "name": "size",
        "tooltip": "The size of the generated image."
      },
      "n": {
        "name": "n",
        "tooltip": "The number of images to generate."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "recraft_style": {
        "name": "recraft_style"
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "An optional text description of undesired elements on an image."
      },
      "recraft_controls": {
        "name": "recraft_controls",
        "tooltip": "Optional additional controls over the generation via the Recraft Controls node."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RecraftTextToVectorNode": {
    "display_name": "Recraft V3 Text to Vector",
    "description": "Generates SVG synchronously based on prompt and resolution.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation."
      },
      "substyle": {
        "name": "substyle"
      },
      "size": {
        "name": "size",
        "tooltip": "The size of the generated image."
      },
      "n": {
        "name": "n",
        "tooltip": "The number of images to generate."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "An optional text description of undesired elements on an image."
      },
      "recraft_controls": {
        "name": "recraft_controls",
        "tooltip": "Optional additional controls over the generation via the Recraft Controls node."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RecraftV4TextToImageNode": {
    "display_name": "Recraft V4 Text to Image",
    "description": "Generates images using Recraft V4 and V4.1 models.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation. Maximum 10,000 characters."
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "This input is ignored: negative prompt is not supported by Recraft V4 and V4.1 models."
      },
      "model": {
        "name": "model",
        "tooltip": "The model to use for generation."
      },
      "n": {
        "name": "n",
        "tooltip": "The number of images to generate."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "recraft_controls": {
        "name": "recraft_controls",
        "tooltip": "Optional additional controls over the generation via the Recraft Controls node."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_size": {
        "name": "size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RecraftV4TextToVectorNode": {
    "display_name": "Recraft V4 Text to Vector",
    "description": "Generates SVG using Recraft V4 and V4.1 models.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt for the image generation. Maximum 10,000 characters."
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "This input is ignored: negative prompt is not supported by Recraft V4 and V4.1 models."
      },
      "model": {
        "name": "model",
        "tooltip": "The model to use for generation."
      },
      "n": {
        "name": "n",
        "tooltip": "The number of images to generate."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed."
      },
      "recraft_controls": {
        "name": "recraft_controls",
        "tooltip": "Optional additional controls over the generation via the Recraft Controls node."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_size": {
        "name": "size"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RecraftVectorizeImageNode": {
    "display_name": "Recraft Vectorize Image",
    "description": "Generates SVG synchronously from an input image.",
    "inputs": {
      "image": {
        "name": "image"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ReferenceLatent": {
    "display_name": "Set Reference Latent",
    "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.",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      },
      "latent": {
        "name": "latent"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ReferenceTimbreAudio": {
    "display_name": "Set Reference Audio",
    "description": "This node sets the reference audio for ace step 1.5",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      },
      "latent": {
        "name": "latent"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RegexExtract": {
    "display_name": "Extract Text",
    "inputs": {
      "string": {
        "name": "string"
      },
      "regex_pattern": {
        "name": "regex_pattern"
      },
      "mode": {
        "name": "mode"
      },
      "case_insensitive": {
        "name": "case_insensitive"
      },
      "multiline": {
        "name": "multiline"
      },
      "dotall": {
        "name": "dotall"
      },
      "group_index": {
        "name": "group_index"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RegexMatch": {
    "display_name": "Match Text",
    "inputs": {
      "string": {
        "name": "string"
      },
      "regex_pattern": {
        "name": "regex_pattern"
      },
      "case_insensitive": {
        "name": "case_insensitive"
      },
      "multiline": {
        "name": "multiline"
      },
      "dotall": {
        "name": "dotall"
      }
    },
    "outputs": {
      "0": {
        "name": "matches",
        "tooltip": null
      }
    }
  },
  "RegexReplace": {
    "display_name": "Replace Text (Regex)",
    "description": "Find and replace text using regex patterns.",
    "inputs": {
      "string": {
        "name": "string"
      },
      "regex_pattern": {
        "name": "regex_pattern"
      },
      "replace": {
        "name": "replace"
      },
      "case_insensitive": {
        "name": "case_insensitive"
      },
      "multiline": {
        "name": "multiline"
      },
      "dotall": {
        "name": "dotall",
        "tooltip": "When enabled, the dot (.) character will match any character including newline characters. When disabled, dots won't match newlines."
      },
      "count": {
        "name": "count",
        "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."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RemoveBackground": {
    "display_name": "Remove Background",
    "description": "Generates a foreground mask to remove the background from an image using a background removal model.",
    "inputs": {
      "bg_removal_model": {
        "name": "bg_removal_model",
        "tooltip": "Background removal model used to generate the mask"
      },
      "image": {
        "name": "image",
        "tooltip": "Input image to remove the background from"
      }
    },
    "outputs": {
      "0": {
        "name": "mask",
        "tooltip": "Generated foreground mask"
      }
    }
  },
  "RenderSplat": {
    "display_name": "Render Splat",
    "description": "Render a gaussian splat as an image with an anisotropic EWA rasterizer (oriented elliptical splats, antialiased, depth-sorted front-to-back). The camera comes from a camera_info input (Load / Preview 3D, or a Create Camera Info node); leave it empty to auto-frame the splat. Set frames greater than 1 for a turntable batch of images to feed a Video node.",
    "inputs": {
      "splat": {
        "name": "splat"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "frames": {
        "name": "frames",
        "tooltip": "-1, 0, 1 = single still image; >1 = turntable, the camera orbits over a full 360 turn (works with any camera_info). Negative value orbits the other way."
      },
      "splat_scale": {
        "name": "splat_scale",
        "tooltip": "Multiplier on each splat's projected footprint (lower = crisper points, higher = softer/fuller surface)."
      },
      "sharpen": {
        "name": "sharpen",
        "tooltip": "Sharpen overlapping splats: 1.0 = physically-correct blend; higher biases each pixel toward its dominant (nearest) splat for crisper texture, without shrinking splats or opening gaps. Non-physical above 1."
      },
      "headlight_shading": {
        "name": "headlight_shading",
        "tooltip": "Diffuse shading from a light at the camera (headlight), using the splat surfel normals: darkens surfaces that turn away from view to reveal form/curvature. 0 = flat albedo, 1 = strongest shading."
      },
      "opacity_threshold": {
        "name": "opacity_threshold",
        "tooltip": "Cull gaussians with opacity below this (removes faint floaters)."
      },
      "render_style": {
        "name": "render_style",
        "tooltip": "What the image output shows: color, clay (neutral-albedo shaded), depth (near=bright), normal (OpenGL normal map)."
      },
      "background": {
        "name": "background"
      },
      "bg_image": {
        "name": "bg_image",
        "tooltip": "Optional background plate composited behind the splat (overrides the solid background colour). Resized to the render size; a batch is used per frame, a single image for all. color/clay only."
      },
      "camera_info": {
        "name": "camera_info",
        "tooltip": "Camera to render from - a Load3D / Preview3D camera or a Create Camera Info node. If empty, the splat is auto-framed from a default 3/4 view."
      }
    },
    "outputs": {
      "0": {
        "name": "image",
        "tooltip": null
      },
      "1": {
        "name": "mask",
        "tooltip": null
      }
    }
  },
  "RenormCFG": {
    "display_name": "RenormCFG",
    "inputs": {
      "model": {
        "name": "model"
      },
      "cfg_trunc": {
        "name": "cfg_trunc"
      },
      "renorm_cfg": {
        "name": "renorm_cfg"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RepeatImageBatch": {
    "display_name": "Repeat Image Batch",
    "inputs": {
      "image": {
        "name": "image"
      },
      "amount": {
        "name": "amount"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RepeatLatentBatch": {
    "display_name": "Repeat Latent Batch",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "amount": {
        "name": "amount"
      }
    }
  },
  "ReplaceText": {
    "display_name": "Replace Text (DEPRECATED)",
    "inputs": {
      "texts": {
        "name": "texts",
        "tooltip": "Text to process."
      },
      "find": {
        "name": "find",
        "tooltip": "Text to find."
      },
      "replace": {
        "name": "replace",
        "tooltip": "Text to replace with."
      }
    },
    "outputs": {
      "0": {
        "name": "texts",
        "tooltip": "Processed texts"
      }
    }
  },
  "ReplaceVideoLatentFrames": {
    "display_name": "Replace Video Latent Frames",
    "inputs": {
      "destination": {
        "name": "destination",
        "tooltip": "The destination latent where frames will be replaced."
      },
      "index": {
        "name": "index",
        "tooltip": "The starting latent frame index in the destination latent where the source latent frames will be placed. Negative values count from the end."
      },
      "source": {
        "name": "source",
        "tooltip": "The source latent providing frames to insert into the destination latent. If not provided, the destination latent is returned unchanged."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "RescaleCFG": {
    "display_name": "RescaleCFG",
    "inputs": {
      "model": {
        "name": "model"
      },
      "multiplier": {
        "name": "multiplier"
      }
    }
  },
  "ResizeAndPadImage": {
    "display_name": "Resize And Pad Image",
    "inputs": {
      "image": {
        "name": "image"
      },
      "target_width": {
        "name": "target_width"
      },
      "target_height": {
        "name": "target_height"
      },
      "padding_color": {
        "name": "padding_color"
      },
      "interpolation": {
        "name": "interpolation"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ResizeImageMaskNode": {
    "display_name": "Resize Image/Mask",
    "description": "Resize an image or mask using various scaling methods.",
    "inputs": {
      "input": {
        "name": "input"
      },
      "resize_type": {
        "name": "resize_type",
        "tooltip": "Select how to resize: by exact dimensions, scale factor, matching another image, etc."
      },
      "scale_method": {
        "name": "scale_method",
        "tooltip": "Interpolation algorithm. 'area' is best for downscaling, 'lanczos' for upscaling, 'nearest-exact' for pixel art."
      },
      "resize_type_crop": {
        "name": "crop"
      },
      "resize_type_height": {
        "name": "height"
      },
      "resize_type_width": {
        "name": "width"
      }
    },
    "outputs": {
      "0": {
        "name": "resized",
        "tooltip": null
      }
    }
  },
  "ResizeImagesByLongerEdge": {
    "display_name": "Resize Images by Longer Edge (DEPRECATED)",
    "description": "Resize images so that the longer edge matches the specified dimension while preserving aspect ratio.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "Image to process."
      },
      "longer_edge": {
        "name": "longer_edge",
        "tooltip": "Target dimension for the longer edge."
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": "Processed images"
      }
    }
  },
  "ResizeImagesByShorterEdge": {
    "display_name": "Resize Images by Shorter Edge (DEPRECATED)",
    "description": "Resize images so that the shorter edge matches the specified dimension while preserving aspect ratio.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "Image to process."
      },
      "shorter_edge": {
        "name": "shorter_edge",
        "tooltip": "Target dimension for the shorter edge."
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": "Processed images"
      }
    }
  },
  "ResolutionBucket": {
    "display_name": "Resolution Bucket",
    "description": "Group latents and conditionings into buckets",
    "inputs": {
      "latents": {
        "name": "latents",
        "tooltip": "List of latent dicts to bucket by resolution."
      },
      "conditioning": {
        "name": "conditioning",
        "tooltip": "List of conditioning lists (must match latents length)."
      }
    },
    "outputs": {
      "0": {
        "name": "latents",
        "tooltip": "List of batched latent dicts, one per resolution bucket."
      },
      "1": {
        "name": "conditioning",
        "tooltip": "List of condition lists, one per resolution bucket."
      }
    }
  },
  "ResolutionSelector": {
    "display_name": "Resolution Selector",
    "description": "Calculate width and height from aspect ratio and megapixel target. Useful for setting up Empty Latent Image dimensions.",
    "inputs": {
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "The aspect ratio for the output dimensions."
      },
      "megapixels": {
        "name": "megapixels",
        "tooltip": "Target total megapixels. 1.0 MP ≈ 1024x1024 for square."
      },
      "multiple": {
        "name": "multiple",
        "tooltip": "Nearest multiple of the result to set the selected resolution to."
      }
    },
    "outputs": {
      "0": {
        "name": "width",
        "tooltip": "Calculated width in pixels multiplied by the selected multiple."
      },
      "1": {
        "name": "height",
        "tooltip": "Calculated height in pixels multiplied by the selected multiple."
      }
    }
  },
  "ReveImageCreateNode": {
    "display_name": "Reve Image Create",
    "description": "Generate images from text descriptions using Reve.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text description of the desired image. Maximum 2560 characters."
      },
      "model": {
        "name": "model",
        "tooltip": "Model version to use for generation."
      },
      "upscale": {
        "name": "upscale",
        "tooltip": "Upscale the generated image. May add additional cost."
      },
      "remove_background": {
        "name": "remove_background",
        "tooltip": "Remove the background from the generated image. May add additional cost."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_aspect_ratio": {
        "name": "aspect_ratio"
      },
      "model_test_time_scaling": {
        "name": "test_time_scaling"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ReveImageEditNode": {
    "display_name": "Reve Image Edit",
    "description": "Edit images using natural language instructions with Reve.",
    "inputs": {
      "image": {
        "name": "image",
        "tooltip": "The image to edit."
      },
      "edit_instruction": {
        "name": "edit_instruction",
        "tooltip": "Text description of how to edit the image. Maximum 2560 characters."
      },
      "model": {
        "name": "model",
        "tooltip": "Model version to use for editing."
      },
      "upscale": {
        "name": "upscale",
        "tooltip": "Upscale the generated image. May add additional cost."
      },
      "remove_background": {
        "name": "remove_background",
        "tooltip": "Remove the background from the generated image. May add additional cost."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_aspect_ratio": {
        "name": "aspect_ratio"
      },
      "model_test_time_scaling": {
        "name": "test_time_scaling"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ReveImageRemixNode": {
    "display_name": "Reve Image Remix",
    "description": "Combine reference images with text prompts to create new images using Reve.",
    "inputs": {
      "reference_images": {
        "name": "reference_images"
      },
      "prompt": {
        "name": "prompt",
        "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."
      },
      "model": {
        "name": "model",
        "tooltip": "Model version to use for remixing."
      },
      "upscale": {
        "name": "upscale",
        "tooltip": "Upscale the generated image. May add additional cost."
      },
      "remove_background": {
        "name": "remove_background",
        "tooltip": "Remove the background from the generated image. May add additional cost."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_aspect_ratio": {
        "name": "aspect_ratio"
      },
      "model_test_time_scaling": {
        "name": "test_time_scaling"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Rodin3D_Detail": {
    "display_name": "Rodin 3D Generate - Detail Generate",
    "description": "Generate 3D Assets using Rodin API",
    "inputs": {
      "Images": {
        "name": "Images"
      },
      "Seed": {
        "name": "Seed"
      },
      "Material_Type": {
        "name": "Material_Type"
      },
      "Polygon_count": {
        "name": "Polygon_count"
      }
    },
    "outputs": {
      "0": {
        "name": "3D Model Path",
        "tooltip": null
      },
      "1": {
        "name": "GLB",
        "tooltip": null
      }
    }
  },
  "Rodin3D_Gen2": {
    "display_name": "Rodin 3D Generate - Gen-2 Generate",
    "description": "Generate 3D Assets using Rodin API",
    "inputs": {
      "Images": {
        "name": "Images"
      },
      "TAPose": {
        "name": "TAPose"
      },
      "Seed": {
        "name": "Seed"
      },
      "Material_Type": {
        "name": "Material_Type"
      },
      "Polygon_count": {
        "name": "Polygon_count"
      }
    },
    "outputs": {
      "0": {
        "name": "3D Model Path",
        "tooltip": null
      },
      "1": {
        "name": "GLB",
        "tooltip": null
      }
    }
  },
  "Rodin3D_Gen25_Image": {
    "display_name": "Rodin 3D Gen-2.5 - Image to 3D",
    "description": "Generate a 3D model from 1-5 reference images via Rodin Gen-2.5. Pick a mode (Fast / Regular / Extreme-High) to tune quality vs. cost.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "1-5 images. The first image is used for materials when multi-view."
      },
      "mode": {
        "name": "mode",
        "tooltip": "Generation mode. Regular = balanced. Fast = 1K-20K faces for rapid prototyping. Extreme-High = 20K-2M faces with optional micro details."
      },
      "material": {
        "name": "material"
      },
      "geometry_file_format": {
        "name": "geometry_file_format"
      },
      "texture_mode": {
        "name": "texture_mode",
        "tooltip": "Texture quality preset. 'Default' uses the server's default for the selected tier."
      },
      "seed": {
        "name": "seed"
      },
      "TAPose": {
        "name": "TAPose",
        "tooltip": "T/A pose for human-like models."
      },
      "hd_texture": {
        "name": "hd_texture",
        "tooltip": "High-quality texture enhancement."
      },
      "texture_delight": {
        "name": "texture_delight",
        "tooltip": "Remove baked lighting from textures."
      },
      "use_original_alpha": {
        "name": "use_original_alpha",
        "tooltip": "Preserve image transparency."
      },
      "addon_highpack": {
        "name": "addon_highpack",
        "tooltip": "HighPack addon: 4K textures and ~16x faces in Quad mode."
      },
      "bbox_width": {
        "name": "bbox_width",
        "tooltip": "Bounding-box width (Y axis). Set to 0 with the others to skip bbox."
      },
      "bbox_height": {
        "name": "bbox_height",
        "tooltip": "Bounding-box height (Z axis)."
      },
      "bbox_length": {
        "name": "bbox_length",
        "tooltip": "Bounding-box length (X axis)."
      },
      "height_cm": {
        "name": "height_cm",
        "tooltip": "Approximate model height in centimeters (0 to skip)."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "mode_creative": {
        "name": "creative"
      },
      "mode_polygon_count": {
        "name": "polygon_count"
      },
      "mode_tier": {
        "name": "tier"
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      }
    }
  },
  "Rodin3D_Gen25_Text": {
    "display_name": "Rodin 3D Gen-2.5 - Text to 3D",
    "description": "Generate a 3D model from a text prompt via Rodin Gen-2.5. Pick a mode (Fast / Regular / Extreme-High) to tune quality vs. cost.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for the 3D model."
      },
      "mode": {
        "name": "mode",
        "tooltip": "Generation mode. Regular = balanced. Fast = 1K-20K faces for rapid prototyping. Extreme-High = 20K-2M faces with optional micro details."
      },
      "material": {
        "name": "material"
      },
      "geometry_file_format": {
        "name": "geometry_file_format"
      },
      "texture_mode": {
        "name": "texture_mode",
        "tooltip": "Texture quality preset. 'Default' uses the server's default for the selected tier."
      },
      "seed": {
        "name": "seed"
      },
      "TAPose": {
        "name": "TAPose",
        "tooltip": "T/A pose for human-like models."
      },
      "hd_texture": {
        "name": "hd_texture",
        "tooltip": "High-quality texture enhancement."
      },
      "texture_delight": {
        "name": "texture_delight",
        "tooltip": "Remove baked lighting from textures."
      },
      "addon_highpack": {
        "name": "addon_highpack",
        "tooltip": "HighPack addon: 4K textures and ~16x faces in Quad mode."
      },
      "bbox_width": {
        "name": "bbox_width",
        "tooltip": "Bounding-box width (Y axis). Set to 0 with the others to skip bbox."
      },
      "bbox_height": {
        "name": "bbox_height",
        "tooltip": "Bounding-box height (Z axis)."
      },
      "bbox_length": {
        "name": "bbox_length",
        "tooltip": "Bounding-box length (X axis)."
      },
      "height_cm": {
        "name": "height_cm",
        "tooltip": "Approximate model height in centimeters (0 to skip)."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "mode_creative": {
        "name": "creative"
      },
      "mode_polygon_count": {
        "name": "polygon_count"
      },
      "mode_tier": {
        "name": "tier"
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      }
    }
  },
  "Rodin3D_Regular": {
    "display_name": "Rodin 3D Generate - Regular Generate",
    "description": "Generate 3D Assets using Rodin API",
    "inputs": {
      "Images": {
        "name": "Images"
      },
      "Seed": {
        "name": "Seed"
      },
      "Material_Type": {
        "name": "Material_Type"
      },
      "Polygon_count": {
        "name": "Polygon_count"
      }
    },
    "outputs": {
      "0": {
        "name": "3D Model Path",
        "tooltip": null
      },
      "1": {
        "name": "GLB",
        "tooltip": null
      }
    }
  },
  "Rodin3D_Sketch": {
    "display_name": "Rodin 3D Generate - Sketch Generate",
    "description": "Generate 3D Assets using Rodin API",
    "inputs": {
      "Images": {
        "name": "Images"
      },
      "Seed": {
        "name": "Seed"
      }
    },
    "outputs": {
      "0": {
        "name": "3D Model Path",
        "tooltip": null
      },
      "1": {
        "name": "GLB",
        "tooltip": null
      }
    }
  },
  "Rodin3D_Smooth": {
    "display_name": "Rodin 3D Generate - Smooth Generate",
    "description": "Generate 3D Assets using Rodin API",
    "inputs": {
      "Images": {
        "name": "Images"
      },
      "Seed": {
        "name": "Seed"
      },
      "Material_Type": {
        "name": "Material_Type"
      },
      "Polygon_count": {
        "name": "Polygon_count"
      }
    },
    "outputs": {
      "0": {
        "name": "3D Model Path",
        "tooltip": null
      },
      "1": {
        "name": "GLB",
        "tooltip": null
      }
    }
  },
  "RTDETR_detect": {
    "display_name": "Run Real-Time Detection (RT-DETR)",
    "inputs": {
      "model": {
        "name": "model"
      },
      "image": {
        "name": "image"
      },
      "threshold": {
        "name": "threshold"
      },
      "class_name": {
        "name": "class_name",
        "tooltip": "Filter detections by class. Set to 'all' to disable filtering."
      },
      "max_detections": {
        "name": "max_detections",
        "tooltip": "Maximum number of detections to return per image. In order of descending confidence score."
      }
    },
    "outputs": {
      "0": {
        "name": "bboxes",
        "tooltip": null
      }
    }
  },
  "RunwayAleph2KeyframeNode": {
    "display_name": "Runway Aleph2 Keyframe",
    "description": "Anchor a guidance image to a moment of the input (source) video, so Aleph2 steers the edit at that point of your footage. Connect this to the 'keyframes' input of the Runway Aleph2 Video to Video node; chain several together (up to 5) via the optional 'keyframes' input below.",
    "inputs": {
      "image": {
        "name": "image",
        "tooltip": "The guidance image to apply at the chosen moment of the input video."
      },
      "timing": {
        "name": "timing",
        "tooltip": "How to place this image on the input video's timeline."
      },
      "keyframes": {
        "name": "keyframes",
        "tooltip": "Optional earlier keyframes to chain with this one."
      },
      "timing_seconds": {
        "name": "seconds"
      }
    },
    "outputs": {
      "0": {
        "name": "keyframes",
        "tooltip": null
      }
    }
  },
  "RunwayAleph2PromptImageNode": {
    "display_name": "Runway Aleph2 Prompt Image",
    "description": "Anchor a guidance image to a moment of the output (result) video, to guide what the edited video looks like at that point. Connect this to the 'prompt_images' input of the Runway Aleph2 Video to Video node; chain several together (up to 5) via the optional 'prompt_images' input below.",
    "inputs": {
      "image": {
        "name": "image",
        "tooltip": "The guidance image to place at the chosen moment of the output video."
      },
      "position": {
        "name": "position",
        "tooltip": "How to place this image on the output video's timeline."
      },
      "prompt_images": {
        "name": "prompt_images",
        "tooltip": "Optional earlier prompt images to chain with this one."
      },
      "position_seconds": {
        "name": "seconds"
      }
    },
    "outputs": {
      "0": {
        "name": "prompt_images",
        "tooltip": null
      }
    }
  },
  "RunwayAleph2VideoToVideoNode": {
    "display_name": "Runway Aleph2 Video to Video",
    "description": "Edit a video with a text prompt using Runway's Aleph2 model. Aleph2 transforms your footage (restyle, relight, add or remove elements, change the viewpoint) while keeping the original motion and timing; the output resolution matches the input video, which must be 2-30 seconds at 30 fps or lower. Optionally steer the edit with either keyframes (anchored to the input video) or prompt images (anchored to the output video) - use one or the other, not both.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Describes what should appear in the output (1-1000 characters)."
      },
      "video": {
        "name": "video",
        "tooltip": "Input video to edit. Must be 2-30 seconds at 30 fps or lower."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Random seed for generation"
      },
      "public_figure_threshold": {
        "name": "public_figure_threshold",
        "tooltip": "Content moderation for recognizable public figures."
      },
      "keyframes": {
        "name": "keyframes",
        "tooltip": "Guidance images anchored to the input video, from Aleph2 Keyframe nodes (up to 5). Use keyframes or prompt images, not both."
      },
      "prompt_images": {
        "name": "prompt_images",
        "tooltip": "Guidance images anchored to the output video, from Aleph2 Prompt Image nodes (up to 5). Use keyframes or prompt images, not both."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for the generation"
      },
      "start_frame": {
        "name": "start_frame",
        "tooltip": "Start frame to be used for the video"
      },
      "end_frame": {
        "name": "end_frame",
        "tooltip": "End frame to be used for the video. Supported for gen3a_turbo only."
      },
      "duration": {
        "name": "duration"
      },
      "ratio": {
        "name": "ratio"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Random seed for generation"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for the generation"
      },
      "start_frame": {
        "name": "start_frame",
        "tooltip": "Start frame to be used for the video"
      },
      "duration": {
        "name": "duration"
      },
      "ratio": {
        "name": "ratio"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Random seed for generation"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for the generation"
      },
      "start_frame": {
        "name": "start_frame",
        "tooltip": "Start frame to be used for the video"
      },
      "duration": {
        "name": "duration"
      },
      "ratio": {
        "name": "ratio"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Random seed for generation"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt for the generation"
      },
      "ratio": {
        "name": "ratio"
      },
      "reference_image": {
        "name": "reference_image",
        "tooltip": "Optional reference image to guide the generation"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SAM3_Detect": {
    "display_name": "SAM3 Detect",
    "inputs": {
      "model": {
        "name": "model"
      },
      "image": {
        "name": "image"
      },
      "threshold": {
        "name": "threshold"
      },
      "refine_iterations": {
        "name": "refine_iterations",
        "tooltip": "SAM decoder refinement passes (0=use raw detector masks)"
      },
      "individual_masks": {
        "name": "individual_masks",
        "tooltip": "Output per-object masks instead of union"
      },
      "conditioning": {
        "name": "conditioning",
        "tooltip": "Text conditioning from CLIPTextEncode"
      },
      "bboxes": {
        "name": "bboxes",
        "tooltip": "Bounding boxes to segment within"
      },
      "positive_coords": {
        "name": "positive_coords",
        "tooltip": "Positive point prompts as JSON [{\"x\": int, \"y\": int}, ...] (pixel coords)"
      },
      "negative_coords": {
        "name": "negative_coords",
        "tooltip": "Negative point prompts as JSON [{\"x\": int, \"y\": int}, ...] (pixel coords)"
      }
    },
    "outputs": {
      "0": {
        "name": "masks",
        "tooltip": null
      },
      "1": {
        "name": "bboxes",
        "tooltip": null
      }
    }
  },
  "SAM3_TrackPreview": {
    "display_name": "SAM3 Track Preview",
    "inputs": {
      "track_data": {
        "name": "track_data"
      },
      "opacity": {
        "name": "opacity"
      },
      "fps": {
        "name": "fps"
      },
      "images": {
        "name": "images"
      }
    }
  },
  "SAM3_TrackToMask": {
    "display_name": "SAM3 Track to Mask",
    "inputs": {
      "track_data": {
        "name": "track_data"
      },
      "object_indices": {
        "name": "object_indices",
        "tooltip": "Comma-separated object indices to include (e.g. '0,2,3'). Empty = all objects."
      }
    },
    "outputs": {
      "0": {
        "name": "masks",
        "tooltip": null
      }
    }
  },
  "SAM3_VideoTrack": {
    "display_name": "Run SAM3 Video Track",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "Video frames as batched images"
      },
      "model": {
        "name": "model"
      },
      "detection_threshold": {
        "name": "detection_threshold",
        "tooltip": "Score threshold for text-prompted detection."
      },
      "max_objects": {
        "name": "max_objects",
        "tooltip": "Max tracked objects. Initial masks count toward this limit. 0 uses the internal cap of 64."
      },
      "detect_interval": {
        "name": "detect_interval",
        "tooltip": "Run detection every N frames (1=every frame). Higher values save compute."
      },
      "initial_mask": {
        "name": "initial_mask",
        "tooltip": "Mask(s) for the first frame to track (one per object)"
      },
      "conditioning": {
        "name": "conditioning",
        "tooltip": "Text conditioning for detecting new objects during tracking"
      }
    },
    "outputs": {
      "0": {
        "name": "track_data",
        "tooltip": null
      }
    }
  },
  "SamplerARVideo": {
    "display_name": "Sampler AR Video",
    "inputs": {
      "num_frame_per_block": {
        "name": "num_frame_per_block",
        "tooltip": "Frames per autoregressive block. 1 = framewise, 3 = chunkwise. Must match the checkpoint's training mode."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SamplerCustom": {
    "display_name": "SamplerCustom",
    "inputs": {
      "model": {
        "name": "model"
      },
      "add_noise": {
        "name": "add_noise"
      },
      "noise_seed": {
        "name": "noise_seed"
      },
      "cfg": {
        "name": "cfg"
      },
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "sampler": {
        "name": "sampler"
      },
      "sigmas": {
        "name": "sigmas"
      },
      "latent_image": {
        "name": "latent_image"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "output",
        "tooltip": null
      },
      "1": {
        "name": "denoised_output",
        "tooltip": null
      }
    }
  },
  "SamplerCustomAdvanced": {
    "display_name": "SamplerCustomAdvanced",
    "inputs": {
      "noise": {
        "name": "noise"
      },
      "guider": {
        "name": "guider"
      },
      "sampler": {
        "name": "sampler"
      },
      "sigmas": {
        "name": "sigmas"
      },
      "latent_image": {
        "name": "latent_image"
      }
    },
    "outputs": {
      "0": {
        "name": "output",
        "tooltip": null
      },
      "1": {
        "name": "denoised_output",
        "tooltip": null
      }
    }
  },
  "SamplerDPMAdaptative": {
    "display_name": "SamplerDPMAdaptative",
    "inputs": {
      "order": {
        "name": "order"
      },
      "rtol": {
        "name": "rtol"
      },
      "atol": {
        "name": "atol"
      },
      "h_init": {
        "name": "h_init"
      },
      "pcoeff": {
        "name": "pcoeff"
      },
      "icoeff": {
        "name": "icoeff"
      },
      "dcoeff": {
        "name": "dcoeff"
      },
      "accept_safety": {
        "name": "accept_safety"
      },
      "eta": {
        "name": "eta"
      },
      "s_noise": {
        "name": "s_noise"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SamplerDPMPP_2M_SDE": {
    "display_name": "SamplerDPMPP_2M_SDE",
    "inputs": {
      "solver_type": {
        "name": "solver_type"
      },
      "eta": {
        "name": "eta"
      },
      "s_noise": {
        "name": "s_noise"
      },
      "noise_device": {
        "name": "noise_device"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SamplerDPMPP_2S_Ancestral": {
    "display_name": "SamplerDPMPP_2S_Ancestral",
    "inputs": {
      "eta": {
        "name": "eta"
      },
      "s_noise": {
        "name": "s_noise"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SamplerDPMPP_3M_SDE": {
    "display_name": "SamplerDPMPP_3M_SDE",
    "inputs": {
      "eta": {
        "name": "eta"
      },
      "s_noise": {
        "name": "s_noise"
      },
      "noise_device": {
        "name": "noise_device"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SamplerDPMPP_SDE": {
    "display_name": "SamplerDPMPP_SDE",
    "inputs": {
      "eta": {
        "name": "eta"
      },
      "s_noise": {
        "name": "s_noise"
      },
      "r": {
        "name": "r"
      },
      "noise_device": {
        "name": "noise_device"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SamplerER_SDE": {
    "display_name": "SamplerER_SDE",
    "inputs": {
      "solver_type": {
        "name": "solver_type"
      },
      "max_stage": {
        "name": "max_stage"
      },
      "eta": {
        "name": "eta",
        "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."
      },
      "s_noise": {
        "name": "s_noise"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SamplerEulerAncestral": {
    "display_name": "SamplerEulerAncestral",
    "inputs": {
      "eta": {
        "name": "eta"
      },
      "s_noise": {
        "name": "s_noise"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SamplerEulerAncestralCFGPP": {
    "display_name": "SamplerEulerAncestralCFG++",
    "inputs": {
      "eta": {
        "name": "eta"
      },
      "s_noise": {
        "name": "s_noise"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SamplerEulerCFGpp": {
    "display_name": "SamplerEulerCFG++",
    "inputs": {
      "version": {
        "name": "version"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SamplerLCM": {
    "display_name": "SamplerLCM",
    "description": "LCM sampler with tunable per-step noise. s_noise is a multiplier on the model's training noise scale",
    "inputs": {
      "s_noise": {
        "name": "s_noise",
        "tooltip": "Per-step noise multiplier at the first step (1.0 = match training)."
      },
      "s_noise_end": {
        "name": "s_noise_end",
        "tooltip": "Per-step noise multiplier at the last step. Set equal to s_noise for a constant schedule."
      },
      "noise_clip_std": {
        "name": "noise_clip_std",
        "tooltip": "Clamp per-step noise to +/- N*std. 0 disables."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SamplerLCMUpscale": {
    "display_name": "SamplerLCMUpscale",
    "inputs": {
      "scale_ratio": {
        "name": "scale_ratio"
      },
      "scale_steps": {
        "name": "scale_steps"
      },
      "upscale_method": {
        "name": "upscale_method"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SamplerLMS": {
    "display_name": "SamplerLMS",
    "inputs": {
      "order": {
        "name": "order"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SamplerSASolver": {
    "display_name": "SamplerSASolver",
    "inputs": {
      "model": {
        "name": "model"
      },
      "eta": {
        "name": "eta"
      },
      "sde_start_percent": {
        "name": "sde_start_percent"
      },
      "sde_end_percent": {
        "name": "sde_end_percent"
      },
      "s_noise": {
        "name": "s_noise"
      },
      "predictor_order": {
        "name": "predictor_order"
      },
      "corrector_order": {
        "name": "corrector_order"
      },
      "use_pece": {
        "name": "use_pece"
      },
      "simple_order_2": {
        "name": "simple_order_2"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SamplerSEEDS2": {
    "display_name": "SamplerSEEDS2",
    "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",
    "inputs": {
      "solver_type": {
        "name": "solver_type"
      },
      "eta": {
        "name": "eta",
        "tooltip": "Stochastic strength"
      },
      "s_noise": {
        "name": "s_noise",
        "tooltip": "SDE noise multiplier"
      },
      "r": {
        "name": "r",
        "tooltip": "Relative step size for the intermediate stage (c2 node)"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SamplingPercentToSigma": {
    "display_name": "SamplingPercentToSigma",
    "inputs": {
      "model": {
        "name": "model"
      },
      "sampling_percent": {
        "name": "sampling_percent"
      },
      "return_actual_sigma": {
        "name": "return_actual_sigma",
        "tooltip": "Return the actual sigma value instead of the value used for interval checks.\nThis only affects results at 0.0 and 1.0."
      }
    },
    "outputs": {
      "0": {
        "name": "sigma_value",
        "tooltip": null
      }
    }
  },
  "Save3DAdvanced": {
    "display_name": "Save 3D (Advanced)",
    "inputs": {
      "model_3d": {
        "name": "model_3d",
        "tooltip": "3D model file from an upstream 3D node."
      },
      "filename_prefix": {
        "name": "filename_prefix"
      },
      "viewport_state": {
        "name": "viewport_state"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "model_3d_info": {
        "name": "model_3d_info"
      },
      "camera_info": {
        "name": "camera_info"
      }
    },
    "outputs": {
      "0": {
        "name": "model_3d",
        "tooltip": null
      },
      "1": {
        "name": "model_3d_info",
        "tooltip": null
      },
      "2": {
        "name": "camera_info",
        "tooltip": null
      },
      "3": {
        "name": "width",
        "tooltip": null
      },
      "4": {
        "name": "height",
        "tooltip": null
      }
    }
  },
  "SaveAnimatedPNG": {
    "display_name": "Save Animated PNG",
    "inputs": {
      "images": {
        "name": "images"
      },
      "filename_prefix": {
        "name": "filename_prefix"
      },
      "fps": {
        "name": "fps"
      },
      "compress_level": {
        "name": "compress_level"
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": null
      }
    }
  },
  "SaveAnimatedWEBP": {
    "display_name": "Save Animated WEBP",
    "inputs": {
      "images": {
        "name": "images"
      },
      "filename_prefix": {
        "name": "filename_prefix"
      },
      "fps": {
        "name": "fps"
      },
      "lossless": {
        "name": "lossless"
      },
      "quality": {
        "name": "quality"
      },
      "method": {
        "name": "method"
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": null
      }
    }
  },
  "SaveAudio": {
    "display_name": "Save Audio (FLAC) (DEPRECATED)",
    "inputs": {
      "audio": {
        "name": "audio"
      },
      "filename_prefix": {
        "name": "filename_prefix"
      },
      "audioUI": {
        "name": "audioUI"
      }
    },
    "outputs": {
      "0": {
        "name": "audio",
        "tooltip": null
      }
    }
  },
  "SaveAudioAdvanced": {
    "display_name": "Save Audio (Advanced)",
    "description": "Saves the input audio to your ComfyUI output directory.",
    "inputs": {
      "audio": {
        "name": "audio",
        "tooltip": "The audio to save."
      },
      "filename_prefix": {
        "name": "filename_prefix",
        "tooltip": "The prefix for the file to save. May include formatting tokens such as %date:yyyy-MM-dd%."
      },
      "format": {
        "name": "format",
        "tooltip": "The file format in which to save the audio."
      },
      "audioUI": {
        "name": "audioUI"
      }
    },
    "outputs": {
      "0": {
        "name": "audio",
        "tooltip": null
      }
    }
  },
  "SaveAudioMP3": {
    "display_name": "Save Audio (MP3) (DEPRECATED)",
    "inputs": {
      "audio": {
        "name": "audio"
      },
      "filename_prefix": {
        "name": "filename_prefix"
      },
      "quality": {
        "name": "quality"
      },
      "audioUI": {
        "name": "audioUI"
      }
    },
    "outputs": {
      "0": {
        "name": "audio",
        "tooltip": null
      }
    }
  },
  "SaveAudioOpus": {
    "display_name": "Save Audio (Opus) (DEPRECATED)",
    "inputs": {
      "audio": {
        "name": "audio"
      },
      "filename_prefix": {
        "name": "filename_prefix"
      },
      "quality": {
        "name": "quality"
      },
      "audioUI": {
        "name": "audioUI"
      }
    },
    "outputs": {
      "0": {
        "name": "audio",
        "tooltip": null
      }
    }
  },
  "SaveGaussianSplat": {
    "display_name": "Save Splat",
    "inputs": {
      "model_3d": {
        "name": "model_3d",
        "tooltip": "A gaussian splat 3D file."
      },
      "filename_prefix": {
        "name": "filename_prefix"
      },
      "viewport_state": {
        "name": "viewport_state"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "model_3d_info": {
        "name": "model_3d_info"
      },
      "camera_info": {
        "name": "camera_info"
      }
    },
    "outputs": {
      "0": {
        "name": "model_3d",
        "tooltip": null
      },
      "1": {
        "name": "model_3d_info",
        "tooltip": null
      },
      "2": {
        "name": "camera_info",
        "tooltip": null
      },
      "3": {
        "name": "width",
        "tooltip": null
      },
      "4": {
        "name": "height",
        "tooltip": null
      }
    }
  },
  "SaveGLB": {
    "display_name": "Save 3D Model",
    "inputs": {
      "mesh": {
        "name": "mesh",
        "tooltip": "Mesh or 3D file to save"
      },
      "filename_prefix": {
        "name": "filename_prefix"
      },
      "image": {
        "name": "image"
      }
    }
  },
  "SaveImage": {
    "display_name": "Save Image",
    "description": "Saves the input images to your ComfyUI output directory.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "The images to save."
      },
      "filename_prefix": {
        "name": "filename_prefix",
        "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."
      }
    },
    "outputs": {
      "0": {
        "name": "images"
      }
    }
  },
  "SaveImageAdvanced": {
    "display_name": "Save Image (Advanced)",
    "description": "Saves the input images to your ComfyUI output directory.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "The images to save."
      },
      "filename_prefix": {
        "name": "filename_prefix",
        "tooltip": "The prefix for the file to save. May include formatting tokens such as %date:yyyy-MM-dd% or %Empty Latent Image.width%."
      },
      "format": {
        "name": "format",
        "tooltip": "The file format in which to save the image."
      },
      "format_bit_depth": {
        "name": "bit_depth"
      },
      "format_input_color_space": {
        "name": "input_color_space"
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": null
      }
    }
  },
  "SaveImageDataSetToFolder": {
    "display_name": "Save Image (to Folder) (DEPRECATED)",
    "description": "Save a dataset of images to a specified folder. Supported formats: PNG.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "List of images to save."
      },
      "folder_name": {
        "name": "folder_name",
        "tooltip": "Name of the folder to save images to (inside output directory)."
      },
      "filename_prefix": {
        "name": "filename_prefix",
        "tooltip": "Prefix for saved image filenames."
      },
      "mode": {
        "name": "mode",
        "tooltip": "Whether to overwrite existing files or increment filenames to avoid overwriting."
      }
    }
  },
  "SaveImageTextDataSetToFolder": {
    "display_name": "Save Image-Text (to Folder)",
    "description": "Save a dataset of pairs of images and text captions to a specified folder. Images are saved as PNG files and captions are saved as TXT files with the same filename_prefix.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "List of images to save."
      },
      "folder_name": {
        "name": "folder_name",
        "tooltip": "Name of the folder to save images to (inside output directory)."
      },
      "filename_prefix": {
        "name": "filename_prefix",
        "tooltip": "Prefix for saved image filenames."
      },
      "mode": {
        "name": "mode",
        "tooltip": "Whether to overwrite existing files or increment filenames to avoid overwriting."
      },
      "texts": {
        "name": "texts",
        "tooltip": "List of text captions to save."
      }
    }
  },
  "SaveImageWebsocket": {
    "display_name": "Save Image (Websocket)",
    "inputs": {
      "images": {
        "name": "images"
      }
    }
  },
  "SaveLatent": {
    "display_name": "Save Latent",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "filename_prefix": {
        "name": "filename_prefix"
      }
    },
    "outputs": {
      "0": {
        "name": "samples"
      }
    }
  },
  "SaveLoRA": {
    "display_name": "Save LoRA Weights",
    "inputs": {
      "lora": {
        "name": "lora",
        "tooltip": "The LoRA model to save. Do not use the model with LoRA layers."
      },
      "prefix": {
        "name": "prefix",
        "tooltip": "The prefix to use for the saved LoRA file."
      },
      "steps": {
        "name": "steps",
        "tooltip": "Optional: The number of steps the LoRA has been trained for, used to name the saved file."
      }
    }
  },
  "SavePointCloud": {
    "display_name": "Save Point Cloud",
    "inputs": {
      "model_3d": {
        "name": "model_3d",
        "tooltip": "Point cloud file (.ply)"
      },
      "filename_prefix": {
        "name": "filename_prefix"
      },
      "viewport_state": {
        "name": "viewport_state"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "model_3d_info": {
        "name": "model_3d_info"
      },
      "camera_info": {
        "name": "camera_info"
      }
    },
    "outputs": {
      "0": {
        "name": "model_3d",
        "tooltip": null
      },
      "1": {
        "name": "model_3d_info",
        "tooltip": null
      },
      "2": {
        "name": "camera_info",
        "tooltip": null
      },
      "3": {
        "name": "width",
        "tooltip": null
      },
      "4": {
        "name": "height",
        "tooltip": null
      }
    }
  },
  "SaveSVGNode": {
    "display_name": "Save SVG",
    "description": "Save SVG files on disk.",
    "inputs": {
      "svg": {
        "name": "svg"
      },
      "filename_prefix": {
        "name": "filename_prefix",
        "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."
      }
    },
    "outputs": {
      "0": {
        "name": "svg",
        "tooltip": null
      }
    }
  },
  "SaveText": {
    "display_name": "Save Text",
    "description": "Save text content to a file in the output directory.",
    "inputs": {
      "text": {
        "name": "text"
      },
      "filename_prefix": {
        "name": "filename_prefix"
      },
      "format": {
        "name": "format"
      },
      "preview_mode": {},
      "preview_text": {}
    },
    "outputs": {
      "0": {
        "name": "text",
        "tooltip": null
      }
    }
  },
  "SaveTrainingDataset": {
    "display_name": "Save Training Dataset",
    "description": "Save encoded training dataset (latents + conditioning) to disk for efficient loading during training.",
    "inputs": {
      "latents": {
        "name": "latents",
        "tooltip": "List of latent dicts from MakeTrainingDataset."
      },
      "conditioning": {
        "name": "conditioning",
        "tooltip": "List of conditioning lists from MakeTrainingDataset."
      },
      "folder_name": {
        "name": "folder_name",
        "tooltip": "Name of folder to save the dataset into, inside the datasets directory. Subfolders like 'project/run1' are allowed."
      },
      "shard_size": {
        "name": "shard_size",
        "tooltip": "Number of samples per shard file."
      }
    }
  },
  "SaveVideo": {
    "display_name": "Save Video",
    "description": "Saves the input videos to your ComfyUI output directory.",
    "inputs": {
      "video": {
        "name": "video",
        "tooltip": "The video to save."
      },
      "filename_prefix": {
        "name": "filename_prefix",
        "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."
      },
      "format": {
        "name": "format",
        "tooltip": "The format to save the video as."
      },
      "codec": {
        "name": "codec",
        "tooltip": "The codec to use for the video."
      }
    },
    "outputs": {
      "0": {
        "name": "video",
        "tooltip": null
      }
    }
  },
  "SaveWEBM": {
    "display_name": "Save WEBM",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "RGBA images are saved with their alpha channel as transparency (vp9 codec only)."
      },
      "filename_prefix": {
        "name": "filename_prefix"
      },
      "codec": {
        "name": "codec"
      },
      "fps": {
        "name": "fps"
      },
      "crf": {
        "name": "crf",
        "tooltip": "Higher crf means lower quality with a smaller file size, lower crf means higher quality higher filesize."
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": null
      }
    }
  },
  "SCAIL2ColoredMask": {
    "display_name": "Create SCAIL-2 Colored Mask",
    "inputs": {
      "driving_track_data": {
        "name": "driving_track_data",
        "tooltip": "SAM3 track of the driving pose video. Will be rendered into the pose_video_mask output."
      },
      "object_indices": {
        "name": "object_indices",
        "tooltip": "Comma-separated list of person indices to include (e.g. '0,2,3'). Applied to both reference and pose video masks. Empty = all."
      },
      "sort_by": {
        "name": "sort_by",
        "tooltip": "Order in which palette colors are assigned to the tracked objects (applied to both reference and pose video so each identity keeps the same color). Objects that appear in earlier frames always come first; within a frame, left_to_right = leftmost object (by centroid at first appearance) gets the first color, area = biggest object (by mask area at first appearance) gets the first color; none = keep SAM3's order."
      },
      "replacement_mode": {
        "name": "replacement_mode",
        "tooltip": "False = Animation Mode (pose_video_mask has black background, reference_image_mask has white background). True = Replacement Mode (pose_video_mask has white background, reference_image_mask has black background)."
      },
      "ref_track_data": {
        "name": "ref_track_data",
        "tooltip": "SAM3 track of the reference image(s) (one identity per object, colored in batch order), or a plain MASK of the reference subject (rendered as a single identity)."
      }
    },
    "outputs": {
      "0": {
        "name": "pose_video_mask",
        "tooltip": null
      },
      "1": {
        "name": "reference_image_mask",
        "tooltip": null
      }
    }
  },
  "ScaleROPE": {
    "display_name": "ScaleROPE",
    "description": "Scale and shift the ROPE of the model.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "scale_x": {
        "name": "scale_x"
      },
      "shift_x": {
        "name": "shift_x"
      },
      "scale_y": {
        "name": "scale_y"
      },
      "shift_y": {
        "name": "shift_y"
      },
      "scale_t": {
        "name": "scale_t"
      },
      "shift_t": {
        "name": "shift_t"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SD_4XUpscale_Conditioning": {
    "display_name": "SD_4XUpscale_Conditioning",
    "inputs": {
      "images": {
        "name": "images"
      },
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "scale_ratio": {
        "name": "scale_ratio"
      },
      "noise_augmentation": {
        "name": "noise_augmentation"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "SDPoseDrawKeypoints": {
    "display_name": "SDPose Draw Keypoints",
    "inputs": {
      "keypoints": {
        "name": "keypoints"
      },
      "draw_body": {
        "name": "draw_body"
      },
      "draw_hands": {
        "name": "draw_hands"
      },
      "draw_face": {
        "name": "draw_face"
      },
      "draw_feet": {
        "name": "draw_feet"
      },
      "stick_width": {
        "name": "stick_width"
      },
      "face_point_size": {
        "name": "face_point_size"
      },
      "score_threshold": {
        "name": "score_threshold"
      },
      "draw_head": {
        "name": "draw_head"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SDPoseFaceBBoxes": {
    "display_name": "SDPose Face Bounding Boxes",
    "inputs": {
      "keypoints": {
        "name": "keypoints"
      },
      "scale": {
        "name": "scale",
        "tooltip": "Multiplier for the bounding box area around each detected face."
      },
      "force_square": {
        "name": "force_square",
        "tooltip": "Expand the shorter bbox axis so the crop region is always square."
      }
    },
    "outputs": {
      "0": {
        "name": "bboxes",
        "tooltip": "Face bounding boxes per frame, compatible with SDPoseKeypointExtractor bboxes input."
      }
    }
  },
  "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",
    "inputs": {
      "model": {
        "name": "model"
      },
      "vae": {
        "name": "vae"
      },
      "image": {
        "name": "image"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "bboxes": {
        "name": "bboxes",
        "tooltip": "Optional bounding boxes for more accurate detections. Required for multi-person detection."
      }
    },
    "outputs": {
      "0": {
        "name": "keypoints",
        "tooltip": "Keypoints in OpenPose frame format (canvas_width, canvas_height, people)"
      }
    }
  },
  "SDTurboScheduler": {
    "display_name": "SDTurboScheduler",
    "inputs": {
      "model": {
        "name": "model"
      },
      "steps": {
        "name": "steps"
      },
      "denoise": {
        "name": "denoise"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SeedNode": {
    "display_name": "Seed",
    "inputs": {
      "seed": {
        "name": "seed"
      },
      "fixed": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "seed",
        "tooltip": null
      }
    }
  },
  "SeedVR2Conditioning": {
    "display_name": "Apply SeedVR2 Conditioning",
    "description": "Build SeedVR2 positive/negative conditioning from a VAE latent.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The SeedVR2 model."
      },
      "vae_conditioning": {
        "name": "vae_conditioning"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": "The positive conditioning for sampling."
      },
      "1": {
        "name": "negative",
        "tooltip": "The negative conditioning for sampling."
      }
    }
  },
  "SeedVR2PostProcessing": {
    "display_name": "Post-Process SeedVR2 Output",
    "description": "Align the generated image with the original resized image and apply color correction.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "The generated image to process."
      },
      "original_resized_images": {
        "name": "original_resized_images",
        "tooltip": "The original resized image before pre-processing, used as reference."
      },
      "color_correction_method": {
        "name": "color_correction_method",
        "tooltip": "Method to match the generated image colors to the original image. lab: transfer color in CIELAB space, preserving detail (most faithful). wavelet: transfer low-frequency color, keeping upscaled high-frequency detail. adain: match per-channel mean/std (fastest, global tint). none: skip color transfer (geometry alignment only)."
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": "The aligned, color-corrected image."
      }
    }
  },
  "SeedVR2Preprocess": {
    "display_name": "Pre-Process SeedVR2 Input",
    "description": "Pad a resized image for SeedVR2 model. Alpha channel is dropped. The node Post-Process SeedVR2 Output re-applies it from the original resized image.",
    "inputs": {
      "resized_images": {
        "name": "resized_images",
        "tooltip": "The resized image to process."
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": "The padded image for VAE encoding."
      }
    }
  },
  "SeedVR2TemporalChunk": {
    "display_name": "Split SeedVR2 Latent",
    "description": "Split a SeedVR2 video latent into overlapping temporal chunks small enough to sample one at a time within VRAM, wiring latents outputs to both Apply SeedVR2 Conditioning and the sampler latent input before recombining with Merge SeedVR2 Latents.",
    "inputs": {
      "latent": {
        "name": "latent",
        "tooltip": "The VAE-encoded SeedVR2 latent to split."
      },
      "temporal_overlap": {
        "name": "temporal_overlap",
        "tooltip": "Latent frames shared between adjacent chunks and crossfaded at merge; 0 = no overlap."
      },
      "chunking_mode": {
        "name": "chunking_mode",
        "tooltip": "manual = use frames_per_chunk exactly; auto = predict the largest chunk that fits free VRAM."
      }
    },
    "outputs": {
      "0": {
        "name": "latents",
        "tooltip": "The temporal chunks in sequence order."
      },
      "1": {
        "name": "temporal_overlap",
        "tooltip": "The effective latent-frame overlap between adjacent chunks, for Merge SeedVR2 Latents."
      }
    }
  },
  "SeedVR2TemporalMerge": {
    "display_name": "Merge SeedVR2 Latents",
    "description": "Recombine sampled SeedVR2 latent temporal chunks into one latent, crossfading each overlap with a Hann window sized by the temporal_overlap wired from Split SeedVR2 Latent.",
    "inputs": {
      "latents": {
        "name": "latents",
        "tooltip": "The sampled temporal chunks in sequence order."
      },
      "temporal_overlap": {
        "name": "temporal_overlap",
        "tooltip": "The temporal_overlap output of Split SeedVR2 Latent. 0 = plain concatenation."
      }
    },
    "outputs": {
      "0": {
        "name": "latent",
        "tooltip": "The recombined full-length latent."
      }
    }
  },
  "SelectCLIPDevice": {
    "display_name": "Select CLIP Device",
    "description": "Place the CLIP text encoder on a specific device (default / cpu / gpu:N).\n\n- \"default\" restores the device assigned by the loader.\n- \"cpu\" pins both the load and offload device to CPU.\n- \"gpu:N\" pins the load device to the Nth available GPU.\n\nWhen the selected device does not exist on the current machine\n(e.g. a workflow built on a 2-GPU box opened on a 1-GPU box),\nthe node passes the CLIP through unchanged and logs a message\ninstead of failing.",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "device": {
        "name": "device"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SelectModelDevice": {
    "display_name": "Select Model Device",
    "description": "Place the diffusion model on a specific device (default / cpu / gpu:N).\n\n- \"default\" restores the device assigned by the loader (even after a\n  prior Select Model Device call).\n- \"cpu\" pins both the load and offload device to CPU.\n- \"gpu:N\" pins the load device to the Nth available GPU; the offload\n  device is restored to the loader's original choice.\n\nWhen the requested device differs from the device the input model is\nalready on, a fresh model is spawned via the loader's reload factory\n(cached_patcher_init) so the new patcher owns independent weights on\nthe new device. Loaders that don't support multigpu (no factory) will\ncause the node to pass through unchanged with a warning.\n\nIf the workflow already has MultiGPU CFG Split applied and the chosen\nGPU collides with one of the existing multigpu clones, that clone is\ndropped so two patchers don't end up bound to the same device.\n\nWhen the selected device does not exist on the current machine\n(e.g. a workflow built on a 2-GPU box opened on a 1-GPU box),\nthe node passes the model through unchanged and logs a message\ninstead of failing.\n\nNOTE: Placing Select Model Device *after* a node that has already\nconsumed the same model (e.g. a KSampler that ran on this model on\nthe original device) is not recommended -- any state the prior\nconsumer mutated on the original model will be observed when the\nselected device matches the original (fast path). Place Select Model\nDevice before any consumer of the model.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "device": {
        "name": "device"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SelectVAEDevice": {
    "display_name": "Select VAE Device",
    "description": "Place the VAE on a specific device (default / gpu:N).\n\n- \"default\" restores the device assigned by the loader.\n- \"gpu:N\" pins the load device to the Nth available GPU; the offload\n  device is set to the standard VAE offload device.\n\nCPU is intentionally not exposed in the UI for the VAE; if a workflow\nsupplies \"cpu\" anyway (e.g. opened from another machine), the request\nis dropped with a log message and the VAE is passed through unchanged.\n\nWhen the selected device does not exist on the current machine\n(e.g. a workflow built on a 2-GPU box opened on a 1-GPU box),\nthe node passes the VAE through unchanged and logs a message\ninstead of failing.",
    "inputs": {
      "vae": {
        "name": "vae"
      },
      "device": {
        "name": "device"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SelfAttentionGuidance": {
    "display_name": "Self-Attention Guidance",
    "inputs": {
      "model": {
        "name": "model"
      },
      "scale": {
        "name": "scale"
      },
      "blur_sigma": {
        "name": "blur_sigma"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SetClipHooks": {
    "display_name": "Set CLIP Hooks",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "apply_to_conds": {
        "name": "apply_to_conds"
      },
      "schedule_clip": {
        "name": "schedule_clip"
      },
      "hooks": {
        "name": "hooks"
      }
    }
  },
  "SetFirstSigma": {
    "display_name": "SetFirstSigma",
    "inputs": {
      "sigmas": {
        "name": "sigmas"
      },
      "sigma": {
        "name": "sigma"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SetHookKeyframes": {
    "display_name": "Set Hook Keyframes",
    "inputs": {
      "hooks": {
        "name": "hooks"
      },
      "hook_kf": {
        "name": "hook_kf"
      }
    }
  },
  "SetLatentNoiseMask": {
    "display_name": "Set Latent Noise Mask",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "mask": {
        "name": "mask"
      }
    }
  },
  "SetUnionControlNetType": {
    "display_name": "Set Union ControlNet Type",
    "inputs": {
      "control_net": {
        "name": "control_net"
      },
      "type": {
        "name": "type"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ShuffleDataset": {
    "display_name": "Shuffle Images List",
    "description": "Randomly shuffle the order of images in a list.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "List of images to process."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Random seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": "Processed images"
      }
    }
  },
  "ShuffleImageTextDataset": {
    "display_name": "Shuffle Pairs of Image-Text",
    "description": "Randomly shuffle the order of pairs of image-text in a list.",
    "inputs": {
      "images": {
        "name": "images",
        "tooltip": "List of images to shuffle."
      },
      "texts": {
        "name": "texts",
        "tooltip": "List of texts to shuffle."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Random seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": "Shuffled images"
      },
      "1": {
        "name": "texts",
        "tooltip": "Shuffled texts"
      }
    }
  },
  "ShuffleVideoDataset": {
    "display_name": "Shuffle Videos List",
    "description": "Randomly shuffle the order of videos in a list.",
    "inputs": {
      "videos": {
        "name": "videos",
        "tooltip": "List of videos to shuffle."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Random seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "videos",
        "tooltip": "Shuffled videos"
      }
    }
  },
  "ShuffleVideoTextDataset": {
    "display_name": "Shuffle Pairs of Video-Text",
    "description": "Randomly shuffle the order of pairs of video-text in a list.",
    "inputs": {
      "videos": {
        "name": "videos",
        "tooltip": "List of videos to shuffle."
      },
      "texts": {
        "name": "texts",
        "tooltip": "List of texts to shuffle."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Random seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "videos",
        "tooltip": "Shuffled videos"
      },
      "1": {
        "name": "texts",
        "tooltip": "Shuffled texts"
      }
    }
  },
  "SkipLayerGuidanceDiT": {
    "display_name": "SkipLayerGuidanceDiT",
    "description": "Generic version of SkipLayerGuidance node that can be used on every DiT model.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "double_layers": {
        "name": "double_layers"
      },
      "single_layers": {
        "name": "single_layers"
      },
      "scale": {
        "name": "scale"
      },
      "start_percent": {
        "name": "start_percent"
      },
      "end_percent": {
        "name": "end_percent"
      },
      "rescaling_scale": {
        "name": "rescaling_scale"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SkipLayerGuidanceDiTSimple": {
    "display_name": "SkipLayerGuidanceDiTSimple",
    "description": "Simple version of the SkipLayerGuidanceDiT node that only modifies the uncond pass.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "double_layers": {
        "name": "double_layers"
      },
      "single_layers": {
        "name": "single_layers"
      },
      "start_percent": {
        "name": "start_percent"
      },
      "end_percent": {
        "name": "end_percent"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SkipLayerGuidanceSD3": {
    "display_name": "SkipLayerGuidanceSD3",
    "description": "Generic version of SkipLayerGuidance node that can be used on every DiT model.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "layers": {
        "name": "layers"
      },
      "scale": {
        "name": "scale"
      },
      "start_percent": {
        "name": "start_percent"
      },
      "end_percent": {
        "name": "end_percent"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SolidMask": {
    "display_name": "Create Solid Mask",
    "inputs": {
      "value": {
        "name": "value"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SoniloTextToMusic": {
    "display_name": "Sonilo Text to Music",
    "description": "Generate music from a text prompt using Sonilo's AI model.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text prompt describing the music to generate."
      },
      "duration": {
        "name": "duration",
        "tooltip": "Target duration in seconds. Maximum: 6 minutes."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for reproducibility. Currently ignored by the Sonilo service but kept for graph consistency."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "video": {
        "name": "video",
        "tooltip": "Input video to generate music from. Maximum duration: 6 minutes."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Optional text prompt to guide music generation. Leave empty for best quality - the model will fully analyze the video content."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for reproducibility. Currently ignored by the Sonilo service but kept for graph consistency."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SplatToFile3D": {
    "display_name": "Create 3D File (from Splat)",
    "description": "Serialize a gaussian splat to a File3D object for Save / Preview 3D nodes. Supports one item per batch only.",
    "inputs": {
      "splat": {
        "name": "splat"
      },
      "format": {
        "name": "format",
        "tooltip": "ply: standard 3D Gaussian Splat with full spherical harmonics. ksplat: mkkellogg SplatBuffer (level 0, uncompressed), base color only spz: Niantic gzip-compressed (~10x smaller), base color only "
      }
    },
    "outputs": {
      "0": {
        "name": "model_3d",
        "tooltip": null
      }
    }
  },
  "SplatToMesh": {
    "display_name": "Extract Mesh from Splat",
    "description": "Extract a coloured mesh from a gaussian splat.",
    "inputs": {
      "splat": {
        "name": "splat"
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "Density-grid resolution along the longest axis. Higher = finer surface, more VRAM/time (grows with resolution^3)."
      },
      "kernel": {
        "name": "kernel",
        "tooltip": "Max splat half-width in voxels. Each gaussian is rasterized over a window sized to its own 3-sigma, capped here - small surfels stay cheap, large ones aren't truncated. Raise if sparse splats leave gaps."
      },
      "smooth": {
        "name": "smooth",
        "tooltip": "Taubin mesh-smoothing iterations. Smooths the surface without shrinking it (volume-preserving), unlike blurring the density. 0 = raw surface."
      },
      "level": {
        "name": "level",
        "tooltip": "Iso-surface level. Auto-picked by Otsu; this biases it (1.0 = auto, lower = fatter/more-connected surface, higher = thinner/tighter)."
      },
      "min_component": {
        "name": "min_component",
        "tooltip": "Drop connected components smaller than this many vertices (0 = keep all). Removes detached floater blobs and the inner shell of the double wall."
      },
      "min_opacity": {
        "name": "min_opacity",
        "tooltip": "Ignore gaussians fainter than this before meshing."
      },
      "color_sharpen": {
        "name": "color_sharpen",
        "tooltip": "Crisp up the vertex texture: 1.0 = physically-correct blend; higher biases each voxel's colour toward its dominant gaussian instead of averaging neighbours (de-smears the texture). Colour only - geometry is unchanged."
      }
    },
    "outputs": {
      "0": {
        "name": "mesh",
        "tooltip": null
      }
    }
  },
  "SplitAudioChannels": {
    "display_name": "Split Audio Channels",
    "description": "Separates the audio into left and right channels.",
    "inputs": {
      "audio": {
        "name": "audio"
      }
    },
    "outputs": {
      "0": {
        "name": "left",
        "tooltip": null
      },
      "1": {
        "name": "right",
        "tooltip": null
      }
    }
  },
  "SplitImageToTileList": {
    "display_name": "Split Image into List of Tiles",
    "description": "Splits an image into a batched list of tiles with a specified overlap.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "tile_width": {
        "name": "tile_width"
      },
      "tile_height": {
        "name": "tile_height"
      },
      "overlap": {
        "name": "overlap"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SplitImageWithAlpha": {
    "display_name": "Split Image with Alpha",
    "inputs": {
      "image": {
        "name": "image"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "tooltip": null
      }
    }
  },
  "SplitSigmas": {
    "display_name": "SplitSigmas",
    "inputs": {
      "sigmas": {
        "name": "sigmas"
      },
      "step": {
        "name": "step"
      }
    },
    "outputs": {
      "0": {
        "name": "high_sigmas",
        "tooltip": null
      },
      "1": {
        "name": "low_sigmas",
        "tooltip": null
      }
    }
  },
  "SplitSigmasDenoise": {
    "display_name": "SplitSigmasDenoise",
    "inputs": {
      "sigmas": {
        "name": "sigmas"
      },
      "denoise": {
        "name": "denoise"
      }
    },
    "outputs": {
      "0": {
        "name": "high_sigmas",
        "tooltip": null
      },
      "1": {
        "name": "low_sigmas",
        "tooltip": null
      }
    }
  },
  "StableCascade_EmptyLatentImage": {
    "display_name": "StableCascade_EmptyLatentImage",
    "inputs": {
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "compression": {
        "name": "compression"
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "name": "stage_c",
        "tooltip": null
      },
      "1": {
        "name": "stage_b",
        "tooltip": null
      }
    }
  },
  "StableCascade_StageB_Conditioning": {
    "display_name": "StableCascade_StageB_Conditioning",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      },
      "stage_c": {
        "name": "stage_c"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "StableCascade_StageC_VAEEncode": {
    "display_name": "StableCascade_StageC_VAEEncode",
    "inputs": {
      "image": {
        "name": "image"
      },
      "vae": {
        "name": "vae"
      },
      "compression": {
        "name": "compression"
      }
    },
    "outputs": {
      "0": {
        "name": "stage_c",
        "tooltip": null
      },
      "1": {
        "name": "stage_b",
        "tooltip": null
      }
    }
  },
  "StableCascade_SuperResolutionControlnet": {
    "display_name": "StableCascade_SuperResolutionControlnet",
    "inputs": {
      "image": {
        "name": "image"
      },
      "vae": {
        "name": "vae"
      }
    },
    "outputs": {
      "0": {
        "name": "controlnet_input",
        "tooltip": null
      },
      "1": {
        "name": "stage_c",
        "tooltip": null
      },
      "2": {
        "name": "stage_b",
        "tooltip": null
      }
    }
  },
  "StableZero123_Conditioning": {
    "display_name": "StableZero123_Conditioning",
    "inputs": {
      "clip_vision": {
        "name": "clip_vision"
      },
      "init_image": {
        "name": "init_image"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "elevation": {
        "name": "elevation"
      },
      "azimuth": {
        "name": "azimuth"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "StableZero123_Conditioning_Batched": {
    "display_name": "StableZero123_Conditioning_Batched",
    "inputs": {
      "clip_vision": {
        "name": "clip_vision"
      },
      "init_image": {
        "name": "init_image"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "elevation": {
        "name": "elevation"
      },
      "azimuth": {
        "name": "azimuth"
      },
      "elevation_batch_increment": {
        "name": "elevation_batch_increment"
      },
      "azimuth_batch_increment": {
        "name": "azimuth_batch_increment"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "StringCompare": {
    "display_name": "Compare Text",
    "inputs": {
      "string_a": {
        "name": "string_a"
      },
      "string_b": {
        "name": "string_b"
      },
      "mode": {
        "name": "mode"
      },
      "case_sensitive": {
        "name": "case_sensitive"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "StringConcatenate": {
    "display_name": "Concatenate Text",
    "inputs": {
      "string_a": {
        "name": "string_a"
      },
      "string_b": {
        "name": "string_b"
      },
      "delimiter": {
        "name": "delimiter"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "StringContains": {
    "display_name": "Contains Text",
    "inputs": {
      "string": {
        "name": "string"
      },
      "substring": {
        "name": "substring"
      },
      "case_sensitive": {
        "name": "case_sensitive"
      }
    },
    "outputs": {
      "0": {
        "name": "contains",
        "tooltip": null
      }
    }
  },
  "StringFormat": {
    "display_name": "Format Text",
    "description": "Same as Python's string format method. Supports all of Python's format options and features.",
    "inputs": {
      "values": {
        "name": "values"
      },
      "f_string": {
        "name": "f_string"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "StringLength": {
    "display_name": "Text Length",
    "inputs": {
      "string": {
        "name": "string"
      }
    },
    "outputs": {
      "0": {
        "name": "length",
        "tooltip": null
      }
    }
  },
  "StringReplace": {
    "display_name": "Replace Text",
    "inputs": {
      "string": {
        "name": "string"
      },
      "find": {
        "name": "find"
      },
      "replace": {
        "name": "replace"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "StringSubstring": {
    "display_name": "Substring",
    "inputs": {
      "string": {
        "name": "string"
      },
      "start": {
        "name": "start"
      },
      "end": {
        "name": "end"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "StringTrim": {
    "display_name": "Trim Text",
    "inputs": {
      "string": {
        "name": "string"
      },
      "mode": {
        "name": "mode"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "StripWhitespace": {
    "display_name": "Strip Whitespace (DEPRECATED)",
    "inputs": {
      "texts": {
        "name": "texts",
        "tooltip": "Text to process."
      }
    },
    "outputs": {
      "0": {
        "name": "texts",
        "tooltip": "Processed texts"
      }
    }
  },
  "StyleModelApply": {
    "display_name": "Apply Style Model",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      },
      "style_model": {
        "name": "style_model"
      },
      "clip_vision_output": {
        "name": "clip_vision_output"
      },
      "strength": {
        "name": "strength"
      },
      "strength_type": {
        "name": "strength_type"
      }
    }
  },
  "StyleModelLoader": {
    "display_name": "Load Style Model",
    "inputs": {
      "style_model_name": {
        "name": "style_model_name"
      }
    }
  },
  "SUPIRApply": {
    "display_name": "SUPIRApply",
    "inputs": {
      "model": {
        "name": "model"
      },
      "model_patch": {
        "name": "model_patch"
      },
      "vae": {
        "name": "vae"
      },
      "image": {
        "name": "image"
      },
      "strength_start": {
        "name": "strength_start",
        "tooltip": "Control strength at the start of sampling (high sigma)."
      },
      "strength_end": {
        "name": "strength_end",
        "tooltip": "Control strength at the end of sampling (low sigma). Linearly interpolated from start."
      },
      "restore_cfg": {
        "name": "restore_cfg",
        "tooltip": "Pulls denoised output toward the input latent. Higher = stronger fidelity to input. 0 to disable."
      },
      "restore_cfg_s_tmin": {
        "name": "restore_cfg_s_tmin",
        "tooltip": "Sigma threshold below which restore_cfg is disabled."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SV3D_Conditioning": {
    "display_name": "SV3D_Conditioning",
    "inputs": {
      "clip_vision": {
        "name": "clip_vision"
      },
      "init_image": {
        "name": "init_image"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "video_frames": {
        "name": "video_frames"
      },
      "elevation": {
        "name": "elevation"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "SVD_img2vid_Conditioning": {
    "display_name": "SVD_img2vid_Conditioning",
    "inputs": {
      "clip_vision": {
        "name": "clip_vision"
      },
      "init_image": {
        "name": "init_image"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "video_frames": {
        "name": "video_frames"
      },
      "motion_bucket_id": {
        "name": "motion_bucket_id"
      },
      "fps": {
        "name": "fps"
      },
      "augmentation_level": {
        "name": "augmentation_level"
      }
    },
    "outputs": {
      "0": {
        "name": "positive"
      },
      "1": {
        "name": "negative"
      },
      "2": {
        "name": "latent"
      }
    }
  },
  "SyncLipSyncNode": {
    "display_name": "sync.so Lip Sync",
    "description": "Re-sync mouth movement in a video to new speech audio using sync.so. Handles close-ups, profiles and obstructions automatically while preserving the speaker's expression. Cost scales with output duration.",
    "inputs": {
      "video": {
        "name": "video",
        "tooltip": "Footage of the speaker to re-sync. Up to 4K (4096x2160); a constant frame rate of 24/25/30 fps works best."
      },
      "audio": {
        "name": "audio",
        "tooltip": "Speech audio to sync the mouth to."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "model": {
        "name": "model",
        "tooltip": "sync.so generation model."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_speaker_frame": {
        "name": "speaker_frame"
      },
      "model_speaker_selection": {
        "name": "speaker_selection"
      },
      "model_speaker_x": {
        "name": "speaker_x"
      },
      "model_speaker_y": {
        "name": "speaker_y"
      },
      "model_sync_mode": {
        "name": "sync_mode"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "SyncTalkingImageNode": {
    "display_name": "sync.so Talking Image",
    "description": "Animate a still portrait into a talking video driven by speech audio, using sync.so's sync-3 model. The output duration matches the audio. Cost scales with output duration.",
    "inputs": {
      "image": {
        "name": "image",
        "tooltip": "A single image with a clearly visible face, up to 4K (4096x2160)."
      },
      "audio": {
        "name": "audio",
        "tooltip": "Speech audio driving the talking video; the output duration matches it. Chain any TTS node here to drive the animation from text."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Optional guidance for how the portrait comes to life, e.g. 'make the subject smile and look at the camera'. Leave empty for natural talking motion."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "model": {
        "name": "model",
        "tooltip": "sync.so generation model. Image input is exclusive to sync-3."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_auto_downscale": {
        "name": "auto_downscale"
      },
      "model_speaker_selection": {
        "name": "speaker_selection"
      },
      "model_speaker_x": {
        "name": "speaker_x"
      },
      "model_speaker_y": {
        "name": "speaker_y"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "T5TokenizerOptions": {
    "display_name": "T5 Tokenizer Options",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "min_padding": {
        "name": "min_padding"
      },
      "min_length": {
        "name": "min_length"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TCFG": {
    "display_name": "Tangential Damping CFG",
    "description": "TCFG – Tangential Damping CFG (2503.18137)\n\nRefine the uncond (negative) to align with the cond (positive) for improving quality.",
    "inputs": {
      "model": {
        "name": "model"
      }
    },
    "outputs": {
      "0": {
        "name": "patched_model",
        "tooltip": null
      }
    }
  },
  "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",
    "inputs": {
      "model": {
        "name": "model"
      },
      "tsr_k": {
        "name": "tsr_k",
        "tooltip": "Controls the rescaling strength.\nLower k produces more detailed results; higher k produces smoother results in image generation. Setting k = 1 disables rescaling."
      },
      "tsr_sigma": {
        "name": "tsr_sigma",
        "tooltip": "Controls how early rescaling takes effect.\nLarger values take effect earlier."
      }
    },
    "outputs": {
      "0": {
        "name": "patched_model",
        "tooltip": null
      }
    }
  },
  "Tencent3DPartNode": {
    "display_name": "Hunyuan3D: 3D Part",
    "description": "Automatically perform component identification and generation based on the model structure.",
    "inputs": {
      "model_3d": {
        "name": "model_3d",
        "tooltip": "3D model in FBX format. Model should have less than 30000 faces."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "FBX",
        "tooltip": null
      }
    }
  },
  "Tencent3DTextureEditNode": {
    "display_name": "Hunyuan3D: 3D Texture Edit",
    "description": "After inputting the 3D model, perform 3D model texture redrawing.",
    "inputs": {
      "model_3d": {
        "name": "model_3d",
        "tooltip": "3D model in FBX format. Model should have less than 100000 faces."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Describes texture editing. Supports up to 1024 UTF-8 characters."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "GLB",
        "tooltip": null
      },
      "1": {
        "name": "OBJ",
        "tooltip": null
      },
      "2": {
        "name": "texture_image",
        "tooltip": null
      }
    }
  },
  "TencentImageToModelNode": {
    "display_name": "Hunyuan3D: Image(s) to Model",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The LowPoly option is unavailable for the `3.1` model."
      },
      "image": {
        "name": "image"
      },
      "face_count": {
        "name": "face_count"
      },
      "generate_type": {
        "name": "generate_type"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "image_left": {
        "name": "image_left"
      },
      "image_right": {
        "name": "image_right"
      },
      "image_back": {
        "name": "image_back"
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "generate_type_pbr": {
        "name": "pbr"
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "GLB",
        "tooltip": null
      },
      "2": {
        "name": "OBJ",
        "tooltip": null
      },
      "3": {
        "name": "texture_image",
        "tooltip": null
      },
      "4": {
        "name": "optional_metallic",
        "tooltip": null
      },
      "5": {
        "name": "optional_normal",
        "tooltip": null
      },
      "6": {
        "name": "optional_roughness",
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model_3d": {
        "name": "model_3d",
        "tooltip": "Input 3D model (GLB, OBJ, or FBX)"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "OBJ",
        "tooltip": null
      },
      "1": {
        "name": "FBX",
        "tooltip": null
      },
      "2": {
        "name": "uv_image",
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model_3d": {
        "name": "model_3d",
        "tooltip": "Input 3D model (GLB or OBJ)"
      },
      "polygon_type": {
        "name": "polygon_type",
        "tooltip": "Surface composition type."
      },
      "face_level": {
        "name": "face_level",
        "tooltip": "Polygon reduction level."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "OBJ",
        "tooltip": null
      }
    }
  },
  "TencentTextToModelNode": {
    "display_name": "Hunyuan3D: Text to Model",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The LowPoly option is unavailable for the `3.1` model."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Supports up to 1024 characters."
      },
      "face_count": {
        "name": "face_count"
      },
      "generate_type": {
        "name": "generate_type"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "generate_type_pbr": {
        "name": "pbr"
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "GLB",
        "tooltip": null
      },
      "2": {
        "name": "OBJ",
        "tooltip": null
      },
      "3": {
        "name": "texture_image",
        "tooltip": null
      }
    }
  },
  "TextEncodeAceStepAudio": {
    "display_name": "TextEncodeAceStepAudio",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "tags": {
        "name": "tags"
      },
      "lyrics": {
        "name": "lyrics"
      },
      "lyrics_strength": {
        "name": "lyrics_strength"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TextEncodeAceStepAudio1_5": {
    "display_name": "TextEncodeAceStepAudio1.5",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "tags": {
        "name": "tags"
      },
      "lyrics": {
        "name": "lyrics"
      },
      "seed": {
        "name": "seed"
      },
      "bpm": {
        "name": "bpm"
      },
      "duration": {
        "name": "duration"
      },
      "timesignature": {
        "name": "timesignature"
      },
      "language": {
        "name": "language"
      },
      "keyscale": {
        "name": "keyscale"
      },
      "generate_audio_codes": {
        "name": "generate_audio_codes",
        "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."
      },
      "cfg_scale": {
        "name": "cfg_scale"
      },
      "temperature": {
        "name": "temperature"
      },
      "top_p": {
        "name": "top_p"
      },
      "top_k": {
        "name": "top_k"
      },
      "min_p": {
        "name": "min_p"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TextEncodeBooguEdit": {
    "display_name": "TextEncodeBooguEdit",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "prompt": {
        "name": "prompt"
      },
      "negative_prompt": {
        "name": "negative_prompt"
      },
      "vae": {
        "name": "vae"
      },
      "images": {
        "name": "images",
        "tooltip": "Reference image(s) to edit. Boogu focuses on one reference per sample; more are allowed."
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      }
    }
  },
  "TextEncodeHunyuanVideo_ImageToVideo": {
    "display_name": "TextEncodeHunyuanVideo_ImageToVideo",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "clip_vision_output": {
        "name": "clip_vision_output"
      },
      "prompt": {
        "name": "prompt"
      },
      "image_interleave": {
        "name": "image_interleave",
        "tooltip": "How much the image influences things vs the text prompt. Higher number means more influence from the text prompt."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TextEncodeJoyImageEdit": {
    "display_name": "TextEncodeJoyImageEdit",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "prompt": {
        "name": "prompt"
      },
      "vae": {
        "name": "vae"
      },
      "images": {
        "name": "images"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TextEncodeMageFlowEdit": {
    "display_name": "TextEncodeMageFlowEdit",
    "description": "Encode an edit instruction with one or more reference images for Mage-Flow-Edit. Reference latents are resized to the output resolution (width/height, or the first image's size when 0). Use the latent output for sampling so the sizes always match.",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "prompt": {
        "name": "prompt"
      },
      "negative_prompt": {
        "name": "negative_prompt"
      },
      "images": {
        "name": "images",
        "tooltip": "Reference image(s) to edit. All references are resized to the output resolution before encoding."
      },
      "width": {
        "name": "width",
        "tooltip": "Output width. 0 = use the first reference image's size."
      },
      "height": {
        "name": "height",
        "tooltip": "Output height. 0 = use the first reference image's size."
      },
      "batch_size": {
        "name": "batch_size"
      },
      "vae": {
        "name": "vae"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "TextEncodeQwenImageEdit": {
    "display_name": "TextEncodeQwenImageEdit",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "prompt": {
        "name": "prompt"
      },
      "vae": {
        "name": "vae"
      },
      "image": {
        "name": "image"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TextEncodeQwenImageEditPlus": {
    "display_name": "TextEncodeQwenImageEditPlus",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "prompt": {
        "name": "prompt"
      },
      "vae": {
        "name": "vae"
      },
      "image1": {
        "name": "image1"
      },
      "image2": {
        "name": "image2"
      },
      "image3": {
        "name": "image3"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TextEncodeZImageOmni": {
    "display_name": "TextEncodeZImageOmni",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "prompt": {
        "name": "prompt"
      },
      "auto_resize_images": {
        "name": "auto_resize_images"
      },
      "image_encoder": {
        "name": "image_encoder"
      },
      "vae": {
        "name": "vae"
      },
      "image1": {
        "name": "image1"
      },
      "image2": {
        "name": "image2"
      },
      "image3": {
        "name": "image3"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TextGenerate": {
    "display_name": "Generate Text",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "prompt": {
        "name": "prompt"
      },
      "max_length": {
        "name": "max_length"
      },
      "sampling_mode": {
        "name": "sampling_mode"
      },
      "image": {
        "name": "image"
      },
      "video": {
        "name": "video",
        "tooltip": "Video frames as image batch. Assumed to be 24 FPS; subsampled to 1 FPS internally."
      },
      "audio": {
        "name": "audio"
      },
      "thinking": {
        "name": "thinking",
        "tooltip": "Operate in thinking mode if the model supports it."
      },
      "use_default_template": {
        "name": "use_default_template",
        "tooltip": "Use the built in system prompt/template if the model has one."
      },
      "sampling_mode_min_p": {
        "name": "min_p"
      },
      "sampling_mode_presence_penalty": {
        "name": "presence_penalty"
      },
      "sampling_mode_repetition_penalty": {
        "name": "repetition_penalty"
      },
      "sampling_mode_seed": {
        "name": "seed"
      },
      "sampling_mode_temperature": {
        "name": "temperature"
      },
      "sampling_mode_top_k": {
        "name": "top_k"
      },
      "sampling_mode_top_p": {
        "name": "top_p"
      }
    },
    "outputs": {
      "0": {
        "name": "generated_text",
        "tooltip": null
      }
    }
  },
  "TextGenerateLTX2Prompt": {
    "display_name": "Generate LTX2 Prompt",
    "inputs": {
      "clip": {
        "name": "clip"
      },
      "prompt": {
        "name": "prompt"
      },
      "max_length": {
        "name": "max_length"
      },
      "sampling_mode": {
        "name": "sampling_mode"
      },
      "image": {
        "name": "image"
      },
      "video": {
        "name": "video",
        "tooltip": "Video frames as image batch. Assumed to be 24 FPS; subsampled to 1 FPS internally."
      },
      "audio": {
        "name": "audio"
      },
      "thinking": {
        "name": "thinking",
        "tooltip": "Operate in thinking mode if the model supports it."
      },
      "use_default_template": {
        "name": "use_default_template",
        "tooltip": "Use the built in system prompt/template if the model has one."
      },
      "sampling_mode_min_p": {
        "name": "min_p"
      },
      "sampling_mode_presence_penalty": {
        "name": "presence_penalty"
      },
      "sampling_mode_repetition_penalty": {
        "name": "repetition_penalty"
      },
      "sampling_mode_seed": {
        "name": "seed"
      },
      "sampling_mode_temperature": {
        "name": "temperature"
      },
      "sampling_mode_top_k": {
        "name": "top_k"
      },
      "sampling_mode_top_p": {
        "name": "top_p"
      }
    },
    "outputs": {
      "0": {
        "name": "generated_text",
        "tooltip": null
      }
    }
  },
  "TextOverlay": {
    "display_name": "Draw Text Overlay",
    "description": "Draw text overlay on an image or batch of images.",
    "inputs": {
      "images": {
        "name": "images"
      },
      "text": {
        "name": "text"
      },
      "font_size": {
        "name": "font_size",
        "tooltip": "Font size as a percentage of the image height."
      },
      "color": {
        "name": "color",
        "tooltip": "Color of the text."
      },
      "position": {
        "name": "position"
      },
      "align": {
        "name": "align"
      },
      "outline": {
        "name": "outline",
        "tooltip": "Draw a black outline around the text."
      }
    },
    "outputs": {
      "0": {
        "name": "images",
        "tooltip": null
      }
    }
  },
  "TextToLowercase": {
    "display_name": "Convert Text to Lowercase (DEPRECATED)",
    "inputs": {
      "texts": {
        "name": "texts",
        "tooltip": "Text to process."
      }
    },
    "outputs": {
      "0": {
        "name": "texts",
        "tooltip": "Processed texts"
      }
    }
  },
  "TextToUppercase": {
    "display_name": "Convert Text to Uppercase (DEPRECATED)",
    "inputs": {
      "texts": {
        "name": "texts",
        "tooltip": "Text to process."
      }
    },
    "outputs": {
      "0": {
        "name": "texts",
        "tooltip": "Processed texts"
      }
    }
  },
  "ThresholdMask": {
    "display_name": "Threshold Mask",
    "inputs": {
      "mask": {
        "name": "mask"
      },
      "value": {
        "name": "value"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TomePatchModel": {
    "display_name": "TomePatchModel",
    "inputs": {
      "model": {
        "name": "model"
      },
      "ratio": {
        "name": "ratio"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TopazImageEnhance": {
    "display_name": "Topaz Image Enhance (Legacy)",
    "description": "Industry-standard upscaling and image enhancement.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "image": {
        "name": "image"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Optional text prompt for creative upscaling guidance."
      },
      "subject_detection": {
        "name": "subject_detection"
      },
      "face_enhancement": {
        "name": "face_enhancement",
        "tooltip": "Enhance faces (if present) during processing."
      },
      "face_enhancement_creativity": {
        "name": "face_enhancement_creativity",
        "tooltip": "Set the creativity level for face enhancement."
      },
      "face_enhancement_strength": {
        "name": "face_enhancement_strength",
        "tooltip": "Controls how sharp enhanced faces are relative to the background."
      },
      "crop_to_fill": {
        "name": "crop_to_fill",
        "tooltip": "By default, the image is letterboxed when the output aspect ratio differs. Enable to crop the image to fill the output dimensions."
      },
      "output_width": {
        "name": "output_width",
        "tooltip": "Zero value means to calculate automatically (usually it will be original size or output_height if specified)."
      },
      "output_height": {
        "name": "output_height",
        "tooltip": "Zero value means to output in the same height as original or output width."
      },
      "creativity": {
        "name": "creativity"
      },
      "face_preservation": {
        "name": "face_preservation",
        "tooltip": "Preserve subjects' facial identity."
      },
      "color_preservation": {
        "name": "color_preservation",
        "tooltip": "Preserve the original colors."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TopazImageEnhanceV2": {
    "display_name": "Topaz Image Enhance",
    "description": "Industry-standard upscaling and image enhancement.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "model": {
        "name": "model"
      },
      "output_width": {
        "name": "output_width",
        "tooltip": "Zero value means to calculate automatically (usually it will be original size or scaled proportionally to output_height if specified). Wonder 3.5 supports upscale factors from 1x to 6x only. Bloom 2 and Wonder 3.5 preserve the input aspect ratio and treat the requested size as a target."
      },
      "output_height": {
        "name": "output_height",
        "tooltip": "Zero value means to output in the same height as original or scaled proportionally to output_width if specified. Wonder 3.5 supports upscale factors from 1x to 6x only. Bloom 2 and Wonder 3.5 preserve the input aspect ratio and treat the requested size as a target."
      },
      "model_color_preservation": {
        "name": "color_preservation"
      },
      "model_creativity": {
        "name": "creativity"
      },
      "model_crop_to_fill": {
        "name": "crop_to_fill"
      },
      "model_face_enhancement": {
        "name": "face_enhancement"
      },
      "model_face_enhancement_creativity": {
        "name": "face_enhancement_creativity"
      },
      "model_face_enhancement_strength": {
        "name": "face_enhancement_strength"
      },
      "model_face_preservation": {
        "name": "face_preservation"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_subject_detection": {
        "name": "subject_detection"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TopazVideoEnhance": {
    "display_name": "Topaz Video Enhance (Legacy)",
    "description": "Breathe new life into video with powerful upscaling and recovery technology.",
    "inputs": {
      "video": {
        "name": "video"
      },
      "upscaler_enabled": {
        "name": "upscaler_enabled"
      },
      "upscaler_model": {
        "name": "upscaler_model"
      },
      "upscaler_resolution": {
        "name": "upscaler_resolution"
      },
      "upscaler_creativity": {
        "name": "upscaler_creativity",
        "tooltip": "Creativity level (applies only to Starlight (Astra) Creative)."
      },
      "interpolation_enabled": {
        "name": "interpolation_enabled"
      },
      "interpolation_model": {
        "name": "interpolation_model"
      },
      "interpolation_slowmo": {
        "name": "interpolation_slowmo",
        "tooltip": "Slow-motion factor applied to the input video. For example, 2 makes the output twice as slow and doubles the duration."
      },
      "interpolation_frame_rate": {
        "name": "interpolation_frame_rate",
        "tooltip": "Output frame rate."
      },
      "interpolation_duplicate": {
        "name": "interpolation_duplicate",
        "tooltip": "Analyze the input for duplicate frames and remove them."
      },
      "interpolation_duplicate_threshold": {
        "name": "interpolation_duplicate_threshold",
        "tooltip": "Detection sensitivity for duplicate frames."
      },
      "dynamic_compression_level": {
        "name": "dynamic_compression_level",
        "tooltip": "CQP level."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TopazVideoEnhanceV2": {
    "display_name": "Topaz Video Enhance",
    "description": "Breathe new life into video with powerful upscaling and recovery technology.",
    "inputs": {
      "video": {
        "name": "video"
      },
      "upscaler_model": {
        "name": "upscaler_model"
      },
      "interpolation_model": {
        "name": "interpolation_model"
      },
      "dynamic_compression_level": {
        "name": "dynamic_compression_level",
        "tooltip": "CQP level."
      },
      "upscaler_model_creativity": {
        "name": "creativity"
      },
      "upscaler_model_prompt": {
        "name": "prompt"
      },
      "upscaler_model_realism": {
        "name": "realism"
      },
      "upscaler_model_sharp": {
        "name": "sharp"
      },
      "upscaler_model_upscaler_resolution": {
        "name": "upscaler_resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TorchCompileModel": {
    "display_name": "TorchCompileModel",
    "inputs": {
      "model": {
        "name": "model"
      },
      "backend": {
        "name": "backend"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TrainLoraNode": {
    "display_name": "Train LoRA",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The model to train the LoRA on."
      },
      "latents": {
        "name": "latents",
        "tooltip": "The Latents to use for training, serve as dataset/input of the model."
      },
      "positive": {
        "name": "positive",
        "tooltip": "The positive conditioning to use for training."
      },
      "batch_size": {
        "name": "batch_size",
        "tooltip": "The batch size to use for training."
      },
      "grad_accumulation_steps": {
        "name": "grad_accumulation_steps",
        "tooltip": "The number of gradient accumulation steps to use for training."
      },
      "steps": {
        "name": "steps",
        "tooltip": "The number of steps to train the LoRA for."
      },
      "learning_rate": {
        "name": "learning_rate",
        "tooltip": "The learning rate to use for training."
      },
      "rank": {
        "name": "rank",
        "tooltip": "The rank of the LoRA layers."
      },
      "optimizer": {
        "name": "optimizer",
        "tooltip": "The optimizer to use for training."
      },
      "loss_function": {
        "name": "loss_function",
        "tooltip": "The loss function to use for training."
      },
      "seed": {
        "name": "seed",
        "tooltip": "The seed to use for training (used in generator for LoRA weight initialization and noise sampling)"
      },
      "training_dtype": {
        "name": "training_dtype",
        "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."
      },
      "lora_dtype": {
        "name": "lora_dtype",
        "tooltip": "The dtype to use for lora."
      },
      "quantized_backward": {
        "name": "quantized_backward",
        "tooltip": "When using training_dtype 'none' and training on quantized model, doing backward with quantized matmul when enabled."
      },
      "algorithm": {
        "name": "algorithm",
        "tooltip": "The algorithm to use for training."
      },
      "gradient_checkpointing": {
        "name": "gradient_checkpointing",
        "tooltip": "Use gradient checkpointing for training."
      },
      "checkpoint_depth": {
        "name": "checkpoint_depth",
        "tooltip": "Depth level for gradient checkpointing."
      },
      "offloading": {
        "name": "offloading",
        "tooltip": "Offload model weights to CPU during training to save GPU memory."
      },
      "existing_lora": {
        "name": "existing_lora",
        "tooltip": "The existing LoRA to append to. Set to None for new LoRA."
      },
      "bucket_mode": {
        "name": "bucket_mode",
        "tooltip": "Enable resolution bucket mode. When enabled, expects pre-bucketed latents from ResolutionBucket node."
      },
      "bypass_mode": {
        "name": "bypass_mode",
        "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."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "lora",
        "tooltip": "LoRA weights"
      },
      "1": {
        "name": "loss_map",
        "tooltip": "Loss history"
      },
      "2": {
        "name": "steps",
        "tooltip": "Total training steps"
      }
    }
  },
  "TransformSplat": {
    "display_name": "Transform Splat",
    "description": "Translate, rotate, and scale a gaussian splat. Non-uniform scale also reshapes every individual splat, slower process.",
    "inputs": {
      "splat": {
        "name": "splat"
      },
      "translate_x": {
        "name": "translate_x"
      },
      "translate_y": {
        "name": "translate_y"
      },
      "translate_z": {
        "name": "translate_z"
      },
      "rotate_x": {
        "name": "rotate_x"
      },
      "rotate_y": {
        "name": "rotate_y"
      },
      "rotate_z": {
        "name": "rotate_z"
      },
      "scale_x": {
        "name": "scale_x"
      },
      "scale_y": {
        "name": "scale_y"
      },
      "scale_z": {
        "name": "scale_z"
      }
    },
    "outputs": {
      "0": {
        "name": "splat",
        "tooltip": null
      }
    }
  },
  "TrimAudioDuration": {
    "display_name": "Trim Audio Duration",
    "description": "Trim audio tensor into chosen time range.",
    "inputs": {
      "audio": {
        "name": "audio"
      },
      "start_index": {
        "name": "start_index",
        "tooltip": "Start time in seconds, can be negative to count from the end (supports sub-seconds)."
      },
      "duration": {
        "name": "duration",
        "tooltip": "Duration in seconds"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TrimVideoLatent": {
    "display_name": "Trim Video Latent",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "trim_amount": {
        "name": "trim_amount"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TripleCLIPLoader": {
    "display_name": "Load CLIP (Triple)",
    "description": "Recipes:\nsd3: clip-l, clip-g, t5",
    "inputs": {
      "clip_name1": {
        "name": "clip_name1"
      },
      "clip_name2": {
        "name": "clip_name2"
      },
      "clip_name3": {
        "name": "clip_name3"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TripoConversionNode": {
    "display_name": "Tripo: Convert model",
    "inputs": {
      "original_model_task_id": {
        "name": "original_model_task_id"
      },
      "format": {
        "name": "format"
      },
      "quad": {
        "name": "quad"
      },
      "face_limit": {
        "name": "face_limit"
      },
      "texture_size": {
        "name": "texture_size"
      },
      "texture_format": {
        "name": "texture_format"
      },
      "force_symmetry": {
        "name": "force_symmetry"
      },
      "flatten_bottom": {
        "name": "flatten_bottom"
      },
      "flatten_bottom_threshold": {
        "name": "flatten_bottom_threshold"
      },
      "pivot_to_center_bottom": {
        "name": "pivot_to_center_bottom"
      },
      "scale_factor": {
        "name": "scale_factor"
      },
      "with_animation": {
        "name": "with_animation"
      },
      "pack_uv": {
        "name": "pack_uv"
      },
      "bake": {
        "name": "bake"
      },
      "part_names": {
        "name": "part_names"
      },
      "fbx_preset": {
        "name": "fbx_preset"
      },
      "export_vertex_colors": {
        "name": "export_vertex_colors"
      },
      "export_orientation": {
        "name": "export_orientation"
      },
      "animate_in_place": {
        "name": "animate_in_place"
      }
    }
  },
  "TripoImageToModelNode": {
    "display_name": "Tripo: Image to Model",
    "inputs": {
      "image": {
        "name": "image"
      },
      "model_version": {
        "name": "model_version",
        "tooltip": "The model version to use for generation"
      },
      "style": {
        "name": "style"
      },
      "texture": {
        "name": "texture"
      },
      "pbr": {
        "name": "pbr"
      },
      "model_seed": {
        "name": "model_seed"
      },
      "orientation": {
        "name": "orientation"
      },
      "texture_seed": {
        "name": "texture_seed"
      },
      "texture_quality": {
        "name": "texture_quality"
      },
      "texture_alignment": {
        "name": "texture_alignment"
      },
      "face_limit": {
        "name": "face_limit"
      },
      "quad": {
        "name": "quad"
      },
      "geometry_quality": {
        "name": "geometry_quality"
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "model task_id",
        "tooltip": null
      },
      "2": {
        "name": "GLB",
        "tooltip": null
      }
    }
  },
  "TripoImportModelNode": {
    "display_name": "Tripo: Import Model",
    "description": "Import an external 3D model (e.g. from Rodin, Hunyuan3D or a local file) into Tripo to use it with Tripo's post-processing nodes: Texture, Rig, Convert. GLB is recommended: textures survive import only when embedded in the file. Note that texturing an imported model requires a texture prompt.",
    "inputs": {
      "model_3d": {
        "name": "model_3d",
        "tooltip": "3D model to import (GLB / FBX / OBJ / STL, up to 150 MB). OBJ and STL files carry no embedded textures."
      }
    },
    "outputs": {
      "0": {
        "name": "model task_id",
        "tooltip": null
      }
    }
  },
  "TripoMultiviewToModelNode": {
    "display_name": "Tripo: Multiview to Model",
    "inputs": {
      "image": {
        "name": "image"
      },
      "image_left": {
        "name": "image_left"
      },
      "image_back": {
        "name": "image_back"
      },
      "image_right": {
        "name": "image_right"
      },
      "model_version": {
        "name": "model_version",
        "tooltip": "The model version to use for generation"
      },
      "orientation": {
        "name": "orientation"
      },
      "texture": {
        "name": "texture"
      },
      "pbr": {
        "name": "pbr"
      },
      "model_seed": {
        "name": "model_seed"
      },
      "texture_seed": {
        "name": "texture_seed"
      },
      "texture_quality": {
        "name": "texture_quality"
      },
      "texture_alignment": {
        "name": "texture_alignment"
      },
      "face_limit": {
        "name": "face_limit"
      },
      "quad": {
        "name": "quad",
        "tooltip": "This parameter is deprecated and does nothing."
      },
      "geometry_quality": {
        "name": "geometry_quality"
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "model task_id",
        "tooltip": null
      },
      "2": {
        "name": "GLB",
        "tooltip": null
      }
    }
  },
  "TripoP1ImageToModelNode": {
    "display_name": "Tripo P1: Image to Model",
    "description": "Tripo P1 image-to-3D. Optimized for low-poly, game-ready meshes.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "output_mode": {
        "name": "output_mode",
        "tooltip": "\"Geometry only\" returns an untextured mesh. \"Textured\" adds color/PBR maps."
      },
      "enable_image_autofix": {
        "name": "enable_image_autofix",
        "tooltip": "Pre-process the input image for better generation quality."
      },
      "face_limit": {
        "name": "face_limit",
        "tooltip": "Target face count, 48-20000. -1 lets Tripo pick adaptively."
      },
      "model_seed": {
        "name": "model_seed"
      },
      "auto_size": {
        "name": "auto_size",
        "tooltip": "Scale the output to approximate real-world meters."
      },
      "export_uv": {
        "name": "export_uv",
        "tooltip": "UV unwrap during generation. Turn off for faster geometry-only runs."
      },
      "compress_geometry": {
        "name": "compress_geometry",
        "tooltip": "Apply geometry-based compression. Decompress before editing."
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "model task_id",
        "tooltip": null
      },
      "2": {
        "name": "GLB",
        "tooltip": null
      }
    }
  },
  "TripoP1MultiviewToModelNode": {
    "display_name": "Tripo P1: Multiview to Model",
    "description": "Tripo P1 multiview-to-3D from 2-4 reference images in [front, left, back, right] order. Front is required; any combination of the other three may be omitted.",
    "inputs": {
      "image": {
        "name": "image",
        "tooltip": "Front view (0°). Required."
      },
      "output_mode": {
        "name": "output_mode",
        "tooltip": "\"Geometry only\" returns an untextured mesh. \"Textured\" adds color/PBR maps."
      },
      "image_left": {
        "name": "image_left",
        "tooltip": "Left view (90°), i.e. the subject's left side."
      },
      "image_back": {
        "name": "image_back",
        "tooltip": "Back view (180°)."
      },
      "image_right": {
        "name": "image_right",
        "tooltip": "Right view (270°), i.e. the subject's right side."
      },
      "face_limit": {
        "name": "face_limit",
        "tooltip": "Target face count, 48-20000. -1 lets Tripo pick adaptively."
      },
      "model_seed": {
        "name": "model_seed"
      },
      "auto_size": {
        "name": "auto_size",
        "tooltip": "Scale the output to approximate real-world meters."
      },
      "export_uv": {
        "name": "export_uv",
        "tooltip": "UV unwrap during generation. Turn off for faster geometry-only runs."
      },
      "compress_geometry": {
        "name": "compress_geometry",
        "tooltip": "Apply geometry-based compression. Decompress before editing."
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "model task_id",
        "tooltip": null
      },
      "2": {
        "name": "GLB",
        "tooltip": null
      }
    }
  },
  "TripoP1TextToModelNode": {
    "display_name": "Tripo P1: Text to Model",
    "description": "Tripo P1 text-to-3D. Optimized for low-poly, game-ready meshes with stable topology.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Up to 1024 characters."
      },
      "output_mode": {
        "name": "output_mode",
        "tooltip": "\"Geometry only\" returns an untextured mesh. \"Textured\" adds color/PBR maps."
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "Up to 255 characters."
      },
      "image_seed": {
        "name": "image_seed"
      },
      "face_limit": {
        "name": "face_limit",
        "tooltip": "Target face count, 48-20000. -1 lets Tripo pick adaptively."
      },
      "model_seed": {
        "name": "model_seed"
      },
      "auto_size": {
        "name": "auto_size",
        "tooltip": "Scale the output to approximate real-world meters."
      },
      "export_uv": {
        "name": "export_uv",
        "tooltip": "UV unwrap during generation. Turn off for faster geometry-only runs."
      },
      "compress_geometry": {
        "name": "compress_geometry",
        "tooltip": "Apply geometry-based compression. Decompress before editing."
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "model task_id",
        "tooltip": null
      },
      "2": {
        "name": "GLB",
        "tooltip": null
      }
    }
  },
  "TripoRefineNode": {
    "display_name": "Tripo: Refine Draft model",
    "description": "Refine a draft model created by v1.4 Tripo models only.",
    "inputs": {
      "model_task_id": {
        "name": "model_task_id",
        "tooltip": "Must be a v1.4 Tripo model"
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "model task_id",
        "tooltip": null
      },
      "2": {
        "name": "GLB",
        "tooltip": null
      }
    }
  },
  "TripoRetargetNode": {
    "display_name": "Tripo: Retarget rigged model",
    "inputs": {
      "original_model_task_id": {
        "name": "original_model_task_id"
      },
      "animation": {
        "name": "animation"
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "retarget task_id",
        "tooltip": null
      },
      "2": {
        "name": "GLB",
        "tooltip": null
      }
    }
  },
  "TripoRigNode": {
    "display_name": "Tripo: Rig model",
    "inputs": {
      "original_model_task_id": {
        "name": "original_model_task_id"
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "rig task_id",
        "tooltip": null
      },
      "2": {
        "name": "GLB",
        "tooltip": null
      }
    }
  },
  "TripoSplatConditioning": {
    "display_name": "TripoSplat Conditioning",
    "description": "Encode the image with DINOv3 and the Flux2 VAE into TripoSplat positive/negative conditioning, and create the fixed size noise target (latent + camera) for the KSampler",
    "inputs": {
      "clip_vision": {
        "name": "clip_vision",
        "tooltip": "DINOv3 ViT-H/16+ image encoder"
      },
      "vae": {
        "name": "vae",
        "tooltip": "Flux2 VAE"
      },
      "image": {
        "name": "image"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": "The fixed size noise target (latent +camera)."
      }
    }
  },
  "TripoSplatPreprocessImage": {
    "display_name": "TripoSplat Preprocess Image",
    "description": "Crop center each image to a square canvas on a black background and add padding.",
    "inputs": {
      "image": {
        "name": "image"
      },
      "mask": {
        "name": "mask"
      },
      "erode_radius": {
        "name": "erode_radius",
        "tooltip": "Erode the alpha matte by this pixel radius before cropping (avoids border bleed)."
      },
      "size": {
        "name": "size",
        "tooltip": "Square image size. The model is trained at 1024; other sizes run but are off-distribution."
      }
    },
    "outputs": {
      "0": {
        "name": "image",
        "tooltip": null
      }
    }
  },
  "TripoSplatSamplingPreview": {
    "display_name": "TripoSplat Sampling Preview",
    "description": "Patch the TripoSplat model for the standard Ksampler node to show a live decoded gaussian splat preview at each step.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "vae": {
        "name": "vae",
        "tooltip": "TripoSplat VAE decoder"
      },
      "octree_level": {
        "name": "octree_level",
        "tooltip": "Octree depth for the preview decode (lower = cheaper/coarser)."
      },
      "num_gaussians": {
        "name": "num_gaussians",
        "tooltip": "Number of gaussians to produce for the preview (rounded to a multiple of 32)."
      },
      "yaw": {
        "name": "yaw",
        "tooltip": "Preview camera yaw in degrees."
      },
      "pitch": {
        "name": "pitch",
        "tooltip": "Preview camera pitch in degrees."
      },
      "point_size": {
        "name": "point_size",
        "tooltip": "Maximum splat radius in pixels. Each gaussian is sized from its scale and capped here; lower = finer/pointier, higher = chunkier."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "TripoTextToModelNode": {
    "display_name": "Tripo: Text to Model",
    "inputs": {
      "prompt": {
        "name": "prompt"
      },
      "negative_prompt": {
        "name": "negative_prompt"
      },
      "model_version": {
        "name": "model_version"
      },
      "style": {
        "name": "style"
      },
      "texture": {
        "name": "texture"
      },
      "pbr": {
        "name": "pbr"
      },
      "image_seed": {
        "name": "image_seed"
      },
      "model_seed": {
        "name": "model_seed"
      },
      "texture_seed": {
        "name": "texture_seed"
      },
      "texture_quality": {
        "name": "texture_quality"
      },
      "face_limit": {
        "name": "face_limit"
      },
      "quad": {
        "name": "quad"
      },
      "geometry_quality": {
        "name": "geometry_quality"
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "model task_id",
        "tooltip": null
      },
      "2": {
        "name": "GLB",
        "tooltip": null
      }
    }
  },
  "TripoTextureNode": {
    "display_name": "Tripo: Texture model",
    "inputs": {
      "model_task_id": {
        "name": "model_task_id"
      },
      "texture": {
        "name": "texture"
      },
      "pbr": {
        "name": "pbr"
      },
      "texture_seed": {
        "name": "texture_seed"
      },
      "texture_quality": {
        "name": "texture_quality"
      },
      "texture_alignment": {
        "name": "texture_alignment"
      },
      "texture_prompt": {
        "name": "texture_prompt",
        "tooltip": "Optional text guidance for texturing. Required in practice for imported models (Tripo: Import Model), which carry no source image to infer colors from."
      }
    },
    "outputs": {
      "0": {
        "name": "model_file",
        "tooltip": null
      },
      "1": {
        "name": "model task_id",
        "tooltip": null
      },
      "2": {
        "name": "GLB",
        "tooltip": null
      }
    }
  },
  "TruncateText": {
    "display_name": "Truncate Text",
    "inputs": {
      "texts": {
        "name": "texts",
        "tooltip": "Text to process."
      },
      "max_length": {
        "name": "max_length",
        "tooltip": "Maximum text length."
      }
    },
    "outputs": {
      "0": {
        "name": "texts",
        "tooltip": "Processed texts"
      }
    }
  },
  "unCLIPCheckpointLoader": {
    "display_name": "Load unCLIP Checkpoint",
    "inputs": {
      "ckpt_name": {
        "name": "ckpt_name"
      }
    }
  },
  "unCLIPConditioning": {
    "display_name": "unCLIPConditioning",
    "inputs": {
      "conditioning": {
        "name": "conditioning"
      },
      "clip_vision_output": {
        "name": "clip_vision_output"
      },
      "strength": {
        "name": "strength"
      },
      "noise_augmentation": {
        "name": "noise_augmentation"
      }
    }
  },
  "UNetCrossAttentionMultiply": {
    "display_name": "UNetCrossAttentionMultiply",
    "inputs": {
      "model": {
        "name": "model"
      },
      "q": {
        "name": "q"
      },
      "k": {
        "name": "k"
      },
      "v": {
        "name": "v"
      },
      "out": {
        "name": "out"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "UNETLoader": {
    "display_name": "Load Diffusion Model",
    "inputs": {
      "unet_name": {
        "name": "unet_name"
      },
      "weight_dtype": {
        "name": "weight_dtype"
      }
    }
  },
  "UNetSelfAttentionMultiply": {
    "display_name": "UNetSelfAttentionMultiply",
    "inputs": {
      "model": {
        "name": "model"
      },
      "q": {
        "name": "q"
      },
      "k": {
        "name": "k"
      },
      "v": {
        "name": "v"
      },
      "out": {
        "name": "out"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "UNetTemporalAttentionMultiply": {
    "display_name": "UNetTemporalAttentionMultiply",
    "inputs": {
      "model": {
        "name": "model"
      },
      "self_structural": {
        "name": "self_structural"
      },
      "self_temporal": {
        "name": "self_temporal"
      },
      "cross_structural": {
        "name": "cross_structural"
      },
      "cross_temporal": {
        "name": "cross_temporal"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "UpscaleModelLoader": {
    "display_name": "Load Upscale Model",
    "inputs": {
      "model_name": {
        "name": "model_name"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "USOStyleReference": {
    "display_name": "Apply USO Style Reference",
    "inputs": {
      "model": {
        "name": "model"
      },
      "model_patch": {
        "name": "model_patch"
      },
      "clip_vision_output": {
        "name": "clip_vision_output"
      }
    }
  },
  "VAEDecode": {
    "display_name": "VAE Decode",
    "description": "Decodes latent images back into pixel space images.",
    "inputs": {
      "samples": {
        "name": "samples",
        "tooltip": "The latent to be decoded."
      },
      "vae": {
        "name": "vae",
        "tooltip": "The VAE model used for decoding the latent."
      }
    },
    "outputs": {
      "0": {
        "tooltip": "The decoded image."
      }
    }
  },
  "VAEDecodeAudio": {
    "display_name": "VAE Decode Audio",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "vae": {
        "name": "vae"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "VAEDecodeAudioTiled": {
    "display_name": "VAE Decode Audio (Tiled)",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "vae": {
        "name": "vae"
      },
      "tile_size": {
        "name": "tile_size"
      },
      "overlap": {
        "name": "overlap"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "VAEDecodeHunyuan3D": {
    "display_name": "VAEDecodeHunyuan3D",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "vae": {
        "name": "vae"
      },
      "num_chunks": {
        "name": "num_chunks"
      },
      "octree_resolution": {
        "name": "octree_resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "VAEDecodeTiled": {
    "display_name": "VAE Decode (Tiled)",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "vae": {
        "name": "vae"
      },
      "tile_size": {
        "name": "tile_size"
      },
      "overlap": {
        "name": "overlap"
      },
      "temporal_size": {
        "name": "temporal_size",
        "tooltip": "Only used for video VAEs: Amount of frames to decode at a time."
      },
      "temporal_overlap": {
        "name": "temporal_overlap",
        "tooltip": "Only used for video VAEs: Amount of frames to overlap."
      }
    }
  },
  "VAEDecodeTripoSplat": {
    "display_name": "TripoSplat Decode",
    "description": "Decode the sampled TripoSplat latent into a 3D gaussian splat. Modify the number of gaussians to vary the density.",
    "inputs": {
      "samples": {
        "name": "samples"
      },
      "vae": {
        "name": "vae",
        "tooltip": "TripoSplat VAE decoder"
      },
      "num_gaussians": {
        "name": "num_gaussians",
        "tooltip": "Number of gaussians to produce (rounded to a multiple of 32). 262144 matches the octree's point density; higher oversamples the same points (denser, but no new detail) and costs proportionally more VRAM/time."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seeds the octree point sampler (global RNG) for deterministic decodes."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "splat",
        "tooltip": null
      }
    }
  },
  "VAEEncode": {
    "display_name": "VAE Encode",
    "inputs": {
      "pixels": {
        "name": "pixels"
      },
      "vae": {
        "name": "vae"
      }
    }
  },
  "VAEEncodeAudio": {
    "display_name": "VAE Encode Audio",
    "inputs": {
      "audio": {
        "name": "audio"
      },
      "vae": {
        "name": "vae"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "VAEEncodeForInpaint": {
    "display_name": "VAE Encode (for Inpainting)",
    "inputs": {
      "pixels": {
        "name": "pixels"
      },
      "vae": {
        "name": "vae"
      },
      "mask": {
        "name": "mask"
      },
      "grow_mask_by": {
        "name": "grow_mask_by"
      }
    }
  },
  "VAEEncodeTiled": {
    "display_name": "VAE Encode (Tiled)",
    "inputs": {
      "pixels": {
        "name": "pixels"
      },
      "vae": {
        "name": "vae"
      },
      "tile_size": {
        "name": "tile_size"
      },
      "overlap": {
        "name": "overlap"
      },
      "temporal_size": {
        "name": "temporal_size",
        "tooltip": "Only used for video VAEs: Amount of frames to encode at a time."
      },
      "temporal_overlap": {
        "name": "temporal_overlap",
        "tooltip": "Only used for video VAEs: Amount of frames to overlap."
      }
    }
  },
  "VAELoader": {
    "display_name": "Load VAE",
    "inputs": {
      "vae_name": {
        "name": "vae_name"
      }
    }
  },
  "VAESave": {
    "display_name": "VAESave",
    "inputs": {
      "vae": {
        "name": "vae"
      },
      "filename_prefix": {
        "name": "filename_prefix"
      }
    }
  },
  "Veo3FirstLastFrameNode": {
    "display_name": "Google Veo 3 First-Last-Frame to Video",
    "description": "Generate video using prompt and first and last frames.",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text description of the video"
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "Negative text prompt to guide what to avoid in the video"
      },
      "resolution": {
        "name": "resolution"
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "Aspect ratio of the output video"
      },
      "duration": {
        "name": "duration",
        "tooltip": "Duration of the output video in seconds"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for video generation"
      },
      "first_frame": {
        "name": "first_frame",
        "tooltip": "Start frame"
      },
      "last_frame": {
        "name": "last_frame",
        "tooltip": "End frame"
      },
      "model": {
        "name": "model"
      },
      "generate_audio": {
        "name": "generate_audio",
        "tooltip": "Generate audio for the video."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Veo3VideoGenerationNode": {
    "display_name": "Google Veo 3 Video Generation",
    "description": "Generates videos from text prompts using Google's Veo 3 API",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text description of the video"
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "Aspect ratio of the output video"
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "Output video resolution. 4K is not available for veo-3.1-lite and veo-3.0 models."
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "Negative text prompt to guide what to avoid in the video"
      },
      "duration_seconds": {
        "name": "duration_seconds",
        "tooltip": "Duration of the output video in seconds"
      },
      "enhance_prompt": {
        "name": "enhance_prompt",
        "tooltip": "This parameter is deprecated and ignored."
      },
      "person_generation": {
        "name": "person_generation",
        "tooltip": "Whether to allow generating people in the video"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for video generation (0 for random)"
      },
      "image": {
        "name": "image",
        "tooltip": "Optional reference image to guide video generation"
      },
      "model": {
        "name": "model",
        "tooltip": "Veo 3 model to use for video generation"
      },
      "generate_audio": {
        "name": "generate_audio",
        "tooltip": "Generate audio for the video. Supported by all Veo 3 models."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "VeoVideoGenerationNode": {
    "display_name": "Google Veo 2 Video Generation",
    "description": "Generates videos from text prompts using Google's Veo 2 API",
    "inputs": {
      "prompt": {
        "name": "prompt",
        "tooltip": "Text description of the video"
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "Aspect ratio of the output video"
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "Negative text prompt to guide what to avoid in the video"
      },
      "duration_seconds": {
        "name": "duration_seconds",
        "tooltip": "Duration of the output video in seconds"
      },
      "enhance_prompt": {
        "name": "enhance_prompt",
        "tooltip": "Whether to enhance the prompt with AI assistance"
      },
      "person_generation": {
        "name": "person_generation",
        "tooltip": "Whether to allow generating people in the video"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for video generation (0 for random)"
      },
      "image": {
        "name": "image",
        "tooltip": "Optional reference image to guide video generation"
      },
      "model": {
        "name": "model",
        "tooltip": "Veo 2 model to use for video generation"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Video Slice": {
    "display_name": "Trim Video",
    "inputs": {
      "video": {
        "name": "video"
      },
      "start_time": {
        "name": "start_time",
        "tooltip": "Start time in seconds"
      },
      "duration": {
        "name": "duration",
        "tooltip": "Duration in seconds, or 0 for unlimited duration"
      },
      "strict_duration": {
        "name": "strict_duration",
        "tooltip": "If True, when the specified duration is not possible, an error will be raised."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "VideoFrameSample": {
    "display_name": "Sample Video Frame",
    "description": "Sample a fixed number of frames from a video using various strategies.",
    "inputs": {
      "video": {
        "name": "video",
        "tooltip": "Input video."
      },
      "num_frames": {
        "name": "num_frames",
        "tooltip": "Number of frames to sample."
      },
      "strategy": {
        "name": "strategy",
        "tooltip": "uniform: evenly spaced, head: first N, tail: last N, random: random sorted."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Random seed (only used with 'random' strategy)."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "video",
        "tooltip": "Sampled video."
      }
    }
  },
  "VideoLinearCFGGuidance": {
    "display_name": "Video Linear CFG Guidance",
    "inputs": {
      "model": {
        "name": "model"
      },
      "min_cfg": {
        "name": "min_cfg"
      }
    }
  },
  "VideoRandomTemporalCrop": {
    "display_name": "Crop Video (Temporal Random)",
    "description": "Randomly crop a continuous range of frames from a video.",
    "inputs": {
      "video": {
        "name": "video",
        "tooltip": "Input video."
      },
      "length": {
        "name": "length",
        "tooltip": "Number of frames to keep."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Random seed."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "name": "video",
        "tooltip": "Cropped video (lazy)."
      }
    }
  },
  "VideoTemporalCrop": {
    "display_name": "Crop Video (Temporal)",
    "description": "Crop a continuous range of frames from a video.",
    "inputs": {
      "video": {
        "name": "video",
        "tooltip": "Input video."
      },
      "start_frame": {
        "name": "start_frame",
        "tooltip": "Starting frame index."
      },
      "length": {
        "name": "length",
        "tooltip": "Number of frames to keep."
      }
    },
    "outputs": {
      "0": {
        "name": "video",
        "tooltip": "Cropped video (lazy)."
      }
    }
  },
  "VideoTriangleCFGGuidance": {
    "display_name": "Video Triangle CFG Guidance",
    "inputs": {
      "model": {
        "name": "model"
      },
      "min_cfg": {
        "name": "min_cfg"
      }
    }
  },
  "Vidu2ImageToVideoNode": {
    "display_name": "Vidu2 Image-to-Video Generation",
    "description": "Generate a video from an image and an optional prompt.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "image": {
        "name": "image",
        "tooltip": "An image to be used as the start frame of the generated video."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "An optional text prompt for video generation (max 2000 characters)."
      },
      "duration": {
        "name": "duration"
      },
      "seed": {
        "name": "seed"
      },
      "resolution": {
        "name": "resolution"
      },
      "movement_amplitude": {
        "name": "movement_amplitude",
        "tooltip": "The movement amplitude of objects in the frame."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Vidu2ReferenceVideoNode": {
    "display_name": "Vidu2 Reference-to-Video Generation",
    "description": "Generate a video from multiple reference images and a prompt.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "subjects": {
        "name": "subjects",
        "tooltip": "For each subject, provide up to 3 reference images (7 images total across all subjects). Reference them in prompts via @subject{subject_id}."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "When enabled, the video will include generated speech and background music based on the prompt."
      },
      "audio": {
        "name": "audio",
        "tooltip": "When enabled video will contain generated speech and background music based on the prompt."
      },
      "duration": {
        "name": "duration"
      },
      "seed": {
        "name": "seed"
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "resolution": {
        "name": "resolution"
      },
      "movement_amplitude": {
        "name": "movement_amplitude",
        "tooltip": "The movement amplitude of objects in the frame."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Vidu2StartEndToVideoNode": {
    "display_name": "Vidu2 Start/End Frame-to-Video Generation",
    "description": "Generate a video from a start frame, an end frame, and a prompt.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "first_frame": {
        "name": "first_frame"
      },
      "end_frame": {
        "name": "end_frame"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt description (max 2000 characters)."
      },
      "duration": {
        "name": "duration"
      },
      "seed": {
        "name": "seed"
      },
      "resolution": {
        "name": "resolution"
      },
      "movement_amplitude": {
        "name": "movement_amplitude",
        "tooltip": "The movement amplitude of objects in the frame."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Vidu2TextToVideoNode": {
    "display_name": "Vidu2 Text-to-Video Generation",
    "description": "Generate video from a text prompt",
    "inputs": {
      "model": {
        "name": "model"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "A textual description for video generation, with a maximum length of 2000 characters."
      },
      "duration": {
        "name": "duration"
      },
      "seed": {
        "name": "seed"
      },
      "aspect_ratio": {
        "name": "aspect_ratio"
      },
      "resolution": {
        "name": "resolution"
      },
      "background_music": {
        "name": "background_music",
        "tooltip": "Whether to add background music to the generated video."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Vidu3ImageToVideoNode": {
    "display_name": "Vidu Q3 Image-to-Video Generation",
    "description": "Generate a video from an image and an optional prompt.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Model to use for video generation."
      },
      "image": {
        "name": "image",
        "tooltip": "An image to be used as the start frame of the generated video."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "An optional text prompt for video generation (max 2000 characters)."
      },
      "seed": {
        "name": "seed"
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_audio": {
        "name": "audio"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Model to use for video generation."
      },
      "first_frame": {
        "name": "first_frame"
      },
      "end_frame": {
        "name": "end_frame"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt description (max 2000 characters)."
      },
      "seed": {
        "name": "seed"
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_audio": {
        "name": "audio"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Vidu3TextToVideoNode": {
    "display_name": "Vidu Q3 Text-to-Video Generation",
    "description": "Generate video from a text prompt.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Model to use for video generation."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "A textual description for video generation, with a maximum length of 2000 characters."
      },
      "seed": {
        "name": "seed"
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_aspect_ratio": {
        "name": "aspect_ratio"
      },
      "model_audio": {
        "name": "audio"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ViduExtendVideoNode": {
    "display_name": "Vidu Video Extension",
    "description": "Extend an existing video by generating additional frames.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Model to use for video extension."
      },
      "video": {
        "name": "video",
        "tooltip": "The source video to extend."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "An optional text prompt for the extended video (max 2000 characters)."
      },
      "seed": {
        "name": "seed"
      },
      "end_frame": {
        "name": "end_frame"
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ViduImageToVideoNode": {
    "display_name": "Vidu Image To Video Generation",
    "description": "Generate video from image and optional prompt",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Model name"
      },
      "image": {
        "name": "image",
        "tooltip": "An image to be used as the start frame of the generated video"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "A textual description for video generation"
      },
      "duration": {
        "name": "duration",
        "tooltip": "Duration of the output video in seconds"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for video generation (0 for random)"
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "Supported values may vary by model & duration"
      },
      "movement_amplitude": {
        "name": "movement_amplitude",
        "tooltip": "The movement amplitude of objects in the frame"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ViduMultiFrameVideoNode": {
    "display_name": "Vidu Multi-Frame Video Generation",
    "description": "Generate a video with multiple keyframe transitions.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "start_image": {
        "name": "start_image",
        "tooltip": "The starting frame image. Aspect ratio must be between 1:4 and 4:1."
      },
      "seed": {
        "name": "seed"
      },
      "resolution": {
        "name": "resolution"
      },
      "frames": {
        "name": "frames",
        "tooltip": "Number of keyframe transitions (2-9)."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "frames_duration1": {
        "name": "duration1"
      },
      "frames_duration2": {
        "name": "duration2"
      },
      "frames_prompt1": {
        "name": "prompt1"
      },
      "frames_prompt2": {
        "name": "prompt2"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ViduReferenceVideoNode": {
    "display_name": "Vidu Reference To Video Generation",
    "description": "Generate video from multiple images and a prompt",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Model name"
      },
      "images": {
        "name": "images",
        "tooltip": "Images to use as references to generate a video with consistent subjects (max 7 images)."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "A textual description for video generation"
      },
      "duration": {
        "name": "duration",
        "tooltip": "Duration of the output video in seconds"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for video generation (0 for random)"
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "The aspect ratio of the output video"
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "Supported values may vary by model & duration"
      },
      "movement_amplitude": {
        "name": "movement_amplitude",
        "tooltip": "The movement amplitude of objects in the frame"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ViduStartEndToVideoNode": {
    "display_name": "Vidu Start End To Video Generation",
    "description": "Generate a video from start and end frames and a prompt",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Model name"
      },
      "first_frame": {
        "name": "first_frame",
        "tooltip": "Start frame"
      },
      "end_frame": {
        "name": "end_frame",
        "tooltip": "End frame"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "A textual description for video generation"
      },
      "duration": {
        "name": "duration",
        "tooltip": "Duration of the output video in seconds"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for video generation (0 for random)"
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "Supported values may vary by model & duration"
      },
      "movement_amplitude": {
        "name": "movement_amplitude",
        "tooltip": "The movement amplitude of objects in the frame"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "ViduTextToVideoNode": {
    "display_name": "Vidu Text To Video Generation",
    "description": "Generate video from a text prompt",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Model name"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "A textual description for video generation"
      },
      "duration": {
        "name": "duration",
        "tooltip": "Duration of the output video in seconds"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed for video generation (0 for random)"
      },
      "aspect_ratio": {
        "name": "aspect_ratio",
        "tooltip": "The aspect ratio of the output video"
      },
      "resolution": {
        "name": "resolution",
        "tooltip": "Supported values may vary by model & duration"
      },
      "movement_amplitude": {
        "name": "movement_amplitude",
        "tooltip": "The movement amplitude of objects in the frame"
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "VOIDInpaintConditioning": {
    "display_name": "VOIDInpaintConditioning",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "video": {
        "name": "video",
        "tooltip": "Source video frames [T, H, W, 3]"
      },
      "quadmask": {
        "name": "quadmask",
        "tooltip": "Preprocessed quadmask from VOIDQuadmaskPreprocess [T, H, W]"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length",
        "tooltip": "Number of pixel frames to process. For CogVideoX-Fun-V1.5 (patch_size_t=2), latent_t must be even — lengths that produce odd latent_t are rounded down (e.g. 49 → 45)."
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "VOIDQuadmaskPreprocess": {
    "display_name": "VOID Quadmask Preprocessor",
    "inputs": {
      "mask": {
        "name": "mask"
      },
      "dilate_width": {
        "name": "dilate_width",
        "tooltip": "Dilation radius for the primary mask region (0 = no dilation)"
      }
    },
    "outputs": {
      "0": {
        "name": "quadmask",
        "tooltip": null
      }
    }
  },
  "VOIDSampler": {
    "display_name": "VOIDSampler",
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "VOIDWarpedNoise": {
    "display_name": "VOIDWarpedNoise",
    "inputs": {
      "optical_flow": {
        "name": "optical_flow",
        "tooltip": "Optical flow model from OpticalFlowLoader (RAFT-large)."
      },
      "video": {
        "name": "video",
        "tooltip": "Pass 1 output video frames [T, H, W, 3]"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length",
        "tooltip": "Number of pixel frames. Rounded down to make latent_t even (patch_size_t=2 requirement), e.g. 49 → 45."
      },
      "batch_size": {
        "name": "batch_size"
      }
    },
    "outputs": {
      "0": {
        "name": "warped_noise",
        "tooltip": null
      }
    }
  },
  "VOIDWarpedNoiseSource": {
    "display_name": "VOIDWarpedNoiseSource",
    "inputs": {
      "warped_noise": {
        "name": "warped_noise",
        "tooltip": "Warped noise latent from VOIDWarpedNoise"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "VoxelToMesh": {
    "display_name": "Voxel to Mesh",
    "description": "Converts a voxel grid to a mesh.",
    "inputs": {
      "voxel": {
        "name": "voxel"
      },
      "algorithm": {
        "name": "algorithm"
      },
      "threshold": {
        "name": "threshold"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "VoxelToMeshBasic": {
    "display_name": "Voxel to Mesh (Basic) (DEPRECATED)",
    "description": "Converts a voxel grid to a mesh.",
    "inputs": {
      "voxel": {
        "name": "voxel"
      },
      "threshold": {
        "name": "threshold"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "VPScheduler": {
    "display_name": "VPScheduler",
    "inputs": {
      "steps": {
        "name": "steps"
      },
      "beta_d": {
        "name": "beta_d"
      },
      "beta_min": {
        "name": "beta_min"
      },
      "eps_s": {
        "name": "eps_s"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Wan22FunControlToVideo": {
    "display_name": "Wan22FunControlToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "ref_image": {
        "name": "ref_image"
      },
      "control_video": {
        "name": "control_video"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "Wan22ImageToVideoLatent": {
    "display_name": "Wan22ImageToVideoLatent",
    "inputs": {
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "start_image": {
        "name": "start_image"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "first_frame": {
        "name": "first_frame",
        "tooltip": "First frame image. The output aspect ratio is derived from this image."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "prompt_extend": {
        "name": "prompt_extend",
        "tooltip": "Whether to enhance the prompt with AI assistance."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AI-generated watermark to the result."
      },
      "last_frame": {
        "name": "last_frame",
        "tooltip": "Last frame image. The model generates a video transitioning from first to last frame."
      },
      "audio": {
        "name": "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."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_negative_prompt": {
        "name": "negative_prompt"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AI-generated watermark to the result."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_negative_prompt": {
        "name": "negative_prompt"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_ratio": {
        "name": "ratio"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Wan2TextToVideoApi": {
    "display_name": "Wan 2.7 Text to Video",
    "description": "Generates a video based on a text prompt using the Wan 2.7 model.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "prompt_extend": {
        "name": "prompt_extend",
        "tooltip": "Whether to enhance the prompt with AI assistance."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AI-generated watermark to the result."
      },
      "audio": {
        "name": "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."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_negative_prompt": {
        "name": "negative_prompt"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_ratio": {
        "name": "ratio"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Wan2VideoContinuationApi": {
    "display_name": "Wan 2.7 Video Continuation",
    "description": "Continue a video from where it left off, with optional last-frame control.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "first_clip": {
        "name": "first_clip",
        "tooltip": "Input video to continue from. Duration: 2s-10s. The output aspect ratio is derived from this video."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "prompt_extend": {
        "name": "prompt_extend",
        "tooltip": "Whether to enhance the prompt with AI assistance."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AI-generated watermark to the result."
      },
      "last_frame": {
        "name": "last_frame",
        "tooltip": "Last frame image. The continuation will transition towards this frame."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_negative_prompt": {
        "name": "negative_prompt"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "Wan2VideoEditApi": {
    "display_name": "Wan 2.7 Video Edit",
    "description": "Edit a video using text instructions, reference images, or style transfer.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "video": {
        "name": "video",
        "tooltip": "The video to edit."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "audio_setting": {
        "name": "audio_setting",
        "tooltip": "'auto': model decides whether to regenerate audio based on the prompt. 'origin': preserve the original audio from the input video."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AI-generated watermark to the result."
      },
      "control_after_generate": {
        "name": "control after generate"
      },
      "model_duration": {
        "name": "duration"
      },
      "model_prompt": {
        "name": "prompt"
      },
      "model_ratio": {
        "name": "ratio"
      },
      "model_resolution": {
        "name": "resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "WanAnimate2Cache": {
    "display_name": "WanAnimate2Cache",
    "description": "Caches the pose-video's per-block activations so it runs once instead of on every sampling step. Roughly halves generation time Tradeoff is ~12.5 GB of system RAM at 480x832/81 frames in bf16 (scales with resolution and length). With context windows each window is cached separately, so RAM scales with the window count; use the static_standard schedule, as uniform schedules shift the windows every step and nothing ever recurs to hit the cache.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "device": {
        "name": "device",
        "tooltip": "Where to keep the cache. cpu (RAM) is the safe choice, the cache will not fit in VRAM alongside the model at typical sizes. gpu (VRAM) can be faster if it fits."
      },
      "dtype": {
        "name": "dtype",
        "tooltip": "Storage precision. default stores the activations in the model's compute dtype. int8 halves the cache, int4 quarters it, convrot is used to retain accuracy."
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "WanAnimate2ToVideo": {
    "display_name": "WanAnimate2ToVideo",
    "description": "Animate a character in a reference image using a video, effectively replicating the facial animation, body motion and hands gesture from the video.",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width",
        "tooltip": "Output video width in pixels."
      },
      "height": {
        "name": "height",
        "tooltip": "Output video height in pixels."
      },
      "length": {
        "name": "length",
        "tooltip": "Number of frames to generate."
      },
      "batch_size": {
        "name": "batch_size",
        "tooltip": "Number of videos to generate simultaneously."
      },
      "video_frame_offset": {
        "name": "video_frame_offset",
        "tooltip": "Frames to seek into the pose video. Connect to the video_frame_offset output of the previous node when extending."
      },
      "pose_strength": {
        "name": "pose_strength",
        "tooltip": "Scales the pose video's influence on the motion. 1.0 is the trained behavior; below weakens adherence, above amplifies. 0.0 mutes it but does not fully remove it."
      },
      "pose_start_percent": {
        "name": "pose_start_percent",
        "tooltip": "Sampling percent at which the pose influence starts. Outside the window the pose branch is skipped entirely, which also speeds those steps up."
      },
      "pose_end_percent": {
        "name": "pose_end_percent",
        "tooltip": "Sampling percent at which the pose influence ends. Motion is mostly established early, so e.g. 0.7 can loosen fine detail while keeping the choreography."
      },
      "reference_image_strength": {
        "name": "reference_image_strength",
        "tooltip": "Scales how strongly generated frames attend to the reference image's latent frame. Below 1.0 loosens identity/appearance adherence (e.g. to let the prompt restyle), above tightens it against drift."
      },
      "reference_image": {
        "name": "reference_image",
        "tooltip": "The character to animate."
      },
      "pose_video": {
        "name": "pose_video",
        "tooltip": "The video whose motion is transferred to the reference character."
      },
      "clip_vision_output": {
        "name": "clip_vision_output",
        "tooltip": "CLIP vision of the reference image."
      },
      "positive_pose": {
        "name": "positive_pose",
        "tooltip": "Prompt for the pose-video branch, describing the motion rather than the character. Defaults to positive. Used for both the cond and uncond passes."
      },
      "clip_vision_output_pose": {
        "name": "clip_vision_output_pose",
        "tooltip": "CLIP vision of the pose video's first frame. Defaults to clip_vision_output."
      },
      "continue_motion": {
        "name": "continue_motion",
        "tooltip": "Previous motion sequence to continue from for temporal consistency."
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      },
      "3": {
        "name": "trim_latent",
        "tooltip": "Number of latent frames that should be trimmed before decoding."
      },
      "4": {
        "name": "trim_image",
        "tooltip": "Number of overlapping image frames when extending a video."
      },
      "5": {
        "name": "video_frame_offset",
        "tooltip": "Frames to seek into the pose video."
      }
    }
  },
  "WanAnimateToVideo": {
    "display_name": "WanAnimateToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "continue_motion_max_frames": {
        "name": "continue_motion_max_frames"
      },
      "video_frame_offset": {
        "name": "video_frame_offset",
        "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."
      },
      "clip_vision_output": {
        "name": "clip_vision_output"
      },
      "reference_image": {
        "name": "reference_image"
      },
      "face_video": {
        "name": "face_video"
      },
      "pose_video": {
        "name": "pose_video"
      },
      "background_video": {
        "name": "background_video"
      },
      "character_mask": {
        "name": "character_mask"
      },
      "continue_motion": {
        "name": "continue_motion"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      },
      "3": {
        "name": "trim_latent",
        "tooltip": null
      },
      "4": {
        "name": "trim_image",
        "tooltip": null
      },
      "5": {
        "name": "video_frame_offset",
        "tooltip": null
      }
    }
  },
  "wanBlockSwap": {
    "display_name": "wanBlockSwap",
    "description": "Intercept wanBlockSwap custom node that causes major instability and make it no-op.",
    "inputs": {
      "model": {
        "name": "model"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "WanCameraEmbedding": {
    "display_name": "WanCameraEmbedding",
    "inputs": {
      "camera_pose": {
        "name": "camera_pose"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "speed": {
        "name": "speed"
      },
      "fx": {
        "name": "fx"
      },
      "fy": {
        "name": "fy"
      },
      "cx": {
        "name": "cx"
      },
      "cy": {
        "name": "cy"
      }
    },
    "outputs": {
      "0": {
        "name": "camera_embedding",
        "tooltip": null
      },
      "1": {
        "name": "width",
        "tooltip": null
      },
      "2": {
        "name": "height",
        "tooltip": null
      },
      "3": {
        "name": "length",
        "tooltip": null
      }
    }
  },
  "WanCameraImageToVideo": {
    "display_name": "WanCameraImageToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "clip_vision_output": {
        "name": "clip_vision_output"
      },
      "start_image": {
        "name": "start_image"
      },
      "camera_conditions": {
        "name": "camera_conditions"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "WanContextWindowsManual": {
    "display_name": "Wan Context Windows",
    "description": "Set context windows for Wan-like models.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "The model to apply context windows to during sampling."
      },
      "context_length": {
        "name": "context_length",
        "tooltip": "The length of the context window in real frames. Must be 4*n + 1."
      },
      "context_overlap": {
        "name": "context_overlap",
        "tooltip": "The overlap of the context window in real frames."
      },
      "context_schedule": {
        "name": "context_schedule",
        "tooltip": "Step-dependent scheduling algorithm for context windows."
      },
      "context_stride": {
        "name": "context_stride",
        "tooltip": "The stride of the context window; only applicable to uniform schedules."
      },
      "closed_loop": {
        "name": "closed_loop",
        "tooltip": "Whether to close the context window loop; only applicable to looped schedules."
      },
      "fuse_method": {
        "name": "fuse_method",
        "tooltip": "The method to use to fuse the context windows."
      },
      "freenoise": {
        "name": "freenoise",
        "tooltip": "Whether to apply FreeNoise noise shuffling, improves window blending."
      },
      "retain_first_frame": {
        "name": "retain_first_frame",
        "tooltip": "Retain the first I2V frame in every context window (may help retain initial reference)."
      },
      "split_conds_to_windows": {
        "name": "split_conds_to_windows",
        "tooltip": "Whether to split multiple conditionings (created by ConditionCombine) to each window based on region index."
      }
    },
    "outputs": {
      "0": {
        "tooltip": "The model with context windows applied during sampling."
      }
    }
  },
  "WanDancerEncodeAudio": {
    "display_name": "WanDancerEncodeAudio",
    "inputs": {
      "audio": {
        "name": "audio"
      },
      "video_frames": {
        "name": "video_frames"
      },
      "audio_inject_scale": {
        "name": "audio_inject_scale",
        "tooltip": "The scale for the audio features when injected into the video model."
      }
    },
    "outputs": {
      "0": {
        "name": "audio_encoder_output",
        "tooltip": null
      },
      "1": {
        "name": "fps_string",
        "tooltip": "The calculated fps based on the audio length and the number of video frames. Used in the prompt."
      }
    }
  },
  "WanDancerPadKeyframes": {
    "display_name": "WanDancerPadKeyframes",
    "inputs": {
      "images": {
        "name": "images"
      },
      "segment_length": {
        "name": "segment_length",
        "tooltip": "Length of this segment (usually 149 frames)"
      },
      "segment_index": {
        "name": "segment_index",
        "tooltip": "Which segment this is (0 for first, 1 for second, etc.)"
      },
      "audio": {
        "name": "audio",
        "tooltip": "Audio to calculate total output frames from and extract segment audio."
      }
    },
    "outputs": {
      "0": {
        "name": "keyframes_sequence",
        "tooltip": "Padded keyframe sequence"
      },
      "1": {
        "name": "keyframes_mask",
        "tooltip": "Mask indicating valid frames"
      },
      "2": {
        "name": "audio_segment",
        "tooltip": "Audio segment for this video segment"
      }
    }
  },
  "WanDancerPadKeyframesList": {
    "display_name": "WanDancerPadKeyframesList",
    "inputs": {
      "images": {
        "name": "images"
      },
      "segment_length": {
        "name": "segment_length",
        "tooltip": "Length of each segment (usually 149 frames)"
      },
      "num_segments": {
        "name": "num_segments",
        "tooltip": "How many padded segments to emit as lists."
      },
      "audio": {
        "name": "audio",
        "tooltip": "Audio to slice for each emitted segment."
      }
    },
    "outputs": {
      "0": {
        "name": "keyframes_sequence",
        "tooltip": "Padded keyframe sequences"
      },
      "1": {
        "name": "keyframes_mask",
        "tooltip": "Masks indicating valid frames"
      },
      "2": {
        "name": "audio_segment",
        "tooltip": "Audio segment for each video segment"
      }
    }
  },
  "WanDancerVideo": {
    "display_name": "WanDancerVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length",
        "tooltip": "The number of frames in the generated video. Should stay 149 for WanDancer."
      },
      "clip_vision_output": {
        "name": "clip_vision_output",
        "tooltip": "The CLIP vision embeds for the first frame."
      },
      "clip_vision_output_ref": {
        "name": "clip_vision_output_ref",
        "tooltip": "The CLIP vision embeds for the reference image."
      },
      "start_image": {
        "name": "start_image",
        "tooltip": "The initial image(s) to be encoded, can be any number of frames."
      },
      "mask": {
        "name": "mask",
        "tooltip": "Image conditioning mask for the start image(s). White is kept, black is generated. Used for the local generations."
      },
      "audio_encoder_output": {
        "name": "audio_encoder_output"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": "Empty latent."
      }
    }
  },
  "WanFirstLastFrameToVideo": {
    "display_name": "WanFirstLastFrameToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "clip_vision_start_image": {
        "name": "clip_vision_start_image"
      },
      "clip_vision_end_image": {
        "name": "clip_vision_end_image"
      },
      "start_image": {
        "name": "start_image"
      },
      "end_image": {
        "name": "end_image"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "WanFunControlToVideo": {
    "display_name": "WanFunControlToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "clip_vision_output": {
        "name": "clip_vision_output"
      },
      "start_image": {
        "name": "start_image"
      },
      "control_video": {
        "name": "control_video"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "WanFunInpaintToVideo": {
    "display_name": "WanFunInpaintToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "clip_vision_output": {
        "name": "clip_vision_output"
      },
      "start_image": {
        "name": "start_image"
      },
      "end_image": {
        "name": "end_image"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "WanHuMoImageToVideo": {
    "display_name": "WanHuMoImageToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "audio_encoder_output": {
        "name": "audio_encoder_output"
      },
      "ref_image": {
        "name": "ref_image"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "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).",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Model to use."
      },
      "image": {
        "name": "image",
        "tooltip": "Single-image editing or multi-image fusion. Maximum 2 images."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt describing the elements and visual features. Supports English and Chinese."
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "Negative prompt describing what to avoid."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AI-generated watermark to the result."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "WanImageToVideo": {
    "display_name": "WanImageToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "clip_vision_output": {
        "name": "clip_vision_output"
      },
      "start_image": {
        "name": "start_image"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "WanImageToVideoApi": {
    "display_name": "Wan Image to Video",
    "description": "Generates a video from the first frame and a text prompt.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Model to use."
      },
      "image": {
        "name": "image"
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt describing the elements and visual features. Supports English and Chinese."
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "Negative prompt describing what to avoid."
      },
      "resolution": {
        "name": "resolution"
      },
      "duration": {
        "name": "duration",
        "tooltip": "Duration 15 available only for WAN2.6 model."
      },
      "audio": {
        "name": "audio",
        "tooltip": "Audio must contain a clear, loud voice, without extraneous noise or background music."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "generate_audio": {
        "name": "generate_audio",
        "tooltip": "If no audio input is provided, generate audio automatically."
      },
      "prompt_extend": {
        "name": "prompt_extend",
        "tooltip": "Whether to enhance the prompt with AI assistance."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AI-generated watermark to the result."
      },
      "shot_type": {
        "name": "shot_type",
        "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."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "WanInfiniteTalkToVideo": {
    "display_name": "WanInfiniteTalkToVideo",
    "inputs": {
      "mode": {
        "name": "mode"
      },
      "model": {
        "name": "model"
      },
      "model_patch": {
        "name": "model_patch"
      },
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "audio_encoder_output_1": {
        "name": "audio_encoder_output_1"
      },
      "motion_frame_count": {
        "name": "motion_frame_count",
        "tooltip": "Number of previous frames to use as motion context."
      },
      "audio_scale": {
        "name": "audio_scale"
      },
      "clip_vision_output": {
        "name": "clip_vision_output"
      },
      "start_image": {
        "name": "start_image"
      },
      "previous_frames": {
        "name": "previous_frames"
      }
    },
    "outputs": {
      "0": {
        "name": "model",
        "tooltip": null
      },
      "1": {
        "name": "positive",
        "tooltip": null
      },
      "2": {
        "name": "negative",
        "tooltip": null
      },
      "3": {
        "name": "latent",
        "tooltip": null
      },
      "4": {
        "name": "trim_image",
        "tooltip": null
      }
    }
  },
  "WanMoveConcatTrack": {
    "display_name": "WanMoveConcatTrack",
    "inputs": {
      "tracks_1": {
        "name": "tracks_1"
      },
      "tracks_2": {
        "name": "tracks_2"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "WanMoveTracksFromCoords": {
    "display_name": "WanMoveTracksFromCoords",
    "inputs": {
      "track_coords": {
        "name": "track_coords"
      },
      "track_mask": {
        "name": "track_mask"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      },
      "1": {
        "name": "track_length",
        "tooltip": null
      }
    }
  },
  "WanMoveTrackToVideo": {
    "display_name": "WanMoveTrackToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "strength": {
        "name": "strength",
        "tooltip": "Strength of the track conditioning."
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "start_image": {
        "name": "start_image"
      },
      "tracks": {
        "name": "tracks"
      },
      "clip_vision_output": {
        "name": "clip_vision_output"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "WanMoveVisualizeTracks": {
    "display_name": "WanMoveVisualizeTracks",
    "inputs": {
      "images": {
        "name": "images"
      },
      "line_resolution": {
        "name": "line_resolution"
      },
      "circle_size": {
        "name": "circle_size"
      },
      "opacity": {
        "name": "opacity"
      },
      "line_width": {
        "name": "line_width"
      },
      "tracks": {
        "name": "tracks"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "WanPhantomSubjectToVideo": {
    "display_name": "WanPhantomSubjectToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "images": {
        "name": "images"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative_text",
        "tooltip": null
      },
      "2": {
        "name": "negative_img_text",
        "tooltip": null
      },
      "3": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "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.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "prompt": {
        "name": "prompt",
        "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."
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "Negative prompt describing what to avoid."
      },
      "reference_videos": {
        "name": "reference_videos"
      },
      "size": {
        "name": "size"
      },
      "duration": {
        "name": "duration"
      },
      "seed": {
        "name": "seed"
      },
      "shot_type": {
        "name": "shot_type",
        "tooltip": "Specifies the shot type for the generated video, that is, whether the video is a single continuous shot or multiple shots with cuts."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AI-generated watermark to the result."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "WanSCAILToVideo": {
    "display_name": "WanSCAILToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "pose_strength": {
        "name": "pose_strength",
        "tooltip": "Strength of the pose latent."
      },
      "pose_start": {
        "name": "pose_start",
        "tooltip": "Start step of the pose conditioning."
      },
      "pose_end": {
        "name": "pose_end",
        "tooltip": "End step of the pose conditioning."
      },
      "video_frame_offset": {
        "name": "video_frame_offset",
        "tooltip": "Cumulative output frame this chunk begins at. Wire from the previous chunk's video_frame_offset output."
      },
      "previous_frame_count": {
        "name": "previous_frame_count",
        "tooltip": "Tail frames of previous_frames to anchor. SCAIL-2 trained at 5 (81-frame chunks, 76-frame step)."
      },
      "pose_video": {
        "name": "pose_video",
        "tooltip": "Video used for pose conditioning. Will be downscaled to half the resolution of the main video."
      },
      "pose_video_mask": {
        "name": "pose_video_mask",
        "tooltip": "SCAIL-2 only. Colored per-identity SAM3 mask video at the same resolution as pose_video."
      },
      "replacement_mode": {
        "name": "replacement_mode",
        "tooltip": "SCAIL-2 only. False = Animation Mode (pose_video_mask should have black background). True = Replacement Mode (pose_video_mask should have white background)."
      },
      "reference_image": {
        "name": "reference_image",
        "tooltip": "Reference image. The first image is the primary reference (composite all identities onto it). SCAIL-2: extra batch images are used as additional views (back view, close-up, occluded background), each needing a matching reference_image_mask in that identity's color."
      },
      "reference_image_mask": {
        "name": "reference_image_mask",
        "tooltip": "SCAIL-2 only. Colored reference mask, batch matching reference_image (first = primary reference mask, rest = identity masks for the additional reference_image)."
      },
      "clip_vision_output": {
        "name": "clip_vision_output",
        "tooltip": "CLIP vision features for conditioning. Model is trained with stretch resize to aspect ratio."
      },
      "previous_frames": {
        "name": "previous_frames",
        "tooltip": "SCAIL-2 only. Full decoded output of the previous chunk. Only the last previous_frame_count are used as the extension anchor."
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": "Empty latent of the generation size."
      },
      "3": {
        "name": "video_frame_offset",
        "tooltip": "Adjusted offset + length. Wire into the next chunk."
      }
    }
  },
  "WanSoundImageToVideo": {
    "display_name": "WanSoundImageToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "audio_encoder_output": {
        "name": "audio_encoder_output"
      },
      "ref_image": {
        "name": "ref_image"
      },
      "control_video": {
        "name": "control_video"
      },
      "ref_motion": {
        "name": "ref_motion"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "WanSoundImageToVideoExtend": {
    "display_name": "WanSoundImageToVideoExtend",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "length": {
        "name": "length"
      },
      "video_latent": {
        "name": "video_latent"
      },
      "audio_encoder_output": {
        "name": "audio_encoder_output"
      },
      "ref_image": {
        "name": "ref_image"
      },
      "control_video": {
        "name": "control_video"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "WanTextToImageApi": {
    "display_name": "Wan Text to Image",
    "description": "Generates an image based on a text prompt.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Model to use."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt describing the elements and visual features. Supports English and Chinese."
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "Negative prompt describing what to avoid."
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "prompt_extend": {
        "name": "prompt_extend",
        "tooltip": "Whether to enhance the prompt with AI assistance."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AI-generated watermark to the result."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "WanTextToVideoApi": {
    "display_name": "Wan Text to Video",
    "description": "Generates a video based on a text prompt.",
    "inputs": {
      "model": {
        "name": "model",
        "tooltip": "Model to use."
      },
      "prompt": {
        "name": "prompt",
        "tooltip": "Prompt describing the elements and visual features. Supports English and Chinese."
      },
      "negative_prompt": {
        "name": "negative_prompt",
        "tooltip": "Negative prompt describing what to avoid."
      },
      "size": {
        "name": "size"
      },
      "duration": {
        "name": "duration",
        "tooltip": "A 15-second duration is available only for the Wan 2.6 model."
      },
      "audio": {
        "name": "audio",
        "tooltip": "Audio must contain a clear, loud voice, without extraneous noise or background music."
      },
      "seed": {
        "name": "seed",
        "tooltip": "Seed to use for generation."
      },
      "generate_audio": {
        "name": "generate_audio",
        "tooltip": "If no audio input is provided, generate audio automatically."
      },
      "prompt_extend": {
        "name": "prompt_extend",
        "tooltip": "Whether to enhance the prompt with AI assistance."
      },
      "watermark": {
        "name": "watermark",
        "tooltip": "Whether to add an AI-generated watermark to the result."
      },
      "shot_type": {
        "name": "shot_type",
        "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."
      },
      "control_after_generate": {
        "name": "control after generate"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "WanTrackToVideo": {
    "display_name": "WanTrackToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "tracks": {
        "name": "tracks"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "temperature": {
        "name": "temperature"
      },
      "topk": {
        "name": "topk"
      },
      "start_image": {
        "name": "start_image"
      },
      "clip_vision_output": {
        "name": "clip_vision_output"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      }
    }
  },
  "WanUni3CControlnetApply": {
    "display_name": "Apply Wan Uni3C ControlNet",
    "inputs": {
      "model": {
        "name": "model"
      },
      "model_patch": {
        "name": "model_patch"
      },
      "vae": {
        "name": "vae"
      },
      "render_video": {
        "name": "render_video",
        "tooltip": "The guidance video rendered from the camera trajectory, most commonly warped point cloud renders of the input image."
      },
      "strength": {
        "name": "strength"
      },
      "start_percent": {
        "name": "start_percent"
      },
      "end_percent": {
        "name": "end_percent"
      }
    }
  },
  "WanVaceToVideo": {
    "display_name": "WanVaceToVideo",
    "inputs": {
      "positive": {
        "name": "positive"
      },
      "negative": {
        "name": "negative"
      },
      "vae": {
        "name": "vae"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "length": {
        "name": "length"
      },
      "batch_size": {
        "name": "batch_size"
      },
      "strength": {
        "name": "strength"
      },
      "control_video": {
        "name": "control_video"
      },
      "control_masks": {
        "name": "control_masks"
      },
      "reference_image": {
        "name": "reference_image"
      }
    },
    "outputs": {
      "0": {
        "name": "positive",
        "tooltip": null
      },
      "1": {
        "name": "negative",
        "tooltip": null
      },
      "2": {
        "name": "latent",
        "tooltip": null
      },
      "3": {
        "name": "trim_latent",
        "tooltip": null
      }
    }
  },
  "WavespeedFlashVSRNode": {
    "display_name": "FlashVSR Video Upscale",
    "description": "Fast, high-quality video upscaler that boosts resolution and restores clarity for low-resolution or blurry footage.",
    "inputs": {
      "video": {
        "name": "video"
      },
      "target_resolution": {
        "name": "target_resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "WavespeedImageUpscaleNode": {
    "display_name": "WaveSpeed Image Upscale",
    "description": "Boost image resolution and quality, upscaling photos to 4K or 8K for sharp, detailed results.",
    "inputs": {
      "model": {
        "name": "model"
      },
      "image": {
        "name": "image"
      },
      "target_resolution": {
        "name": "target_resolution"
      }
    },
    "outputs": {
      "0": {
        "tooltip": null
      }
    }
  },
  "WebcamCapture": {
    "display_name": "Webcam Capture",
    "inputs": {
      "image": {
        "name": "image"
      },
      "width": {
        "name": "width"
      },
      "height": {
        "name": "height"
      },
      "capture_on_queue": {
        "name": "capture_on_queue"
      },
      "waiting for camera___": {}
    }
  },
  "ZImageFunControlnet": {
    "display_name": "Apply Z-Image Fun ControlNet",
    "inputs": {
      "model": {
        "name": "model"
      },
      "model_patch": {
        "name": "model_patch"
      },
      "vae": {
        "name": "vae"
      },
      "strength": {
        "name": "strength"
      },
      "image": {
        "name": "image"
      },
      "inpaint_image": {
        "name": "inpaint_image"
      },
      "mask": {
        "name": "mask"
      }
    }
  }
}
