Files
ComfyUI_frontend/apps/website/src/data/cloud-nodes.snapshot.json
Comfy Org PR Bot 9a2bea7283 chore(website): refresh Ashby and cloud nodes snapshots (#12410)
Automated refresh of remote-data snapshots used by the website
build:

- `apps/website/src/data/ashby-roles.snapshot.json` — Ashby job
  board API
- `apps/website/src/data/cloud-nodes.snapshot.json` — Comfy Cloud
  `/api/object_info`

**Flow:**
1. `Release: Website` workflow ran (manual trigger).
2. This PR opens with the regenerated snapshots.
3. `CI: Vercel Website Preview` deploys a preview for review.
4. Merging to `main` triggers the production Vercel deploy.

The snapshot fallback in `apps/website/src/utils/ashby.ts` and
`apps/website/src/utils/cloudNodes.ts` remains intact: builds
without the respective API keys continue to use the committed
snapshot (with a warning annotation in CI).

Triggered by workflow run `26260485885`.

Co-authored-by: christian-byrne <72887196+christian-byrne@users.noreply.github.com>
2026-05-22 00:21:09 +00:00

10786 lines
524 KiB
JSON
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"fetchedAt": "2026-05-22T00:08:02.826Z",
"packs": [
{
"id": "basic_data_handling",
"registryId": "basic_data_handling",
"displayName": "Basic data handling",
"description": "Basic Python functions for manipulating data that every programmer is used to, lightweight with no additional dependencies.\n\nSupported data types:\n- ComfyUI native: BOOLEAN, FLOAT, INT, STRING, and data lists\n- Python types as custom data types: DICT, LIST, SET, DATETIME, TIMEDELTA\n- PyTorch: TENSOR\n\nFeature categories:\n- Boolean logic operations\n- Type casting/conversion between all supported data types\n- Comparison operations\n- Data container manipulation\n- Flow control (conditionals, branching, execution order)\n- Mathematical operations\n- Mathematical formula node in a safe implementation\n- String manipulation\n- File system path handling, including STRING, IMAGE and MASK load and save\n- SET operations\n- time and date handling\n- PyTorch Tensor manipulation (arithmetic, slicing, reshaping)",
"repoUrl": "https://github.com/StableLlama/ComfyUI-basic_data_handling",
"publisher": {
"id": "stablellama",
"name": "StableLlama"
},
"downloads": 175716,
"githubStars": 44,
"latestVersion": "1.5.1",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2026-05-07T18:00:19.201676Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "Basic data handling: NotEqual",
"displayName": "!=",
"category": "Basic/comparison",
"description": "Checks if two values are not equal.\n\nThis node takes two inputs of any type and returns True if they are not equal,\nand False otherwise. For complex objects, structural inequality is tested."
},
{
"name": "Basic data handling: LessThan",
"displayName": "<",
"category": "Basic/comparison",
"description": "Checks if the first value is less than the second.\n\nThis node takes two numerical inputs and returns True if the first value\nis less than the second value, and False otherwise."
},
{
"name": "Basic data handling: LessThanOrEqual",
"displayName": "<=",
"category": "Basic/comparison",
"description": "Checks if the first value is less than or equal to the second.\n\nThis node takes two numerical inputs and returns True if the first value\nis less than or equal to the second value, and False otherwise."
},
{
"name": "Basic data handling: Equal",
"displayName": "==",
"category": "Basic/comparison",
"description": "Checks if two values are equal.\n\nThis node takes two inputs of any type and returns True if they are equal,\nand False otherwise. For complex objects, structural equality is tested."
},
{
"name": "Basic data handling: GreaterThan",
"displayName": ">",
"category": "Basic/comparison",
"description": "Checks if the first value is greater than the second.\n\nThis node takes two numerical inputs and returns True if the first value\nis greater than the second value, and False otherwise."
},
{
"name": "Basic data handling: GreaterThanOrEqual",
"displayName": ">=",
"category": "Basic/comparison",
"description": "Checks if the first value is greater than or equal to the second.\n\nThis node takes two numerical inputs and returns True if the first value\nis greater than or equal to the second value, and False otherwise."
},
{
"name": "Basic data handling: MathAbs",
"displayName": "abs",
"category": "Basic/maths",
"description": "Returns the absolute value of a number.\n\nThis node takes a number and returns its absolute value (magnitude without sign)."
},
{
"name": "Basic data handling: MathAcos",
"displayName": "acos",
"category": "Basic/maths",
"description": "Calculates the arc cosine (inverse cosine) of a value.\n\nThis node takes a value between -1 and 1, and returns the arc cosine in radians or degrees.\nThe arc cosine is the inverse operation of cosine, returning the angle whose cosine is the input value."
},
{
"name": "Basic data handling: FloatAdd",
"displayName": "add",
"category": "Basic/FLOAT",
"description": "Adds two floating-point numbers.\n\nThis node takes two floats as input and returns their sum."
},
{
"name": "Basic data handling: IntAdd",
"displayName": "add",
"category": "Basic/INT",
"description": "Adds two integers.\n\nThis node takes two integers as input and returns their sum."
},
{
"name": "Basic data handling: SetAdd",
"displayName": "add",
"category": "Basic/SET",
"description": "Adds an item to a SET.\n\nThis node takes a SET and any item as inputs, then returns a new SET\nwith the item added. If the item is already present, the SET remains unchanged."
},
{
"name": "Basic data handling: TimeAddDelta",
"displayName": "Add Time Delta",
"category": "Basic/time",
"description": "Adds a TIMEDELTA (duration) to a DATETIME object, resulting in a new DATETIME."
},
{
"name": "Basic data handling: DataListAll",
"displayName": "all",
"category": "Basic/Data List",
"description": "Check if all elements in the data list are true.\nReturns true if all elements are true (or if the list is empty)."
},
{
"name": "Basic data handling: SetAll",
"displayName": "all",
"category": "Basic/SET",
"description": "Checks if all elements in the SET are true.\n\nThis node takes a SET as input and returns True if all elements in the SET\nevaluate to True (or if the SET is empty), and False otherwise."
},
{
"name": "Basic data handling: Boolean And",
"displayName": "and",
"category": "Basic/BOOLEAN",
"description": "Returns the logical AND result of two boolean values.\n\nThis node takes two boolean inputs and returns their logical AND result."
},
{
"name": "Basic data handling: Generic And",
"displayName": "and (generic)",
"category": "Basic/BOOLEAN",
"description": "Returns the logical N/AND result of one or more values.\n\nThis node takes a dynamic number of inputs and returns their logical N/AND result.\nNote that values are evaluated according Python's rules. I.e. an empty string is\n`false`, an integer 0 is also `false`, etc."
},
{
"name": "Basic data handling: DataListAny",
"displayName": "any",
"category": "Basic/Data List",
"description": "Check if any element in the data list is true.\nReturns true if at least one element is true. Returns false if the list is empty."
},
{
"name": "Basic data handling: SetAny",
"displayName": "any",
"category": "Basic/SET",
"description": "Checks if any element in the SET is true.\n\nThis node takes a SET as input and returns True if at least one element\nin the SET evaluates to True, and False otherwise (including if the SET is empty)."
},
{
"name": "Basic data handling: DataListAppend",
"displayName": "append",
"category": "Basic/Data List",
"description": "Adds an item to the end of a list.\n\nThis node takes a list and any item as inputs, then returns the modified\nlist with the new item appended."
},
{
"name": "Basic data handling: ListAppend",
"displayName": "append",
"category": "Basic/LIST",
"description": "Adds an item to the end of a LIST.\n\nThis node takes a LIST and any item as inputs, then returns a new LIST\nwith the item appended to the end."
},
{
"name": "Basic data handling: MathAsin",
"displayName": "asin",
"category": "Basic/maths",
"description": "Calculates the arc sine (inverse sine) of a value.\n\nThis node takes a value between -1 and 1, and returns the arc sine in radians or degrees.\nThe arc sine is the inverse operation of sine, returning the angle whose sine is the input value."
},
{
"name": "Basic data handling: MathAtan",
"displayName": "atan",
"category": "Basic/maths",
"description": "Calculates the arc tangent (inverse tangent) of a value.\n\nThis node takes a value and returns the arc tangent in radians or degrees.\nThe arc tangent is the inverse operation of tangent, returning the angle whose tangent is the input value."
},
{
"name": "Basic data handling: MathAtan2",
"displayName": "atan2",
"category": "Basic/maths",
"description": "Calculates the arc tangent of y/x, considering the quadrant.\n\nThis node takes y and x coordinates and returns the arc tangent in radians or degrees.\nUnlike atan(y/x), this function handles the case where x is zero and correctly determines\nthe quadrant of the resulting angle."
},
{
"name": "Basic data handling: IntBitCount",
"displayName": "bit count",
"category": "Basic/INT",
"description": "Returns the number of 1 bits in the binary representation of an integer.\n\nThis node takes an integer as input and returns the count of set bits."
},
{
"name": "Basic data handling: IntBitLength",
"displayName": "bit length",
"category": "Basic/INT",
"description": "Returns the number of bits required to represent an integer in binary.\n\nThis node takes an integer as input and returns the number of bits needed\nto represent it, excluding the sign and leading zeros."
},
{
"name": "Basic data handling: StringCapitalize",
"displayName": "capitalize",
"category": "Basic/STRING",
"description": "Converts the first character of the input string to uppercase and all other characters to lowercase."
},
{
"name": "Basic data handling: StringCasefold",
"displayName": "casefold",
"category": "Basic/STRING",
"description": "Converts text to lowercase in a way optimized for case-insensitive comparisons.\n\nThis node is especially useful when comparing text that might contain special characters.\nUnlike standard lowercase, this handles special cases like converting the German 'ß' to \"ss\".\nUse this node when you need the most accurate case-insensitive text matching."
},
{
"name": "Basic data handling: MathCeil",
"displayName": "ceil",
"category": "Basic/maths",
"description": "Returns the ceiling of a number.\n\nThis node takes a number and returns the smallest integer greater than or equal to the input value."
},
{
"name": "Basic data handling: StringCenter",
"displayName": "center",
"category": "Basic/STRING",
"description": "Centers text within a specified width.\n\nThis node takes a string and centers it within a field of the specified width.\nBy default, it uses spaces as padding characters, but you can specify any\nsingle character to use as padding."
},
{
"name": "Basic data handling: DictCompare",
"displayName": "compare",
"category": "Basic/DICT",
"description": "Compares two dictionaries and reports differences.\n\nThis node takes two dictionaries and compares them, returning information about\ntheir equality, any keys that exist in only one dictionary, and any keys with\ndifferent values."
},
{
"name": "Basic data handling: CompareLength",
"displayName": "compare length",
"category": "Basic/comparison",
"description": "Compares the length of a container (string, list, etc) with a value.\n\nThis node takes a container and a comparison value, and returns a boolean\nresult based on the comparison of the container's length with the value."
},
{
"name": "Basic data handling: StringConcat",
"displayName": "concat",
"category": "Basic/STRING",
"description": "Combines two text strings together, joining them end-to-end."
},
{
"name": "Basic data handling: ListContains",
"displayName": "contains",
"category": "Basic/LIST",
"description": "Checks if a LIST contains a specified value.\n\nThis node takes a LIST and a value as inputs, then returns True if the value\nis present in the LIST, and False otherwise."
},
{
"name": "Basic data handling: SetContains",
"displayName": "contains",
"category": "Basic/SET",
"description": "Checks if a SET contains a specified value.\n\nThis node takes a SET and a value as inputs, then returns True if the value\nis present in the SET, and False otherwise."
},
{
"name": "Basic data handling: DictContainsKey",
"displayName": "contains key",
"category": "Basic/DICT",
"description": "Checks if a key exists in a dictionary.\n\nThis node takes a dictionary and a key as inputs, then returns True if the key\nexists in the dictionary, and False otherwise."
},
{
"name": "Basic data handling: ContinueFlow",
"displayName": "continue flow",
"category": "Basic/flow control",
"description": "Conditionally enable or disable a flow.\n\nThis node takes a value and either passes it through or blocks execution\nbased on the 'select' parameter. When 'select' is True, the value passes through;\nwhen False, execution is blocked.\n\nWhen a `message` is provided ComfyUI will display it in a dialog.\nLeave it empty for silent operation."
},
{
"name": "Basic data handling: ListToDataList",
"displayName": "convert to Data List",
"category": "Basic/LIST",
"description": "Converts a LIST object into a ComfyUI data list.\n\nThis node takes a LIST object (Python list as a single variable) and\nconverts it to a ComfyUI data list, allowing its items to be processed\nindividually by nodes that accept data lists."
},
{
"name": "Basic data handling: SetToDataList",
"displayName": "convert to Data List",
"category": "Basic/SET",
"description": "Converts a SET object into a ComfyUI data list.\n\nThis node takes a SET object (Python set as a single variable) and\nconverts it to a ComfyUI data list, allowing its items to be processed\nindividually by nodes that accept data lists."
},
{
"name": "Basic data handling: DataListToList",
"displayName": "convert to LIST",
"category": "Basic/Data List",
"description": "Converts a ComfyUI Data List into a LIST object.\n\nThis node takes a Data List input (which is typically a list of items with the same type)\nand converts it to a LIST object (a Python list as a single variable)."
},
{
"name": "Basic data handling: SetToList",
"displayName": "convert to LIST",
"category": "Basic/SET",
"description": "Converts a SET into a LIST.\n\nThis node takes a SET input and creates a new LIST containing all elements\nfrom the SET. Note that the order of elements in the resulting LIST is arbitrary\nsince SETs are unordered collections."
},
{
"name": "Basic data handling: DataListToSet",
"displayName": "convert to SET",
"category": "Basic/Data List",
"description": "Converts a ComfyUI Data List into a LIST object.\n\nThis node takes a Data List input (which is typically a list of items with the same type)\nand converts it to a LIST object (a Python list as a single variable)."
},
{
"name": "Basic data handling: ListToSet",
"displayName": "convert to SET",
"category": "Basic/LIST",
"description": "Converts a LIST into a SET.\n\nThis node takes a LIST input and creates a new SET containing all unique elements\nfrom the LIST, removing any duplicates."
},
{
"name": "Basic data handling: MathCos",
"displayName": "cos",
"category": "Basic/maths",
"description": "Calculates the cosine of an angle in radians or degrees.\n\nThis node takes an angle value and unit type, and returns the cosine of that angle.\nThe cosine of an angle is the ratio of the length of the adjacent side to the length\nof the hypotenuse in a right-angled triangle."
},
{
"name": "Basic data handling: ListCount",
"displayName": "count",
"category": "Basic/LIST",
"description": "Counts the number of occurrences of a value in a LIST.\n\nThis node takes a LIST and a value as inputs, then returns the number of times\nthe value appears in the LIST."
},
{
"name": "Basic data handling: StringCount",
"displayName": "count",
"category": "Basic/STRING",
"description": "Counts occurrences of a substring within a string.\n\nThis node returns the number of times the specified substring appears in the input string.\nYou can optionally specify start and end positions to limit the search range."
},
{
"name": "Basic data handling: DataListCreate",
"displayName": "create Data List",
"category": "Basic/Data List",
"description": "Creates a new Data List from items.\n\nThis node creates and returns a Data List. The list of items is dynamically\nextended based on the number of inputs provided."
},
{
"name": "Basic data handling: DataListCreateFromBoolean",
"displayName": "create Data List from BOOLEANs",
"category": "Basic/Data List",
"description": "Creates a new Data List from BOOLEAN items.\n\nThis node creates and returns a Data List. The list of items is dynamically\nextended based on the number of inputs provided."
},
{
"name": "Basic data handling: DataListCreateFromFloat",
"displayName": "create Data List from FLOATs",
"category": "Basic/Data List",
"description": "Creates a new Data List from FLOAT items.\n\nThis node creates and returns a Data List. The list of items is dynamically\nextended based on the number of inputs provided."
},
{
"name": "Basic data handling: DataListCreateFromInt",
"displayName": "create Data List from INTs",
"category": "Basic/Data List",
"description": "Creates a new Data List from INT items.\n\nThis node creates and returns a Data List. The list of items is dynamically\nextended based on the number of inputs provided."
},
{
"name": "Basic data handling: DataListCreateFromString",
"displayName": "create Data List from STRINGs",
"category": "Basic/Data List",
"description": "Creates a new Data List from STRING items.\n\nThis node creates and returns a Data List. The list of items is dynamically\nextended based on the number of inputs provided."
},
{
"name": "Basic data handling: DataListListCreate",
"displayName": "create Data List of Lists",
"category": "Basic/Data List",
"description": "Creates a new Data List from items.\n\nThis node creates and returns a Data List. The list of items is dynamically\nextended based on the number of inputs provided.\n\nEach input can be a list, so you'll get a list of lists."
},
{
"name": "Basic data handling: DictCreate",
"displayName": "create DICT",
"category": "Basic/DICT",
"description": "Creates a new empty dictionary.\n\nThis node creates and returns a new empty dictionary object."
},
{
"name": "Basic data handling: DictCreateFromBoolean",
"displayName": "create DICT from BOOLEANs",
"category": "Basic/DICT",
"description": "Creates a new empty dictionary.\n\nThis node creates and returns a new empty dictionary object."
},
{
"name": "Basic data handling: DictCreateFromFloat",
"displayName": "create DICT from FLOATs",
"category": "Basic/DICT",
"description": "Creates a new empty dictionary.\n\nThis node creates and returns a new empty dictionary object."
},
{
"name": "Basic data handling: DictCreateFromInt",
"displayName": "create DICT from INTs",
"category": "Basic/DICT",
"description": "Creates a new empty dictionary.\n\nThis node creates and returns a new empty dictionary object."
},
{
"name": "Basic data handling: DictCreateFromString",
"displayName": "create DICT from STRINGs",
"category": "Basic/DICT",
"description": "Creates a new empty dictionary.\n\nThis node creates and returns a new empty dictionary object."
},
{
"name": "Basic data handling: FloatCreate",
"displayName": "create FLOAT",
"category": "Basic/FLOAT",
"description": "Create a FLOAT from a STRING widget.\n\nThe input string must be a valid floating-point number and will be\ndirectly converted to a FLOAT without any further processing."
},
{
"name": "Basic data handling: DictCreateFromItemsDataList",
"displayName": "create from items (data list)",
"category": "Basic/DICT",
"description": "Creates a dictionary from a list of key-value pairs.\n\nThis node takes a list of key-value pairs (tuples) and builds a dictionary from them."
},
{
"name": "Basic data handling: DictCreateFromItemsList",
"displayName": "create from items (LIST)",
"category": "Basic/DICT",
"description": "Creates a dictionary from a list of key-value pairs.\n\nThis node takes a list of key-value pairs (tuples) and builds a dictionary from them."
},
{
"name": "Basic data handling: DictCreateFromLists",
"displayName": "create from LISTs",
"category": "Basic/DICT",
"description": "Creates a dictionary from separate lists of keys and values.\n\nThis node takes a list of keys and a list of values, then creates a dictionary\nby pairing corresponding elements from each list. If the lists are of different\nlengths, only pairs up to the length of the shorter list are used."
},
{
"name": "Basic data handling: IntCreate",
"displayName": "create INT",
"category": "Basic/INT",
"description": "Create an INT from a STRING widget.\n\nThe input string must be a valid integer number and will be\ndirectly converted to an INT without any further processing.\n\nStrings starting with \"0b\" are interpreted as binary numbers,\n\"0o\" as octal numbers, and \"0x\" as hexadecimal numbers.\n\nNote: This doesn't handle ones' complement as the data size is unknown."
},
{
"name": "Basic data handling: ListCreate",
"displayName": "create LIST",
"category": "Basic/LIST",
"description": "Creates a new LIST from items.\n\nThis node creates and returns a LIST. The list of items is dynamically\nextended based on the number of inputs provided."
},
{
"name": "Basic data handling: ListCreateFromBoolean",
"displayName": "create LIST from BOOLEANs",
"category": "Basic/LIST",
"description": "Creates a new LIST from BOOLEAN items.\n\nThis node creates and returns a LIST. The list of items is dynamically\nextended based on the number of inputs provided."
},
{
"name": "Basic data handling: ListCreateFromFloat",
"displayName": "create LIST from FLOATs",
"category": "Basic/LIST",
"description": "Creates a new LIST from FLOAT items.\n\nThis node creates and returns a LIST. The list of items is dynamically\nextended based on the number of inputs provided."
},
{
"name": "Basic data handling: ListCreateFromInt",
"displayName": "create LIST from INTs",
"category": "Basic/LIST",
"description": "Creates a new LIST from INT items.\n\nThis node creates and returns a LIST. The list of items is dynamically\nextended based on the number of inputs provided."
},
{
"name": "Basic data handling: ListCreateFromString",
"displayName": "create LIST from STRINGs",
"category": "Basic/LIST",
"description": "Creates a new LIST from STRING items.\n\nThis node creates and returns a LIST. The list of items is dynamically\nextended based on the number of inputs provided."
},
{
"name": "Basic data handling: SetCreate",
"displayName": "create SET",
"category": "Basic/SET",
"description": "Creates a new SET from items.\n\nThis node creates and returns a SET. The list of items is dynamically\nextended based on the number of inputs provided."
},
{
"name": "Basic data handling: SetCreateFromBoolean",
"displayName": "create SET from BOOLEANs",
"category": "Basic/SET",
"description": "Creates a new SET from items.\n\nThis node creates and returns a SET. The list of items is dynamically\nextended based on the number of inputs provided."
},
{
"name": "Basic data handling: SetCreateFromFloat",
"displayName": "create SET from FLOATs",
"category": "Basic/SET",
"description": "Creates a new SET from items.\n\nThis node creates and returns a SET. The list of items is dynamically\nextended based on the number of inputs provided."
},
{
"name": "Basic data handling: SetCreateFromInt",
"displayName": "create SET from INTs",
"category": "Basic/SET",
"description": "Creates a new SET from items.\n\nThis node creates and returns a SET. The list of items is dynamically\nextended based on the number of inputs provided."
},
{
"name": "Basic data handling: SetCreateFromString",
"displayName": "create SET from STRINGs",
"category": "Basic/SET",
"description": "Creates a new SET from items.\n\nThis node creates and returns a SET. The list of items is dynamically\nextended based on the number of inputs provided."
},
{
"name": "Basic data handling: TimeDelta",
"displayName": "Create Time Delta",
"category": "Basic/time",
"description": "Creates a TIMEDELTA object, which represents a duration and can be used for date calculations."
},
{
"name": "Basic data handling: MathDegrees",
"displayName": "degrees",
"category": "Basic/maths",
"description": "Converts an angle from radians to degrees.\n\nThis node takes an angle in radians and returns the equivalent angle in degrees."
},
{
"name": "Basic data handling: SetDifference",
"displayName": "difference",
"category": "Basic/SET",
"description": "Returns the difference between two SETs.\n\nThis node takes two SETs as input and returns a new SET containing\nelements in the first SET but not in the second SET."
},
{
"name": "Basic data handling: SetDiscard",
"displayName": "discard",
"category": "Basic/SET",
"description": "Removes an item from a SET if it is present.\n\nThis node takes a SET and any item as inputs, then returns a new SET\nwith the item removed. Unlike remove, no error is raised if the item is not present."
},
{
"name": "Basic data handling: FloatDivide",
"displayName": "divide",
"category": "Basic/FLOAT",
"description": "Divides one floating-point number by another.\n\nThis node takes two floats as input and returns the result of division.\nIt raises a ValueError if the divisor is 0."
},
{
"name": "Basic data handling: IntDivide",
"displayName": "divide",
"category": "Basic/INT",
"description": "Divides one integer by another.\n\nThis node takes two integers as input and returns the result of integer\ndivision. It raises a ValueError if the divisor is 0."
},
{
"name": "Basic data handling: FloatDivideSafe",
"displayName": "divide (zero safe)",
"category": "Basic/FLOAT",
"description": "Divides one floating-point number by another.\n\nThis node takes two floats as input and returns the result of the division.\nIt returns positive or negative infinity if the divisor is 0 (assumed to be +0.0)."
},
{
"name": "Basic data handling: IntDivideSafe",
"displayName": "divide (zero safe)",
"category": "Basic/INT",
"description": "Divides one integer by another.\n\nThis node takes two integers as input and returns the result of the integer\ndivision. It returns the positive or negative infinity value if the divisor is 0."
},
{
"name": "Basic data handling: MathE",
"displayName": "e (2.71828)",
"category": "Basic/maths",
"description": "Returns the mathematical constant e.\n\nThis node returns the value of e (Euler's number), which is approximately 2.71828."
},
{
"name": "Basic data handling: StringEndswith",
"displayName": "endswith",
"category": "Basic/STRING",
"description": "Checks if a string ends with the specified suffix.\n\nThis node tests whether the input string ends with a particular substring.\nReturns True if the string ends with the specified suffix, otherwise False.\nOptional start and end parameters allow you to check only a specific portion of the string."
},
{
"name": "Basic data handling: DataListEnumerate",
"displayName": "enumerate",
"category": "Basic/Data List",
"description": "Enumerate a data list, returning a list of [index, value] pairs.\nOptionally, specify a starting value for the index."
},
{
"name": "Basic data handling: SetEnumerate",
"displayName": "enumerate",
"category": "Basic/SET",
"description": "Enumerates elements in a SET.\n\nThis node takes a SET as input and returns a LIST of tuples where each tuple\ncontains an index and a value from the SET. The start parameter specifies the\ninitial index value (default is 0).\n\nNote: Since SETs are unordered, the enumeration order is arbitrary but consistent\nwithin a single operation."
},
{
"name": "Basic data handling: StringEscape",
"displayName": "escape",
"category": "Basic/STRING",
"description": " Escapes a string by converting special characters to escape sequences.\n\n This node converts characters like newlines, tabs, quotes, and backslashes to their escaped\n representation (like '\n', ' ', '\"', '\\'). Useful when you need to prepare strings\n for formats that require escaped sequences instead of literal special characters.\n "
},
{
"name": "Basic data handling: DictExcludeKeys",
"displayName": "exclude keys",
"category": "Basic/DICT",
"description": "Creates a new dictionary excluding the specified keys.\n\nThis node takes a dictionary and a list of keys, then returns a new dictionary\ncontaining all key-value pairs except those with keys in the provided list."
},
{
"name": "Basic data handling: MathExp",
"displayName": "exp",
"category": "Basic/maths",
"description": "Calculates the exponential of a number (e^x).\n\nThis node takes a number and returns e (Euler's number) raised to the power of that number."
},
{
"name": "Basic data handling: StringExpandtabs",
"displayName": "expandtabs",
"category": "Basic/STRING",
"description": "Replaces tab characters with spaces.\n\nThis node replaces all tab characters (' ') in a string with spaces.\nThe tab size (number of spaces per tab) can be adjusted,\nwith a default value of 8 characters."
},
{
"name": "Basic data handling: DataListExtend",
"displayName": "extend",
"category": "Basic/Data List",
"description": "Extends a list by appending elements from another list.\n\nThis node takes two lists as input and returns a new list that contains\nall elements from both lists."
},
{
"name": "Basic data handling: ListExtend",
"displayName": "extend",
"category": "Basic/LIST",
"description": "Extends a LIST by appending elements from another LIST.\n\nThis node takes two LIST objects as input and returns a new LIST that contains\nall elements from both lists."
},
{
"name": "Basic data handling: TimeExtract",
"displayName": "Extract Time Components",
"category": "Basic/time",
"description": "Extracts individual components (year, month, day, hour, etc.) from a DATETIME object.\nWeekday is returned as an integer, where Monday is 0 and Sunday is 6."
},
{
"name": "Basic data handling: DataListFilter",
"displayName": "filter",
"category": "Basic/Data List",
"description": "Filters a Data List using boolean values.\n\nThis node takes a value Data List and a filter Data List (containing only boolean values).\nIt returns a new Data List containing only the elements from the value list where the\ncorresponding element in the filter list is False.\n\nIf the lists have different lengths, the last element of the shorter list is repeated\ntill the lengths are matching."
},
{
"name": "Basic data handling: DictFilterByKeys",
"displayName": "filter by keys",
"category": "Basic/DICT",
"description": "Creates a new dictionary with only the specified keys.\n\nThis node takes a dictionary and a list of keys, then returns a new dictionary\ncontaining only the key-value pairs for the keys that exist in the original dictionary."
},
{
"name": "Basic data handling: DataListFilterSelect",
"displayName": "filter select",
"category": "Basic/Data List",
"description": "Filters a Data List using boolean values.\n\nThis node takes a value Data List and a filter Data List (containing only boolean values).\nIt returns two new Data Lists containing only the elements from the value list where the\ncorresponding element in the filter list is true or false.\n\nIf the lists have different lengths, the last element of the shorter list is repeated\ntill the lengths are matching."
},
{
"name": "Basic data handling: StringFind",
"displayName": "find",
"category": "Basic/STRING",
"description": "Finds the first occurrence of a substring in a string.\n\nThis node searches for the first occurrence of the specified substring within the input string.\nReturns the lowest index where the substring is found. If the substring is not found, it returns -1.\nOptional start and end parameters allow you to limit the search to a specific portion of the string."
},
{
"name": "Basic data handling: RegexFindallDataList",
"displayName": "find all (data list)",
"category": "Basic/STRING/regex",
"description": "Returns all non-overlapping matches of a pattern in the string as a list of strings."
},
{
"name": "Basic data handling: RegexFindallList",
"displayName": "find all (LIST)",
"category": "Basic/STRING/regex",
"description": "Returns all non-overlapping matches of a pattern in the string as a list of strings."
},
{
"name": "Basic data handling: DataListFirst",
"displayName": "first",
"category": "Basic/Data List",
"description": "Returns the first element in a list.\n\nThis node takes a list as input and returns the first element of the list.\nIf the list is empty, it returns None."
},
{
"name": "Basic data handling: ListFirst",
"displayName": "first",
"category": "Basic/LIST",
"description": "Returns the first element in a LIST.\n\nThis node takes a LIST as input and returns the first element of the list.\nIf the LIST is empty, it returns None."
},
{
"name": "Basic data handling: MathFloor",
"displayName": "floor",
"category": "Basic/maths",
"description": "Returns the floor of a number.\n\nThis node takes a number and returns the largest integer less than or equal to the input value."
},
{
"name": "Basic data handling: FlowSelect",
"displayName": "flow select",
"category": "Basic/flow control",
"description": "Select the direction of the flow.\n\nThis node takes a value and directs it to either the \"true\" or \"false\" output.\n\nNote: for dynamic switching in a Data Flow you might want to use\n\"filter select\" instead."
},
{
"name": "Basic data handling: ForceCalculation",
"displayName": "force calculation",
"category": "Basic/flow control",
"description": "Forces recalculation of the connected nodes.\n\nThis node passes the input directly to the output but prevents caching\nby marking itself as an output node and also indicates the out has changed.\nUse this when you need to ensure nodes are always recalculated."
},
{
"name": "Basic data handling: ExecutionOrder",
"displayName": "force execution order",
"category": "Basic/flow control",
"description": "Force execution order in the workflow.\n\nThis node is lightweight and does not affect the workflow. It is used to force\nthe execution order of nodes in the workflow. You only need to chain this node\nwith the other execution order nodes in the desired order and add any\noutput of the nodes you want to force execution order on.\n\nThis node also passes through any input connected to \"any node output\" as\nits second output."
},
{
"name": "Basic data handling: TimeFormat",
"displayName": "Format Time String",
"category": "Basic/time",
"description": "Formats a DATETIME object into a string using a specified format code.\nCommon format codes: %Y (year), %m (month), %d (day), %H (hour), %M (minute), %S (second)."
},
{
"name": "Basic data handling: StringFormatMap",
"displayName": "format_map",
"category": "Basic/STRING",
"description": "Formats a string using values from a dictionary.\n\nThis node replaces placeholders in the input string with values from a dictionary.\nIt uses the same placeholder syntax as the format() method, but takes the values from a dictionary\nmapping keys to values. For example, the string \"Hello, {name}\" with a dictionary {\"name\": \"World\"}\nwould produce \"Hello, World\"."
},
{
"name": "Basic data handling: MathFormula",
"displayName": "formula",
"category": "Basic/maths",
"description": "A node that evaluates a mathematical formula provided as a string without using eval.\n\nThis node takes an arbitrary number of numerical inputs (single letters like `a`, `b`, `c`, etc.) and safely\nevaluates the formula with supported operations: +, -, *, /, //, %, **, parentheses, and mathematical\nfunctions.\n\nNOTE on Operator Precedence: This parser uses standard precedence rules. Unary minus binds tightly,\nso expressions like `-a ** 2` are interpreted as `(-a) ** 2`. To calculate `-(a ** 2)`,\nuse parentheses: `-(a ** 2)`.\n\nThe identifiers `e` and `pi` are special. When used as a function call (`e()`, `pi()`), they return their\nrespective mathematical constants. When used as a variable (`e`), they expect a corresponding input.\n\nSupported functions:\n- Basic: abs, floor, ceil, round, min(a,b), max(a,b)\n- Trigonometric: sin, cos, tan, asin, acos, atan, atan2(y,x), degrees, radians\n- Hyperbolic: sinh, cosh, tanh, asinh, acosh, atanh\n- Exponential & Logarithmic: exp, log, log10, log2, sqrt, pow(base,exp)\n- Constants (must be called with empty parentheses): pi(), e()"
},
{
"name": "Basic data handling: IntFromBytes",
"displayName": "from bytes",
"category": "Basic/INT",
"description": "Converts a bytes object to an integer.\n\nThis class method takes bytes, byte order, and signed flag as inputs and\nreturns an integer."
},
{
"name": "Basic data handling: FloatFromHex",
"displayName": "from hex",
"category": "Basic/FLOAT",
"description": "Converts a hexadecimal string to its corresponding floating-point number.\n\nThis node takes a hexadecimal float string as input and returns the float."
},
{
"name": "Basic data handling: DictFromKeys",
"displayName": "from keys",
"category": "Basic/DICT",
"description": "Creates a dictionary from a list of keys and a default value.\n\nThis node takes a list of keys and an optional value, then creates a new\ndictionary where each key is associated with the value. If no value is\nprovided, None is used."
},
{
"name": "Basic data handling: DictGet",
"displayName": "get",
"category": "Basic/DICT",
"description": "Retrieves a value from a dictionary using the specified key.\n\nThis node gets the value for the specified key from a dictionary.\nIf the key is not found and a default value is provided, that default is returned.\nOtherwise, it returns None."
},
{
"name": "Basic data handling: ListGetItem",
"displayName": "get item",
"category": "Basic/LIST",
"description": "Retrieves an item at a specified position in a LIST.\n\nThis node takes a LIST and an index as inputs, then returns the item at the specified index.\nNegative indices count from the end of the LIST.\nOut of range indices return None."
},
{
"name": "Basic data handling: DictGetKeysValues",
"displayName": "get keys values",
"category": "Basic/DICT",
"description": "Returns keys and values as separate lists.\n\nThis node takes a dictionary and returns two lists: one containing\nall keys and another containing all corresponding values."
},
{
"name": "Basic data handling: DictGetMultiple",
"displayName": "get multiple",
"category": "Basic/DICT",
"description": "Retrieves multiple values from a dictionary using a list of keys.\n\nThis node takes a dictionary and a list of keys, then returns a list\ncontaining the corresponding values. If a key is not found, the default\nvalue is used for that position."
},
{
"name": "Basic data handling: IfElifElse",
"displayName": "if/elif/.../else",
"category": "Basic/flow control",
"description": "Implements a conditional branch (if/elif/else) in the workflow.\n\nThis node takes a condition input and two value inputs. If the condition\nevaluates to True, the first value is returned; otherwise, the elif (else if)\nis evaluated and returned when true. This continues for all additional elifs.\nWhen none is true, the value of the else is returned.\nThis allows conditional data flow in ComfyUI workflows."
},
{
"name": "Basic data handling: IfElse",
"displayName": "if/else",
"category": "Basic/flow control",
"description": "Implements a conditional branch (if/else) in the workflow.\n\nThis node takes a condition input and two value inputs. If the condition\nevaluates to True, the first value is returned; otherwise, the second value\nis returned. This allows conditional data flow in ComfyUI workflows."
},
{
"name": "Basic data handling: StringIn",
"displayName": "in (contains)",
"category": "Basic/STRING",
"description": "Checks if a string contains a specified substring.\n\nThis node implements the 'in' operator for strings. It checks whether the given substring\nexists within the input string. Returns True if the substring is found,\notherwise False."
},
{
"name": "Basic data handling: ListIndex",
"displayName": "index",
"category": "Basic/LIST",
"description": "Returns the index of the first occurrence of a value in a LIST.\n\nThis node takes a LIST and a value as inputs, then returns the index of the first\noccurrence of the value. Optional start and end parameters limit the search to a slice\nof the LIST. Returns -1 if the value is not present."
},
{
"name": "Basic data handling: ListInsert",
"displayName": "insert",
"category": "Basic/LIST",
"description": "Inserts an item at a specified position in a LIST.\n\nThis node takes a LIST, an index, and any item as inputs, then returns a new\nLIST with the item inserted at the specified index."
},
{
"name": "Basic data handling: FloatAsIntegerRatio",
"displayName": "integer ratio",
"category": "Basic/FLOAT",
"description": "Returns the integer ratio of a floating-point number.\n\nThis node takes a floating-point number and returns two integers,\nwhich represent the ratio as numerator and denominator."
},
{
"name": "Basic data handling: SetIntersection",
"displayName": "intersection",
"category": "Basic/SET",
"description": "Returns the intersection of two or more SETs.\n\nThis node takes multiple SETs as input and returns a new SET containing\nonly elements present in all input SETs."
},
{
"name": "Basic data handling: DictInvert",
"displayName": "invert",
"category": "Basic/DICT",
"description": "Creates a new dictionary with keys and values swapped.\n\nThis node takes a dictionary as input and returns a new dictionary where\nthe keys become values and values become keys. Note that values must be\nhashable to be used as keys in the new dictionary."
},
{
"name": "Basic data handling: IsConnected",
"displayName": "is connected",
"category": "Basic/flow control",
"description": "Checks if the input is connected.\n\nThis node returns True if the 'input' is connected to another node's output,\nand False otherwise."
},
{
"name": "Basic data handling: SetIsDisjoint",
"displayName": "is disjoint",
"category": "Basic/SET",
"description": "Checks if two SETs have no elements in common.\n\nThis node takes two SETs as input and returns True if they have no elements in common."
},
{
"name": "Basic data handling: FloatIsInteger",
"displayName": "is integer",
"category": "Basic/FLOAT",
"description": "Checks if a floating-point number is an integer.\n\nThis node takes a floating-point number as input and returns True if the number\nis an integer, otherwise False."
},
{
"name": "Basic data handling: IsNull",
"displayName": "is null",
"category": "Basic/comparison",
"description": "Checks if a value is None/null.\n\nThis node takes any input value and returns True if the value is None,\nand False otherwise."
},
{
"name": "Basic data handling: SetIsSubset",
"displayName": "is subset",
"category": "Basic/SET",
"description": "Checks if set1 is a subset of set2.\n\nThis node takes two SETs as input and returns True if set1 is a subset of set2\n(all elements in set1 are also in set2)."
},
{
"name": "Basic data handling: SetIsSuperset",
"displayName": "is superset",
"category": "Basic/SET",
"description": "Checks if set1 is a superset of set2.\n\nThis node takes two SETs as input and returns True if set1 is a superset of set2\n(set1 contains all elements in set2)."
},
{
"name": "Basic data handling: StringIsAlnum",
"displayName": "isalnum",
"category": "Basic/STRING/is",
"description": "Checks if all characters in the string are alphanumeric.\n\nThis node returns True if all characters in the string are alphanumeric\n(letters or numbers) and there is at least one character, otherwise False."
},
{
"name": "Basic data handling: StringIsAlpha",
"displayName": "isalpha",
"category": "Basic/STRING/is",
"description": "Checks if all characters in the string are alphabetic.\n\nThis node returns True if all characters in the string are alphabetic\n(letters) and there is at least one character, otherwise False."
},
{
"name": "Basic data handling: StringIsAscii",
"displayName": "isascii",
"category": "Basic/STRING/is",
"description": "Checks if all characters in the string are ASCII characters.\n\nThis node returns True if all characters in the string are in the ASCII character\nset and there is at least one character, otherwise False."
},
{
"name": "Basic data handling: StringIsDecimal",
"displayName": "isdecimal",
"category": "Basic/STRING/is",
"description": "Checks if all characters in the string are decimal characters.\n\nThis node returns True if all characters in the string are decimal\ncharacters and there is at least one character, otherwise False.\nDecimal characters include digit characters and characters that can be\nused to form decimal numbers in various locales."
},
{
"name": "Basic data handling: StringIsDigit",
"displayName": "isdigit",
"category": "Basic/STRING/is",
"description": "Checks if all characters in the string are digits.\n\nThis node returns True if all characters in the string are digits\nand there is at least one character, otherwise False."
},
{
"name": "Basic data handling: StringIsIdentifier",
"displayName": "isidentifier",
"category": "Basic/STRING/is",
"description": "Checks if the string is a valid identifier in Python.\n\nThis node returns True if the string is a valid Python identifier,\notherwise False. A valid identifier must start with a letter or underscore\nand can only contain letters, digits, or underscores."
},
{
"name": "Basic data handling: StringIsLower",
"displayName": "islower",
"category": "Basic/STRING/is",
"description": "Checks if all characters in the string are lowercase.\n\nThis node returns True if all cased characters in the string are lowercase\nand there is at least one cased character, otherwise False."
},
{
"name": "Basic data handling: StringIsNumeric",
"displayName": "isnumeric",
"category": "Basic/STRING/is",
"description": "Checks if all characters in the string are numeric.\n\nThis node returns True if all characters in the string are numeric\nand there is at least one character, otherwise False. Numeric characters include\ndigit characters and characters that have the Unicode numeric value property."
},
{
"name": "Basic data handling: StringIsPrintable",
"displayName": "isprintable",
"category": "Basic/STRING/is",
"description": "Checks if all characters in the string are printable.\n\nThis node returns True if all characters in the string are printable or the string is empty,\notherwise False. Printable characters are those which are not control characters."
},
{
"name": "Basic data handling: StringIsSpace",
"displayName": "isspace",
"category": "Basic/STRING/is",
"description": "Checks if all characters in the string are whitespace.\n\nThis node returns True if all characters in the string are whitespace\nand there is at least one character, otherwise False."
},
{
"name": "Basic data handling: StringIsTitle",
"displayName": "istitle",
"category": "Basic/STRING/is",
"description": "Checks if the string is titlecased.\n\nThis node returns True if the string is titlecased and there is at least one\ncharacter, otherwise False. A titlecased string has all words start with an\nuppercase character and continue with lowercase."
},
{
"name": "Basic data handling: StringIsUpper",
"displayName": "isupper",
"category": "Basic/STRING/is",
"description": "Checks if all characters in the string are uppercase.\n\nThis node returns True if all cased characters in the string are uppercase\nand there is at least one cased character, otherwise False."
},
{
"name": "Basic data handling: DictItems",
"displayName": "items",
"category": "Basic/DICT",
"description": "Returns all key-value pairs in a dictionary.\n\nThis node takes a dictionary and returns a list of tuples, where each tuple\ncontains a key-value pair from the dictionary."
},
{
"name": "Basic data handling: StringDataListJoin",
"displayName": "join (from data list)",
"category": "Basic/STRING",
"description": "Joins strings from a data list with a specified separator.\n\nThis node takes a data list of strings and concatenates them, with the specified\nseparator string between each element. The separator is inserted between the strings,\nnot at the beginning or end of the result."
},
{
"name": "Basic data handling: StringListJoin",
"displayName": "join (from LIST)",
"category": "Basic/STRING",
"description": "Joins strings from a LIST with a specified separator.\n\nThis node takes a data list of strings and concatenates them, with the specified\nseparator string between each element. The separator is inserted between the strings,\nnot at the beginning or end of the result."
},
{
"name": "Basic data handling: DictKeys",
"displayName": "keys",
"category": "Basic/DICT",
"description": "Returns all keys in a dictionary.\n\nThis node takes a dictionary and returns a list containing all of its keys."
},
{
"name": "Basic data handling: DataListLast",
"displayName": "last",
"category": "Basic/Data List",
"description": "Returns the last element in a list.\n\nThis node takes a list as input and returns the last element of the list.\nIf the list is empty, it returns None."
},
{
"name": "Basic data handling: ListLast",
"displayName": "last",
"category": "Basic/LIST",
"description": "Returns the last element in a LIST.\n\nThis node takes a LIST as input and returns the last element of the list.\nIf the LIST is empty, it returns None."
},
{
"name": "Basic data handling: DictLength",
"displayName": "length",
"category": "Basic/DICT",
"description": "Returns the number of key-value pairs in a dictionary.\n\nThis node takes a dictionary as input and returns its length (number of items)."
},
{
"name": "Basic data handling: ListLength",
"displayName": "length",
"category": "Basic/LIST",
"description": "Returns the number of items in a LIST.\n\nThis node takes a LIST as input and returns its length as an integer."
},
{
"name": "Basic data handling: SetLength",
"displayName": "length",
"category": "Basic/SET",
"description": "Returns the number of items in a SET.\n\nThis node takes a SET as input and returns its length (number of elements) as an integer."
},
{
"name": "Basic data handling: StringLength",
"displayName": "length",
"category": "Basic/STRING",
"description": "Returns the length of a string.\n\nThis node calculates and returns the number of characters in the input string.\nIt works the same way as Python's built-in len() function for strings."
},
{
"name": "Basic data handling: StringLjust",
"displayName": "ljust",
"category": "Basic/STRING",
"description": "Left-aligns the string within a field of a given width.\n\nThis node returns a string left-aligned in a field of the specified width.\nIf fillchar is provided, it is used as the padding character instead of a space."
},
{
"name": "Basic data handling: MathLog",
"displayName": "log",
"category": "Basic/maths",
"description": "Calculates the natural logarithm (base e) of a number.\n\nThis node takes a positive number and returns its natural logarithm.\nIf the specified base is not 'e', calculates the logarithm with the specified base."
},
{
"name": "Basic data handling: MathLog10",
"displayName": "log10",
"category": "Basic/maths",
"description": "Calculates the base-10 logarithm of a number.\n\nThis node takes a positive number and returns its base-10 logarithm."
},
{
"name": "Basic data handling: StringLower",
"displayName": "lower",
"category": "Basic/STRING",
"description": "Converts the string to lowercase.\n\nThis node returns a copy of the string with all uppercase characters converted to lowercase."
},
{
"name": "Basic data handling: StringLstrip",
"displayName": "lstrip",
"category": "Basic/STRING",
"description": "Removes leading characters from the string.\n\nThis node returns a copy of the string with leading characters removed.\nIf chars is provided, it specifies the set of characters to be removed.\nIf chars is not provided, whitespace characters are removed."
},
{
"name": "Basic data handling: DataListMax",
"displayName": "max",
"category": "Basic/Data List",
"description": "Finds the maximum value in a list of numbers.\n\nThis node takes a list of numbers (either FLOAT or INT) and returns\nthe maximum value. Returns None if the list is empty or if it contains\nnon-numeric values."
},
{
"name": "Basic data handling: ListMax",
"displayName": "max",
"category": "Basic/LIST",
"description": "Returns the maximum value in a LIST.\n\nThis node takes a LIST of comparable items and returns the maximum value.\nReturns None if the LIST is empty or if items are not comparable."
},
{
"name": "Basic data handling: MathMax",
"displayName": "max",
"category": "Basic/maths",
"description": "Returns the maximum value among the inputs.\n\nThis node takes two or more values and returns the maximum value among them.\nThe function works with both FLOAT and INT types."
},
{
"name": "Basic data handling: DictMerge",
"displayName": "merge",
"category": "Basic/DICT",
"description": "Merges multiple dictionaries into a single dictionary.\n\nThis node takes multiple dictionaries as input and combines them into a single\ndictionary. If there are duplicate keys, values from later dictionaries take precedence."
},
{
"name": "Basic data handling: DataListMin",
"displayName": "min",
"category": "Basic/Data List",
"description": "Finds the minimum value in a list of numbers.\n\nThis node takes a list of numbers (either FLOAT or INT) and returns\nthe minimum value. Returns None if the list is empty or if it contains\nnon-numeric values."
},
{
"name": "Basic data handling: ListMin",
"displayName": "min",
"category": "Basic/LIST",
"description": "Returns the minimum value in a LIST.\n\nThis node takes a LIST of comparable items and returns the minimum value.\nReturns None if the LIST is empty or if items are not comparable."
},
{
"name": "Basic data handling: MathMin",
"displayName": "min",
"category": "Basic/maths",
"description": "Returns the minimum value among the inputs.\n\nThis node takes two or more values and returns the minimum value among them.\nThe function works with both FLOAT and INT types."
},
{
"name": "Basic data handling: IntModulus",
"displayName": "modulus",
"category": "Basic/INT",
"description": "Returns the modulus of two integers.\n\nThis node takes two integers as input and returns the remainder when the\nfirst integer is divided by the second."
},
{
"name": "Basic data handling: FloatMultiply",
"displayName": "multiply",
"category": "Basic/FLOAT",
"description": "Multiplies two floating-point numbers.\n\nThis node takes two floats as input and returns their product."
},
{
"name": "Basic data handling: IntMultiply",
"displayName": "multiply",
"category": "Basic/INT",
"description": "Multiplies two integers.\n\nThis node takes two integers as input and returns their product."
},
{
"name": "Basic data handling: Boolean Nand",
"displayName": "nand",
"category": "Basic/BOOLEAN",
"description": "Returns the logical NAND result of two boolean values.\n\nThis node takes two boolean inputs and returns their logical NAND result."
},
{
"name": "Basic data handling: Boolean Nor",
"displayName": "nor",
"category": "Basic/BOOLEAN",
"description": "Returns the logical NOR result of two boolean values.\n\nThis node takes two boolean inputs and returns their logical NOR result."
},
{
"name": "Basic data handling: Boolean Not",
"displayName": "not",
"category": "Basic/BOOLEAN",
"description": "Returns the logical NOT result of a boolean value.\n\nThis node takes one boolean input and returns its logical NOT result."
},
{
"name": "Basic data handling: Boolean Or",
"displayName": "or",
"category": "Basic/BOOLEAN",
"description": "Returns the logical OR result of two boolean values.\n\nThis node takes two boolean inputs and returns their logical OR result."
},
{
"name": "Basic data handling: Generic Or",
"displayName": "or (generic)",
"category": "Basic/BOOLEAN",
"description": "Returns the logical N/OR result of one or more values.\n\nThis node takes a dynamic number of inputs and returns their logical N/OR result.\nNote that values are evaluated according Python's rules. I.e. an empty string is\n`false`, an integer 0 is also `false`, etc."
},
{
"name": "Basic data handling: TimeParse",
"displayName": "Parse Time String",
"category": "Basic/time",
"description": "Parses a string containing a date and time into a DATETIME object, using a specified format code."
},
{
"name": "Basic data handling: MathPi",
"displayName": "pi (3.14159)",
"category": "Basic/maths",
"description": "Returns the mathematical constant π (pi).\n\nThis node returns the value of π, which is approximately 3.14159."
},
{
"name": "Basic data handling: DictPop",
"displayName": "pop",
"category": "Basic/DICT",
"description": "Removes and returns a key-value pair from a dictionary.\n\nThis node takes a dictionary and a key as inputs, removes the specified key\nfrom the dictionary, and returns both the modified dictionary and the value\nassociated with the key. If the key is not found and a default value is provided,\nthat default is returned. Otherwise, an error is raised."
},
{
"name": "Basic data handling: ListPop",
"displayName": "pop",
"category": "Basic/LIST",
"description": "Removes and returns an item at a specified position in a LIST.\n\nThis node takes a LIST and an index as inputs, then returns both the new LIST\nwith the item removed and the removed item. If no index is specified,\nremoves and returns the last item.\nWhen the LIST is empty, the item is None."
},
{
"name": "Basic data handling: SetPop",
"displayName": "pop",
"category": "Basic/SET",
"description": "Removes and returns an arbitrary item from a SET.\n\nThis node takes a SET as input and returns both the new SET\nwith an arbitrary item removed and the removed item.\nWhen the SET is empty, the item is None."
},
{
"name": "Basic data handling: DictPopItem",
"displayName": "pop item",
"category": "Basic/DICT",
"description": "Removes and returns an arbitrary key-value pair from a dictionary.\n\nThis node takes a dictionary as input, removes an arbitrary key-value pair,\nand returns the modified dictionary along with the removed key and value.\nIf the dictionary is empty, returns an error."
},
{
"name": "Basic data handling: DataListPopRandom",
"displayName": "pop random",
"category": "Basic/Data List",
"description": "Removes and returns a random element from a list.\n\nThis node takes a list as input and returns the list with the random element removed\nand the removed element itself. If the list is empty, it returns None for the element."
},
{
"name": "Basic data handling: DictPopRandom",
"displayName": "pop random",
"category": "Basic/DICT",
"description": "Removes and returns a random key-value pair from a dictionary.\n\nThis node takes a dictionary as input, removes a random key-value pair,\nand returns the modified dictionary along with the removed key and value.\nIf the dictionary is empty, it returns empty values."
},
{
"name": "Basic data handling: ListPopRandom",
"displayName": "pop random",
"category": "Basic/LIST",
"description": "Removes and returns a random element from a LIST.\n\nThis node takes a LIST as input and returns the LIST with the random element removed\nand the removed element itself. If the LIST is empty, it returns None for the element."
},
{
"name": "Basic data handling: SetPopRandom",
"displayName": "pop random",
"category": "Basic/SET",
"description": "Removes and returns a random element from a SET.\n\nThis node takes a SET as input and returns the SET with a random element removed\nand the removed element itself. If the SET is empty, it returns None for the element."
},
{
"name": "Basic data handling: FloatPower",
"displayName": "power",
"category": "Basic/FLOAT",
"description": "Raises one floating-point number to the power of another.\n\nThis node takes two floats as input and returns the result of raising\nthe first float to the power of the second."
},
{
"name": "Basic data handling: IntPower",
"displayName": "power",
"category": "Basic/INT",
"description": "Raises one integer to the power of another.\n\nThis node takes two integers as input and returns the result of raising\nthe first integer to the power of the second."
},
{
"name": "Basic data handling: MathRadians",
"displayName": "radians",
"category": "Basic/maths",
"description": "Converts an angle from degrees to radians.\n\nThis node takes an angle in degrees and returns the equivalent angle in radians."
},
{
"name": "Basic data handling: DataListRange",
"displayName": "range",
"category": "Basic/Data List",
"description": "Creates a data list containing a sequence of numbers.\n\nThis node generates a sequence of numbers similar to Python's range() function.\nIt takes start, stop, and step parameters to define the sequence."
},
{
"name": "Basic data handling: ListRange",
"displayName": "range",
"category": "Basic/LIST",
"description": "Creates a LIST containing a sequence of numbers.\n\nThis node generates a LIST of numbers similar to Python's range() function.\nIt takes start, stop, and step parameters to define the sequence."
},
{
"name": "Basic data handling: DictRemove",
"displayName": "remove",
"category": "Basic/DICT",
"description": "Removes a key-value pair from a dictionary.\n\nThis node takes a dictionary and a key as inputs, then returns a new\ndictionary with the specified key removed. If the key doesn't exist,\nthe dictionary remains unchanged."
},
{
"name": "Basic data handling: ListRemove",
"displayName": "remove",
"category": "Basic/LIST",
"description": "Removes the first occurrence of a specified value from a LIST.\n\nThis node takes a LIST and a value as inputs, then returns a new LIST with\nthe first occurrence of the value removed and a success indicator. If the value\nis not present, the original LIST is returned with success set to False."
},
{
"name": "Basic data handling: SetRemove",
"displayName": "remove",
"category": "Basic/SET",
"description": "Removes an item from a SET.\n\nThis node takes a SET and any item as inputs, then returns a new SET\nwith the item removed and a success indicator. If the item is not present,\nthe original SET is returned with success set to False."
},
{
"name": "Basic data handling: StringRemoveprefix",
"displayName": "removeprefix",
"category": "Basic/STRING",
"description": "Removes prefix from the string if present.\n\nThis node returns a copy of the string with the specified prefix removed\nif the string starts with that prefix, otherwise returns the original string."
},
{
"name": "Basic data handling: StringRemovesuffix",
"displayName": "removesuffix",
"category": "Basic/STRING",
"description": "Removes suffix from the string if present.\n\nThis node returns a copy of the string with the specified suffix removed\nif the string ends with that suffix, otherwise returns the original string."
},
{
"name": "Basic data handling: StringReplace",
"displayName": "replace",
"category": "Basic/STRING",
"description": "Replaces occurrences of a substring with another substring.\n\nThis node returns a copy of the string with all occurrences of substring\nold replaced by new. If the optional argument count is given, only the\nfirst count occurrences are replaced."
},
{
"name": "Basic data handling: ListReverse",
"displayName": "reverse",
"category": "Basic/LIST",
"description": "Reverses the order of items in a LIST.\n\nThis node takes a LIST as input and returns a new LIST with the items in reversed order."
},
{
"name": "Basic data handling: StringRfind",
"displayName": "rfind",
"category": "Basic/STRING",
"description": "Finds the highest index of the substring in the string.\n\nThis node searches for the last occurrence of the specified substring within the input string.\nReturns the highest index where the substring is found. If the substring is not found, it returns -1.\nOptional start and end parameters allow you to limit the search to a specific portion of the string."
},
{
"name": "Basic data handling: StringRjust",
"displayName": "rjust",
"category": "Basic/STRING",
"description": "Right-aligns the string within a field of a given width.\n\nThis node returns a string right-aligned in a field of the specified width.\nIf fillchar is provided, it is used as the padding character instead of a space."
},
{
"name": "Basic data handling: FloatRound",
"displayName": "round",
"category": "Basic/FLOAT",
"description": "Rounds a floating-point number to the specified number of decimal places.\n\nThis node takes a float and an integer for decimal places as inputs,\nand returns the rounded result."
},
{
"name": "Basic data handling: StringRsplitDataList",
"displayName": "rsplit (from data list)",
"category": "Basic/STRING",
"description": "Splits the string at the specified separator from the right.\n\nThis node returns a list of strings by splitting the input string at the specified separator,\nstarting from the right. If maxsplit is provided, at most maxsplit splits are done.\nIf the separator is not specified or is None, any whitespace string is a separator.\nCreates a data list of strings."
},
{
"name": "Basic data handling: StringRsplitList",
"displayName": "rsplit (from LIST)",
"category": "Basic/STRING",
"description": "Splits the string at the specified separator from the right.\n\nThis node returns a list of strings by splitting the input string at the specified separator,\nstarting from the right. If maxsplit is provided, at most maxsplit splits are done.\nIf the separator is not specified or is None, any whitespace string is a separator.\nCreates a LIST of strings."
},
{
"name": "Basic data handling: StringRstrip",
"displayName": "rstrip",
"category": "Basic/STRING",
"description": "Removes trailing characters from the string.\n\nThis node returns a copy of the string with trailing characters removed.\nIf chars is provided, it specifies the set of characters to be removed.\nIf chars is not provided, whitespace characters are removed."
},
{
"name": "Basic data handling: RegexSearchGroupsDataList",
"displayName": "search groups (data list)",
"category": "Basic/STRING/regex",
"description": "Searches the string for a match to the pattern and returns a LIST of match groups.\nIf no match is found, it returns an empty LIST."
},
{
"name": "Basic data handling: RegexSearchGroupsList",
"displayName": "search groups (LIST)",
"category": "Basic/STRING/regex",
"description": "Searches the string for a match to the pattern and returns a data list of match groups.\nIf no match is found, it returns an empty data list."
},
{
"name": "Basic data handling: RegexGroupDict",
"displayName": "search named groups",
"category": "Basic/STRING/regex",
"description": "Searches the string with the given pattern and returns a DICT of named groups.\nIf no match is found, it returns an empty DICT."
},
{
"name": "Basic data handling: DictSet",
"displayName": "set",
"category": "Basic/DICT",
"description": "Adds or updates a key-value pair in a dictionary.\n\nThis node takes a dictionary, key, and value as inputs, then returns\na modified dictionary with the new key-value pair."
},
{
"name": "Basic data handling: ListSetItem",
"displayName": "set item",
"category": "Basic/LIST",
"description": "Sets an item at a specified position in a LIST.\n\nThis node takes a LIST, an index, and a value, then returns a new LIST with\nthe item at the specified index replaced by the value."
},
{
"name": "Basic data handling: DictSetDefault",
"displayName": "setdefault",
"category": "Basic/DICT",
"description": "Returns the value for a key, setting a default if the key doesn't exist.\n\nThis node takes a dictionary, a key, and a default value. If the key exists\nin the dictionary, the corresponding value is returned. If the key doesn't\nexist, the default value is inserted for the key and returned."
},
{
"name": "Basic data handling: DataListShuffle",
"displayName": "shuffle",
"category": "Basic/Data List",
"description": "Shuffles the items in a list using a seed for reproducibility.\n\nThis node takes a list and a seed as input and returns a new shuffled list."
},
{
"name": "Basic data handling: ListShuffle",
"displayName": "shuffle",
"category": "Basic/LIST",
"description": "Shuffles the items in a list using a seed for reproducibility.\n\nThis node takes a LIST and a seed as input and returns a new shuffled LIST."
},
{
"name": "Basic data handling: MathSin",
"displayName": "sin",
"category": "Basic/maths",
"description": "Calculates the sine of an angle in radians or degrees.\n\nThis node takes an angle value and unit type, and returns the sine of that angle.\nThe sine of an angle is the ratio of the length of the opposite side to the length\nof the hypotenuse in a right-angled triangle."
},
{
"name": "Basic data handling: ListSlice",
"displayName": "slice",
"category": "Basic/LIST",
"description": "Creates a slice of a LIST.\n\nThis node takes a LIST and start/stop/step parameters, and returns a new LIST\ncontaining the specified slice of the original LIST."
},
{
"name": "Basic data handling: ListSort",
"displayName": "sort",
"category": "Basic/LIST",
"description": "Sorts the items in a LIST.\n\nThis node takes a LIST as input and returns a new sorted LIST.\nOption includes sorting in reverse order."
},
{
"name": "Basic data handling: RegexSplitDataList",
"displayName": "split (data list)",
"category": "Basic/STRING/regex",
"description": "Splits the string at each match of the pattern and returns a list of substrings."
},
{
"name": "Basic data handling: RegexSplitList",
"displayName": "split (LIST)",
"category": "Basic/STRING/regex",
"description": "Splits the string at each match of the pattern and returns a list of substrings."
},
{
"name": "Basic data handling: StringSplitDataList",
"displayName": "split (to data list)",
"category": "Basic/STRING",
"description": "Splits the string at the specified separator.\n\nThis node splits the input string at the specified separator and returns a\ndata list containing all parts. If maxsplit is provided, at most maxsplit\nsplits are done.\n\nIf the separator is not specified or is None, any whitespace string is a separator.\nCreates a data list of strings."
},
{
"name": "Basic data handling: StringSplitList",
"displayName": "split (to LIST)",
"category": "Basic/STRING",
"description": "Splits the string at the specified separator.\n\nThis node splits the input string at the specified separator and returns a\ndata list containing all parts. If maxsplit is provided, at most maxsplit\nsplits are done.\n\nIf the separator is not specified or is None, any whitespace string is a separator.\nCreates a LIST of strings."
},
{
"name": "Basic data handling: StringSplitlinesDataList",
"displayName": "splitlines (from data list)",
"category": "Basic/STRING",
"description": "Splits the string at line boundaries.\n\nThis node returns a list of the lines in the string, breaking at line boundaries.\nIf keepends is True, line breaks are included in the resulting list.\nCreates a data list of strings."
},
{
"name": "Basic data handling: StringSplitlinesList",
"displayName": "splitlines (to LIST)",
"category": "Basic/STRING",
"description": "Splits the string at line boundaries.\n\nThis node returns a list of the lines in the string, breaking at line boundaries.\nIf keepends is True, line breaks are included in the resulting list.\nCreates a LIST of strings."
},
{
"name": "Basic data handling: MathSqrt",
"displayName": "sqrt",
"category": "Basic/maths",
"description": "Calculates the square root of a non-negative number.\n\nThis node takes a non-negative number and returns its square root."
},
{
"name": "Basic data handling: StringStartswith",
"displayName": "startswith",
"category": "Basic/STRING",
"description": "Checks if a string starts with the specified prefix.\n\nThis node tests whether the input string starts with a particular substring.\nReturns True if the string starts with the specified prefix, otherwise False.\nOptional start and end parameters allow you to check only a specific portion of the string."
},
{
"name": "Basic data handling: StringComparison",
"displayName": "string compare",
"category": "Basic/comparison",
"description": "Compares two strings using a selected comparison operator.\n\nThis node takes two string inputs and a comparison operator, and returns\na boolean result based on the selected comparison."
},
{
"name": "Basic data handling: StringStrip",
"displayName": "strip",
"category": "Basic/STRING",
"description": "Removes leading and trailing characters from the string.\n\nThis node returns a copy of the string with both leading and trailing characters removed.\nIf chars is provided, it specifies the set of characters to be removed.\nIf chars is not provided, whitespace characters are removed."
},
{
"name": "Basic data handling: RegexSub",
"displayName": "substitute",
"category": "Basic/STRING/regex",
"description": "Substitutes matches of the pattern in the string with a replacement string."
},
{
"name": "Basic data handling: FloatSubtract",
"displayName": "subtract",
"category": "Basic/FLOAT",
"description": "Subtracts one floating-point number from another.\n\nThis node takes two floats as input and returns the result of subtracting\nthe second float from the first."
},
{
"name": "Basic data handling: IntSubtract",
"displayName": "subtract",
"category": "Basic/INT",
"description": "Subtracts one integer from another.\n\nThis node takes two integers as input and returns the result of subtracting\nthe second integer from the first."
},
{
"name": "Basic data handling: TimeSubtractDelta",
"displayName": "Subtract Time Delta",
"category": "Basic/time",
"description": "Subtracts a TIMEDELTA (duration) from a DATETIME object, resulting in a new DATETIME."
},
{
"name": "Basic data handling: DataListSum",
"displayName": "sum",
"category": "Basic/Data List",
"description": "Sum all elements of the data list.\nReturns 0 for an empty list."
},
{
"name": "Basic data handling: SetSum",
"displayName": "sum",
"category": "Basic/SET",
"description": "Calculates the sum of all elements in a SET.\n\nThis node takes a SET as input and returns the sum of all its elements.\nThe optional start parameter specifies the initial value (default is 0).\n\nNote: This operation requires all elements to be numeric or otherwise\ncompatible with addition. If the SET contains mixed or incompatible types,\nit may raise an error."
},
{
"name": "Basic data handling: StringSwapcase",
"displayName": "swapcase",
"category": "Basic/STRING",
"description": "Swaps case of all characters in the string.\n\nThis node returns a copy of the string with uppercase characters converted to lowercase\nand lowercase characters converted to uppercase."
},
{
"name": "Basic data handling: SwitchCase",
"displayName": "switch/case",
"category": "Basic/flow control",
"description": "Implements a switch/case selection in the workflow.\n\nThis node takes a selector input (an integer) and multiple case value inputs.\nIt returns the value corresponding to the provided index. If the index is out\nof range, the default value is returned. This allows for selection from multiple\noptions based on a computed index.\n\nNOTE: This version of the node will most likely be deprecated in the future."
},
{
"name": "Basic data handling: SetSymmetricDifference",
"displayName": "symmetric difference",
"category": "Basic/SET",
"description": "Returns the symmetric difference between two SETs.\n\nThis node takes two SETs as input and returns a new SET containing\nelements in either SET but not in both."
},
{
"name": "Basic data handling: MathTan",
"displayName": "tan",
"category": "Basic/maths",
"description": "Calculates the tangent of an angle in radians or degrees.\n\nThis node takes an angle value and unit type, and returns the tangent of that angle.\nThe tangent of an angle is the ratio of the length of the opposite side to the length\nof the adjacent side in a right-angled triangle."
},
{
"name": "TensorBinaryOp",
"displayName": "Tensor Binary Op",
"category": "Basic/tensor",
"description": "Performs binary operations between two tensors or a tensor and a scalar."
},
{
"name": "TensorCreate",
"displayName": "Tensor Create",
"category": "Basic/tensor",
"description": "Creates a PyTorch tensor from various input types.\nCan accept numbers, lists, or existing tensors."
},
{
"name": "TensorInfo",
"displayName": "Tensor Info",
"category": "Basic/tensor",
"description": "Returns information about a tensor."
},
{
"name": "TensorJoin",
"displayName": "Tensor Join",
"category": "Basic/tensor",
"description": "Joins multiple tensors (concatenate or stack)."
},
{
"name": "TensorPermute",
"displayName": "Tensor Permute",
"category": "Basic/tensor",
"description": "Permutes tensor dimensions."
},
{
"name": "TensorReshape",
"displayName": "Tensor Reshape",
"category": "Basic/tensor",
"description": "Reshapes a tensor."
},
{
"name": "TensorSlice",
"displayName": "Tensor Slice",
"category": "Basic/tensor",
"description": "Slices a tensor using a slice string (e.g., ':, 0:10, 5')."
},
{
"name": "TensorUnaryOp",
"displayName": "Tensor Unary Op",
"category": "Basic/tensor",
"description": "Performs unary operations on a tensor."
},
{
"name": "Basic data handling: RegexTest",
"displayName": "test",
"category": "Basic/STRING/regex",
"description": "Tests whether a given regex pattern matches any part of the input string.\nReturns True if a match is found, otherwise False."
},
{
"name": "Basic data handling: TimeDifference",
"displayName": "Time Difference",
"category": "Basic/time",
"description": "Calculates the difference between two DATETIME objects, returning a TIMEDELTA object."
},
{
"name": "Basic data handling: TimeNow",
"displayName": "Time Now",
"category": "Basic/time",
"description": "Returns the current time and date as a DATETIME object.\nNote: Output changes for every run, providing a fresh timestamp each time."
},
{
"name": "Basic data handling: TimeNowUTC",
"displayName": "Time Now (UTC)",
"category": "Basic/time",
"description": "Returns the current time and date as a DATETIME object, in the UTC timezone.\nNote: Output changes for every run, providing a fresh timestamp each time."
},
{
"name": "Basic data handling: TimeToUnix",
"displayName": "Time to Unix Timestamp",
"category": "Basic/time",
"description": "Converts a DATETIME object to a Unix timestamp (a float representing seconds since the epoch)."
},
{
"name": "Basic data handling: StringTitle",
"displayName": "title",
"category": "Basic/STRING",
"description": "Converts the string to titlecase.\n\nThis node returns a titlecased version of the string where words start with an uppercase\ncharacter and the remaining characters are lowercase."
},
{
"name": "Basic data handling: CastToBoolean",
"displayName": "to BOOLEAN",
"category": "Basic/cast",
"description": "Converts any input to a BOOLEAN. Follows standard Python truthy/falsy rules."
},
{
"name": "Basic data handling: IntToBytes",
"displayName": "to bytes",
"category": "Basic/INT",
"description": "Converts an integer to its byte representation.\n\nThis node takes an integer, byte length, and byte order as inputs and\nreturns the bytes object representation of the integer."
},
{
"name": "Basic data handling: CastToDict",
"displayName": "to DICT",
"category": "Basic/cast",
"description": "Converts compatible inputs to a DICT. Input must be a mapping or a list of key-value pairs."
},
{
"name": "Basic data handling: CastToFloat",
"displayName": "to FLOAT",
"category": "Basic/cast",
"description": "Converts any numeric input to a FLOAT. Non-numeric or invalid inputs raise a ValueError."
},
{
"name": "Basic data handling: FloatHex",
"displayName": "to hex",
"category": "Basic/FLOAT",
"description": "Converts a floating-point number to its hexadecimal representation.\n\nThis node takes a float as input and returns its hexadecimal string representation."
},
{
"name": "Basic data handling: CastToInt",
"displayName": "to INT",
"category": "Basic/cast",
"description": "Converts any numeric input to an INT. Non-numeric or invalid inputs raise a ValueError."
},
{
"name": "Basic data handling: CastToList",
"displayName": "to LIST",
"category": "Basic/cast",
"description": "Converts any input to a LIST. Non-list inputs are wrapped in a list. If input is a ComfyUI data list,\nit converts the individual items into a Python LIST."
},
{
"name": "Basic data handling: CastToSet",
"displayName": "to SET",
"category": "Basic/cast",
"description": "Converts any input to a SET. Non-set inputs are converted into a set. If input is a ComfyUI data list,\nit casts the individual items into a SET."
},
{
"name": "Basic data handling: CastToString",
"displayName": "to STRING",
"category": "Basic/cast",
"description": "Converts any input to a STRING. Non-string values are converted using str()."
},
{
"name": "Basic data handling: StringUnescape",
"displayName": "unescape",
"category": "Basic/STRING",
"description": " Unescapes a string by converting escape sequences to their actual characters.\n\n This node converts escape sequences like '\n' (two characters) to actual newlines (one character),\n ' ' to tabs, '\\' to backslashes, etc. Useful for processing strings where escape sequences\n are represented literally rather than interpreted.\n "
},
{
"name": "Basic data handling: SetUnion",
"displayName": "union",
"category": "Basic/SET",
"description": "Returns the union of two or more SETs.\n\nThis node takes multiple SETs as input and returns a new SET containing\nall elements from all the input SETs."
},
{
"name": "Basic data handling: UnixToTime",
"displayName": "Unix Timestamp to Time",
"category": "Basic/time",
"description": "Converts a Unix timestamp (float or int) to a DATETIME object."
},
{
"name": "Basic data handling: DictUpdate",
"displayName": "update",
"category": "Basic/DICT",
"description": "Updates a dictionary with key-value pairs from another dictionary.\n\nThis node takes two dictionaries as inputs and returns a new dictionary that\ncontains all key-value pairs from both dictionaries. If there are duplicate\nkeys, the values from the second dictionary take precedence."
},
{
"name": "Basic data handling: StringUpper",
"displayName": "upper",
"category": "Basic/STRING",
"description": "Converts the string to uppercase.\n\nThis node returns a copy of the string with all lowercase characters converted to uppercase."
},
{
"name": "Basic data handling: DictValues",
"displayName": "values",
"category": "Basic/DICT",
"description": "Returns all values in a dictionary.\n\nThis node takes a dictionary and returns a list containing all of its values."
},
{
"name": "Basic data handling: Boolean Xor",
"displayName": "xor",
"category": "Basic/BOOLEAN",
"description": "Returns the logical XOR result of two boolean values.\n\nThis node takes two boolean inputs and returns their logical XOR result."
},
{
"name": "Basic data handling: StringZfill",
"displayName": "zfill",
"category": "Basic/STRING",
"description": "Pads the string with zeros on the left.\n\nThis node returns a copy of the string left filled with ASCII '0' digits to make a string\nof length width. A leading sign prefix ('+'/'-') is handled by inserting the padding\nafter the sign character rather than before."
}
]
},
{
"id": "ComfyQR",
"displayName": "ComfyQR",
"nodes": [
{
"name": "comfy-qr-by-module-size",
"displayName": "QR Code",
"category": "ComfyQR"
},
{
"name": "comfy-qr-by-image-size",
"displayName": "QR Code (Conformed to Image Size)",
"category": "ComfyQR"
},
{
"name": "comfy-qr-by-module-split",
"displayName": "QR Code (Split)",
"category": "ComfyQR"
}
]
},
{
"id": "ComfyUI_AudioTools",
"displayName": "AudioTools",
"nodes": [
{
"name": "AudioAmplify",
"displayName": "Amplify / Gain",
"category": "⚪Lum3on/AudioTools/Processing"
},
{
"name": "AudioReactiveParam",
"displayName": "Audio-Reactive Envelope",
"category": "⚪Lum3on/AudioTools/Analysis"
},
{
"name": "AudioBPMDetector",
"displayName": "BPM Detector / Reactive",
"category": "⚪Lum3on/AudioTools/Analysis"
},
{
"name": "AudioCompareWaveforms",
"displayName": "Compare Waveforms",
"category": "⚪Lum3on/AudioTools/Visualization"
},
{
"name": "AudioConcatenate",
"displayName": "Concatenate Audio",
"category": "⚪Lum3on/AudioTools/Utility"
},
{
"name": "AudioDeEsser",
"displayName": "De-Esser",
"category": "⚪Lum3on/AudioTools/Processing"
},
{
"name": "AudioDeHum",
"displayName": "De-Hum (50/60Hz)",
"category": "⚪Lum3on/AudioTools/Processing"
},
{
"name": "AudioDePlosive",
"displayName": "De-Plosive (Low Cut)",
"category": "⚪Lum3on/AudioTools/Processing"
},
{
"name": "AudioDelay",
"displayName": "Delay / Echo",
"category": "⚪Lum3on/AudioTools/Effects"
},
{
"name": "AudioDisplayWaveform",
"displayName": "Display Waveform",
"category": "⚪Lum3on/AudioTools/Visualization"
},
{
"name": "AudioFadeIn",
"displayName": "Fade In",
"category": "⚪Lum3on/AudioTools/Effects"
},
{
"name": "AudioFadeOut",
"displayName": "Fade Out",
"category": "⚪Lum3on/AudioTools/Effects"
},
{
"name": "AudioLoudnessMeter",
"displayName": "Loudness Meter (LUFS)",
"category": "⚪Lum3on/AudioTools/Analysis"
},
{
"name": "AudioMix",
"displayName": "Mix Audio Tracks",
"category": "⚪Lum3on/AudioTools/Processing"
},
{
"name": "AudioNoiseGate",
"displayName": "Noise Gate",
"category": "⚪Lum3on/AudioTools/Processing"
},
{
"name": "AudioNormalize",
"displayName": "Normalize Audio",
"category": "⚪Lum3on/AudioTools/Processing"
},
{
"name": "AudioPad",
"displayName": "Pad With Silence",
"category": "⚪Lum3on/AudioTools/Utility"
},
{
"name": "AudioParametricEQ",
"displayName": "Parametric EQ for Voice",
"category": "⚪Lum3on/AudioTools/Processing"
},
{
"name": "AudioPitchTime",
"displayName": "Pitch Shift / Time Stretch",
"category": "⚪Lum3on/AudioTools/Effects"
},
{
"name": "AudioRemoveSilence",
"displayName": "Remove Silence",
"category": "⚪Lum3on/AudioTools/Processing"
},
{
"name": "AudioReverb",
"displayName": "Reverb",
"category": "⚪Lum3on/AudioTools/Effects"
},
{
"name": "AudioShowInfo",
"displayName": "Show Audio Info",
"category": "⚪Lum3on/AudioTools/Visualization"
},
{
"name": "AudioSpeechDenoise",
"displayName": "Speech Denoise (AI)",
"category": "⚪Lum3on/AudioTools/AI"
},
{
"name": "AudioSpeechToTextWhisper",
"displayName": "Speech-to-Text + SRT (Whisper)",
"category": "⚪Lum3on/AudioTools/AI"
},
{
"name": "AudioStandardize",
"displayName": "Standardize Audio (Format/Channels)",
"category": "⚪Lum3on/AudioTools/Processing"
},
{
"name": "AudioStemSeparate",
"displayName": "Stem Separator (AI)",
"category": "⚪Lum3on/AudioTools/AI"
},
{
"name": "AudioStereoPan",
"displayName": "Stereo Panner",
"category": "⚪Lum3on/AudioTools/Utility"
},
{
"name": "AudioTrim",
"displayName": "Trim Audio",
"category": "⚪Lum3on/AudioTools/Processing"
},
{
"name": "AudioVocalCompressor",
"displayName": "Vocal Compressor",
"category": "⚪Lum3on/AudioTools/Processing"
}
]
},
{
"id": "comfyui_essentials",
"registryId": "comfyui_essentials",
"displayName": "ComfyUI_essentials",
"description": "Essential nodes that are weirdly missing from ComfyUI core. With few exceptions they are new features and not commodities.",
"repoUrl": "https://github.com/cubiq/ComfyUI_essentials",
"publisher": {
"id": "matteo",
"name": "Matteo"
},
"downloads": 2453897,
"githubStars": 1115,
"latestVersion": "1.1.0",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2024-08-07T19:06:12.812021Z",
"nodes": [
{
"name": "ApplyCLIPSeg+",
"displayName": "ApplyCLIPSeg+",
"category": "essentials/segmentation",
"deprecated": false,
"experimental": false
},
{
"name": "BatchCount+",
"displayName": "BatchCount+",
"category": "essentials/utilities",
"deprecated": false,
"experimental": false
},
{
"name": "CLIPTextEncodeSDXL+",
"displayName": "CLIPTextEncodeSDXL+",
"category": "essentials/conditioning",
"deprecated": false,
"experimental": false
},
{
"name": "ConditioningCombineMultiple+",
"displayName": "ConditioningCombineMultiple+",
"category": "essentials/conditioning",
"deprecated": false,
"experimental": false
},
{
"name": "ConsoleDebug+",
"displayName": "ConsoleDebug+",
"category": "essentials/utilities",
"deprecated": false,
"experimental": false
},
{
"name": "DebugTensorShape+",
"displayName": "DebugTensorShape+",
"category": "essentials/utilities",
"deprecated": false,
"experimental": false
},
{
"name": "DrawText+",
"displayName": "DrawText+",
"category": "essentials/text",
"deprecated": false,
"experimental": false
},
{
"name": "FluxSamplerParams+",
"displayName": "FluxSamplerParams+",
"category": "essentials/sampling",
"deprecated": false,
"experimental": false
},
{
"name": "GetImageSize+",
"displayName": "GetImageSize+",
"category": "essentials/image utils",
"deprecated": false,
"experimental": false
},
{
"name": "ImageApplyLUT+",
"displayName": "ImageApplyLUT+",
"category": "essentials/image processing",
"deprecated": false,
"experimental": false
},
{
"name": "ImageBatchMultiple+",
"displayName": "ImageBatchMultiple+",
"category": "essentials/image batch",
"deprecated": false,
"experimental": false
},
{
"name": "ImageCASharpening+",
"displayName": "ImageCASharpening+",
"category": "essentials/image processing",
"deprecated": false,
"experimental": false
},
{
"name": "ImageColorMatch+",
"displayName": "ImageColorMatch+",
"category": "essentials/image processing",
"deprecated": false,
"experimental": false
},
{
"name": "ImageColorMatchAdobe+",
"displayName": "ImageColorMatchAdobe+",
"category": "essentials/image processing",
"deprecated": false,
"experimental": false
},
{
"name": "ImageComposite+",
"displayName": "ImageComposite+",
"category": "essentials/image manipulation",
"deprecated": false,
"experimental": false
},
{
"name": "ImageCompositeFromMaskBatch+",
"displayName": "ImageCompositeFromMaskBatch+",
"category": "essentials/image manipulation",
"deprecated": false,
"experimental": false
},
{
"name": "ImageCrop+",
"displayName": "ImageCrop+",
"category": "essentials/image manipulation",
"deprecated": false,
"experimental": false
},
{
"name": "ImageDesaturate+",
"displayName": "ImageDesaturate+",
"category": "essentials/image processing",
"deprecated": false,
"experimental": false
},
{
"name": "ImageEnhanceDifference+",
"displayName": "ImageEnhanceDifference+",
"category": "essentials/image analysis",
"deprecated": false,
"experimental": false
},
{
"name": "ImageExpandBatch+",
"displayName": "ImageExpandBatch+",
"category": "essentials/image batch",
"deprecated": false,
"experimental": false
},
{
"name": "ImageFlip+",
"displayName": "ImageFlip+",
"category": "essentials/image manipulation",
"deprecated": false,
"experimental": false
},
{
"name": "ImageFromBatch+",
"displayName": "ImageFromBatch+",
"category": "essentials/image batch",
"deprecated": false,
"experimental": false
},
{
"name": "ImageHistogramMatch+",
"displayName": "ImageHistogramMatch+",
"category": "essentials/image processing",
"deprecated": false,
"experimental": false
},
{
"name": "ImageListToBatch+",
"displayName": "ImageListToBatch+",
"category": "essentials/image batch",
"deprecated": false,
"experimental": false
},
{
"name": "ImagePosterize+",
"displayName": "ImagePosterize+",
"category": "essentials/image processing",
"deprecated": false,
"experimental": false
},
{
"name": "ImagePreviewFromLatent+",
"displayName": "ImagePreviewFromLatent+",
"category": "essentials/image utils",
"description": "Saves the input images to your ComfyUI output directory.",
"deprecated": false,
"experimental": false
},
{
"name": "ImageRandomTransform+",
"displayName": "ImageRandomTransform+",
"category": "essentials/image manipulation",
"deprecated": false,
"experimental": false
},
{
"name": "ImageRemoveAlpha+",
"displayName": "ImageRemoveAlpha+",
"category": "essentials/image utils",
"deprecated": false,
"experimental": false
},
{
"name": "ImageRemoveBackground+",
"displayName": "ImageRemoveBackground+",
"category": "essentials/image manipulation",
"deprecated": false,
"experimental": false
},
{
"name": "ImageResize+",
"displayName": "ImageResize+",
"category": "essentials/image manipulation",
"deprecated": false,
"experimental": false
},
{
"name": "ImageSeamCarving+",
"displayName": "ImageSeamCarving+",
"category": "essentials/image manipulation",
"deprecated": false,
"experimental": false
},
{
"name": "ImageTile+",
"displayName": "ImageTile+",
"category": "essentials/image manipulation",
"deprecated": false,
"experimental": false
},
{
"name": "ImageToDevice+",
"displayName": "ImageToDevice+",
"category": "essentials/image utils",
"deprecated": false,
"experimental": false
},
{
"name": "ImageUntile+",
"displayName": "ImageUntile+",
"category": "essentials/image manipulation",
"deprecated": false,
"experimental": false
},
{
"name": "InjectLatentNoise+",
"displayName": "InjectLatentNoise+",
"category": "essentials/sampling",
"deprecated": false,
"experimental": false
},
{
"name": "KSamplerVariationsStochastic+",
"displayName": "KSamplerVariationsStochastic+",
"category": "essentials/sampling",
"deprecated": false,
"experimental": false
},
{
"name": "KSamplerVariationsWithNoise+",
"displayName": "KSamplerVariationsWithNoise+",
"category": "essentials/sampling",
"deprecated": false,
"experimental": false
},
{
"name": "LoadCLIPSegModels+",
"displayName": "LoadCLIPSegModels+",
"category": "essentials/segmentation",
"deprecated": false,
"experimental": false
},
{
"name": "MaskBatch+",
"displayName": "MaskBatch+",
"category": "essentials/mask batch",
"deprecated": false,
"experimental": false
},
{
"name": "MaskBlur+",
"displayName": "MaskBlur+",
"category": "essentials/mask",
"deprecated": false,
"experimental": false
},
{
"name": "MaskBoundingBox+",
"displayName": "MaskBoundingBox+",
"category": "essentials/mask",
"deprecated": false,
"experimental": false
},
{
"name": "MaskExpandBatch+",
"displayName": "MaskExpandBatch+",
"category": "essentials/mask batch",
"deprecated": false,
"experimental": false
},
{
"name": "MaskFix+",
"displayName": "MaskFix+",
"category": "essentials/mask",
"deprecated": false,
"experimental": false
},
{
"name": "MaskFlip+",
"displayName": "MaskFlip+",
"category": "essentials/mask",
"deprecated": false,
"experimental": false
},
{
"name": "MaskFromBatch+",
"displayName": "MaskFromBatch+",
"category": "essentials/mask batch",
"deprecated": false,
"experimental": false
},
{
"name": "MaskFromColor+",
"displayName": "MaskFromColor+",
"category": "essentials/mask",
"deprecated": false,
"experimental": false
},
{
"name": "MaskFromList+",
"displayName": "MaskFromList+",
"category": "essentials/mask",
"deprecated": false,
"experimental": false
},
{
"name": "MaskFromRGBCMYBW+",
"displayName": "MaskFromRGBCMYBW+",
"category": "essentials/mask",
"deprecated": false,
"experimental": false
},
{
"name": "MaskFromSegmentation+",
"displayName": "MaskFromSegmentation+",
"category": "essentials/mask",
"deprecated": false,
"experimental": false
},
{
"name": "MaskPreview+",
"displayName": "MaskPreview+",
"category": "essentials/mask",
"description": "Saves the input images to your ComfyUI output directory.",
"deprecated": false,
"experimental": false
},
{
"name": "MaskSmooth+",
"displayName": "MaskSmooth+",
"category": "essentials/mask",
"deprecated": false,
"experimental": false
},
{
"name": "ModelCompile+",
"displayName": "ModelCompile+",
"category": "essentials/utilities",
"deprecated": false,
"experimental": false
},
{
"name": "NoiseFromImage+",
"displayName": "NoiseFromImage+",
"category": "essentials/image utils",
"deprecated": false,
"experimental": false
},
{
"name": "PixelOEPixelize+",
"displayName": "PixelOEPixelize+",
"category": "essentials/image processing",
"deprecated": false,
"experimental": false
},
{
"name": "PlotParameters+",
"displayName": "PlotParameters+",
"category": "essentials/sampling",
"deprecated": false,
"experimental": false
},
{
"name": "RemBGSession+",
"displayName": "RemBGSession+",
"category": "essentials/image manipulation",
"deprecated": false,
"experimental": false
},
{
"name": "RemoveLatentMask+",
"displayName": "RemoveLatentMask+",
"category": "essentials/utilities",
"deprecated": false,
"experimental": false
},
{
"name": "SD3NegativeConditioning+",
"displayName": "SD3NegativeConditioning+",
"category": "essentials/conditioning",
"deprecated": false,
"experimental": false
},
{
"name": "SDXLEmptyLatentSizePicker+",
"displayName": "SDXLEmptyLatentSizePicker+",
"category": "essentials/utilities",
"deprecated": false,
"experimental": false
},
{
"name": "SimpleMath+",
"displayName": "SimpleMath+",
"category": "essentials/utilities",
"deprecated": false,
"experimental": false
},
{
"name": "TransitionMask+",
"displayName": "TransitionMask+",
"category": "essentials/mask",
"deprecated": false,
"experimental": false
},
{
"name": "TransparentBGSession+",
"displayName": "TransparentBGSession+",
"category": "essentials/image manipulation",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "comfyui_face_parsing",
"registryId": "comfyui_face_parsing",
"displayName": "comfyui_face_parsing",
"description": "This is a set of custom nodes for ComfyUI. The nodes utilize the [a/face parsing model](https://huggingface.co/jonathandinu/face-parsing) to parse face and provide detailed segmantation. To improve face segmantation accuracy, [a/yolov8 face model](https://huggingface.co/Bingsu/adetailer/) is used to first extract face from an image. There are also auxiliary nodes for image and mask processing. A guided filter is also provided for skin smoothing.",
"repoUrl": "https://github.com/Ryuukeisyou/comfyui_face_parsing",
"publisher": {
"id": "ryuukeisyou",
"name": "Ryuukeisyou"
},
"downloads": 75248,
"githubStars": 192,
"latestVersion": "1.0.5",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2025-02-04T15:58:27.82363Z",
"nodes": [
{
"name": "BBoxDecompose(FaceParsing)",
"displayName": "BBoxDecompose(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "BBoxDetect(FaceParsing)",
"displayName": "BBoxDetect(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "BBoxDetectorLoader(FaceParsing)",
"displayName": "BBoxDetectorLoader(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "BBoxListItemSelect(FaceParsing)",
"displayName": "BBoxListItemSelect(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "BBoxResize(FaceParsing)",
"displayName": "BBoxResize(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "ColorAdjust(FaceParsing)",
"displayName": "ColorAdjust(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "FaceParse(FaceParsing)",
"displayName": "FaceParse(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "FaceParsingModelLoader(FaceParsing)",
"displayName": "FaceParsingModelLoader(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "FaceParsingProcessorLoader(FaceParsing)",
"displayName": "FaceParsingProcessorLoader(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "FaceParsingResultsParser(FaceParsing)",
"displayName": "FaceParsingResultsParser(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "GuidedFilter(FaceParsing)",
"displayName": "GuidedFilter(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "ImageCropWithBBox(FaceParsing)",
"displayName": "ImageCropWithBBox(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "ImageCropWithBBoxList(FaceParsing)",
"displayName": "ImageCropWithBBoxList(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "ImageInsertWithBBox(FaceParsing)",
"displayName": "ImageInsertWithBBox(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "ImageListSelect(FaceParsing)",
"displayName": "ImageListSelect(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "ImagePadWithBBox(FaceParsing)",
"displayName": "ImagePadWithBBox(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "ImageResizeCalculator(FaceParsing)",
"displayName": "ImageResizeCalculator(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "ImageResizeWithBBox(FaceParsing)",
"displayName": "ImageResizeWithBBox(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "ImageSize(FaceParsing)",
"displayName": "ImageSize(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "MaskBatchComposite(FaceParsing)",
"displayName": "MaskBatchComposite(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "MaskBlackOut(FaceParsing)",
"displayName": "MaskBlackOut(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "MaskBorderDissolve(FaceParsing)",
"displayName": "MaskBorderDissolve(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "MaskComposite(FaceParsing)",
"displayName": "MaskComposite(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "MaskCropWithBBox(FaceParsing)",
"displayName": "MaskCropWithBBox(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "MaskInsertWithBBox(FaceParsing)",
"displayName": "MaskInsertWithBBox(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "MaskListSelect(FaceParsing)",
"displayName": "MaskListSelect(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
},
{
"name": "MaskToBBoxList(FaceParsing)",
"displayName": "MaskToBBoxList(FaceParsing)",
"category": "face_parsing",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "ComfyUI_Fill-Nodes",
"displayName": "Fill-Nodes",
"nodes": [
{
"name": "FL_AnimatedShapePatterns",
"displayName": "FL Animated Shape Patterns",
"category": "🏵Fill Nodes/WIP",
"description": "\nCreates animated geometric shape patterns with various algorithms.\nGenerates a batch of images with shapes arranged in interesting patterns.\n"
},
{
"name": "FL_AnimeLineExtractor",
"displayName": "FL Anime Line Extractor",
"category": "🏵Fill Nodes/Image"
},
{
"name": "FL_Audio_Beat_Visualizer",
"displayName": "FL Audio Beat Visualizer",
"category": "🏵Fill Nodes/Audio"
},
{
"name": "FL_Audio_BPM_Analyzer",
"displayName": "FL Audio BPM Analyzer",
"category": "🏵Fill Nodes/Audio"
},
{
"name": "FL_Audio_Crop",
"displayName": "FL Audio Crop",
"category": "🏵Fill Nodes/Audio"
},
{
"name": "FL_Audio_Drum_Detector",
"displayName": "FL Audio Drum Detector",
"category": "🏵Fill Nodes/Audio"
},
{
"name": "FL_Audio_Envelope_Visualizer",
"displayName": "FL Audio Envelope Visualizer",
"category": "🏵Fill Nodes/Audio"
},
{
"name": "FL_Audio_Music_Video_Sequencer",
"displayName": "FL Audio Music Video Sequencer",
"category": "🏵Fill Nodes/Audio"
},
{
"name": "FL_Audio_Reactive_Brightness",
"displayName": "FL Audio Reactive Brightness",
"category": "🏵Fill Nodes/Audio"
},
{
"name": "FL_Audio_Reactive_Edge_Glow",
"displayName": "FL Audio Reactive Edge Glow",
"category": "🏵Fill Nodes/Audio"
},
{
"name": "FL_Audio_Reactive_Envelope",
"displayName": "FL Audio Reactive Envelope",
"category": "🏵Fill Nodes/Audio"
},
{
"name": "FL_Audio_Reactive_Saturation",
"displayName": "FL Audio Reactive Saturation",
"category": "🏵Fill Nodes/Audio"
},
{
"name": "FL_Audio_Reactive_Scale",
"displayName": "FL Audio Reactive Scale",
"category": "🏵Fill Nodes/Audio"
},
{
"name": "FL_Audio_Reactive_Speed",
"displayName": "FL Audio Reactive Speed",
"category": "🏵Fill Nodes/Audio"
},
{
"name": "FL_Audio_Segment_Extractor",
"displayName": "FL Audio Segment Extractor",
"category": "🏵Fill Nodes/Audio"
},
{
"name": "FL_Audio_Separation",
"displayName": "FL Audio Separation",
"category": "🏵Fill Nodes/Audio"
},
{
"name": "FL_Audio_Shot_Iterator",
"displayName": "FL Audio Shot Iterator",
"category": "🏵Fill Nodes/Audio"
},
{
"name": "FL_BulletHellGame",
"displayName": "FL BulletHell Game",
"category": "🏵Fill Nodes/games"
},
{
"name": "FL_ColorPicker",
"displayName": "FL Color Picker",
"category": "🏵Fill Nodes/experiments"
},
{
"name": "FL_Float",
"displayName": "FL Float",
"category": "🏵Fill Nodes/Utility"
},
{
"name": "FL_FloatToInt",
"displayName": "FL Float to Int",
"category": "🏵Fill Nodes/Utility"
},
{
"name": "FL_ImageAddToBatch",
"displayName": "FL Image Add To Batch",
"category": "🏵Fill Nodes/Image"
},
{
"name": "FL_ImageBlank",
"displayName": "FL Image Blank",
"category": "🏵Fill Nodes/Image"
},
{
"name": "FL_ImageCrop",
"displayName": "FL Image Crop",
"category": "🏵Fill Nodes/Image"
},
{
"name": "FL_ImagePixelator",
"displayName": "FL Image Pixelator",
"category": "🏵Fill Nodes/VFX"
},
{
"name": "FL_ImageDimensionDisplay",
"displayName": "FL Image Size",
"category": "🏵Fill Nodes/Image"
},
{
"name": "FL_IntToFloat",
"displayName": "FL Int to Float",
"category": "🏵Fill Nodes/Utility"
},
{
"name": "FL_MadLibGenerator",
"displayName": "FL MadLib Generator",
"category": "🏵Fill Nodes/Prompting"
},
{
"name": "FL_Math",
"displayName": "FL Math",
"category": "🏵Fill Nodes/Utility"
},
{
"name": "FL_PathAnimator",
"displayName": "FL Path Animator",
"category": "🎨 FL Path Animator",
"description": "\nCreates animated shapes that follow user-drawn paths.\nOpen the path editor to draw trajectories on a reference image, then shapes will follow these paths over time.\nOutputs WAN ATI-compatible coordinate strings with proper 121-point resampling for stable video generation.\n"
},
{
"name": "FL_PathTypeChecker",
"displayName": "FL Path Type Checker",
"category": "🏵Fill Nodes/Utility"
},
{
"name": "FL_PromptBasic",
"displayName": "FL Prompt Basic",
"category": "🏵Fill Nodes/Prompting"
},
{
"name": "FL_PromptMulti",
"displayName": "FL Prompt Multi",
"category": "🏵Fill Nodes/Prompting"
},
{
"name": "FL_PromptSelector",
"displayName": "FL Prompt Selector",
"category": "🏵Fill Nodes/Prompting"
},
{
"name": "FL_PromptSelectorBasic",
"displayName": "FL Prompt Selector Basic",
"category": "🏵Fill Nodes/Prompting"
},
{
"name": "FL_RandomNumber",
"displayName": "FL Random Number",
"category": "🏵Fill Nodes/Utility"
},
{
"name": "FL_SamplerStrings",
"displayName": "FL Sampler String XYZ",
"category": "🏵Fill Nodes/Ksamplers"
},
{
"name": "FL_SchedulerStrings",
"displayName": "FL Scheduler String XYZ",
"category": "🏵Fill Nodes/Ksamplers"
},
{
"name": "FL_Switch",
"displayName": "FL Switch",
"category": "🏵Fill Nodes/Utility",
"description": "\n FL_Switch allows you to choose between two processing paths based on a switch value.\n The node only evaluates the path that is selected by the switch value.\n \n - If switch = False: on_false is evaluated and returned as output, on_true is not evaluated\n - If switch = True: on_true is evaluated and returned as output, on_false is not evaluated\n \n This node is useful for creating conditional workflows where you want to process data differently based on certain conditions,\n and you only want the selected path to execute.\n "
},
{
"name": "FL_Switch_Big",
"displayName": "FL Switch Big",
"category": "🏵Fill Nodes/Utility",
"description": "\n FL_Switch_Big allows you to choose between multiple processing paths based on a switch condition.\n The node only evaluates the path that is selected by the switch condition.\n \n - The switch_condition is compared against each case value\n - If a match is found, the corresponding input is evaluated and returned\n - If no match is found, input_default is evaluated and returned\n - Inputs that don't match the condition are not evaluated\n \n This node is useful for creating conditional workflows with multiple branches.\n "
},
{
"name": "FL_TetrisGame",
"displayName": "FL Tetris Game",
"category": "🏵Fill Nodes/games"
},
{
"name": "FL_TextToPDF",
"displayName": "FL Text To PDF",
"category": "🏵Fill Nodes/PDF"
},
{
"name": "FL_VideoCadenceCompile",
"displayName": "FL Video Cadence Compile",
"category": "🏵Fill Nodes/Video",
"description": "\n Takes a cadence list (frame counts) and a directory of video files.\n Crops each video from the middle to match its cadence frame count.\n Concatenates all processed frames into a single image batch.\n Handles errors like count mismatches or dimension inconsistencies.\n "
},
{
"name": "FL_WanVideoBlender",
"displayName": "FL Wan Video Blender",
"category": "🏵Fill Nodes/WIP",
"description": "Blends two input videos with a cross-fade. The resolution of the second clip is resized to match the first."
},
{
"name": "FL_WanVideoBlender3Way",
"displayName": "FL Wan Video Blender 3-Way",
"category": "🏵Fill Nodes/WIP",
"description": "Blends three videos with cross-fade transitions. Perfect for input → continuation → end workflows. All videos resized to match first video."
},
{
"name": "FL_WanVideoContinuationBlender",
"displayName": "FL Wan Video Continuation Blender",
"category": "🏵Fill Nodes/WIP",
"description": "Blends videos with a continuation video that has embedded overlaps. Automatically strips overlap frames to prevent duplication. Use this after FL_WanVideoContinue."
},
{
"name": "FL_WanVideoContinue",
"displayName": "FL Wan Video Continue",
"category": "🏵Fill Nodes/WIP",
"description": "Creates a continuation video with symmetrical overlap - uses last N frames from input video at start and first N frames from end video at end."
}
]
},
{
"id": "comfyui_ipadapter_plus",
"registryId": "comfyui_ipadapter_plus",
"displayName": "ComfyUI_IPAdapter_plus",
"description": "ComfyUI reference implementation for the IPAdapter models. The IPAdapter are very powerful models for image conditioning. The style and composition of a reference can be easily transferred to the generation. Think of it as a 1-image lora.",
"repoUrl": "https://github.com/cubiq/ComfyUI_IPAdapter_plus",
"publisher": {
"id": "matteo",
"name": "Matteo"
},
"downloads": 1255570,
"githubStars": 5958,
"latestVersion": "2.0.0",
"license": "GPL-3.0 license",
"lastUpdated": "2024-06-05T06:57:13.485481Z",
"nodes": [
{
"name": "IPAAdapterFaceIDBatch",
"displayName": "IPAAdapterFaceIDBatch",
"category": "ipadapter/faceid",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapter",
"displayName": "IPAdapter",
"category": "ipadapter",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterAdvanced",
"displayName": "IPAdapterAdvanced",
"category": "ipadapter",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterBatch",
"displayName": "IPAdapterBatch",
"category": "ipadapter",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterCombineEmbeds",
"displayName": "IPAdapterCombineEmbeds",
"category": "ipadapter/embeds",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterCombineParams",
"displayName": "IPAdapterCombineParams",
"category": "ipadapter/params",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterCombineWeights",
"displayName": "IPAdapterCombineWeights",
"category": "ipadapter/utils",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterEmbeds",
"displayName": "IPAdapterEmbeds",
"category": "ipadapter/embeds",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterEmbedsBatch",
"displayName": "IPAdapterEmbedsBatch",
"category": "ipadapter/embeds",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterEncoder",
"displayName": "IPAdapterEncoder",
"category": "ipadapter/embeds",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterFaceID",
"displayName": "IPAdapterFaceID",
"category": "ipadapter/faceid",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterFromParams",
"displayName": "IPAdapterFromParams",
"category": "ipadapter/params",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterInsightFaceLoader",
"displayName": "IPAdapterInsightFaceLoader",
"category": "ipadapter/loaders",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterLoadEmbeds",
"displayName": "IPAdapterLoadEmbeds",
"category": "ipadapter/embeds",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterModelLoader",
"displayName": "IPAdapterModelLoader",
"category": "ipadapter/loaders",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterMS",
"displayName": "IPAdapterMS",
"category": "ipadapter/dev",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterNoise",
"displayName": "IPAdapterNoise",
"category": "ipadapter/utils",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterPromptScheduleFromWeightsStrategy",
"displayName": "IPAdapterPromptScheduleFromWeightsStrategy",
"category": "ipadapter/weights",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterRegionalConditioning",
"displayName": "IPAdapterRegionalConditioning",
"category": "ipadapter/params",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterSaveEmbeds",
"displayName": "IPAdapterSaveEmbeds",
"category": "ipadapter/embeds",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterStyleComposition",
"displayName": "IPAdapterStyleComposition",
"category": "ipadapter/style_composition",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterStyleCompositionBatch",
"displayName": "IPAdapterStyleCompositionBatch",
"category": "ipadapter/style_composition",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterTiled",
"displayName": "IPAdapterTiled",
"category": "ipadapter/tiled",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterTiledBatch",
"displayName": "IPAdapterTiledBatch",
"category": "ipadapter/tiled",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterUnifiedLoader",
"displayName": "IPAdapterUnifiedLoader",
"category": "ipadapter",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterUnifiedLoaderCommunity",
"displayName": "IPAdapterUnifiedLoaderCommunity",
"category": "ipadapter/loaders",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterUnifiedLoaderFaceID",
"displayName": "IPAdapterUnifiedLoaderFaceID",
"category": "ipadapter/faceid",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterWeights",
"displayName": "IPAdapterWeights",
"category": "ipadapter/weights",
"deprecated": false,
"experimental": false
},
{
"name": "IPAdapterWeightsFromStrategy",
"displayName": "IPAdapterWeightsFromStrategy",
"category": "ipadapter/weights",
"deprecated": false,
"experimental": false
},
{
"name": "PrepImageForClipVision",
"displayName": "PrepImageForClipVision",
"category": "ipadapter/utils",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "comfyui_layerstyle",
"registryId": "comfyui_layerstyle",
"displayName": "ComfyUI_LayerStyle",
"description": "A set of nodes for ComfyUI it generate image like Adobe Photoshop's Layer Style. the Drop Shadow is first completed node, and follow-up work is in progress.",
"iconUrl": "https://avatars.githubusercontent.com/u/130118553",
"repoUrl": "https://github.com/chflame163/ComfyUI_LayerStyle",
"publisher": {
"id": "chflame163",
"name": "chflame163"
},
"downloads": 1722529,
"githubStars": 3026,
"latestVersion": "1.0.90",
"license": "{\"text\": \"MIT License\"}",
"lastUpdated": "2024-11-17T12:42:26.203455Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "LayerFilter: HDREffects",
"displayName": "LayerFilter: HDR Effects",
"category": "😺dzNodes/LayerFilter"
},
{
"name": "LayerMask: DrawRoundedRectangle",
"displayName": "LayerMask: DrawRoundedRectangle",
"category": "😺dzNodes/LayerMask"
},
{
"name": "LayerMask: SegformerClothesSetting",
"displayName": "LayerMask: Segformer Clothes Setting",
"category": "😺dzNodes/LayerMask"
},
{
"name": "LayerMask: SegformerFashionSetting",
"displayName": "LayerMask: Segformer Fashion Setting",
"category": "😺dzNodes/LayerMask"
},
{
"name": "LayerUtility: AnyRerouter",
"displayName": "LayerUtility: Any Rerouter",
"category": "😺dzNodes/LayerUtility/Data"
},
{
"name": "LayerUtility: Boolean",
"displayName": "LayerUtility: Boolean",
"category": "😺dzNodes/LayerUtility/Data"
},
{
"name": "LayerUtility: ColorImage",
"displayName": "LayerUtility: ColorImage",
"category": "😺dzNodes/LayerUtility"
},
{
"name": "LayerUtility: Float",
"displayName": "LayerUtility: Float",
"category": "😺dzNodes/LayerUtility/Data"
},
{
"name": "LayerUtility: GradientImage",
"displayName": "LayerUtility: GradientImage",
"category": "😺dzNodes/LayerUtility"
},
{
"name": "LayerUtility: GrayValue",
"displayName": "LayerUtility: Gray Value",
"category": "😺dzNodes/LayerUtility/Data"
},
{
"name": "LayerUtility: HSV Value",
"displayName": "LayerUtility: HSV Value",
"category": "😺dzNodes/LayerUtility/Data"
},
{
"name": "LayerUtility: Integer",
"displayName": "LayerUtility: Integer",
"category": "😺dzNodes/LayerUtility/Data"
},
{
"name": "LayerUtility: PrintInfo",
"displayName": "LayerUtility: PrintInfo",
"category": "😺dzNodes/LayerUtility/Data"
},
{
"name": "LayerUtility: RGB Value",
"displayName": "LayerUtility: RGB Value",
"category": "😺dzNodes/LayerUtility/Data"
},
{
"name": "LayerUtility: Seed",
"displayName": "LayerUtility: Seed",
"category": "😺dzNodes/LayerUtility/Data"
},
{
"name": "LayerUtility: String",
"displayName": "LayerUtility: String",
"category": "😺dzNodes/LayerUtility/Data"
},
{
"name": "LayerUtility: TextBox",
"displayName": "LayerUtility: TextBox",
"category": "😺dzNodes/LayerUtility/Data"
},
{
"name": "LayerUtility: TextJoin",
"displayName": "LayerUtility: TextJoin",
"category": "😺dzNodes/LayerUtility/Data"
},
{
"name": "LayerUtility: TextJoinV2",
"displayName": "LayerUtility: TextJoinV2",
"category": "😺dzNodes/LayerUtility/Data"
}
]
},
{
"id": "ComfyUI_LayerStyle_Advance",
"registryId": "ComfyUI_LayerStyle_Advance",
"displayName": "ComfyUI_LayerStyle_Advance",
"description": "The nodes detached from ComfyUI Layer Style are mainly those with complex requirements for dependency packages.",
"iconUrl": "https://avatars.githubusercontent.com/u/130118553",
"repoUrl": "https://github.com/chflame163/ComfyUI_LayerStyle_Advance",
"publisher": {
"id": "chflame163",
"name": "chflame163"
},
"downloads": 117373,
"githubStars": 657,
"latestVersion": "2.0.38",
"license": "{\"text\": \"MIT License\"}",
"lastUpdated": "2026-04-08T04:28:28.060712Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "LayerMask: BBoxJoin",
"displayName": "LayerMask: BBoxJoin",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: BenUltra",
"displayName": "LayerMask: BenUltra",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: BiRefNetUltra",
"displayName": "LayerMask: BiRefNetUltra",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: BiRefNetUltraV2",
"displayName": "LayerMask: BiRefNetUltraV2",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: DrawBBoxMask",
"displayName": "LayerMask: DrawBBoxMask",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: DrawBBoxMaskV2",
"displayName": "LayerMask: DrawBBoxMaskV2",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: EVFSAMUltra",
"displayName": "LayerMask: EVFSAMUltra",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: Florence2Ultra",
"displayName": "LayerMask: Florence2Ultra",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: HumanPartsUltra",
"displayName": "LayerMask: HumanPartsUltra",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: LoadBenModel",
"displayName": "LayerMask: LoadBenModel",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: LoadBiRefNetModel",
"displayName": "LayerMask: LoadBiRefNetModel",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: LoadBiRefNetModelV2",
"displayName": "LayerMask: LoadBiRefNetModelV2",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: LoadFlorence2Model",
"displayName": "LayerMask: LoadFlorence2Model",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: LoadSAM2Model",
"displayName": "LayerMask: LoadSAM2Model",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: LoadSegmentAnythingModels",
"displayName": "LayerMask: LoadSegmentAnythingModels",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: MaskByDifferent",
"displayName": "LayerMask: MaskByDifferent",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: MediapipeFacialSegment",
"displayName": "LayerMask: MediapipeFacialSegment",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: ObjectDetectorFL2",
"displayName": "LayerMask: ObjectDetectorFL2",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: ObjectDetectorGemini",
"displayName": "LayerMask: ObjectDetectorGemini",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: ObjectDetectorGeminiV2",
"displayName": "LayerMask: ObjectDetectorGeminiV2",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: ObjectDetectorMask",
"displayName": "LayerMask: ObjectDetectorMask",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: ObjectDetectorYOLO8",
"displayName": "LayerMask: ObjectDetectorYOLO8",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: ObjectDetectorYOLOWorld",
"displayName": "LayerMask: ObjectDetectorYOLOWorld",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: PersonMaskUltra",
"displayName": "LayerMask: PersonMaskUltra",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: PersonMaskUltra V2",
"displayName": "LayerMask: PersonMaskUltra V2",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: SAM2Ultra",
"displayName": "LayerMask: SAM2Ultra",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: SAM2UltraV2",
"displayName": "LayerMask: SAM2UltraV2",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: SAM2VideoUltra",
"displayName": "LayerMask: SAM2VideoUltra",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: SegmentAnythingUltra",
"displayName": "LayerMask: SegmentAnythingUltra",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: SegmentAnythingUltra V2",
"displayName": "LayerMask: SegmentAnythingUltra V2",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: SegmentAnythingUltra V3",
"displayName": "LayerMask: SegmentAnythingUltra V3",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: TransparentBackgroundUltra",
"displayName": "LayerMask: TransparentBackgroundUltra",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerMask: YoloV8Detect",
"displayName": "LayerMask: YoloV8Detect",
"category": "😺dzNodes/LayerMask",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: AddBlindWaterMark",
"displayName": "LayerUtility: AddBlindWaterMark",
"category": "😺dzNodes/LayerUtility/SystemIO",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: Collage",
"displayName": "LayerUtility: Collage",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: CreateQRCode",
"displayName": "LayerUtility: CreateQRCode",
"category": "😺dzNodes/LayerUtility/SystemIO",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: DecodeQRCode",
"displayName": "LayerUtility: DecodeQRCode",
"category": "😺dzNodes/LayerUtility/SystemIO",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: DeepSeekAPI",
"displayName": "LayerUtility: DeepSeekAPI",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: DeepSeekAPIV2",
"displayName": "LayerUtility: DeepSeekAPIV2",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: Florence2Image2Prompt",
"displayName": "LayerUtility: Florence2Image2Prompt",
"category": "😺dzNodes/LayerUtility/Prompt",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: Gemini",
"displayName": "LayerUtility: Gemini",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: GeminiImageEdit",
"displayName": "LayerUtility: GeminiImageEdit",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: GeminiV2",
"displayName": "LayerUtility: GeminiV2",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: GetColorTone",
"displayName": "LayerUtility: GetColorTone",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: GetColorToneV2",
"displayName": "LayerUtility: GetColorToneV2",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: ImageAutoCrop",
"displayName": "LayerUtility: ImageAutoCrop",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: ImageAutoCrop V2",
"displayName": "LayerUtility: ImageAutoCrop V2",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: ImageAutoCrop V3",
"displayName": "LayerUtility: ImageAutoCrop V3",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: ImageRewardFilter",
"displayName": "LayerUtility: ImageRewardFilter",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: JimengI2IAPI",
"displayName": "LayerUtility: JimengI2IAPI",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: JoyCaption2",
"displayName": "LayerUtility: JoyCaption2",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: JoyCaption2ExtraOptions",
"displayName": "LayerUtility: JoyCaption2ExtraOptions",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: JoyCaption2Split",
"displayName": "LayerUtility: JoyCaption2Split",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: JoyCaptionBeta1",
"displayName": "LayerUtility: JoyCaptionBeta1",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: JoyCaptionBeta1ExtraOptions",
"displayName": "LayerUtility: JoyCaptionBeta1ExtraOptions",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: LaMa",
"displayName": "LayerUtility: LaMa",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: LlamaVision",
"displayName": "LayerUtility: LlamaVision",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: LoadJoyCaption2Model",
"displayName": "LayerUtility: LoadJoyCaption2Model",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: LoadJoyCaptionBeta1Model",
"displayName": "LayerUtility: LoadJoyCaptionBeta1Model",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: LoadPSD",
"displayName": "LayerUtility: LoadPSD",
"category": "😺dzNodes/LayerUtility/SystemIO",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: LoadSmolLM2Model",
"displayName": "LayerUtility: LoadSmolLM2Model",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: LoadSmolVLMModel",
"displayName": "LayerUtility: LoadSmolVLMModel",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: PhiPrompt",
"displayName": "LayerUtility: PhiPrompt",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: PromptEmbellish",
"displayName": "LayerUtility: PromptEmbellish",
"category": "😺dzNodes/LayerUtility/Prompt",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: PromptTagger",
"displayName": "LayerUtility: PromptTagger",
"category": "😺dzNodes/LayerUtility/Prompt",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: QWenImage2Prompt",
"displayName": "LayerUtility: QWenImage2Prompt",
"category": "😺dzNodes/LayerUtility/Prompt",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: SaveImagePlus",
"displayName": "LayerUtility: SaveImagePlus",
"category": "😺dzNodes/LayerUtility/SystemIO",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: SaveImagePlusV2",
"displayName": "LayerUtility: SaveImagePlusV2",
"category": "😺dzNodes/LayerUtility/SystemIO",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: SD3NegativeConditioning",
"displayName": "LayerUtility: SD3NegativeConditioning",
"category": "😺dzNodes/LayerUtility/SystemIO",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: ShowBlindWaterMark",
"displayName": "LayerUtility: ShowBlindWaterMark",
"category": "😺dzNodes/LayerUtility/SystemIO",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: SmolLM2",
"displayName": "LayerUtility: SmolLM2",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: SmolVLM",
"displayName": "LayerUtility: SmolVLM",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: UserPromptGeneratorReplaceWord",
"displayName": "LayerUtility: UserPromptGeneratorReplaceWord",
"category": "😺dzNodes/LayerUtility/Prompt",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: UserPromptGeneratorTxt2ImgPrompt",
"displayName": "LayerUtility: UserPromptGeneratorTxt2ImgPrompt",
"category": "😺dzNodes/LayerUtility/Prompt",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: UserPromptGeneratorTxt2ImgPromptWithReference",
"displayName": "LayerUtility: UserPromptGeneratorTxt2ImgPromptWithReference",
"category": "😺dzNodes/LayerUtility/Prompt",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: ZhipuGLM4",
"displayName": "LayerUtility: ZhipuGLM4",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
},
{
"name": "LayerUtility: ZhipuGLM4V",
"displayName": "LayerUtility: ZhipuGLM4V",
"category": "😺dzNodes/LayerUtility",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "ComfyUI_SchemaNodes",
"displayName": "SchemaNodes",
"nodes": [
{
"name": "SchemaAudioParameter",
"displayName": "Schema Audio Parameter",
"category": "inout/schema"
},
{
"name": "SchemaBooleanParameter",
"displayName": "Schema Boolean Parameter",
"category": "inout/schema"
},
{
"name": "SchemaEnumParameter",
"displayName": "Schema Enum Parameter",
"category": "inout/schema"
},
{
"name": "SchemaFloatParameter",
"displayName": "Schema Float Parameter",
"category": "inout/schema"
},
{
"name": "SchemaImageParameter",
"displayName": "Schema Image Parameter",
"category": "inout/schema"
},
{
"name": "SchemaIntegerParameter",
"displayName": "Schema Integer Parameter",
"category": "inout/schema"
},
{
"name": "SchemaStringParameter",
"displayName": "Schema String Parameter",
"category": "inout/schema"
},
{
"name": "SchemaVideoParameter",
"displayName": "Schema Video Parameter",
"category": "inout/schema"
}
]
},
{
"id": "comfyui_steudio",
"registryId": "comfyui_steudio",
"displayName": "ComfyUI_Steudio",
"description": "Divide and Conquer Node Suite: It calculates the optimal upscale resolution and seamlessly divides the image into tiles, ready for individual processing using your preferred workflow. After processing, the tiles are seamlessly merged into a larger image, offering sharper and more detailed visuals.",
"iconUrl": "https://raw.githubusercontent.com/Steudio/ComfyUI_Steudio/main/Images/Steudio_Logo_Circle.png",
"repoUrl": "https://github.com/Steudio/ComfyUI_Steudio",
"publisher": {
"id": "steudio",
"name": ""
},
"downloads": 59469,
"githubStars": 133,
"latestVersion": "2.0.5",
"license": "{\"file\": \"LICENSE.txt\"}",
"lastUpdated": "2025-05-22T23:05:40.260032Z",
"nodes": [
{
"name": "Combine Tiles",
"displayName": "Combine Tiles",
"category": "Steudio/Divide and Conquer",
"deprecated": false,
"experimental": false
},
{
"name": "Display UI",
"displayName": "Display UI",
"category": "Steudio/Utils",
"deprecated": false,
"experimental": false
},
{
"name": "Divide and Conquer Algorithm",
"displayName": "Divide and Conquer Algorithm",
"category": "Steudio/Divide and Conquer",
"description": "\nCalculate the best dimensions and optionally upscale an image\nwhile maintaining minimum tile overlap and scale factor constraints.\nSteudio\n",
"deprecated": false,
"experimental": false
},
{
"name": "Divide Image and Select Tile",
"displayName": "Divide Image and Select Tile",
"category": "Steudio/Divide and Conquer",
"description": "\ntile 0 = All tiles\ntile # = Tile #\n",
"deprecated": false,
"experimental": false
},
{
"name": "Load Images into List",
"displayName": "Load Images into List",
"category": "Steudio/Utils",
"deprecated": false,
"experimental": false
},
{
"name": "Ratio Calculator",
"displayName": "Ratio Calculator",
"category": "Steudio/Utils",
"deprecated": false,
"experimental": false
},
{
"name": "Ratio to Size",
"displayName": "Ratio to Size",
"category": "Steudio/Utils",
"deprecated": false,
"experimental": false
},
{
"name": "Seed Shifter",
"displayName": "Seed Shifter",
"category": "Steudio/Utils",
"description": "\nA simple and effective way to generate a “batch” of images with reproducible seed.\nSteudio\n",
"deprecated": false,
"experimental": false
},
{
"name": "Sequence Generator",
"displayName": "Sequence Generator",
"category": "Steudio/Utils",
"description": "\nx...y+z | Generates a sequence of numbers from x to y with a step of z.\nx...y#z | Generates z evenly spaced numbers between x and y.\n x,y,z | Generates a list of x, y, z.\n ",
"deprecated": false,
"experimental": false
},
{
"name": "Simple Config",
"displayName": "Simple Config",
"category": "Steudio/Utils",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "comfyui_ultimatesdupscale",
"registryId": "comfyui_ultimatesdupscale",
"displayName": "ComfyUI_UltimateSDUpscale",
"description": "ComfyUI nodes for the Ultimate Stable Diffusion Upscale script by Coyote-A.",
"repoUrl": "https://github.com/ssitu/ComfyUI_UltimateSDUpscale",
"publisher": {
"id": "ssit",
"name": "ssit"
},
"downloads": 1500391,
"githubStars": 1509,
"latestVersion": "1.7.2",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2026-03-28T03:04:53.321587Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "UltimateSDUpscale",
"displayName": "UltimateSDUpscale",
"category": "image/upscaling",
"description": "Upscales an image and runs image-to-image on tiles from the input image.",
"deprecated": false,
"experimental": false
},
{
"name": "UltimateSDUpscaleCustomSample",
"displayName": "UltimateSDUpscaleCustomSample",
"category": "image/upscaling",
"description": "Runs image-to-image on tiles from the input image.",
"deprecated": false,
"experimental": false
},
{
"name": "UltimateSDUpscaleNoUpscale",
"displayName": "UltimateSDUpscaleNoUpscale",
"category": "image/upscaling",
"description": "Runs image-to-image on tiles from the input image.",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "comfyui-advanced-controlnet",
"registryId": "comfyui-advanced-controlnet",
"displayName": "ComfyUI-Advanced-ControlNet",
"description": "Nodes for scheduling ControlNet strength across timesteps and batched latents, as well as applying custom weights and attention masks.",
"repoUrl": "https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet",
"publisher": {
"id": "kosinkadink",
"name": "Kosinkadink"
},
"downloads": 608242,
"githubStars": 970,
"latestVersion": "1.5.7",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2026-03-30T01:40:06.836236Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "ACN_ReferenceControlNetFinetune",
"displayName": "Reference ControlNet (Finetune) 🛂🅐🅒🅝",
"category": "Adv-ControlNet 🛂🅐🅒🅝/Reference"
},
{
"name": "ACN_SparseCtrlIndexMethodNode",
"displayName": "SparseCtrl Index Method 🛂🅐🅒🅝",
"category": "Adv-ControlNet 🛂🅐🅒🅝/SparseCtrl"
}
]
},
{
"id": "comfyui-animatediff-evolved",
"registryId": "comfyui-animatediff-evolved",
"displayName": "ComfyUI-AnimateDiff-Evolved",
"description": "Improved AnimateDiff integration for ComfyUI.",
"repoUrl": "https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved",
"publisher": {
"id": "kosinkadink",
"name": "Kosinkadink"
},
"downloads": 511860,
"githubStars": 3453,
"latestVersion": "1.5.7",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2026-03-30T01:39:45.498846Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "ADE_ContextExtras_ContextRef_ModeFirst",
"displayName": "ContextRef Mode◆First 🎭🅐🅓",
"category": "Animate Diff 🎭🅐🅓/context opts/context extras/contextref"
},
{
"name": "ADE_ContextExtras_ContextRef_ModeIndexes",
"displayName": "ContextRef Mode◆Indexes 🎭🅐🅓",
"category": "Animate Diff 🎭🅐🅓/context opts/context extras/contextref"
},
{
"name": "ADE_ContextExtras_ContextRef_ModeSliding",
"displayName": "ContextRef Mode◆Sliding 🎭🅐🅓",
"category": "Animate Diff 🎭🅐🅓/context opts/context extras/contextref"
},
{
"name": "ADE_ContextExtras_ContextRef_TuneAttn",
"displayName": "ContextRef Tune◆Attn 🎭🅐🅓",
"category": "Animate Diff 🎭🅐🅓/context opts/context extras/contextref"
},
{
"name": "ADE_ContextExtras_ContextRef_TuneAttnAdain",
"displayName": "ContextRef Tune◆Attn+Adain 🎭🅐🅓",
"category": "Animate Diff 🎭🅐🅓/context opts/context extras/contextref"
},
{
"name": "ADE_IterationOptsDefault",
"displayName": "Default Iteration Options 🎭🅐🅓",
"category": "Animate Diff 🎭🅐🅓/iteration opts"
},
{
"name": "ADE_EmptyLatentImageLarge",
"displayName": "Empty Latent Image (Big Batch) 🎭🅐🅓",
"category": "Animate Diff 🎭🅐🅓/extras"
},
{
"name": "ADE_FloatToFloats",
"displayName": "Float to Floats 🎭🅐🅓",
"category": "Animate Diff 🎭🅐🅓/scheduling"
},
{
"name": "ADE_NoisedImageInjectOptions",
"displayName": "Image Injection Options 🎭🅐🅓",
"category": "Animate Diff 🎭🅐🅓/sample settings/image inject"
},
{
"name": "ADE_TimestepsConditioning",
"displayName": "Timesteps Conditioning 🎭🅐🅓",
"category": "Animate Diff 🎭🅐🅓/conditioning",
"deprecated": true
},
{
"name": "ADE_ValueScheduling",
"displayName": "Value Scheduling 🎭🅐🅓",
"category": "Animate Diff 🎭🅐🅓/scheduling",
"description": "<div><div id=VHS_shortdesc style=\"font-size: .8em\">Create a list of values with automatic interpolation.</div></div><div><div vhs_title=\"Format\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Format: <div>Scheduling supports two formats: JSON and pythonic.</div><div><div vhs_title=\"JSON\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">JSON: <div>\"idx\": float/int_value, ...</div></div></div><div vhs_title=\"pythonic\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">pythonic: <div>idx = float/int_value, ...</div></div></div></div><div>The idx is the index of the frame - first frame is 0, last frame is max_frames-1. An idx may be the following:</div><div><div vhs_title=\"allowed idxs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">allowed idxs: <div vhs_title=\"single\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">single: A positive integer (e.g. 0, 2) schedules value for frame. A negative integer (e.g. -1, -5) schedules value for frame from the end (-1 would be the last frame). A decimal (e.g. 0.5, 1.0) selects frame based relative location in whole schedule (0.5 would be halfway, 1.0 would be last frame).</div></div><div vhs_title=\"range\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">range: Using rules above, single:single chooses uninterpolated prompts from start idx (included) to end idx (excluded). Examples -> 0:12, 0:-5, 2:0.5</div></div><div vhs_title=\"hold\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">hold: Putting a colon after a single idx stops interpolation until the next provided index. Examples -> 0:, 0.5:, 16: </div></div></div></div></div><div>The values can be written without any special formatting.</div><div><div vhs_title=\"JSON\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">JSON: <div>\"0\": 1.0,</div><div>\"16\": 1.3</div></div></div><div vhs_title=\"pythonic\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">pythonic: <div>0 = 1.0,</div><div>16 = 1.3</div></div></div></div></div></div></div><div><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse VHS_precollapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"values\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse VHS_precollapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">values: Write your values here.</div></div><div vhs_title=\"max_length\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">max_length: Used to select the intended length of schedule. If set to 0, will use the largest index in the schedule as max_length, but will disable relative indexes (negative and decimal).</div></div><div vhs_title=\"print_schedule\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">print_schedule: When True, prints output values for each frame.</div></div></div></div></div>"
}
]
},
{
"id": "comfyui-cogvideoxwrapper",
"registryId": "comfyui-cogvideoxwrapper",
"displayName": "ComfyUI-CogVideoXWrapper",
"description": "Diffusers wrapper for CogVideoX -models: https://github.com/THUDM/CogVideo",
"repoUrl": "https://github.com/kijai/ComfyUI-CogVideoXWrapper",
"publisher": {
"id": "kijai",
"name": "Kijai"
},
"downloads": 122609,
"githubStars": 1546,
"latestVersion": "1.5.0",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2024-11-19T17:21:34.402331Z",
"nodes": [
{
"name": "CogVideoContextOptions",
"displayName": "CogVideoContextOptions",
"category": "CogVideoWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "CogVideoControlNet",
"displayName": "CogVideoControlNet",
"category": "CogVideoWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "CogVideoDecode",
"displayName": "CogVideoDecode",
"category": "CogVideoWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "CogVideoImageEncode",
"displayName": "CogVideoImageEncode",
"category": "CogVideoWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "CogVideoImageEncodeFunInP",
"displayName": "CogVideoImageEncodeFunInP",
"category": "CogVideoWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "CogVideoLatentPreview",
"displayName": "CogVideoLatentPreview",
"category": "PyramidFlowWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "CogVideoLoraSelect",
"displayName": "CogVideoLoraSelect",
"category": "CogVideoWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "CogVideoSampler",
"displayName": "CogVideoSampler",
"category": "CogVideoWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "CogVideoTextEncode",
"displayName": "CogVideoTextEncode",
"category": "CogVideoWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "CogVideoTextEncodeCombine",
"displayName": "CogVideoTextEncodeCombine",
"category": "CogVideoWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "CogVideoTransformerEdit",
"displayName": "CogVideoTransformerEdit",
"category": "CogVideoWrapper",
"description": "EXPERIMENTAL:Remove specific transformer blocks from the model",
"deprecated": false,
"experimental": false
},
{
"name": "CogVideoXFasterCache",
"displayName": "CogVideoXFasterCache",
"category": "CogVideoWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "CogVideoXFunResizeToClosestBucket",
"displayName": "CogVideoXFunResizeToClosestBucket",
"category": "CogVideoWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "CogVideoXModelLoader",
"displayName": "CogVideoXModelLoader",
"category": "CogVideoWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "CogVideoXTorchCompileSettings",
"displayName": "CogVideoXTorchCompileSettings",
"category": "MochiWrapper",
"description": "torch.compile settings, when connected to the model loader, torch.compile of the selected layers is attempted. Requires Triton and torch 2.5.0 is recommended",
"deprecated": false,
"experimental": false
},
{
"name": "CogVideoXVAELoader",
"displayName": "CogVideoXVAELoader",
"category": "CogVideoWrapper",
"description": "Loads CogVideoX VAE model from 'ComfyUI/models/vae'",
"deprecated": false,
"experimental": false
},
{
"name": "DownloadAndLoadCogVideoControlNet",
"displayName": "DownloadAndLoadCogVideoControlNet",
"category": "CogVideoWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "DownloadAndLoadCogVideoGGUFModel",
"displayName": "DownloadAndLoadCogVideoGGUFModel",
"category": "CogVideoWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "DownloadAndLoadCogVideoModel",
"displayName": "DownloadAndLoadCogVideoModel",
"category": "CogVideoWrapper",
"description": "Downloads and loads the selected CogVideo model from Huggingface to 'ComfyUI/models/CogVideo'",
"deprecated": false,
"experimental": false
},
{
"name": "DownloadAndLoadToraModel",
"displayName": "DownloadAndLoadToraModel",
"category": "CogVideoWrapper",
"description": "Downloads and loads the the Tora model from Huggingface to 'ComfyUI/models/CogVideo/CogVideoX-5b-Tora'",
"deprecated": false,
"experimental": false
},
{
"name": "ToraEncodeOpticalFlow",
"displayName": "ToraEncodeOpticalFlow",
"category": "CogVideoWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "ToraEncodeTrajectory",
"displayName": "ToraEncodeTrajectory",
"category": "CogVideoWrapper",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "ComfyUI-DepthAnythingV2",
"displayName": "DepthAnythingV2",
"nodes": [
{
"name": "DownloadAndLoadDepthAnythingV2Model",
"displayName": "DownloadAndLoadDepthAnythingV2Model",
"category": "DepthAnythingV2",
"description": "\nModels autodownload to `ComfyUI\\models\\depthanything` from \nhttps://huggingface.co/Kijai/DepthAnythingV2-safetensors/tree/main \n \nfp16 reduces quality by a LOT, not recommended.\n"
}
]
},
{
"id": "ComfyUI-DynamiCrafterWrapper",
"displayName": "DynamiCrafterWrapper",
"nodes": [
{
"name": "DownloadAndLoadCLIPVisionModel",
"displayName": "(Down)Load CLIPVisionModel",
"category": "DynamiCrafterWrapper"
},
{
"name": "DownloadAndLoadDynamiCrafterModel",
"displayName": "(Down)Load DynamiCrafterModel",
"category": "DynamiCrafterWrapper"
}
]
},
{
"id": "ComfyUI-EditUtils",
"displayName": "EditUtils",
"nodes": [
{
"name": "Flux2KleinModelConfig_EditUtils",
"displayName": "EditUtils: Flux2Klein Model Config lrzjason",
"category": "advanced/conditioning"
},
{
"name": "LoadImageWithFilename_EditUtils",
"displayName": "EditUtils: Load Image With Filename lrzjason",
"category": "image"
},
{
"name": "ModelConfig_EditUtils",
"displayName": "EditUtils: Model Config lrzjason",
"category": "advanced/conditioning"
},
{
"name": "QwenModelConfig_EditUtils",
"displayName": "EditUtils: Qwen Model Config lrzjason",
"category": "advanced/conditioning"
}
]
},
{
"id": "comfyui-enricos-nodes",
"registryId": "comfyui-enricos-nodes",
"displayName": "ComfyUI-enricos-nodes",
"description": "pass up to 8 images and visually place, rotate and scale them to build the perfect composition. group move and group rescale. remember their position and scaling value across generations to easy swap images. use the buffer zone to to park an asset you don't want to use or easily reach transformations controls",
"repoUrl": "https://github.com/erosDiffusion/ComfyUI-enricos-nodes",
"publisher": {
"id": "erosdiffusion",
"name": "ErosDiffusion"
},
"downloads": 125791,
"githubStars": 621,
"latestVersion": "4.0.1",
"license": "{\"text\": \"MIT License\"}",
"lastUpdated": "2025-11-16T23:35:17.778371Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "Compositor3",
"displayName": "Compositor3",
"category": "image",
"deprecated": false,
"experimental": false
},
{
"name": "Compositor4",
"displayName": "Compositor4",
"category": "image",
"description": "Interactive compositor canvas for positioning, scaling, rotating, and arranging multiple images with real-time preview and mask support. Provides a visual editor with layers panel, alignment tools, and snap-to-grid functionality.",
"deprecated": false,
"experimental": false
},
{
"name": "Compositor4MasksOutput",
"displayName": "Compositor4MasksOutput",
"category": "image",
"deprecated": false,
"experimental": false
},
{
"name": "Compositor4TransformsOut",
"displayName": "Compositor4TransformsOut",
"category": "image",
"deprecated": false,
"experimental": false
},
{
"name": "CompositorColorPicker",
"displayName": "CompositorColorPicker",
"category": "image/color",
"deprecated": false,
"experimental": false
},
{
"name": "CompositorConfig3",
"displayName": "CompositorConfig3",
"category": "image",
"description": "\nThe compositor node\n- pass up to 8 images\n- optionally pass their masks (invert them)\n- masks are automatically applied and internally the compositor is passed an rgba\n- use the sizing controls to configure the compositor, it will be resized on run\n- set the flag to pause to allow yourself time to build your composition (pause acts on compositor, not the config node)\n",
"deprecated": false,
"experimental": false
},
{
"name": "CompositorConfig4",
"displayName": "CompositorConfig4",
"category": "image",
"description": "Configuration node for the compositor system V4. Accepts up to 8 images with optional masks, applies masking to create RGBA composites, and provides canvas sizing controls. Masks are serialized to disk with fixed naming (cfg{node_id}-mask{index}.png). The 'onConfigChangedContinue' pause option allows time to build compositions before continuing execution. Outputs configuration objects used by compositor V4 nodes.",
"deprecated": false,
"experimental": false
},
{
"name": "CompositorMasksOutputV3",
"displayName": "CompositorMasksOutputV3",
"category": "image",
"deprecated": false,
"experimental": false
},
{
"name": "CompositorTools3",
"displayName": "CompositorTools3",
"category": "image",
"description": "\nexperimental node: frontend communication only with feature flag, needs page reload to fill controls\n",
"deprecated": false,
"experimental": false
},
{
"name": "CompositorTransformsOutV3",
"displayName": "CompositorTransformsOutV3",
"category": "image",
"deprecated": false,
"experimental": false
},
{
"name": "ImageColorSampler",
"displayName": "ImageColorSampler",
"category": "image/color",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "ComfyUI-FlashVSR_Ultra_Fast",
"displayName": "FlashVSR_Ultra_Fast",
"nodes": [
{
"name": "FlashVSRInitPipe",
"displayName": "FlashVSR Init Pipeline",
"category": "FlashVSR",
"description": "Download the entire \"FlashVSR\" folder with all the files inside it from \"https://huggingface.co/JunhaoZhuang/FlashVSR\" and put it in the \"ComfyUI/models\""
},
{
"name": "FlashVSRNode",
"displayName": "FlashVSR Ultra-Fast",
"category": "FlashVSR",
"description": "Download the entire \"FlashVSR\" folder with all the files inside it from \"https://huggingface.co/JunhaoZhuang/FlashVSR\" and put it in the \"ComfyUI/models\""
},
{
"name": "FlashVSRNodeAdv",
"displayName": "FlashVSR Ultra-Fast (Advanced)",
"category": "FlashVSR"
}
]
},
{
"id": "ComfyUI-Fluxtapoz",
"displayName": "Fluxtapoz",
"nodes": [
{
"name": "FlowEditSampler",
"displayName": "Flow Edit Sampler",
"category": "fluxtapoz"
},
{
"name": "FluxAttnOverride",
"displayName": "Flux Attention Override",
"category": "fluxtapoz/attn"
},
{
"name": "FluxForwardODESampler",
"displayName": "Flux Forward ODE Sampler",
"category": "fluxtapoz"
},
{
"name": "FluxInverseSampler",
"displayName": "Flux Inverse Sampler",
"category": "fluxtapoz"
},
{
"name": "RFDoubleBlocksOverride",
"displayName": "RF-Edit Double Layers Override",
"category": "fluxtapoz"
},
{
"name": "RFSingleBlocksOverride",
"displayName": "RF-Edit Single Layers Override",
"category": "fluxtapoz"
}
]
},
{
"id": "comfyui-frame-interpolation",
"registryId": "comfyui-frame-interpolation",
"displayName": "ComfyUI-Frame-Interpolation",
"description": "A custom node suite for Video Frame Interpolation in ComfyUI",
"repoUrl": "https://github.com/Fannovel16/ComfyUI-Frame-Interpolation",
"publisher": {
"id": "fannovel16",
"name": "Fannovel16"
},
"downloads": 1550122,
"githubStars": 1023,
"latestVersion": "1.0.7",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2025-04-30T11:32:53.610548Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "AMT VFI",
"displayName": "AMT VFI",
"category": "ComfyUI-Frame-Interpolation/VFI",
"deprecated": false,
"experimental": false
},
{
"name": "CAIN VFI",
"displayName": "CAIN VFI",
"category": "ComfyUI-Frame-Interpolation/VFI",
"deprecated": false,
"experimental": false
},
{
"name": "FILM VFI",
"displayName": "FILM VFI",
"category": "ComfyUI-Frame-Interpolation/VFI",
"deprecated": false,
"experimental": false
},
{
"name": "FLAVR VFI",
"displayName": "FLAVR VFI",
"category": "ComfyUI-Frame-Interpolation/VFI",
"deprecated": false,
"experimental": false
},
{
"name": "GMFSS Fortuna VFI",
"displayName": "GMFSS Fortuna VFI",
"category": "ComfyUI-Frame-Interpolation/VFI",
"deprecated": false,
"experimental": false
},
{
"name": "IFRNet VFI",
"displayName": "IFRNet VFI",
"category": "ComfyUI-Frame-Interpolation/VFI",
"deprecated": false,
"experimental": false
},
{
"name": "IFUnet VFI",
"displayName": "IFUnet VFI",
"category": "ComfyUI-Frame-Interpolation/VFI",
"deprecated": false,
"experimental": false
},
{
"name": "KSampler Gradually Adding More Denoise (efficient)",
"displayName": "KSampler Gradually Adding More Denoise (efficient)",
"category": "ComfyUI-Frame-Interpolation/others",
"deprecated": false,
"experimental": false
},
{
"name": "M2M VFI",
"displayName": "M2M VFI",
"category": "ComfyUI-Frame-Interpolation/VFI",
"deprecated": false,
"experimental": false
},
{
"name": "Make Interpolation State List",
"displayName": "Make Interpolation State List",
"category": "ComfyUI-Frame-Interpolation/VFI",
"deprecated": false,
"experimental": false
},
{
"name": "RIFE VFI",
"displayName": "RIFE VFI",
"category": "ComfyUI-Frame-Interpolation/VFI",
"deprecated": false,
"experimental": false
},
{
"name": "Sepconv VFI",
"displayName": "Sepconv VFI",
"category": "ComfyUI-Frame-Interpolation/VFI",
"deprecated": false,
"experimental": false
},
{
"name": "STMFNet VFI",
"displayName": "STMFNet VFI",
"category": "ComfyUI-Frame-Interpolation/VFI",
"deprecated": false,
"experimental": false
},
{
"name": "VFI FloatToInt",
"displayName": "VFI FloatToInt",
"category": "ComfyUI-Frame-Interpolation",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "ComfyUI-Image-Filters",
"displayName": "Image-Filters",
"nodes": [
{
"name": "ImageConstantHSV",
"displayName": "Image Constant Color (HSV)",
"category": "Image-Filters/image"
},
{
"name": "ImageConstant",
"displayName": "Image Constant Color (RGB)",
"category": "Image-Filters/image"
},
{
"name": "OffsetLatentImage",
"displayName": "Offset Latent Image",
"category": "Image-Filters/latent"
}
]
},
{
"id": "comfyui-impact-pack",
"registryId": "comfyui-impact-pack",
"displayName": "ComfyUI Impact Pack",
"description": "This node pack offers various detector nodes and detailer nodes that allow you to configure a workflow that automatically enhances facial details. And provide iterative upscaler.",
"repoUrl": "https://github.com/ltdrdata/ComfyUI-Impact-Pack",
"publisher": {
"id": "drltdata",
"name": "Dr.Lt.Data"
},
"downloads": 2724273,
"githubStars": 3117,
"latestVersion": "8.28.3",
"license": "{\"file\": \"LICENSE.txt\"}",
"lastUpdated": "2026-04-19T17:08:04.993918Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "AddMask",
"displayName": "AddMask",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "AnyPipeToBasic",
"displayName": "AnyPipeToBasic",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "BasicPipeToDetailerPipe",
"displayName": "BasicPipeToDetailerPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "BasicPipeToDetailerPipeSDXL",
"displayName": "BasicPipeToDetailerPipeSDXL",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "BboxDetectorCombined_v2",
"displayName": "BboxDetectorCombined_v2",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "BboxDetectorSEGS",
"displayName": "BboxDetectorSEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "BitwiseAndMask",
"displayName": "BitwiseAndMask",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "BitwiseAndMaskForEach",
"displayName": "BitwiseAndMaskForEach",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "BlackPatchRetryHookProvider",
"displayName": "BlackPatchRetryHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "CfgScheduleHookProvider",
"displayName": "CfgScheduleHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "CLIPSegDetectorProvider",
"displayName": "CLIPSegDetectorProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "CombineRegionalPrompts",
"displayName": "CombineRegionalPrompts",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "CoreMLDetailerHookProvider",
"displayName": "CoreMLDetailerHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "CustomSamplerDetailerHookProvider",
"displayName": "CustomSamplerDetailerHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "DenoiseScheduleHookProvider",
"displayName": "DenoiseScheduleHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "DenoiseSchedulerDetailerHookProvider",
"displayName": "DenoiseSchedulerDetailerHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "DetailerForEach",
"displayName": "DetailerForEach",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "DetailerForEachAutoRetry",
"displayName": "DetailerForEachAutoRetry",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "DetailerForEachDebug",
"displayName": "DetailerForEachDebug",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "DetailerForEachDebugPipe",
"displayName": "DetailerForEachDebugPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "DetailerForEachPipe",
"displayName": "DetailerForEachPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "DetailerForEachPipeForAnimateDiff",
"displayName": "DetailerForEachPipeForAnimateDiff",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "DetailerHookCombine",
"displayName": "DetailerHookCombine",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "DetailerPipeToBasicPipe",
"displayName": "DetailerPipeToBasicPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "EditBasicPipe",
"displayName": "EditBasicPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "EditDetailerPipe",
"displayName": "EditDetailerPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "EditDetailerPipeSDXL",
"displayName": "EditDetailerPipeSDXL",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "EmptySegs",
"displayName": "EmptySegs",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "FaceDetailer",
"displayName": "FaceDetailer",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "FaceDetailerPipe",
"displayName": "FaceDetailerPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "FromBasicPipe",
"displayName": "FromBasicPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "FromBasicPipe_v2",
"displayName": "FromBasicPipe_v2",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "FromDetailerPipe",
"displayName": "FromDetailerPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "FromDetailerPipe_v2",
"displayName": "FromDetailerPipe_v2",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "FromDetailerPipeSDXL",
"displayName": "FromDetailerPipeSDXL",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "GITSSchedulerFuncProvider",
"displayName": "GITSSchedulerFuncProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImageListToImageBatch",
"displayName": "ImageListToImageBatch",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImageMaskSwitch",
"displayName": "ImageMaskSwitch",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImageReceiver",
"displayName": "ImageReceiver",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImageSender",
"displayName": "ImageSender",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactAssembleSEGS",
"displayName": "ImpactAssembleSEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactBoolean",
"displayName": "ImpactBoolean",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactCombineConditionings",
"displayName": "ImpactCombineConditionings",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactCompare",
"displayName": "ImpactCompare",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactConcatConditionings",
"displayName": "ImpactConcatConditionings",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactConditionalBranch",
"displayName": "ImpactConditionalBranch",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactConditionalBranchSelMode",
"displayName": "ImpactConditionalBranchSelMode",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactConditionalStopIteration",
"displayName": "ImpactConditionalStopIteration",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactControlBridge",
"displayName": "ImpactControlBridge",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactControlNetApplyAdvancedSEGS",
"displayName": "ImpactControlNetApplyAdvancedSEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactControlNetApplySEGS",
"displayName": "ImpactControlNetApplySEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactControlNetClearSEGS",
"displayName": "ImpactControlNetClearSEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactConvertDataType",
"displayName": "ImpactConvertDataType",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactCount_Elts_in_SEGS",
"displayName": "ImpactCount_Elts_in_SEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactDecomposeSEGS",
"displayName": "ImpactDecomposeSEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactDilate_Mask_SEG_ELT",
"displayName": "ImpactDilate_Mask_SEG_ELT",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactDilateMask",
"displayName": "ImpactDilateMask",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactDilateMaskInSEGS",
"displayName": "ImpactDilateMaskInSEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactDummyInput",
"displayName": "ImpactDummyInput",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactEdit_SEG_ELT",
"displayName": "ImpactEdit_SEG_ELT",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactExecutionOrderController",
"displayName": "ImpactExecutionOrderController",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactFlattenMask",
"displayName": "ImpactFlattenMask",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactFloat",
"displayName": "ImpactFloat",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactFrom_SEG_ELT",
"displayName": "ImpactFrom_SEG_ELT",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactFrom_SEG_ELT_bbox",
"displayName": "ImpactFrom_SEG_ELT_bbox",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactFrom_SEG_ELT_crop_region",
"displayName": "ImpactFrom_SEG_ELT_crop_region",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactGaussianBlurMask",
"displayName": "ImpactGaussianBlurMask",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactGaussianBlurMaskInSEGS",
"displayName": "ImpactGaussianBlurMaskInSEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactHFTransformersClassifierProvider",
"displayName": "ImpactHFTransformersClassifierProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactIfNone",
"displayName": "ImpactIfNone",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactImageBatchToImageList",
"displayName": "ImpactImageBatchToImageList",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactImageInfo",
"displayName": "ImpactImageInfo",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactInt",
"displayName": "ImpactInt",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactInversedSwitch",
"displayName": "ImpactInversedSwitch",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactIPAdapterApplySEGS",
"displayName": "ImpactIPAdapterApplySEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactIsNotEmptySEGS",
"displayName": "ImpactIsNotEmptySEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactKSamplerAdvancedBasicPipe",
"displayName": "ImpactKSamplerAdvancedBasicPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactKSamplerBasicPipe",
"displayName": "ImpactKSamplerBasicPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactLatentInfo",
"displayName": "ImpactLatentInfo",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactListBridge",
"displayName": "ImpactListBridge",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactLogger",
"displayName": "ImpactLogger",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactLogicalOperators",
"displayName": "ImpactLogicalOperators",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactMakeAnyList",
"displayName": "ImpactMakeAnyList",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactMakeImageBatch",
"displayName": "ImpactMakeImageBatch",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactMakeImageList",
"displayName": "ImpactMakeImageList",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactMakeMaskBatch",
"displayName": "ImpactMakeMaskBatch",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactMakeMaskList",
"displayName": "ImpactMakeMaskList",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactMakeTileSEGS",
"displayName": "ImpactMakeTileSEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactMinMax",
"displayName": "ImpactMinMax",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactNeg",
"displayName": "ImpactNeg",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactNegativeConditioningPlaceholder",
"displayName": "ImpactNegativeConditioningPlaceholder",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactNodeSetMuteState",
"displayName": "ImpactNodeSetMuteState",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactQueueTrigger",
"displayName": "ImpactQueueTrigger",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactQueueTriggerCountdown",
"displayName": "ImpactQueueTriggerCountdown",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactRemoteBoolean",
"displayName": "ImpactRemoteBoolean",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactRemoteInt",
"displayName": "ImpactRemoteInt",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSAM2VideoDetectorSEGS",
"displayName": "ImpactSAM2VideoDetectorSEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactScaleBy_BBOX_SEG_ELT",
"displayName": "ImpactScaleBy_BBOX_SEG_ELT",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSchedulerAdapter",
"displayName": "ImpactSchedulerAdapter",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSegsAndMask",
"displayName": "ImpactSegsAndMask",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSegsAndMaskForEach",
"displayName": "ImpactSegsAndMaskForEach",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSEGSClassify",
"displayName": "ImpactSEGSClassify",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSEGSConcat",
"displayName": "ImpactSEGSConcat",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSEGSIntersectionFilter",
"displayName": "ImpactSEGSIntersectionFilter",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSEGSLabelAssign",
"displayName": "ImpactSEGSLabelAssign",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSEGSLabelFilter",
"displayName": "ImpactSEGSLabelFilter",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSEGSMerge",
"displayName": "ImpactSEGSMerge",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSEGSNMSFilter",
"displayName": "ImpactSEGSNMSFilter",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSEGSOrderedFilter",
"displayName": "ImpactSEGSOrderedFilter",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSEGSPicker",
"displayName": "ImpactSEGSPicker",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSEGSRangeFilter",
"displayName": "ImpactSEGSRangeFilter",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSEGSToMaskBatch",
"displayName": "ImpactSEGSToMaskBatch",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSEGSToMaskList",
"displayName": "ImpactSEGSToMaskList",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSelectNthItemOfAnyList",
"displayName": "ImpactSelectNthItemOfAnyList",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSetWidgetValue",
"displayName": "ImpactSetWidgetValue",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSimpleDetectorSEGS",
"displayName": "ImpactSimpleDetectorSEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSimpleDetectorSEGS_for_AD",
"displayName": "ImpactSimpleDetectorSEGS_for_AD",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSimpleDetectorSEGSPipe",
"displayName": "ImpactSimpleDetectorSEGSPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSleep",
"displayName": "ImpactSleep",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactStringSelector",
"displayName": "ImpactStringSelector",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactSwitch",
"displayName": "ImpactSwitch",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactValueReceiver",
"displayName": "ImpactValueReceiver",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactValueSender",
"displayName": "ImpactValueSender",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactWildcardEncode",
"displayName": "ImpactWildcardEncode",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ImpactWildcardProcessor",
"displayName": "ImpactWildcardProcessor",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "IterativeImageUpscale",
"displayName": "IterativeImageUpscale",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "IterativeLatentUpscale",
"displayName": "IterativeLatentUpscale",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "KSamplerAdvancedProvider",
"displayName": "KSamplerAdvancedProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "KSamplerProvider",
"displayName": "KSamplerProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "LamaRemoverDetailerHookProvider",
"displayName": "LamaRemoverDetailerHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "LatentPixelScale",
"displayName": "LatentPixelScale",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "LatentReceiver",
"displayName": "LatentReceiver",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "LatentSender",
"displayName": "LatentSender",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "LatentSwitch",
"displayName": "LatentSwitch",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "MaskDetailerPipe",
"displayName": "MaskDetailerPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "MaskListToMaskBatch",
"displayName": "MaskListToMaskBatch",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "MaskRectArea",
"displayName": "MaskRectArea",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "MaskRectAreaAdvanced",
"displayName": "MaskRectAreaAdvanced",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "MasksToMaskList",
"displayName": "MasksToMaskList",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "MaskToSEGS",
"displayName": "MaskToSEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "MaskToSEGS_for_AnimateDiff",
"displayName": "MaskToSEGS_for_AnimateDiff",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "MediaPipeFaceMeshToSEGS",
"displayName": "MediaPipeFaceMeshToSEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "NoiseInjectionDetailerHookProvider",
"displayName": "NoiseInjectionDetailerHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "NoiseInjectionHookProvider",
"displayName": "NoiseInjectionHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ONNXDetectorProvider",
"displayName": "ONNXDetectorProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ONNXDetectorSEGS",
"displayName": "ONNXDetectorSEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "PixelKSampleHookCombine",
"displayName": "PixelKSampleHookCombine",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "PixelKSampleUpscalerProvider",
"displayName": "PixelKSampleUpscalerProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "PixelKSampleUpscalerProviderPipe",
"displayName": "PixelKSampleUpscalerProviderPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "PixelTiledKSampleUpscalerProvider",
"displayName": "PixelTiledKSampleUpscalerProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "PixelTiledKSampleUpscalerProviderPipe",
"displayName": "PixelTiledKSampleUpscalerProviderPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "PreviewBridge",
"displayName": "PreviewBridge",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "PreviewBridgeLatent",
"displayName": "PreviewBridgeLatent",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "PreviewDetailerHookProvider",
"displayName": "PreviewDetailerHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ReencodeLatent",
"displayName": "ReencodeLatent",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ReencodeLatentPipe",
"displayName": "ReencodeLatentPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "RegionalPrompt",
"displayName": "RegionalPrompt",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "RegionalSampler",
"displayName": "RegionalSampler",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "RegionalSamplerAdvanced",
"displayName": "RegionalSamplerAdvanced",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "RemoveImageFromSEGS",
"displayName": "RemoveImageFromSEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "RemoveNoiseMask",
"displayName": "RemoveNoiseMask",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SAMDetectorCombined",
"displayName": "SAMDetectorCombined",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SAMDetectorSegmented",
"displayName": "SAMDetectorSegmented",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SAMLoader",
"displayName": "SAMLoader",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SegmDetectorCombined_v2",
"displayName": "SegmDetectorCombined_v2",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SegmDetectorSEGS",
"displayName": "SegmDetectorSEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SEGSDetailer",
"displayName": "SEGSDetailer",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SEGSDetailerForAnimateDiff",
"displayName": "SEGSDetailerForAnimateDiff",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SEGSLabelFilterDetailerHookProvider",
"displayName": "SEGSLabelFilterDetailerHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SEGSOrderedFilterDetailerHookProvider",
"displayName": "SEGSOrderedFilterDetailerHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SEGSPaste",
"displayName": "SEGSPaste",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SEGSPreview",
"displayName": "SEGSPreview",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SEGSPreviewCNet",
"displayName": "SEGSPreviewCNet",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SEGSRangeFilterDetailerHookProvider",
"displayName": "SEGSRangeFilterDetailerHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SEGSSwitch",
"displayName": "SEGSSwitch",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SegsToCombinedMask",
"displayName": "SegsToCombinedMask",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SEGSToImageList",
"displayName": "SEGSToImageList",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SEGSUpscaler",
"displayName": "SEGSUpscaler",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SEGSUpscalerPipe",
"displayName": "SEGSUpscalerPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SetDefaultImageForSEGS",
"displayName": "SetDefaultImageForSEGS",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "StepsScheduleHookProvider",
"displayName": "StepsScheduleHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "StringListToString",
"displayName": "StringListToString",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SubtractMask",
"displayName": "SubtractMask",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "SubtractMaskForEach",
"displayName": "SubtractMaskForEach",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "TiledKSamplerProvider",
"displayName": "TiledKSamplerProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ToBasicPipe",
"displayName": "ToBasicPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ToBinaryMask",
"displayName": "ToBinaryMask",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ToDetailerPipe",
"displayName": "ToDetailerPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "ToDetailerPipeSDXL",
"displayName": "ToDetailerPipeSDXL",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "TwoAdvancedSamplersForMask",
"displayName": "TwoAdvancedSamplersForMask",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "TwoSamplersForMask",
"displayName": "TwoSamplersForMask",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "TwoSamplersForMaskUpscalerProvider",
"displayName": "TwoSamplersForMaskUpscalerProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "TwoSamplersForMaskUpscalerProviderPipe",
"displayName": "TwoSamplersForMaskUpscalerProviderPipe",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "UnsamplerDetailerHookProvider",
"displayName": "UnsamplerDetailerHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "UnsamplerHookProvider",
"displayName": "UnsamplerHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "VariationNoiseDetailerHookProvider",
"displayName": "VariationNoiseDetailerHookProvider",
"category": "",
"deprecated": false,
"experimental": false
},
{
"name": "WildcardPromptFromString",
"displayName": "WildcardPromptFromString",
"category": "",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "comfyui-itools",
"registryId": "comfyui-itools",
"displayName": "ComfyUI-iTools",
"description": "Whether you're a casual user or a power user, iTools provides the quality-of-life improvements you need to make your ComfyUI experience more efficient and enjoyable.",
"repoUrl": "https://github.com/MohammadAboulEla/ComfyUI-iTools",
"publisher": {
"id": "makadi",
"name": "Makadi"
},
"downloads": 94742,
"githubStars": 226,
"latestVersion": "0.6.5",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2025-10-10T14:25:31.328991Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "iToolsAddOverlay",
"displayName": "iTools Add Text Overlay",
"category": "iTools",
"description": "Will add an overlay bottom bar to show a given text, you may change the background color of the overlay bar and the font size."
},
{
"name": "iToolsCheckerBoard",
"displayName": "iTools Checkerboard 🏁",
"category": "iTools",
"description": "Generates chessboard-like patterns, either in black and white or with random colors"
},
{
"name": "iToolsGridFiller",
"displayName": "iTools Grid Filler 📲",
"category": "iTools",
"description": "Arranging a set of images into specified rows and columns, applying optional spacing and background color"
},
{
"name": "iToolsInstructorNode",
"displayName": "iTools Instructor 👨🏻‍🏫",
"category": "iTools"
},
{
"name": "iToolsKSampler",
"displayName": "iTools KSampler",
"category": "iTools",
"description": "Identical to the original KSampler, but additionally provides the settings used to generate the image and the execution time."
},
{
"name": "iToolsLineLoader",
"displayName": "iTools Line Loader",
"category": "iTools",
"description": "Will return a line from a multi line text at given index, note that count start from zero."
},
{
"name": "iToolsLoadImagePlus",
"displayName": "iTools Load Image 🏕️",
"category": "iTools",
"description": "An enhancement of the original ComfyUI ImageLoader node. It attempts to return the possible prompt used to create an image."
},
{
"name": "iToolsVaePreview",
"displayName": "iTools Preview Bridge ⛳",
"category": "iTools",
"description": "Merges VAE decoding and image preview into one node."
},
{
"name": "iToolsPromptRecord",
"displayName": "iTools Prompt Record 🪶",
"category": "iTools",
"description": "Tracks your prompts during node execution or when using ▶ button.\nProvides quick access to previously used prompts. Includes a history system that saves your favorite prompts."
},
{
"name": "iToolsRegexNode",
"displayName": "iTools Regex Editor",
"category": "iTools",
"description": "Uses Regex to find, match, or modify text. Returns matches if no replacement is set, otherwise, replaces matches or non-matches as specified."
},
{
"name": "iToolsPreviewText",
"displayName": "iTools Text Preview",
"category": "iTools",
"description": "Will show text from string input."
},
{
"name": "iToolsTextReplacer",
"displayName": "iTools Text Replacer",
"category": "iTools",
"description": "Help you replace a match in a given text."
}
]
},
{
"id": "ComfyUI-KJNodes",
"displayName": "KJNodes",
"nodes": [
{
"name": "AppendStringsToList",
"displayName": "Append Strings To List",
"category": "KJNodes/text"
},
{
"name": "AppendInstanceDiffusionTracking",
"displayName": "AppendInstanceDiffusionTracking",
"category": "KJNodes/InstanceDiffusion",
"description": "\nAppends tracking data to be used with InstanceDiffusion: \nhttps://github.com/logtd/ComfyUI-InstanceDiffusion \n\n"
},
{
"name": "BOOLConstant",
"displayName": "BOOL Constant",
"category": "KJNodes/constants"
},
{
"name": "CreateAudioMask",
"displayName": "Create Audio Mask",
"category": "KJNodes/deprecated"
},
{
"name": "CreateFluidMask",
"displayName": "Create Fluid Mask",
"category": "KJNodes/masking/generate"
},
{
"name": "CreateGradientFromCoords",
"displayName": "Create Gradient From Coords",
"category": "KJNodes/image",
"description": "\nCreates a gradient image from coordinates. \n"
},
{
"name": "CreateGradientMask",
"displayName": "Create Gradient Mask",
"category": "KJNodes/masking/generate"
},
{
"name": "CreateMagicMask",
"displayName": "Create Magic Mask",
"category": "KJNodes/masking/generate"
},
{
"name": "CreateShapeImageOnPath",
"displayName": "Create Shape Image On Path",
"category": "KJNodes/image",
"description": "\nCreates an image or batch of images with the specified shape. \nLocations are center locations. \n"
},
{
"name": "CreateShapeMask",
"displayName": "Create Shape Mask",
"category": "KJNodes/masking/generate",
"description": "\nCreates a mask or batch of masks with the specified shape. \nLocations are center locations. \nGrow value is the amount to grow the shape on each frame, creating animated masks.\n"
},
{
"name": "CreateShapeMaskOnPath",
"displayName": "Create Shape Mask On Path",
"category": "KJNodes/masking/generate",
"description": "\nCreates a mask or batch of masks with the specified shape. \nLocations are center locations. \n",
"deprecated": true
},
{
"name": "CreateVoronoiMask",
"displayName": "Create Voronoi Mask",
"category": "KJNodes/masking/generate"
},
{
"name": "CreateInstanceDiffusionTracking",
"displayName": "CreateInstanceDiffusionTracking",
"category": "KJNodes/InstanceDiffusion",
"description": "\nCreates tracking data to be used with InstanceDiffusion: \nhttps://github.com/logtd/ComfyUI-InstanceDiffusion \n \nInstanceDiffusion prompt format: \n\"class_id.class_name\": \"prompt\", \nfor example: \n\"1.head\": \"((head))\", \n"
},
{
"name": "CustomSigmas",
"displayName": "Custom Sigmas",
"category": "KJNodes/noise",
"description": "\nCreates a sigmas tensor from a string of comma separated values. \nExamples: \n \nNvidia's optimized AYS 10 step schedule for SD 1.5: \n14.615, 6.475, 3.861, 2.697, 1.886, 1.396, 0.963, 0.652, 0.399, 0.152, 0.029 \nSDXL: \n14.615, 6.315, 3.771, 2.181, 1.342, 0.862, 0.555, 0.380, 0.234, 0.113, 0.029 \nSVD: \n700.00, 54.5, 15.886, 7.977, 4.248, 1.789, 0.981, 0.403, 0.173, 0.034, 0.002 \n"
},
{
"name": "DiffusionModelSelector",
"displayName": "Diffusion Model Selector",
"category": "KJNodes/model_loaders",
"description": "Returns the path to the model as a string.",
"experimental": true
},
{
"name": "EmptyLatentImagePresets",
"displayName": "Empty Latent Image Presets",
"category": "KJNodes/latents"
},
{
"name": "FloatConstant",
"displayName": "Float Constant",
"category": "KJNodes/constants"
},
{
"name": "FloatToMask",
"displayName": "Float To Mask",
"category": "KJNodes/masking/generate",
"description": "\nGenerates a batch of masks based on the input float values.\nThe batch size is determined by the length of the input float values.\nEach mask is generated with the specified width and height.\n"
},
{
"name": "FloatToSigmas",
"displayName": "Float To Sigmas",
"category": "KJNodes/noise",
"description": "\nCreates a sigmas tensor from list of float values. \n\n"
},
{
"name": "FluxBlockLoraSelect",
"displayName": "Flux Block Lora Select",
"category": "KJNodes/experimental",
"description": "Select individual block alpha values, value of 0 removes the block altogether"
},
{
"name": "HunyuanVideoBlockLoraSelect",
"displayName": "Hunyuan Video Block Lora Select",
"category": "KJNodes/hunyuanvideo",
"description": "Select individual block alpha values, value of 0 removes the block altogether"
},
{
"name": "ImageBatchExtendWithOverlap",
"displayName": "Image Batch Extend With Overlap",
"category": "KJNodes/image",
"description": "\nHelper node for video generation extension \nFirst input source and overlap amount to get the starting frames for the extension. \nThen on another copy of the node provide the newly generated frames and choose how to overlap them.\n"
},
{
"name": "ImageGrabPIL",
"displayName": "Image Grab PIL",
"category": "KJNodes/image",
"description": "\nCaptures an area specified by screen coordinates. \nCan be used for realtime diffusion with autoqueue.\n"
},
{
"name": "INTConstant",
"displayName": "INT Constant",
"category": "KJNodes/constants"
},
{
"name": "InterpolateCoords",
"displayName": "Interpolate Coords",
"category": "KJNodes/experimental",
"description": "\nInterpolates coordinates based on a curve. \n"
},
{
"name": "JoinStringMulti",
"displayName": "Join String Multi",
"category": "KJNodes/text",
"description": "\nCreates single string, or a list of strings, from \nmultiple input strings. \nYou can set how many inputs the node has, \nwith the **inputcount** and clicking update.\n"
},
{
"name": "JoinStrings",
"displayName": "Join Strings",
"category": "KJNodes/text"
},
{
"name": "LoadAndResizeImage",
"displayName": "Load & Resize Image",
"category": "KJNodes/image"
},
{
"name": "LTX2BlockLoraSelect",
"displayName": "LTX2 Block Lora Select",
"category": "KJNodes/ltxv",
"description": "Select individual block alpha values, value of 0 removes the block altogether"
},
{
"name": "PlotCoordinates",
"displayName": "Plot Coordinates",
"category": "KJNodes/experimental",
"description": "\nPlots coordinates to sequence of images using Matplotlib. \n\n"
},
{
"name": "ScaleBatchPromptSchedule",
"displayName": "Scale Batch Prompt Schedule",
"category": "KJNodes/misc",
"description": "\nScales a batch schedule from Fizz' nodes BatchPromptSchedule\nto a different frame count.\n"
},
{
"name": "Screencap_mss",
"displayName": "Screencap mss",
"category": "KJNodes/image",
"description": "\nCaptures an area specified by screen coordinates. \nCan be used for realtime diffusion with autoqueue.\n"
},
{
"name": "SoundReactive",
"displayName": "Sound Reactive",
"category": "KJNodes/audio",
"description": "\nReacts to the sound level of the input. \nUses your browsers sound input options and requires. \nMeant to be used with realtime diffusion with autoqueue.\n"
},
{
"name": "StringConstant",
"displayName": "String Constant",
"category": "KJNodes/constants"
},
{
"name": "StringConstantMultiline",
"displayName": "String Constant Multiline",
"category": "KJNodes/constants"
},
{
"name": "StringToFloatList",
"displayName": "String to Float List",
"category": "KJNodes/misc"
},
{
"name": "Superprompt",
"displayName": "Superprompt",
"category": "KJNodes/text",
"description": "\n# SuperPrompt\nA T5 model fine-tuned on the SuperPrompt dataset for \nupsampling text prompts to more detailed descriptions. \nMeant to be used as a pre-generation step for text-to-image \nmodels that benefit from more detailed prompts. \nhttps://huggingface.co/roborovski/superprompt-v1\n"
},
{
"name": "VAEDecodeLoopKJ",
"displayName": "VAE Decode Loop KJ",
"category": "KJNodes/vae",
"description": "Video latent VAE decoding to fix artifacts on loop seams."
},
{
"name": "Wan21BlockLoraSelect",
"displayName": "Wan21 Block Lora Select",
"category": "KJNodes/wan",
"description": "Select individual block alpha values, value of 0 removes the block altogether"
},
{
"name": "WeightScheduleConvert",
"displayName": "Weight Schedule Convert",
"category": "KJNodes/weights",
"description": "\nConverts different value lists/series to another type. \n"
},
{
"name": "WeightScheduleExtend",
"displayName": "Weight Schedule Extend",
"category": "KJNodes/weights",
"description": "\nExtends, and converts if needed, different value lists/series \n"
}
]
},
{
"id": "ComfyUI-KwaiKolorsWrapper",
"displayName": "KwaiKolorsWrapper",
"nodes": [
{
"name": "DownloadAndLoadChatGLM3",
"displayName": "(Down)load ChatGLM3 Model",
"category": "KwaiKolorsWrapper"
}
]
},
{
"id": "ComfyUI-LivePortraitKJ",
"displayName": "LivePortraitKJ",
"nodes": [
{
"name": "KeypointsToImage",
"displayName": "LivePortrait KeypointsToImage",
"category": "LivePortrait"
},
{
"name": "LivePortraitLoadFaceAlignmentCropper",
"displayName": "LivePortrait Load FaceAlignmentCropper",
"category": "LivePortrait"
},
{
"name": "LivePortraitLoadCropper",
"displayName": "LivePortrait Load InsightFaceCropper",
"category": "LivePortrait"
},
{
"name": "LivePortraitLoadMediaPipeCropper",
"displayName": "LivePortrait Load MediaPipeCropper",
"category": "LivePortrait"
},
{
"name": "LivePortraitRetargeting",
"displayName": "LivePortrait Retargeting",
"category": "LivePortrait"
}
]
},
{
"id": "comfyui-logic",
"registryId": "comfyui-logic",
"displayName": "ComfyUI-Logic",
"description": "An extension to ComfyUI that introduces logic nodes and conditional rendering capabilities.",
"repoUrl": "https://github.com/theUpsider/ComfyUI-Logic",
"publisher": {
"id": "theupsider",
"name": "theupsider"
},
"downloads": 277708,
"githubStars": 227,
"latestVersion": "1.0.0",
"license": "MIT",
"lastUpdated": "2024-07-01T09:22:45.758509Z",
"nodes": [
{
"name": "Bool",
"displayName": "Bool",
"category": "Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Compare",
"displayName": "Compare",
"category": "Logic",
"deprecated": false,
"experimental": false
},
{
"name": "DebugPrint",
"displayName": "DebugPrint",
"category": "Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Float",
"displayName": "Float",
"category": "Logic",
"deprecated": false,
"experimental": false
},
{
"name": "If ANY execute A else B",
"displayName": "If ANY execute A else B",
"category": "Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Int",
"displayName": "Int",
"category": "Logic",
"deprecated": false,
"experimental": false
},
{
"name": "String",
"displayName": "String",
"category": "Logic",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "ComfyUI-Lotus",
"displayName": "Lotus",
"nodes": [
{
"name": "LoadLotusModel",
"displayName": "Load Lotus Model",
"category": "ComfyUI-Lotus"
}
]
},
{
"id": "ComfyUI-LTXVideo",
"displayName": "LTXVideo",
"nodes": [
{
"name": "LTXAttentionBank",
"displayName": "LTX Attention Bank",
"category": "ltxtricks"
},
{
"name": "LTXAttnOverride",
"displayName": "LTX Attention Override",
"category": "ltxtricks/attn"
},
{
"name": "LTXAttentioOverride",
"displayName": "LTX Attn Block Override",
"category": "ltxtricks"
},
{
"name": "LTXFloatToInt",
"displayName": "🅛🅣🅧 Float To Int",
"category": "math/conversion"
},
{
"name": "LTXFlowEditSampler",
"displayName": "LTX Flow Edit Sampler",
"category": "ltxtricks"
},
{
"name": "LTXVGemmaCLIPModelLoader",
"displayName": "🅛🅣🅧 Gemma 3 Model Loader",
"category": "lightricks/LTXV"
},
{
"name": "GuiderParameters",
"displayName": "🅛🅣🅧 Guider Parameters",
"category": "lightricks/LTXV"
},
{
"name": "LowVRAMAudioVAELoader",
"displayName": "🅛🅣🅧 Low VRAM Audio VAE Loader",
"category": "LTXV/loaders",
"description": "Loads an LTXV Audio VAE checkpoint with dependency support. Connect 'dependencies' to a previous loader's output to ensure sequential loading and reduce peak VRAM usage."
},
{
"name": "LowVRAMCheckpointLoader",
"displayName": "🅛🅣🅧 Low VRAM Checkpoint Loader",
"category": "LTXV/loaders",
"description": "Loads a diffusion model checkpoint with dependency support. Connect 'dependencies' to a previous loader's output to ensure sequential loading and reduce peak VRAM usage."
},
{
"name": "LTXVApplySTG",
"displayName": "🅛🅣🅧 LTXV Apply STG",
"category": "lightricks/LTXV",
"description": "Defines the blocks to apply the STG to."
},
{
"name": "LTXVBaseSampler",
"displayName": "🅛🅣🅧 LTXV Base Sampler",
"category": "sampling"
},
{
"name": "LTXVInContextSampler",
"displayName": "🅛🅣🅧 LTXV In Context Sampler",
"category": "sampling"
},
{
"name": "LTXVLoopingSampler",
"displayName": "🅛🅣🅧 LTXV Looping Sampler",
"category": "sampling"
},
{
"name": "LTXVMultiPromptProvider",
"displayName": "🅛🅣🅧 LTXV Multi Prompt Provider",
"category": "prompt"
},
{
"name": "LTXVSpatioTemporalTiledVAEDecode",
"displayName": "🅛🅣🅧 LTXV Spatio Temporal Tiled VAE Decode",
"category": "latent"
},
{
"name": "MultiPromptProvider",
"displayName": "🅛🅣🅧 Multi Prompt Provider",
"category": "prompt"
},
{
"name": "STGAdvancedPresets",
"displayName": "🅛🅣🅧 STG Advanced Presets",
"category": "lightricks/LTXV"
}
]
},
{
"id": "ComfyUI-MelBandRoFormer",
"registryId": "ComfyUI-MelBandRoFormer",
"displayName": "ComfyUI-MelBandRoFormer",
"description": "ComfyUI wrapper nodes for WanVideo",
"repoUrl": "https://github.com/kijai/ComfyUI-MelBandRoFormer",
"publisher": {
"id": "kijai",
"name": "Kijai"
},
"downloads": 311019,
"githubStars": 202,
"latestVersion": "1.0.2",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2026-01-30T22:11:43.194459Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "MelBandRoFormerModelLoader",
"displayName": "MelBandRoFormerModelLoader",
"category": "Mel-Band RoFormer",
"deprecated": false,
"experimental": false
},
{
"name": "MelBandRoFormerSampler",
"displayName": "MelBandRoFormerSampler",
"category": "Mel-Band RoFormer",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "comfyui-PlyPreview",
"displayName": "comfyui-PlyPreview",
"nodes": [
{
"name": "PlyPreviewPreviewGaussianEnhance",
"displayName": "Preview Gaussian Enhance",
"category": "PlyPreview/visualization"
},
{
"name": "PlyPreviewProcessGaussianPLYEnhance",
"displayName": "Process Gaussian PLY Enhance",
"category": "PlyPreview"
}
]
},
{
"id": "ComfyUI-Prompt-Combinator",
"displayName": "Prompt-Combinator",
"nodes": [
{
"name": "PromptCombinator",
"displayName": "🔢 Prompt Combinator",
"category": "prompt_combinator"
}
]
},
{
"id": "ComfyUI-Qwen-TTS",
"registryId": "ComfyUI-Qwen-TTS",
"displayName": "ComfyUI-Qwen-TTS",
"description": "Qwen-TTS nodes for ComfyUI",
"repoUrl": "https://github.com/mailzwj/ComfyUI-Qwen-TTS.git",
"publisher": {
"id": "meet-ai",
"name": "遇见AI"
},
"downloads": 4115,
"githubStars": 6,
"latestVersion": "1.0.4",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2025-09-23T03:12:33.89286Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "AudioInfo",
"displayName": "AudioInfo",
"category": "Qwen",
"deprecated": false,
"experimental": false
},
{
"name": "Qwen3TTS",
"displayName": "Qwen3TTS",
"category": "Qwen",
"deprecated": false,
"experimental": false
},
{
"name": "QwenTTS",
"displayName": "QwenTTS",
"category": "Qwen",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "ComfyUI-QwenVL",
"registryId": "ComfyUI-QwenVL",
"displayName": "ComfyUI-QwenVL",
"description": "ComfyUI-QwenVL custom node: Integrates the Qwen-VL series, including Qwen2.5-VL and the latest Qwen3-VL, with GGUF support for advanced multimodal AI in text generation, image understanding, and video analysis.",
"repoUrl": "https://github.com/1038lab/ComfyUI-QwenVL",
"publisher": {
"id": "ailab",
"name": "AILab"
},
"downloads": 296800,
"githubStars": 767,
"latestVersion": "2.1.1",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2026-02-08T22:53:46.099968Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "AILab_QwenVL",
"displayName": "AILab_QwenVL",
"category": "🧪AILab/QwenVL",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_QwenVL_Advanced",
"displayName": "AILab_QwenVL_Advanced",
"category": "🧪AILab/QwenVL",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_QwenVL_GGUF",
"displayName": "AILab_QwenVL_GGUF",
"category": "🧪AILab/QwenVL",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_QwenVL_GGUF_Advanced",
"displayName": "AILab_QwenVL_GGUF_Advanced",
"category": "🧪AILab/QwenVL",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_QwenVL_PromptEnhancer",
"displayName": "AILab_QwenVL_PromptEnhancer",
"category": "🧪AILab/QwenVL",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "comfyui-rmbg",
"registryId": "comfyui-rmbg",
"displayName": "ComfyUI-RMBG",
"description": "A sophisticated ComfyUI custom node engineered for advanced image background removal and precise segmentation of objects, faces, clothing, and fashion elements. This tool leverages a diverse array of models, including RMBG-2.0, INSPYRENET, BEN, BEN2, BiRefNet, SDMatte models, SAM, SAM2, SAM3 and GroundingDINO, while also incorporating a new feature for real-time background replacement and enhanced edge detection for improved accuracy.",
"repoUrl": "https://github.com/1038lab/ComfyUI-RMBG",
"publisher": {
"id": "ailab",
"name": "AILab"
},
"downloads": 690554,
"githubStars": 1953,
"latestVersion": "3.0.0",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2026-01-18T05:51:20.708617Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "AILab_ColorInput",
"displayName": "AILab_ColorInput",
"category": "🧪AILab/🛠UTIL/🔄IO",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_ColorToMask",
"displayName": "AILab_ColorToMask",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_CropObject",
"displayName": "AILab_CropObject",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_Florence2",
"displayName": "AILab_Florence2",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_Florence2ToCoordinates",
"displayName": "AILab_Florence2ToCoordinates",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_ICLoRAConcat",
"displayName": "AILab_ICLoRAConcat",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_ImageCombiner",
"displayName": "AILab_ImageCombiner",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_ImageCompare",
"displayName": "AILab_ImageCompare",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_ImageCrop",
"displayName": "AILab_ImageCrop",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_ImageMaskConvert",
"displayName": "AILab_ImageMaskConvert",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_ImageMaskToList",
"displayName": "AILab_ImageMaskToList",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_ImagePreview",
"displayName": "AILab_ImagePreview",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_ImageResize",
"displayName": "AILab_ImageResize",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_ImageStitch",
"displayName": "AILab_ImageStitch",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_ImageToList",
"displayName": "AILab_ImageToList",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_LamaRemover",
"displayName": "AILab_LamaRemover",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_LoadImage",
"displayName": "AILab_LoadImage",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_LoadImageAdvanced",
"displayName": "AILab_LoadImageAdvanced",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_LoadImageBatch",
"displayName": "AILab_LoadImageBatch",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_LoadImageSimple",
"displayName": "AILab_LoadImageSimple",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_MaskCombiner",
"displayName": "AILab_MaskCombiner",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_MaskEnhancer",
"displayName": "AILab_MaskEnhancer",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_MaskExtractor",
"displayName": "AILab_MaskExtractor",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_MaskOverlay",
"displayName": "AILab_MaskOverlay",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_MaskPreview",
"displayName": "AILab_MaskPreview",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_MaskToList",
"displayName": "AILab_MaskToList",
"category": "🧪AILab/🦠MASK",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_Preview",
"displayName": "AILab_Preview",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_ReferenceLatentMask",
"displayName": "AILab_ReferenceLatentMask",
"category": "🧪AILab/🎭Inpaint",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_SDMatte",
"displayName": "AILab_SDMatte",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_UnbatchImages",
"displayName": "AILab_UnbatchImages",
"category": "🧪AILab/🖼IMAGE",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_YoloV8",
"displayName": "AILab_YoloV8",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
},
{
"name": "AILab_YoloV8Adv",
"displayName": "AILab_YoloV8Adv",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
},
{
"name": "BiRefNetRMBG",
"displayName": "BiRefNetRMBG",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
},
{
"name": "BodySegment",
"displayName": "BodySegment",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
},
{
"name": "ClothesSegment",
"displayName": "ClothesSegment",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
},
{
"name": "FaceSegment",
"displayName": "FaceSegment",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
},
{
"name": "FashionSegmentAccessories",
"displayName": "FashionSegmentAccessories",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
},
{
"name": "FashionSegmentClothing",
"displayName": "FashionSegmentClothing",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
},
{
"name": "RMBG",
"displayName": "RMBG",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
},
{
"name": "SAM2Segment",
"displayName": "SAM2Segment",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
},
{
"name": "Segment",
"displayName": "Segment",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
},
{
"name": "SegmentV2",
"displayName": "SegmentV2",
"category": "🧪AILab/🧽RMBG",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "comfyui-sam3",
"displayName": "comfyui-sam3",
"nodes": [
{
"name": "LoadSAM3Model",
"displayName": "(down)Load SAM3 Model",
"category": "SAM3"
},
{
"name": "SAM3BBoxCollector",
"displayName": "SAM3 BBox Collector 📦",
"category": "SAM3"
},
{
"name": "SAM3CombineBoxes",
"displayName": "SAM3 Combine Boxes",
"category": "SAM3/prompts"
},
{
"name": "SAM3CombinePoints",
"displayName": "SAM3 Combine Points",
"category": "SAM3/prompts"
},
{
"name": "SAM3CreateBox",
"displayName": "SAM3 Create Box",
"category": "SAM3/prompts"
},
{
"name": "SAM3CreatePoint",
"displayName": "SAM3 Create Point",
"category": "SAM3/prompts"
},
{
"name": "SAM3MultiRegionCollector",
"displayName": "SAM3 Multi-Region Collector 🎯",
"category": "SAM3"
},
{
"name": "SAM3MultipromptSegmentation",
"displayName": "SAM3 Multiprompt Segmentation",
"category": "SAM3"
},
{
"name": "SAM3PointCollector",
"displayName": "SAM3 Point Collector",
"category": "SAM3"
},
{
"name": "SAM3Segmentation",
"displayName": "SAM3 Point Segmentation",
"category": "SAM3"
},
{
"name": "SAM3Propagate",
"displayName": "SAM3 Propagate",
"category": "SAM3/video"
},
{
"name": "SAM3Grounding",
"displayName": "SAM3 Text Segmentation",
"category": "SAM3/Grounding"
},
{
"name": "SAM3VideoOutput",
"displayName": "SAM3 Video Output",
"category": "SAM3/video"
},
{
"name": "SAM3VideoSegmentation",
"displayName": "SAM3 Video Segmentation",
"category": "SAM3/video"
}
]
},
{
"id": "ComfyUI-SCAIL-Pose",
"registryId": "ComfyUI-SCAIL-Pose",
"displayName": "ComfyUI-SCAIL-Pose",
"description": "ComfyUI nodes for SCAIL pose input processing",
"repoUrl": "https://github.com/kijai/ComfyUI-SCAIL-Pose",
"publisher": {
"id": "kijai",
"name": "Kijai"
},
"downloads": 58733,
"githubStars": 311,
"latestVersion": "1.0.2",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2025-12-23T16:03:45.889071Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "ConvertOpenPoseKeypointsToDWPose",
"displayName": "ConvertOpenPoseKeypointsToDWPose",
"category": "WanAnimatePreprocess",
"description": "Convert OpenPose format keypoints to DWPose format.",
"deprecated": false,
"experimental": false
},
{
"name": "PoseDetectionVitPoseToDWPose",
"displayName": "PoseDetectionVitPoseToDWPose",
"category": "WanAnimatePreprocess",
"description": "ViTPose to DWPose format pose detection node.",
"deprecated": false,
"experimental": false
},
{
"name": "RenderNLFPoses",
"displayName": "RenderNLFPoses",
"category": "WanVideoWrapper",
"deprecated": false,
"experimental": false
},
{
"name": "SaveNLFPosesAs3D",
"displayName": "SaveNLFPosesAs3D",
"category": "WanVideoWrapper",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "Comfyui-SecNodes",
"displayName": "Comfyui-SecNodes",
"nodes": [
{
"name": "CoordinatePlotter",
"displayName": "Coordinate Plotter",
"category": "SeC",
"description": "Visualize coordinate points on an image or blank canvas. Useful for previewing point selections."
},
{
"name": "SeCModelLoader",
"displayName": "SeC Model Loader",
"category": "SeC"
},
{
"name": "SeCVideoSegmentation",
"displayName": "SeC Video Segmentation",
"category": "SeC",
"description": "Concept-driven video object segmentation using Large Vision-Language Models for visual concept extraction. Provide visual prompts (points/bbox/mask) and SeC automatically understands the object concept for robust tracking."
}
]
},
{
"id": "comfyui-sharp",
"displayName": "comfyui-sharp",
"nodes": [
{
"name": "LoadImageWithExif",
"displayName": "Load Image with EXIF (Focal Length)",
"category": "SHARP",
"description": "Load an image and extract focal length from EXIF metadata (35mm equivalent)."
},
{
"name": "LoadSharpModel",
"displayName": "Load SHARP Model",
"category": "SHARP",
"description": "Load the SHARP model for monocular 3D Gaussian Splatting prediction."
}
]
},
{
"id": "comfyui-string-converter",
"displayName": "comfyui-string-converter",
"nodes": [
{
"name": "StringToFloat",
"displayName": "Convert String To Float",
"category": "utils"
},
{
"name": "StringToInt",
"displayName": "Convert String To Int",
"category": "utils"
}
]
},
{
"id": "comfyui-systms-facecomposite",
"registryId": "comfyui-systms-facecomposite",
"displayName": "Systms Face Composite",
"description": "Composites refined face images back onto original video frames using bounding box coordinates with support for replace, alpha blend, and feather blending modes.",
"repoUrl": "https://github.com/systms-ai/Nodes-",
"publisher": {
"id": "systms-ai",
"name": "systms"
},
"downloads": 499,
"githubStars": 0,
"latestVersion": "1.0.0",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2026-03-12T14:58:30.935146Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "FaceComposite",
"displayName": "FaceComposite",
"category": "WanAnimatePreprocess",
"description": "Composites refined face images back onto original video using bounding box coordinates. Handles frames without faces (bbox at 0,0 with original size) by passing through unchanged.",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "ComfyUI-UltraShape1",
"displayName": "UltraShape1",
"nodes": [
{
"name": "UltraShapeLoadModel",
"displayName": "UltraShape Load Model",
"category": "UltraShape/Loaders"
}
]
},
{
"id": "ComfyUI-Upscaler-Tensorrt",
"displayName": "Upscaler-Tensorrt",
"nodes": [
{
"name": "LoadUpscalerTensorrtModel",
"displayName": "Load Upscale Tensorrt Model",
"category": "tensorrt",
"description": "Load tensorrt models, they will be built automatically if not found."
},
{
"name": "UpscalerTensorrt",
"displayName": "Upscaler Tensorrt ⚡",
"category": "tensorrt",
"description": "Upscale images with tensorrt"
}
]
},
{
"id": "comfyui-various",
"displayName": "comfyui-various",
"nodes": [
{
"name": "JWDatetimeString",
"displayName": "Datetime String",
"category": "jamesWalker55"
},
{
"name": "JWFloat",
"displayName": "Float",
"category": "jamesWalker55"
},
{
"name": "JWFloatAbsolute",
"displayName": "Float Absolute Value",
"category": "jamesWalker55"
},
{
"name": "JWFloatAdd",
"displayName": "Float Add",
"category": "jamesWalker55"
},
{
"name": "JWFloatDiv",
"displayName": "Float Divide",
"category": "jamesWalker55"
},
{
"name": "JWFloatMax",
"displayName": "Float Maximum",
"category": "jamesWalker55"
},
{
"name": "JWFloatMin",
"displayName": "Float Minimum",
"category": "jamesWalker55"
},
{
"name": "JWFloatMul",
"displayName": "Float Multiply",
"category": "jamesWalker55"
},
{
"name": "JWFloatSub",
"displayName": "Float Subtract",
"category": "jamesWalker55"
},
{
"name": "JWFloatToString",
"displayName": "Float to String",
"category": "jamesWalker55"
},
{
"name": "JWInteger",
"displayName": "Integer",
"category": "jamesWalker55"
},
{
"name": "JWIntegerAbsolute",
"displayName": "Integer Absolute Value",
"category": "jamesWalker55"
},
{
"name": "JWIntegerAdd",
"displayName": "Integer Add",
"category": "jamesWalker55"
},
{
"name": "JWIntegerDiv",
"displayName": "Integer Divide",
"category": "jamesWalker55"
},
{
"name": "JWIntegerMax",
"displayName": "Integer Maximum",
"category": "jamesWalker55"
},
{
"name": "JWIntegerMin",
"displayName": "Integer Minimum",
"category": "jamesWalker55"
},
{
"name": "JWIntegerMul",
"displayName": "Integer Multiply",
"category": "jamesWalker55"
},
{
"name": "JWIntegerSub",
"displayName": "Integer Subtract",
"category": "jamesWalker55"
},
{
"name": "JWIntegerToFloat",
"displayName": "Integer to Float",
"category": "jamesWalker55"
},
{
"name": "JWIntegerToString",
"displayName": "Integer to String",
"category": "jamesWalker55"
},
{
"name": "JWString",
"displayName": "String",
"category": "jamesWalker55"
},
{
"name": "JWStringMultiline",
"displayName": "String (Multiline)",
"category": "jamesWalker55"
},
{
"name": "JWStringConcat",
"displayName": "String Concatenate",
"category": "jamesWalker55"
},
{
"name": "JWStringGetLine",
"displayName": "String Get Line",
"category": "jamesWalker55"
},
{
"name": "JWStringReplace",
"displayName": "String Replace",
"category": "jamesWalker55"
},
{
"name": "JWStringToFloat",
"displayName": "String to Float",
"category": "jamesWalker55"
},
{
"name": "JWStringToInteger",
"displayName": "String to Integer",
"category": "jamesWalker55"
},
{
"name": "JWStringUnescape",
"displayName": "String Unescape",
"category": "jamesWalker55"
}
]
},
{
"id": "comfyui-videohelpersuite",
"registryId": "comfyui-videohelpersuite",
"displayName": "ComfyUI-VideoHelperSuite",
"description": "Nodes related to video workflows",
"repoUrl": "https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite",
"publisher": {
"id": "kosinkadink",
"name": "Kosinkadink"
},
"downloads": 2788011,
"githubStars": 1626,
"latestVersion": "1.7.9",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2025-12-17T22:23:57.624918Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "VHS_AudioToVHSAudio",
"displayName": "VHS_AudioToVHSAudio",
"category": "Video Helper Suite 🎥🅥🅗🅢/audio",
"description": "Audio to legacy VHS_AUDIO 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>utility function for compatibility with external nodes</div></div><div style=\"font-size: 0.8em\">VHS used to use an internal VHS_AUDIO format for routing audio between inputs and outputs. This format was intended to only be used internally and was designed with a focus on performance over ease of use. Since ComfyUI now has an internal AUDIO format, VHS now uses this format. However, some custom node packs were made that are external to both ComfyUI and VHS that use VHS_AUDIO. This node was added so that those external nodes can still function</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: An input in the standardized AUDIO format</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"vhs_audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vhs_audio: An output in the legacy VHS_AUDIO format for use with external nodes</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_BatchManager",
"displayName": "VHS_BatchManager",
"category": "Video Helper Suite 🎥🅥🅗🅢",
"description": "Meta Batch Manager 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Split the processing of a very long video into sets of smaller Meta Batches</div></div><div style=\"font-size: 0.8em\">The Meta Batch Manager allows for extremely long input videos to be processed when all other methods for fitting the content in RAM fail. It does not effect VRAM usage.</div><div style=\"font-size: 0.8em\">It must be connected to at least one Input (a Load Video or Load Images) AND at least one Video Combine</div><div style=\"font-size: 0.8em\"><img src=https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/assets/4284322/7cb3fb7e-59d8-4cb2-a09f-9c6698de8b1f loading=lazy style=\"width: 0px; min-width: 100%\"></div><div style=\"font-size: 0.8em\">It functions by holding both the inputs and ouputs open between executions, and automatically requeue's the workflow until one of the inputs is unable to provide additional images.</div><div style=\"font-size: 0.8em\">Because each sub execution only contains a subset of the total frames, each sub execution creates a hard window which temporal smoothing can not be applied across. This results in jumps in the output.</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"meta_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">meta_batch: Add all connected nodes to this Meta Batch</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"frames_per_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frames_per_batch: How many frames to process for each sub execution. If loading as image, each frame will use about 50MB of RAM (not VRAM), and this can safely be set in the 100-1000 range, depending on available memory. When loading and combining from latent space (no blue image noodles exist), this value can be much higher, around the 2,000 to 20,000 range</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_DuplicateImages",
"displayName": "VHS_DuplicateImages",
"category": "Video Helper Suite 🎥🅥🅗🅢/image",
"description": "Repeat Images 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Append copies of a image to itself so it repeats</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"IMAGES\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGES: The image to be repeated</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The image with repeats</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of image in the output. Equal to the length of the input image * multiply_by</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"multiply_by\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">multiply_by: Controls the number of times the mask should repeat. 1, the default, means no change.</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_DuplicateLatents",
"displayName": "VHS_DuplicateLatents",
"category": "Video Helper Suite 🎥🅥🅗🅢/latent",
"description": "Repeat Latents 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Append copies of a latent to itself so it repeats</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"latents\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">latents: The latents to be repeated</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The latent with repeats</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of latents in the output. Equal to the length of the input latent * multiply_by</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"multiply_by\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">multiply_by: Controls the number of times the latent should repeat. 1, the default, means no change.</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_DuplicateMasks",
"displayName": "VHS_DuplicateMasks",
"category": "Video Helper Suite 🎥🅥🅗🅢/mask",
"description": "Repeat Masks 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Append copies of a mask to itself so it repeats</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"masks\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">masks: The masks to be repeated</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The mask with repeats</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of mask in the output. Equal to the length of the input mask * multiply_by</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"multiply_by\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">multiply_by: Controls the number of times the mask should repeat. 1, the default, means no change.</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_GetImageCount",
"displayName": "VHS_GetImageCount",
"category": "Video Helper Suite 🎥🅥🅗🅢/image",
"description": "Get Image Count 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Return the number of images in an input as an INT</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"images\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">images: The input image</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of images in the input</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_GetLatentCount",
"displayName": "VHS_GetLatentCount",
"category": "Video Helper Suite 🎥🅥🅗🅢/latent",
"description": "Get Latent Count 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Return the number of latents in an input as an INT</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"latents\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">latents: The input latent</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of latents in the input</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_GetMaskCount",
"displayName": "VHS_GetMaskCount",
"category": "Video Helper Suite 🎥🅥🅗🅢/mask",
"description": "Get Mask Count 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Return the number of masks in an input as an INT</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"masks\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">masks: The input mask</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of masks in the input</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_LoadAudio",
"displayName": "VHS_LoadAudio",
"category": "Video Helper Suite 🎥🅥🅗🅢/audio",
"description": "Load Audio (Path) 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Loads an audio file from an arbitrary path</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: The loaded audio</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"audio_file\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio_file: The audio file to be loaded.<div style=\"font-size: 1em\">This is a VHS_PATH input. When edited, it provides a list of possible valid files or directories</div><div style=\"font-size: 1em\"><video preload=\"none\" src=https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/assets/4284322/729b7185-1fca-41d8-bc8d-a770bb2a5ce6 muted loop controls controlslist=\"nodownload noremoteplayback noplaybackrate\" style=\"width: 0px; min-width: 100%\" class=\"VHS_loopedvideo\"></div><div style=\"font-size: 1em\">The current top-most completion may be selected with Tab</div><div style=\"font-size: 1em\">You can navigate up a directory by pressing Ctrl+B (or Ctrl+W if supported by browser)</div><div style=\"font-size: 1em\">The filter on suggested file types can be disabled by pressing Ctrl+G.</div><div style=\"font-size: 1em\">If converted to an input, this functions as a string</div></div></div><div vhs_title=\"seek_seconds\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">seek_seconds: An offset from the start of the sound file that the audio should start from</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_LoadAudioUpload",
"displayName": "VHS_LoadAudioUpload",
"category": "Video Helper Suite 🎥🅥🅗🅢/audio",
"description": "Load Audio (Upload) 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Loads an audio file from the input directory</div></div><div style=\"font-size: 0.8em\">Very similar in functionality to the built-in LoadAudio. It was originally added before VHS swapped to use Comfy's internal AUDIO format, but provides the additional options for start time and duration</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: The loaded audio</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: The audio file to be loaded.</div></div><div vhs_title=\"start_time\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">start_time: An offset from the start of the sound file that the audio should start from</div></div><div vhs_title=\"duration\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">duration: A maximum limit for the audio. Disabled if 0</div></div><div vhs_title=\"choose audio to upload\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">choose audio to upload: An upload button is provided to upload an audio file to the input folder</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_LoadImagePath",
"displayName": "VHS_LoadImagePath",
"category": "Video Helper Suite 🎥🅥🅗🅢",
"description": "Load Image (Path) 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Load a single image from a given path</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"vae\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vae: (optional) If provided the node will output latents instead of images.</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The loaded images</div></div><div vhs_title=\"MASK\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">MASK: The alpha channel of the loaded images.</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"image\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">image: The image file to be loaded.<div style=\"font-size: 1em\">This is a VHS_PATH input. When edited, it provides a list of possible valid files or directories</div><div style=\"font-size: 1em\"><video preload=\"none\" src=https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/assets/4284322/729b7185-1fca-41d8-bc8d-a770bb2a5ce6 muted loop controls controlslist=\"nodownload noremoteplayback noplaybackrate\" style=\"width: 0px; min-width: 100%\" class=\"VHS_loopedvideo\"></div><div style=\"font-size: 1em\">The current top-most completion may be selected with Tab</div><div style=\"font-size: 1em\">You can navigate up a directory by pressing Ctrl+B (or Ctrl+W if supported by browser)</div><div style=\"font-size: 1em\">The filter on suggested file types can be disabled by pressing Ctrl+G.</div><div style=\"font-size: 1em\">If converted to an input, this functions as a string</div></div></div><div vhs_title=\"force_size\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_size: Allows for conveniently scaling the input without requiring an additional node. Provides options to maintain aspect ratio or conveniently target common training formats for Animate Diff<div style=\"font-size: 1em\"><div vhs_title=\"custom_width\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_width: Allows for an arbitrary width to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"custom_height\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_height: Allows for an arbitrary height to be entered, cropping to maintain aspect ratio if both are set</div></div></div></div></div><div vhs_title=\"videopreview\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">videopreview: Displays a preview for the selected video input. Will only be shown if Advanced Previews is enabled. This preview will reflect the image_load_cap, skip_first_images, and select_every_nth values chosen. Additional preview options can be accessed with right click.</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_LoadImages",
"displayName": "VHS_LoadImages",
"category": "Video Helper Suite 🎥🅥🅗🅢",
"description": "Load Images 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Loads a sequence of images from a subdirectory of the input folder</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"meta_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">meta_batch: (optional) Connect to a Meta Batch manager to divide extremely long sequences into sub batches. See the documentation for Meta Batch Manager</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The loaded images</div></div><div vhs_title=\"MASK\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">MASK: The alpha channel of the loaded images.</div></div><div vhs_title=\"frame_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_count: The length of images just returned</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"directory\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">directory: The directory images will be loaded from. Filtered to process jpg, png, ppm, bmp, tif, and webp files</div></div><div vhs_title=\"image_load_cap\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">image_load_cap: The maximum number of images to load. If 0, all images are loaded.</div></div><div vhs_title=\"start_time\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">start_time: A timestamp, in seconds from the start of the video, to start loading frames from. </div></div><div vhs_title=\"choose folder to upload\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">choose folder to upload: An upload button is provided to upload a local folder containing images to the input folder</div></div><div vhs_title=\"videopreview\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">videopreview: Displays a preview for the selected video input. Will only be shown if Advanced Previews is enabled. This preview will reflect the image_load_cap, skip_first_images, and select_every_nth values chosen. Additional preview options can be accessed with right click.</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_LoadImagesPath",
"displayName": "VHS_LoadImagesPath",
"category": "Video Helper Suite 🎥🅥🅗🅢",
"description": "Load Images (Path) 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Loads a sequence of images from an arbitrary path</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"meta_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">meta_batch: (optional) Connect to a Meta Batch manager to divide extremely long sequences into sub batches. See the documentation for Meta Batch Manager</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The loaded images</div></div><div vhs_title=\"MASK\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">MASK: The alpha channel of the loaded images.</div></div><div vhs_title=\"frame_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_count: The length of images just returned</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"directory\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">directory: The directory images will be loaded from. Filtered to process jpg, png, ppm, bmp, tif, and webp files<div style=\"font-size: 1em\">This is a VHS_PATH input. When edited, it provides a list of possible valid files or directories</div><div style=\"font-size: 1em\"><video preload=\"none\" src=https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/assets/4284322/729b7185-1fca-41d8-bc8d-a770bb2a5ce6 muted loop controls controlslist=\"nodownload noremoteplayback noplaybackrate\" style=\"width: 0px; min-width: 100%\" class=\"VHS_loopedvideo\"></div><div style=\"font-size: 1em\">The current top-most completion may be selected with Tab</div><div style=\"font-size: 1em\">You can navigate up a directory by pressing Ctrl+B (or Ctrl+W if supported by browser)</div><div style=\"font-size: 1em\">The filter on suggested file types can be disabled by pressing Ctrl+G.</div><div style=\"font-size: 1em\">If converted to an input, this functions as a string</div></div></div><div vhs_title=\"image_load_cap\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">image_load_cap: The maximum number of images to load. If 0, all images are loaded.</div></div><div vhs_title=\"skip_first_images\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">skip_first_images: A number of images which are discarded before producing output.</div></div><div vhs_title=\"select_every_nth\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">select_every_nth: Keeps only the first of every n frames and discard the rest.</div></div><div vhs_title=\"videopreview\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">videopreview: Displays a preview for the selected video input. Will only be shown if Advanced Previews is enabled. This preview will reflect the image_load_cap, skip_first_images, and select_every_nth values chosen. Additional preview options can be accessed with right click.</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_LoadVideo",
"displayName": "VHS_LoadVideo",
"category": "Video Helper Suite 🎥🅥🅗🅢",
"description": "Load Video 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Loads a video from the input folder</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"meta_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">meta_batch: (optional) Connect to a Meta Batch manager to divide extremely long sequences into sub batches. See the documentation for Meta Batch Manager</div></div><div vhs_title=\"vae\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vae: (optional) If provided the node will output latents instead of images. This drastically reduces the required RAM (not VRAM) when working with long (100+ frames) sequences<div style=\"font-size: 1em\">Using this is strongly encouraged unless connecting to a node that requires a blue image connection such as Apply Controllnet</div></div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The loaded images</div></div><div vhs_title=\"frame_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_count: The length of images just returned</div></div><div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: The audio from the loaded video</div></div><div vhs_title=\"video_info\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video_info: Exposes additional info about the video such as the source frame rate, or the total length</div></div><div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The loaded images pre-converted to latents. Only available when a vae is connected</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"video\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video: The video file to be loaded. Lists all files with a video extension in the ComfyUI/Input folder</div></div><div vhs_title=\"force_rate\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_rate: Drops or duplicates frames so that the produced output has the target frame rate. Many motion models are trained on videos of a specific frame rate and will give better results if input matches that frame rate. If set to 0, all frames are returned. May give unusual results with inputs that have a variable frame rate like animated gifs. Reducing this value can also greatly reduce the execution time and memory requirements.</div></div><div vhs_title=\"force_size\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_size: Previously was used to provide suggested resolutions. Instead, custom_width and custom_height can be disabled by setting to 0.</div></div><div vhs_title=\"custom_width\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_width: Allows for an arbitrary width to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"custom_height\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_height: Allows for an arbitrary height to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"frame_load_cap\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_load_cap: The maximum number of frames to load. If 0, all frames are loaded.</div></div><div vhs_title=\"skip_first_frames\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">skip_first_frames: A number of frames which are discarded before producing output.</div></div><div vhs_title=\"select_every_nth\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">select_every_nth: Similar to frame rate. Keeps only the first of every n frames and discard the rest. Has better compatibility with variable frame rate inputs such as gifs. When combined with force_rate, select_every_nth_applies after force_rate so the resulting output has a frame rate equivalent to force_rate/select_every_nth. select_every_nth does not apply to skip_first_frames</div></div><div vhs_title=\"format\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">format: Updates other widgets so that only values supported by the given format can be entered and provides recommended defaults.</div></div><div vhs_title=\"choose video to upload\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">choose video to upload: An upload button is provided to upload local files to the input folder</div></div><div vhs_title=\"videopreview\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">videopreview: Displays a preview for the selected video input. If advanced previews is enabled, this preview will reflect the frame_load_cap, force_rate, skip_first_frames, and select_every_nth values chosen. If the video has audio, it will also be previewed when moused over. Additional preview options can be accessed with right click.</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_LoadVideoFFmpeg",
"displayName": "VHS_LoadVideoFFmpeg",
"category": "Video Helper Suite 🎥🅥🅗🅢",
"description": "Load Video FFmpeg 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Loads a video from the input folder using ffmpeg instead of opencv</div></div><div style=\"font-size: 0.8em\">Provides faster execution speed, transparency support, and allows specifying start time in seconds</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"meta_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">meta_batch: (optional) Connect to a Meta Batch manager to divide extremely long sequences into sub batches. See the documentation for Meta Batch Manager</div></div><div vhs_title=\"vae\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vae: (optional) If provided the node will output latents instead of images. This drastically reduces the required RAM (not VRAM) when working with long (100+ frames) sequences<div style=\"font-size: 1em\">Using this is strongly encouraged unless connecting to a node that requires a blue image connection such as Apply Controllnet</div></div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The loaded images</div></div><div vhs_title=\"mask\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">mask: Transparency data from the loaded video</div></div><div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: The audio from the loaded video</div></div><div vhs_title=\"video_info\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video_info: Exposes additional info about the video such as the source frame rate, or the total length</div></div><div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The loaded images pre-converted to latents. Only available when a vae is connected</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"video\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video: The video file to be loaded. Lists all files with a video extension in the ComfyUI/Input folder</div></div><div vhs_title=\"force_rate\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_rate: Drops or duplicates frames so that the produced output has the target frame rate. Many motion models are trained on videos of a specific frame rate and will give better results if input matches that frame rate. If set to 0, all frames are returned. May give unusual results with inputs that have a variable frame rate like animated gifs. Reducing this value can also greatly reduce the execution time and memory requirements.</div></div><div vhs_title=\"force_size\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_size: Previously was used to provide suggested resolutions. Instead, custom_width and custom_height can be disabled by setting to 0.</div></div><div vhs_title=\"custom_width\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_width: Allows for an arbitrary width to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"custom_height\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_height: Allows for an arbitrary height to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"frame_load_cap\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_load_cap: The maximum number of frames to load. If 0, all frames are loaded.</div></div><div vhs_title=\"start_time\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">start_time: A timestamp, in seconds from the start of the video, to start loading frames from. </div></div><div vhs_title=\"format\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">format: Updates other widgets so that only values supported by the given format can be entered and provides recommended defaults.</div></div><div vhs_title=\"choose video to upload\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">choose video to upload: An upload button is provided to upload local files to the input folder</div></div><div vhs_title=\"videopreview\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">videopreview: Displays a preview for the selected video input. If advanced previews is enabled, this preview will reflect the frame_load_cap, force_rate, skip_first_frames, and select_every_nth values chosen. If the video has audio, it will also be previewed when moused over. Additional preview options can be accessed with right click.</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_LoadVideoFFmpegPath",
"displayName": "VHS_LoadVideoFFmpegPath",
"category": "Video Helper Suite 🎥🅥🅗🅢",
"description": "Load Video FFmpeg (Path) 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Loads a video from an arbitrary path using ffmpeg instead of opencv</div></div><div style=\"font-size: 0.8em\">Provides faster execution speed, transparency support, and allows specifying start time in seconds</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"meta_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">meta_batch: (optional) Connect to a Meta Batch manager to divide extremely long sequences into sub batches. See the documentation for Meta Batch Manager</div></div><div vhs_title=\"vae\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vae: (optional) If provided the node will output latents instead of images. This drastically reduces the required RAM (not VRAM) when working with long (100+ frames) sequences<div style=\"font-size: 1em\">Using this is strongly encouraged unless connecting to a node that requires a blue image connection such as Apply Controllnet</div></div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The loaded images</div></div><div vhs_title=\"mask\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">mask: Transparency data from the loaded video</div></div><div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: The audio from the loaded video</div></div><div vhs_title=\"video_info\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video_info: Exposes additional info about the video such as the source frame rate, or the total length</div></div><div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The loaded images pre-converted to latents. Only available when a vae is connected</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"video\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video: The video file to be loaded.<div style=\"font-size: 1em\">You can also select an image to load it as a single frame</div><div style=\"font-size: 1em\">This is a VHS_PATH input. When edited, it provides a list of possible valid files or directories</div><div style=\"font-size: 1em\"><video preload=\"none\" src=https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/assets/4284322/729b7185-1fca-41d8-bc8d-a770bb2a5ce6 muted loop controls controlslist=\"nodownload noremoteplayback noplaybackrate\" style=\"width: 0px; min-width: 100%\" class=\"VHS_loopedvideo\"></div><div style=\"font-size: 1em\">The current top-most completion may be selected with Tab</div><div style=\"font-size: 1em\">You can navigate up a directory by pressing Ctrl+B (or Ctrl+W if supported by browser)</div><div style=\"font-size: 1em\">The filter on suggested file types can be disabled by pressing Ctrl+G.</div><div style=\"font-size: 1em\">If converted to an input, this functions as a string</div></div></div><div vhs_title=\"force_rate\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_rate: Drops or duplicates frames so that the produced output has the target frame rate. Many motion models are trained on videos of a specific frame rate and will give better results if input matches that frame rate. If set to 0, all frames are returned. May give unusual results with inputs that have a variable frame rate like animated gifs. Reducing this value can also greatly reduce the execution time and memory requirements.</div></div><div vhs_title=\"force_size\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_size: Previously was used to provide suggested resolutions. Instead, custom_width and custom_height can be disabled by setting to 0.</div></div><div vhs_title=\"custom_width\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_width: Allows for an arbitrary width to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"custom_height\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_height: Allows for an arbitrary height to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"frame_load_cap\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_load_cap: The maximum number of frames to load. If 0, all frames are loaded.</div></div><div vhs_title=\"skip_first_frames\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">skip_first_frames: A number of frames which are discarded before producing output.</div></div><div vhs_title=\"select_every_nth\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">select_every_nth: Similar to frame rate. Keeps only the first of every n frames and discard the rest. Has better compatibility with variable frame rate inputs such as gifs. When combined with force_rate, select_every_nth_applies after force_rate so the resulting output has a frame rate equivalent to force_rate/select_every_nth. select_every_nth does not apply to skip_first_frames</div></div><div vhs_title=\"format\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">format: Updates other widgets so that only values supported by the given format can be entered and provides recommended defaults.</div></div><div vhs_title=\"videopreview\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">videopreview: Displays a preview for the selected video input. Will only be shown if Advanced Previews is enabled. This preview will reflect the frame_load_cap, force_rate, skip_first_frames, and select_every_nth values chosen. If the video has audio, it will also be previewed when moused over. Additional preview options can be accessed with right click.</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_LoadVideoPath",
"displayName": "VHS_LoadVideoPath",
"category": "Video Helper Suite 🎥🅥🅗🅢",
"description": "Load Video (Path) 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Loads a video from an arbitrary path</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"meta_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">meta_batch: (optional) Connect to a Meta Batch manager to divide extremely long sequences into sub batches. See the documentation for Meta Batch Manager</div></div><div vhs_title=\"vae\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vae: (optional) If provided the node will output latents instead of images. This drastically reduces the required RAM (not VRAM) when working with long (100+ frames) sequences<div style=\"font-size: 1em\">Using this is strongly encouraged unless connecting to a node that requires a blue image connection such as Apply Controllnet</div></div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The loaded images</div></div><div vhs_title=\"frame_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_count: The length of images just returned</div></div><div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: The audio from the loaded video</div></div><div vhs_title=\"video_info\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video_info: Exposes additional info about the video such as the source frame rate, or the total length</div></div><div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The loaded images pre-converted to latents. Only available when a vae is connected</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"video\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video: The video file to be loaded.<div style=\"font-size: 1em\">You can also select an image to load it as a single frame</div><div style=\"font-size: 1em\">This is a VHS_PATH input. When edited, it provides a list of possible valid files or directories</div><div style=\"font-size: 1em\"><video preload=\"none\" src=https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/assets/4284322/729b7185-1fca-41d8-bc8d-a770bb2a5ce6 muted loop controls controlslist=\"nodownload noremoteplayback noplaybackrate\" style=\"width: 0px; min-width: 100%\" class=\"VHS_loopedvideo\"></div><div style=\"font-size: 1em\">The current top-most completion may be selected with Tab</div><div style=\"font-size: 1em\">You can navigate up a directory by pressing Ctrl+B (or Ctrl+W if supported by browser)</div><div style=\"font-size: 1em\">The filter on suggested file types can be disabled by pressing Ctrl+G.</div><div style=\"font-size: 1em\">If converted to an input, this functions as a string</div></div></div><div vhs_title=\"force_rate\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_rate: Drops or duplicates frames so that the produced output has the target frame rate. Many motion models are trained on videos of a specific frame rate and will give better results if input matches that frame rate. If set to 0, all frames are returned. May give unusual results with inputs that have a variable frame rate like animated gifs. Reducing this value can also greatly reduce the execution time and memory requirements.</div></div><div vhs_title=\"force_size\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">force_size: Previously was used to provide suggested resolutions. Instead, custom_width and custom_height can be disabled by setting to 0.</div></div><div vhs_title=\"custom_width\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_width: Allows for an arbitrary width to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"custom_height\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">custom_height: Allows for an arbitrary height to be entered, cropping to maintain aspect ratio if both are set</div></div><div vhs_title=\"frame_load_cap\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_load_cap: The maximum number of frames to load. If 0, all frames are loaded.</div></div><div vhs_title=\"skip_first_frames\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">skip_first_frames: A number of frames which are discarded before producing output.</div></div><div vhs_title=\"select_every_nth\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">select_every_nth: Similar to frame rate. Keeps only the first of every n frames and discard the rest. Has better compatibility with variable frame rate inputs such as gifs. When combined with force_rate, select_every_nth_applies after force_rate so the resulting output has a frame rate equivalent to force_rate/select_every_nth. select_every_nth does not apply to skip_first_frames</div></div><div vhs_title=\"format\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">format: Updates other widgets so that only values supported by the given format can be entered and provides recommended defaults.</div></div><div vhs_title=\"videopreview\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">videopreview: Displays a preview for the selected video input. Will only be shown if Advanced Previews is enabled. This preview will reflect the frame_load_cap, force_rate, skip_first_frames, and select_every_nth values chosen. If the video has audio, it will also be previewed when moused over. Additional preview options can be accessed with right click.</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_MergeImages",
"displayName": "VHS_MergeImages",
"category": "Video Helper Suite 🎥🅥🅗🅢/image",
"description": "Merge Images 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Combine two groups of images into a single group of images</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"images_A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">images_A: The first group of images</div></div><div vhs_title=\"images_B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">images_B: The first group of images</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The combined group of images</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The length of the combined group</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"merge_strategy\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">merge_strategy: Determines what the output resolution will be if input resolutions don't match<div style=\"font-size: 1em\"><div vhs_title=\"match A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match A: Always use the resolution for A</div></div><div vhs_title=\"match B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match B: Always use the resolution for B</div></div><div vhs_title=\"match smaller\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match smaller: Pick the smaller resolution by area</div></div><div vhs_title=\"match larger\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match larger: Pick the larger resolution by area</div></div></div></div></div><div vhs_title=\"scale_method\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">scale_method: Determines what method to use if scaling is required</div></div><div vhs_title=\"crop\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">crop: When sizes don't match, should the resized image have it's aspect ratio changed, or be cropped to maintain aspect ratio</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_MergeLatents",
"displayName": "VHS_MergeLatents",
"category": "Video Helper Suite 🎥🅥🅗🅢/latent",
"description": "Merge Latents 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Combine two groups of latents into a single group of latents</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"latents_A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">latents_A: The first group of latents</div></div><div vhs_title=\"latents_B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">latents_B: The first group of latents</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The combined group of latents</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The length of the combined group</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"merge_strategy\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">merge_strategy: Determines what the output resolution will be if input resolutions don't match<div style=\"font-size: 1em\"><div vhs_title=\"match A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match A: Always use the resolution for A</div></div><div vhs_title=\"match B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match B: Always use the resolution for B</div></div><div vhs_title=\"match smaller\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match smaller: Pick the smaller resolution by area</div></div><div vhs_title=\"match larger\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match larger: Pick the larger resolution by area</div></div></div></div></div><div vhs_title=\"scale_method\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">scale_method: Determines what method to use if scaling is required</div></div><div vhs_title=\"crop\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">crop: When sizes don't match, should the resized image have it's aspect ratio changed, or be cropped to maintain aspect ratio</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_MergeMasks",
"displayName": "VHS_MergeMasks",
"category": "Video Helper Suite 🎥🅥🅗🅢/mask",
"description": "Merge Masks 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Combine two groups of masks into a single group of masks</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"mask_A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">mask_A: The first group of masks</div></div><div vhs_title=\"mask_B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">mask_B: The first group of masks</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"MASK\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">MASK: The combined group of masks</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The length of the combined group</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"merge_strategy\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">merge_strategy: Determines what the output resolution will be if input resolutions don't match<div style=\"font-size: 1em\"><div vhs_title=\"match A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match A: Always use the resolution for A</div></div><div vhs_title=\"match B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match B: Always use the resolution for B</div></div><div vhs_title=\"match smaller\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match smaller: Pick the smaller resolution by area</div></div><div vhs_title=\"match larger\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">match larger: Pick the larger resolution by area</div></div></div></div></div><div vhs_title=\"scale_method\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">scale_method: Determines what method to use if scaling is required</div></div><div vhs_title=\"crop\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">crop: When sizes don't match, should the resized image have it's aspect ratio changed, or be cropped to maintain aspect ratio</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_PruneOutputs",
"displayName": "VHS_PruneOutputs",
"category": "Video Helper Suite 🎥🅥🅗🅢",
"description": "Prune Outputs 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Automates deletion of undesired outputs from a Video Combine node.</div></div><div style=\"font-size: 0.8em\">Video Combine produces a number of file outputs in addition to the final output. Some of these, such as a video file without audio included, are implementation limitations and are not feasible to solve. As an alternative, the Prune Outputs node is added to automate the deletion of these file outputs if they are not desired</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"filenames\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">filenames: A connection from a Video Combine node to indicate which outputs should be pruned</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"options\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">options: Which files should be deleted<div style=\"font-size: 1em\"><div vhs_title=\"Intermediate\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Intermediate: Delete any files that were required for intermediate processing but are not the final output, like the no-audio output file when audio is included</div></div><div vhs_title=\"Intermediate and Utility\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Intermediate and Utility: Delete all produced files that aren't the final output, including the first frame png</div></div></div></div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_SelectEveryNthImage",
"displayName": "VHS_SelectEveryNthImage",
"category": "Video Helper Suite 🎥🅥🅗🅢/image",
"description": "Select Every Nth Image 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Keep only 1 image for every interval</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"images\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">images: The input image</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The output images</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of images in the input</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"select_every_nth\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">select_every_nth: The interval from which one frame is kept. 1 means no frames are skipped.</div></div><div vhs_title=\"skip_first_images\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">skip_first_images: A number of frames which that is skipped from the start. This applies before select_every_nth. As a result, multiple copies of the node can each have a different skip_first_frames to divide the image into groups</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_SelectEveryNthLatent",
"displayName": "VHS_SelectEveryNthLatent",
"category": "Video Helper Suite 🎥🅥🅗🅢/latent",
"description": "Select Every Nth Latent 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Keep only 1 latent for every interval</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"latents\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">latents: The input latent</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The output latents</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of latents in the input</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"select_every_nth\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">select_every_nth: The interval from which one frame is kept. 1 means no frames are skipped.</div></div><div vhs_title=\"skip_first_latents\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">skip_first_latents: A number of frames which that is skipped from the start. This applies before select_every_nth. As a result, multiple copies of the node can each have a different skip_first_frames to divide the latent into groups</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_SelectEveryNthMask",
"displayName": "VHS_SelectEveryNthMask",
"category": "Video Helper Suite 🎥🅥🅗🅢/mask",
"description": "Select Every Nth Mask 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Keep only 1 mask for every interval</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"mask\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">mask: The input mask</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"MASK\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">MASK: The output mask</div></div><div vhs_title=\"count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">count: The number of mask in the input</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"select_every_nth\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">select_every_nth: The interval from which one frame is kept. 1 means no frames are skipped.</div></div><div vhs_title=\"skip_first_mask\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">skip_first_mask: A number of frames which that is skipped from the start. This applies before select_every_nth. As a result, multiple copies of the node can each have a different skip_first_frames to divide the mask into groups</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_SelectFilename",
"displayName": "VHS_SelectFilename",
"category": "Video Helper Suite 🎥🅥🅗🅢",
"description": "VAE Select Filename 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Select a single filename from the VHS_FILENAMES output by a Video Combine and return it as a string</div></div><div style=\"font-size: 0.8em\">Take care when combining this node with Prune Outputs. The VHS_FILENAMES object is immutable and will always contain the full list of output files, but execution order is undefined behavior (currently, Prune Outputs will generally execute first) and SelectFilename may return a path to a file that no longer exists.</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"filenames\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">filenames: A VHS_FILENAMES from a Video Combine node</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"filename\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">filename: A string representation of the full output path for the chosen file</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"index\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">index: The index of which file should be selected. The default, -1, chooses the most complete output</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_SelectImages",
"displayName": "VHS_SelectImages",
"category": "Video Helper Suite 🎥🅥🅗🅢/image",
"description": "Use comma-separated indexes to select items in the given order.\nSupports negative indexes, python-style ranges (end index excluded),\nas well as range step.\n\nAcceptable entries (assuming 16 items provided, so idxs 0 to 15 exist):\n0 -> Returns [0]\n-1 -> Returns [15]\n0, 1, 13 -> Returns [0, 1, 13]\n0:5, 13 -> Returns [0, 1, 2, 3, 4, 13]\n0:-1 -> Returns [0, 1, 2, ..., 13, 14]\n0:5:-1 -> Returns [4, 3, 2, 1, 0]\n0:5:2 -> Returns [0, 2, 4]\n::-1 -> Returns [15, 14, 13, ..., 2, 1, 0]\n",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_SelectLatents",
"displayName": "VHS_SelectLatents",
"category": "Video Helper Suite 🎥🅥🅗🅢/latent",
"description": "Use comma-separated indexes to select items in the given order.\nSupports negative indexes, python-style ranges (end index excluded),\nas well as range step.\n\nAcceptable entries (assuming 16 items provided, so idxs 0 to 15 exist):\n0 -> Returns [0]\n-1 -> Returns [15]\n0, 1, 13 -> Returns [0, 1, 13]\n0:5, 13 -> Returns [0, 1, 2, 3, 4, 13]\n0:-1 -> Returns [0, 1, 2, ..., 13, 14]\n0:5:-1 -> Returns [4, 3, 2, 1, 0]\n0:5:2 -> Returns [0, 2, 4]\n::-1 -> Returns [15, 14, 13, ..., 2, 1, 0]\n",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_SelectLatest",
"displayName": "VHS_SelectLatest",
"category": "Video Helper Suite 🎥🅥🅗🅢",
"description": "Select Latest 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Experimental virtual node to select the most recently modified file from a given folder</div></div><div style=\"font-size: 0.8em\">Assists in the creation of workflows where outputs from one execution are used elsewhere in subsequent executions.</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"filename_prefix\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">filename_prefix: A path which can consist of a combination of folders and a prefix which candidate files must match</div></div><div vhs_title=\"filename_postfix\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">filename_postfix: A string which chich the selected file must end with. Useful for limiting to a target extension.</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"Filename\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Filename: A string representing a file path to the most recently modified file.</div></div></div></div></div>",
"deprecated": false,
"experimental": true
},
{
"name": "VHS_SelectMasks",
"displayName": "VHS_SelectMasks",
"category": "Video Helper Suite 🎥🅥🅗🅢/mask",
"description": "Use comma-separated indexes to select items in the given order.\nSupports negative indexes, python-style ranges (end index excluded),\nas well as range step.\n\nAcceptable entries (assuming 16 items provided, so idxs 0 to 15 exist):\n0 -> Returns [0]\n-1 -> Returns [15]\n0, 1, 13 -> Returns [0, 1, 13]\n0:5, 13 -> Returns [0, 1, 2, 3, 4, 13]\n0:-1 -> Returns [0, 1, 2, ..., 13, 14]\n0:5:-1 -> Returns [4, 3, 2, 1, 0]\n0:5:2 -> Returns [0, 2, 4]\n::-1 -> Returns [15, 14, 13, ..., 2, 1, 0]\n",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_SplitImages",
"displayName": "VHS_SplitImages",
"category": "Video Helper Suite 🎥🅥🅗🅢/image",
"description": "Split Images 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Split a set of images into two groups</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"images\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">images: The images to be split.</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE_A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE_A: The first group of images</div></div><div vhs_title=\"A_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">A_count: The number of images in group A. This will be equal to split_index unless the images input has length less than split_index</div></div><div vhs_title=\"IMAGE_B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE_B: The second group of images</div></div><div vhs_title=\"B_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">B_count: The number of images in group B</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"split_index\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">split_index: The index of the first latent that will be in the second output groups.</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_SplitLatents",
"displayName": "VHS_SplitLatents",
"category": "Video Helper Suite 🎥🅥🅗🅢/latent",
"description": "Split Latents 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Split a set of latents into two groups</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"latents\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">latents: The latents to be split.</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"LATENT_A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT_A: The first group of latents</div></div><div vhs_title=\"A_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">A_count: The number of latents in group A. This will be equal to split_index unless the latents input has length less than split_index</div></div><div vhs_title=\"LATENT_B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT_B: The second group of latents</div></div><div vhs_title=\"B_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">B_count: The number of latents in group B</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"split_index\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">split_index: The index of the first latent that will be in the second output groups.</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_SplitMasks",
"displayName": "VHS_SplitMasks",
"category": "Video Helper Suite 🎥🅥🅗🅢/mask",
"description": "Split Masks 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Split a set of masks into two groups</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"mask\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">mask: The masks to be split.</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"MASK_A\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">MASK_A: The first group of masks</div></div><div vhs_title=\"A_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">A_count: The number of masks in group A. This will be equal to split_index unless the mask input has length less than split_index</div></div><div vhs_title=\"MASK_B\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">MASK_B: The second group of masks</div></div><div vhs_title=\"B_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">B_count: The number of masks in group B</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"split_index\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">split_index: The index of the first latent that will be in the second output groups.</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_Unbatch",
"displayName": "VHS_Unbatch",
"category": "Video Helper Suite 🎥🅥🅗🅢",
"description": "Unbatch 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Unbatch a list of items into a single concatenated item</div></div><div style=\"font-size: 0.8em\">Useful for when you want a single video output from a complex workflow</div><div style=\"font-size: 0.8em\">Has no relation to the Meta Batch system of VHS</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"batched\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">batched: Any input which may or may not be batched</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"unbatched\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">unbatched: A single output element. Torch tensors are concatenated across dim 0, all other types are added which functions as concatenation for strings and arrays, but may give undesired results for other types</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_VAEDecodeBatched",
"displayName": "VHS_VAEDecodeBatched",
"category": "Video Helper Suite 🎥🅥🅗🅢/batched nodes",
"description": "VAE Decode Batched 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Decode latents to images with a manually specified batch size</div></div><div style=\"font-size: 0.8em\">Some people have ran into VRAM issues when encoding or decoding large batches of images. As a workaround, this node lets you manually set a batch size when decoding latents.</div><div style=\"font-size: 0.8em\">Unless these issues have been encountered, it is simpler to use the native VAE Decode or to decode from a Video Combine directly</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"samples\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">samples: The latents to be decoded.</div></div><div vhs_title=\"vae\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vae: The VAE to use when decoding.</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"IMAGE\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">IMAGE: The decoded images.</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"per_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">per_batch: The maximum number of images to decode in each batch.</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_VAEEncodeBatched",
"displayName": "VHS_VAEEncodeBatched",
"category": "Video Helper Suite 🎥🅥🅗🅢/batched nodes",
"description": "VAE Encode Batched 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Encode images as latents with a manually specified batch size.</div></div><div style=\"font-size: 0.8em\">Some people have ran into VRAM issues when encoding or decoding large batches of images. As a workaround, this node lets you manually set a batch size when encoding images.</div><div style=\"font-size: 0.8em\">Unless these issues have been encountered, it is simpler to use the native VAE Encode or to encode directly from a Load Video</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"pixels\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">pixels: The images to be encoded.</div></div><div vhs_title=\"vae\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vae: The VAE to use when encoding.</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"LATENT\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">LATENT: The encoded latents.</div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"per_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">per_batch: The maximum number of images to encode in each batch.</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_VHSAudioToAudio",
"displayName": "VHS_VHSAudioToAudio",
"category": "Video Helper Suite 🎥🅥🅗🅢/audio",
"description": "Legacy VHS_AUDIO to Audio 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>utility function for compatibility with external nodes</div></div><div style=\"font-size: 0.8em\">VHS used to use an internal VHS_AUDIO format for routing audio between inputs and outputs. This format was intended to only be used internally and was designed with a focus on performance over ease of use. Since ComfyUI now has an internal AUDIO format, VHS now uses this format. However, some custom node packs were made that are external to both ComfyUI and VHS that use VHS_AUDIO. This node was added so that those external nodes can still function</div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"vhs_audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vhs_audio: An input in the legacy VHS_AUDIO format produced by an external node</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"vhs_audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vhs_audio: An output in the standardized AUDIO format</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_VideoCombine",
"displayName": "VHS_VideoCombine",
"category": "Video Helper Suite 🎥🅥🅗🅢",
"description": "Video Combine 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Combine an image sequence into a video</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"images\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">images: The images to be turned into a video</div></div><div vhs_title=\"audio\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">audio: (optional) audio to add to the video</div></div><div vhs_title=\"meta_batch\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">meta_batch: (optional) Connect to a Meta Batch manager to divide extremely long image sequences into sub batches. See the documentation for Meta Batch Manager</div></div><div vhs_title=\"vae\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">vae: (optional) If provided, the node will take latents as input instead of images. This drastically reduces the required RAM (not VRAM) when working with long (100+ frames) sequences<div style=\"font-size: 1em\">Unlike on Load Video, this isn't always a strict upgrade over using a standalone VAE Decode.</div><div style=\"font-size: 1em\">If you have multiple Video Combine outputs, then the VAE decode will be performed for each output node increasing execution time</div><div style=\"font-size: 1em\">If you make any change to output settings on the Video Combine (such as changing the output format), the VAE decode will be performed again as the decoded result is (by design) not cached</div></div></div></div></div><div vhs_title=\"Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Widgets: <div vhs_title=\"frame_rate\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">frame_rate: The frame rate which will be used for the output video. Consider converting this to an input and connecting this to a Load Video with Video Info(Loaded)->fps. When including audio, failure to properly set this will result in audio desync</div></div><div vhs_title=\"loop_count\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loop_count: The number of additional times the video should repeat. Can cause performance issues when used with long (100+ frames) sequences</div></div><div vhs_title=\"filename_prefix\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">filename_prefix: A prefix to add to the name of the output filename. This can include subfolders or format strings.</div></div><div vhs_title=\"format\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">format: The output format to use. Formats starting with, 'image' are saved with PIL, but formats starting with 'video' utilize the video_formats system. 'video' options require ffmpeg and selecting one frequently adds additional options to the node.</div></div><div vhs_title=\"pingpong\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">pingpong: Play the video normally, then repeat the video in reverse so that it 'pingpongs' back and forth. This is frequently used to minimize the appearance of skips on very short animations.</div></div><div vhs_title=\"save_output\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">save_output: Specifies if output files should be saved to the output folder, or the temporary output folder</div></div><div vhs_title=\"videopreview\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">videopreview: Displays a preview for the processed result. If advanced previews is enabled, the output is always converted to a format viewable from the browser. If the video has audio, it will also be previewed when moused over. Additional preview options can be accessed with right click.</div></div></div></div><div vhs_title=\"Common Format Widgets\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Common Format Widgets: <div vhs_title=\"crf\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">crf: Determines how much to prioritize quality over filesize. Numbers vary between formats, but on each format that includes it, the default value provides visually loss less output</div></div><div vhs_title=\"pix_fmt\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">pix_fmt: The pixel format to use for output. Alternative options will often have higher quality at the cost of increased file size and reduced compatibility with external software.<div style=\"font-size: 1em\"><div vhs_title=\"yuv420p\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">yuv420p: The most common and default format</div></div><div vhs_title=\"yuv420p10le\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">yuv420p10le: Use 10 bit color depth. This can improve color quality when combined with 16bit input color depth</div></div><div vhs_title=\"yuva420p\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">yuva420p: Include transparency in the output video</div></div></div></div></div><div vhs_title=\"input_color_depth\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">input_color_depth: VHS supports outputting 16bit images. While this produces higher quality output, the difference usually isn't visible without postprocessing and it significantly increases file size and processing time.</div></div><div vhs_title=\"save_metadata\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">save_metadata: Determines if metadata for the workflow should be included in the output video file</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_VideoInfo",
"displayName": "VHS_VideoInfo",
"category": "Video Helper Suite 🎥🅥🅗🅢",
"description": "Video Info 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Splits information on a video into a numerous outputs</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"video_info\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video_info: A connection to a Load Video node</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"source_fps🟨\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_fps🟨: The frame rate of the video</div></div><div vhs_title=\"source_frame_count🟨\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_frame_count🟨: How many total frames the video contains before accounting for frame rate or select_every_nth</div></div><div vhs_title=\"source_duration🟨\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_duration🟨: The length of images just returned in seconds</div></div><div vhs_title=\"source_width🟨\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_width🟨: The width</div></div><div vhs_title=\"source_height🟨\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_height🟨: The height</div></div><div vhs_title=\"loaded_fps🟦\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_fps🟦: The frame rate after accounting for force_rate and select_every_nth. This output is of particular use as it can be connected to the converted frame_rate input of a Video Combine node to ensure audio remains synchronized.</div></div><div vhs_title=\"loaded_frame_count🟦\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_frame_count🟦: The number of frames returned by the current execution. Identical to the frame_count returned by the node itself</div></div><div vhs_title=\"loaded_duration🟦\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_duration🟦: The duration in seconds of returned images after accounting for frame_load_cap</div></div><div vhs_title=\"loaded_width🟦\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_width🟦: The width of the video after scaling. These coordinates are in image space even if loading to latent space</div></div><div vhs_title=\"loaded_height🟦\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_height🟦: The height of the video after scaling. These coordinates are in image space even if loading to latent space</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_VideoInfoLoaded",
"displayName": "VHS_VideoInfoLoaded",
"category": "Video Helper Suite 🎥🅥🅗🅢",
"description": "Video Info Loaded 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Splits information on a video into a numerous outputs describing the file itself after accounting for load options</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"video_info\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video_info: A connection to a Load Video node</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"loaded_fps🟦\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_fps🟦: The frame rate after accounting for force_rate and select_every_nth. This output is of particular use as it can be connected to the converted frame_rate input of a Video Combine node to ensure audio remains synchronized.</div></div><div vhs_title=\"loaded_frame_count🟦\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_frame_count🟦: The number of frames returned by the current execution. Identical to the frame_count returned by the node itself</div></div><div vhs_title=\"loaded_duration🟦\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_duration🟦: The duration in seconds of returned images after accounting for frame_load_cap</div></div><div vhs_title=\"loaded_width🟦\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_width🟦: The width of the video after scaling. This is the dimension of the corresponding image even if loading as a latent directly</div></div><div vhs_title=\"loaded_height🟦\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">loaded_height🟦: The height of the video after scaling. This is the dimension of the corresponding image even if loading as a latent directly</div></div></div></div></div>",
"deprecated": false,
"experimental": false
},
{
"name": "VHS_VideoInfoSource",
"displayName": "VHS_VideoInfoSource",
"category": "Video Helper Suite 🎥🅥🅗🅢",
"description": "Video Info Source 🎥🅥🅗🅢<div style=\"font-size: 0.8em\"><div id=VHS_shortdesc>Splits information on a video into a numerous outputs describing the file itself without accounting for load options</div></div><div style=\"font-size: 0.8em\"><div vhs_title=\"Inputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Inputs: <div vhs_title=\"video_info\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">video_info: A connection to a Load Video node</div></div></div></div><div vhs_title=\"Outputs\" style=\"display: flex; font-size: 0.8em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">Outputs: <div vhs_title=\"source_fps🟨\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_fps🟨: The frame rate of the video</div></div><div vhs_title=\"source_frame_count🟨\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_frame_count🟨: How many total frames the video contains before accounting for frame rate or select_every_nth</div></div><div vhs_title=\"source_duration🟨\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_duration🟨: The length of images just returned in seconds</div></div><div vhs_title=\"source_width🟨\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_width🟨: The original width</div></div><div vhs_title=\"source_height🟨\" style=\"display: flex; font-size: 1em\" class=\"VHS_collapse\"><div style=\"color: #AAA; height: 1.5em;\">[<span style=\"font-family: monospace\">-</span>]</div><div style=\"width: 100%\">source_height🟨: The original height</div></div></div></div></div>",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "ComfyUI-WanAnimatePreprocess",
"registryId": "ComfyUI-WanAnimatePreprocess",
"displayName": "ComfyUI-WanAnimatePreprocess",
"description": "ComfyUI nodes for WanAnimate input processing",
"repoUrl": "https://github.com/kijai/ComfyUI-WanAnimatePreprocess",
"publisher": {
"id": "kijai",
"name": "Kijai"
},
"downloads": 192198,
"githubStars": 513,
"latestVersion": "1.0.2",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2025-12-14T08:59:17.930972Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "OnnxDetectionModelLoader",
"displayName": "ONNX Detection Model Loader",
"category": "WanAnimatePreprocess",
"description": "Loads ONNX models for pose and face detection. ViTPose for pose estimation and YOLO for object detection."
}
]
},
{
"id": "ComfyUI-WanVideoWrapper",
"registryId": "ComfyUI-WanVideoWrapper",
"displayName": "ComfyUI-WanVideoWrapper",
"description": "ComfyUI wrapper nodes for WanVideo",
"repoUrl": "https://github.com/kijai/ComfyUI-WanVideoWrapper",
"publisher": {
"id": "kijai",
"name": "Kijai"
},
"downloads": 1684712,
"githubStars": 6435,
"latestVersion": "1.4.7",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2026-02-01T23:44:07.720927Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "CreateCFGScheduleFloatList",
"displayName": "Create CFG Schedule Float List",
"category": "WanVideoWrapper",
"description": "Helper node to generate a list of floats that can be used to schedule cfg scale for the steps, outside the set range cfg is set to 1.0"
},
{
"name": "CreateScheduleFloatList",
"displayName": "Create Schedule Float List",
"category": "WanVideoWrapper",
"description": "Helper node to generate a list of floats that can be used to schedule things like cfg and lora scale per step"
},
{
"name": "DrawNLFPoses",
"displayName": "Draw NLF Poses",
"category": "WanVideoWrapper"
},
{
"name": "DummyComfyWanModelObject",
"displayName": "Dummy Comfy Wan Model Object",
"category": "WanVideoWrapper",
"description": "Helper node to create empty Wan model to use with BasicScheduler -node to get sigmas"
},
{
"name": "ExtractStartFramesForContinuations",
"displayName": "Extract Start Frames For Continuations",
"category": "WanVideoWrapper",
"description": "Extracts the first N frames from a video sequence for continuations."
},
{
"name": "FantasyPortraitModelLoader",
"displayName": "FantasyPortrait Model Loader",
"category": "WanVideoWrapper"
},
{
"name": "FantasyTalkingModelLoader",
"displayName": "FantasyTalking Model Loader",
"category": "WanVideoWrapper"
},
{
"name": "LoadLynxResampler",
"displayName": "Load Lynx Resampler",
"category": "WanVideoWrapper"
},
{
"name": "LoadNLFModel",
"displayName": "Load NLF Model",
"category": "WanVideoWrapper"
},
{
"name": "LoadVQVAE",
"displayName": "Load VQVAE",
"category": "WanVideoWrapper"
},
{
"name": "LynxEncodeFaceIP",
"displayName": "Lynx Encode Face IP",
"category": "WanVideoWrapper"
},
{
"name": "LynxInsightFaceCrop",
"displayName": "Lynx InsightFace Crop",
"category": "WanVideoWrapper"
},
{
"name": "MTVCrafterEncodePoses",
"displayName": "MTV Crafter Encode Poses",
"category": "WanVideoWrapper"
},
{
"name": "MultiTalkModelLoader",
"displayName": "Multi/InfiniteTalk Model Loader",
"category": "WanVideoWrapper"
},
{
"name": "MultiTalkSilentEmbeds",
"displayName": "MultiTalk Silent Embeds",
"category": "WanVideoWrapper"
},
{
"name": "OviMMAudioVAELoader",
"displayName": "Ovi MMAudio VAE Loader",
"category": "WanVideoWrapper/Ovi",
"description": "Loads MMAudio VAE for Ovi audio generation"
},
{
"name": "WanVideoBlockList",
"displayName": "WanVideo Block List",
"category": "WanVideoWrapper",
"description": "Comma separated list of blocks to apply block swap to, can also use ranges like '0-5' or '0,2,3-5' etc., can be connected to the dense_blocks input of 'WanVideoSetRadialAttention' node"
},
{
"name": "LoadWanVideoClipTextEncoder",
"displayName": "WanVideo CLIP Text Encoder Loader",
"category": "WanVideoWrapper",
"description": "Loads Wan clip_vision model from 'ComfyUI/models/clip_vision'"
},
{
"name": "WanVideoControlEmbeds",
"displayName": "WanVideo Control Embeds",
"category": "WanVideoWrapper"
},
{
"name": "WanVideoControlnetLoader",
"displayName": "WanVideo Controlnet Loader",
"category": "WanVideoWrapper",
"description": "Loads ControlNet model from 'https://huggingface.co/collections/TheDenk/wan21-controlnets-68302b430411dafc0d74d2fc'"
},
{
"name": "WanVideoEasyCache",
"displayName": "WanVideo EasyCache",
"category": "WanVideoWrapper",
"description": "EasyCache for WanVideoWrapper, source https://github.com/H-EmbodVis/EasyCache",
"experimental": true
},
{
"name": "WanVideoEmptyEmbeds",
"displayName": "WanVideo Empty Embeds",
"category": "WanVideoWrapper"
},
{
"name": "WanVideoEmptyMMAudioLatents",
"displayName": "WanVideo Empty MMAudio Latents",
"category": "WanVideoWrapper/Ovi"
},
{
"name": "WanVideoEnhanceAVideo",
"displayName": "WanVideo Enhance-A-Video",
"category": "WanVideoWrapper",
"description": "https://github.com/NUS-HPC-AI-Lab/Enhance-A-Video"
},
{
"name": "WanVideoExperimentalArgs",
"displayName": "WanVideo Experimental Args",
"category": "WanVideoWrapper",
"description": "Experimental stuff",
"experimental": true
},
{
"name": "WanVideoExtraModelSelect",
"displayName": "WanVideo Extra Model Select",
"category": "WanVideoWrapper",
"description": "Extra model to load and add to the main model, ie. VACE or MTV Crafter 'ComfyUI/models/diffusion_models'"
},
{
"name": "WanVideoFlashVSRDecoderLoader",
"displayName": "WanVideo FlashVSR Decoder Loader",
"category": "WanVideoWrapper",
"description": "Loads Wan VAE model from 'ComfyUI/models/vae'"
},
{
"name": "WanVideoFreeInitArgs",
"displayName": "WanVideo Free Init Args",
"category": "WanVideoWrapper",
"description": "https://github.com/TianxingWu/FreeInit; FreeInit, a concise yet effective method to improve temporal consistency of videos generated by diffusion models",
"experimental": true
},
{
"name": "WanVideoLoopArgs",
"displayName": "WanVideo Loop Args",
"category": "WanVideoWrapper",
"description": "Looping through latent shift as shown in https://github.com/YisuiTT/Mobius/"
},
{
"name": "WanVideoLoraBlockEdit",
"displayName": "WanVideo Lora Block Edit",
"category": "WanVideoWrapper"
},
{
"name": "WanVideoMagCache",
"displayName": "WanVideo MagCache",
"category": "WanVideoWrapper",
"description": "MagCache for WanVideoWrapper, source https://github.com/Zehong-Ma/MagCache",
"experimental": true
},
{
"name": "WanVideoMiniMaxRemoverEmbeds",
"displayName": "WanVideo MiniMax Remover Embeds",
"category": "WanVideoWrapper"
},
{
"name": "WanVideoPhantomEmbeds",
"displayName": "WanVideo Phantom Embeds",
"category": "WanVideoWrapper"
},
{
"name": "WanVideoRealisDanceLatents",
"displayName": "WanVideo RealisDance Latents",
"category": "WanVideoWrapper"
},
{
"name": "WanVideoReCamMasterDefaultCamera",
"displayName": "WanVideo ReCamMaster Default Camera",
"category": "WanVideoWrapper",
"description": "https://github.com/KwaiVGI/ReCamMaster"
},
{
"name": "WanVideoReCamMasterGenerateOrbitCamera",
"displayName": "WanVideo ReCamMaster Generate Orbit Camera",
"category": "WanVideoWrapper",
"description": "https://github.com/KwaiVGI/ReCamMaster"
},
{
"name": "WanVideoRoPEFunction",
"displayName": "WanVideo RoPE Function",
"category": "WanVideoWrapper",
"experimental": true
},
{
"name": "WanVideoSigmaToStep",
"displayName": "WanVideo Sigma To Step",
"category": "WanVideoWrapper",
"description": "Simply passes a float value as an integer, used to set start/end steps with sigma threshold"
},
{
"name": "WanVideoSLG",
"displayName": "WanVideo SLG",
"category": "WanVideoWrapper",
"description": "Skips uncond on the selected blocks"
},
{
"name": "WanVideoSVIProEmbeds",
"displayName": "WanVideo SVIPro Embeds",
"category": "WanVideoWrapper"
},
{
"name": "LoadWanVideoT5TextEncoder",
"displayName": "WanVideo T5 Text Encoder Loader",
"category": "WanVideoWrapper",
"description": "Loads Wan text_encoder model from 'ComfyUI/models/LLM'"
},
{
"name": "WanVideoTeaCache",
"displayName": "WanVideo TeaCache",
"category": "WanVideoWrapper",
"description": "\nPatch WanVideo model to use TeaCache. Speeds up inference by caching the output and \napplying it instead of doing the step. Best results are achieved by choosing the \nappropriate coefficients for the model. Early steps should never be skipped, with too \naggressive values this can happen and the motion suffers. Starting later can help with that too. \nWhen NOT using coefficients, the threshold value should be \nabout 10 times smaller than the value used with coefficients. \n\nOfficial recommended values https://github.com/ali-vilab/TeaCache/tree/main/TeaCache4Wan2.1\n"
},
{
"name": "WanVideoTextEncodeCached",
"displayName": "WanVideo TextEncode Cached",
"category": "WanVideoWrapper",
"description": "Encodes text prompts into text embeddings. This node loads and completely unloads the T5 after done, \nleaving no VRAM or RAM imprint. If prompts have been cached before T5 is not loaded at all. \nnegative output is meant to be used with NAG, it contains only negative prompt embeddings. \n\nAdditionally you can provide a Qwen LLM model to extend the positive prompt with either one \nof the original Wan templates or a custom system prompt. \n"
},
{
"name": "WanVideoTinyVAELoader",
"displayName": "WanVideo Tiny VAE Loader",
"category": "WanVideoWrapper",
"description": "Loads Wan VAE model from 'ComfyUI/models/vae_approx'"
},
{
"name": "WanVideoTorchCompileSettings",
"displayName": "WanVideo Torch Compile Settings",
"category": "WanVideoWrapper",
"description": "torch.compile settings, when connected to the model loader, torch.compile of the selected layers is attempted. Requires Triton and torch > 2.7.0 is recommended"
},
{
"name": "WanVideoUniAnimateDWPoseDetector",
"displayName": "WanVideo UniAnimate DWPose Detector",
"category": "WanVideoWrapper"
},
{
"name": "WanVideoUniAnimatePoseInput",
"displayName": "WanVideo UniAnimate Pose Input",
"category": "WanVideoWrapper"
},
{
"name": "WanVideoUniLumosEmbeds",
"displayName": "WanVideo UniLumos Embeds",
"category": "WanVideoWrapper"
},
{
"name": "WanVideoVACEModelSelect",
"displayName": "WanVideo VACE Module Select",
"category": "WanVideoWrapper",
"description": "VACE model to use when not using model that has it included, loaded from 'ComfyUI/models/diffusion_models'"
},
{
"name": "Wav2VecModelLoader",
"displayName": "Wav2vec2 Model Loader",
"category": "WanVideoWrapper"
},
{
"name": "WhisperModelLoader",
"displayName": "Whisper Model Loader",
"category": "WanVideoWrapper"
}
]
},
{
"id": "ControlAltAI-Nodes",
"displayName": "ControlAltAI-Nodes",
"nodes": [
{
"name": "BooleanBasic",
"displayName": "Boolean Basic",
"category": "ControlAltAI Nodes/Logic"
},
{
"name": "BooleanReverse",
"displayName": "Boolean Reverse",
"category": "ControlAltAI Nodes/Logic"
},
{
"name": "FluxAttentionCleanup",
"displayName": "Flux Attention Cleanup",
"category": "ControlAltAI Nodes/Flux Region"
},
{
"name": "FluxResolutionNode",
"displayName": "Flux Resolution Calc",
"category": "ControlAltAI Nodes/Flux"
},
{
"name": "HiDreamResolutionNode",
"displayName": "HiDream Resolution",
"category": "ControlAltAI Nodes/HiDream"
},
{
"name": "IntegerSettings",
"displayName": "Integer Settings",
"category": "ControlAltAI Nodes/Logic"
},
{
"name": "IntegerSettingsAdvanced",
"displayName": "Integer Settings Advanced",
"category": "ControlAltAI Nodes/Logic"
},
{
"name": "RegionMaskGenerator",
"displayName": "Region Mask Generator",
"category": "ControlAltAI Nodes/Flux Region"
},
{
"name": "TextBridge",
"displayName": "Text Bridge",
"category": "ControlAltAI Nodes/Utility"
}
]
},
{
"id": "CustomNodeComfyMath",
"displayName": "CustomNodeComfyMath",
"nodes": [
{
"name": "CM_BoolToInt",
"displayName": "BoolToInt",
"category": "math/conversion"
},
{
"name": "CM_BreakoutVec2",
"displayName": "BreakoutVec2",
"category": "math/conversion"
},
{
"name": "CM_BreakoutVec3",
"displayName": "BreakoutVec3",
"category": "math/conversion"
},
{
"name": "CM_BreakoutVec4",
"displayName": "BreakoutVec4",
"category": "math/conversion"
},
{
"name": "CM_ComposeVec2",
"displayName": "ComposeVec2",
"category": "math/conversion"
},
{
"name": "CM_ComposeVec3",
"displayName": "ComposeVec3",
"category": "math/conversion"
},
{
"name": "CM_ComposeVec4",
"displayName": "ComposeVec4",
"category": "math/conversion"
},
{
"name": "CM_FloatToInt",
"displayName": "FloatToInt",
"category": "math/conversion"
},
{
"name": "CM_FloatToNumber",
"displayName": "FloatToNumber",
"category": "math/conversion"
},
{
"name": "CM_IntToBool",
"displayName": "IntToBool",
"category": "math/conversion"
},
{
"name": "CM_IntToFloat",
"displayName": "IntToFloat",
"category": "math/conversion"
},
{
"name": "CM_IntToNumber",
"displayName": "IntToNumber",
"category": "math/conversion"
},
{
"name": "CM_NumberToFloat",
"displayName": "NumberToFloat",
"category": "math/conversion"
},
{
"name": "CM_NumberToInt",
"displayName": "NumberToInt",
"category": "math/conversion"
}
]
},
{
"id": "masquerade-nodes-comfyui",
"displayName": "masquerade-nodes-comfyui",
"nodes": [
{
"name": "MasqueradeIncrementer",
"displayName": "Incrementer",
"category": "Masquerade Nodes"
}
]
},
{
"id": "nodesweet",
"registryId": "nodesweet",
"displayName": "hellorob",
"description": "Makes ComfyUI more sweet",
"repoUrl": "https://github.com/rslosh/comfyui-nodesweet",
"publisher": {
"id": "hellorob",
"name": "hellorob"
},
"downloads": 934,
"githubStars": 1,
"latestVersion": "1.0.1",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2026-02-25T06:07:52.51655Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "AudioReactiveTransform",
"displayName": "AudioReactiveTransform",
"category": "nodesweet-hellorob",
"deprecated": false,
"experimental": false
},
{
"name": "AudioWeightsRemap",
"displayName": "AudioWeightsRemap",
"category": "nodesweet-hellorob",
"deprecated": false,
"experimental": false
},
{
"name": "BboxDetectorBatch",
"displayName": "BboxDetectorBatch",
"category": "nodesweet-hellorob",
"deprecated": false,
"experimental": false
},
{
"name": "BboxDetectorBatchChunked",
"displayName": "BboxDetectorBatchChunked",
"category": "nodesweet-hellorob",
"deprecated": false,
"experimental": false
},
{
"name": "BboxDetectorBatchForEach",
"displayName": "BboxDetectorBatchForEach",
"category": "nodesweet-hellorob",
"deprecated": false,
"experimental": false
},
{
"name": "MultilineStringRepeater",
"displayName": "MultilineStringRepeater",
"category": "nodesweet-hellorob",
"description": "Repeats lines in a multiline string. Choose 'Line by Line' to repeat each line individually, or 'Block' to repeat the entire text as a group.",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "OneButtonPrompt",
"displayName": "OneButtonPrompt",
"nodes": [
{
"name": "AutoNegativePrompt",
"displayName": "Auto Negative Prompt",
"category": "OneButtonPrompt"
},
{
"name": "CreatePromptVariant",
"displayName": "Create Prompt Variant",
"category": "OneButtonPrompt"
},
{
"name": "OneButtonArtify",
"displayName": "One Button Artify",
"category": "OneButtonPrompt"
},
{
"name": "OneButtonPreset",
"displayName": "One Button Preset",
"category": "OneButtonPrompt"
},
{
"name": "OneButtonSuperPrompt",
"displayName": "One Button SuperPrompt",
"category": "OneButtonPrompt"
}
]
},
{
"id": "radiance",
"registryId": "radiance",
"displayName": "radiance",
"description": "Radiance is a 32-bit color space collection of nodes for ComfyUI.",
"iconUrl": "https://raw.githubusercontent.com/fxtdstudios/radiance/main/r_icon.png",
"repoUrl": "https://github.com/fxtdstudios/radiance",
"publisher": {
"id": "fxtdstudios",
"name": "FXTD STUDIOS"
},
"downloads": 3460,
"githubStars": 226,
"latestVersion": "2.3.3",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2026-04-01T21:53:16.986121Z",
"supportedOs": ["OS Independent"],
"supportedAccelerators": [],
"nodes": [
{
"name": "◎ RadianceBlendComposite",
"displayName": "◎ RadianceBlendComposite",
"category": "FXTD Studios/Radiance/Draw",
"description": "Composite two images using Normal, Add, Screen, Multiply, Overlay, Soft Light, Difference, or Divide blend modes.",
"deprecated": false,
"experimental": false
},
{
"name": "◎ RadianceCinemaStudio",
"displayName": "◎ RadianceCinemaStudio",
"category": "FXTD Studios/Radiance/Generate",
"description": "Generate authentic cinematic prompts using real-world camera and lens profiles.",
"deprecated": false,
"experimental": false
},
{
"name": "◎ RadianceDenoise",
"displayName": "◎ RadianceDenoise",
"category": "FXTD Studios/Radiance/Filter",
"description": "32-bit float bilateral denoising. Preserves edges while smoothing noise. Works on SDR [0,1] and HDR linear-light images equally. Enable hdr_auto_sigma (default ON) for correct HDR operation.",
"deprecated": false,
"experimental": false
},
{
"name": "◎ RadianceDepthMapGenerator",
"displayName": "◎ RadianceDepthMapGenerator",
"category": "FXTD Studios/Radiance/Data",
"description": "Depth Anything V2 monocular depth estimation. Video-safe — standardizes each frame with spatial-temporal alignment preventing flickering. Outputs 3-channel grayscale depth map. Connect to Depth of Field node for realistic defocus blur.",
"deprecated": false,
"experimental": false
},
{
"name": "◎ RadianceDigitalCinemaRead",
"displayName": "◎ RadianceDigitalCinemaRead",
"category": "FXTD Studios/Radiance/IO",
"deprecated": false,
"experimental": false
},
{
"name": "◎ RadianceDigitalCinemaWrite",
"displayName": "◎ RadianceDigitalCinemaWrite",
"category": "FXTD Studios/Radiance/IO",
"deprecated": false,
"experimental": false
},
{
"name": "◎ RadianceFalseColor",
"displayName": "◎ RadianceFalseColor",
"category": "FXTD Studios/Radiance/Analyze",
"description": "Bake a 7-zone false-color exposure overlay as an IMAGE for pipeline/batch use.",
"deprecated": false,
"experimental": false
},
{
"name": "◎ RadianceFlickerAnalyze",
"displayName": "◎ RadianceFlickerAnalyze",
"category": "FXTD Studios/Radiance/Video",
"description": "Compute per-frame flicker index (luma delta %) for video QC. Passthrough image, outputs JSON report.",
"deprecated": false,
"experimental": false
},
{
"name": "◎ RadianceMetadataOverlay",
"displayName": "◎ RadianceMetadataOverlay",
"category": "FXTD Studios/Radiance/Draw",
"description": "Burn-in metadata, timecode, and reports onto images (Slate/Burn-in).",
"deprecated": false,
"experimental": false
},
{
"name": "◎ RadianceNukeBridge",
"displayName": "◎ RadianceNukeBridge",
"category": "FXTD Studios/Radiance/Pipeline",
"description": "Send images directly to Nuke's Viewer via EXR + TCP. Writes full float32 EXR with RGBA + Depth using Radiance IO, then creates a Read node in Nuke connected to the Viewer. Requires scripts/start_nuke_server.py running inside Nuke.",
"deprecated": false,
"experimental": false
},
{
"name": "◎ RadianceQC",
"displayName": "◎ RadianceQC",
"category": "FXTD Studios/Radiance/Analyze",
"description": "Production QC with comprehensive checks and structured reporting",
"deprecated": false,
"experimental": false
},
{
"name": "◎ RadianceQCExport",
"displayName": "◎ RadianceQCExport",
"category": "FXTD Studios/Radiance/Analyze",
"deprecated": false,
"experimental": false
},
{
"name": "◎ RadianceShowText",
"displayName": "◎ RadianceShowText",
"category": "FXTD Studios/Radiance/Utilities",
"description": "Displays any input data as text directly on the node UI.",
"deprecated": false,
"experimental": false
},
{
"name": "◎ RadianceTemporalSmooth",
"displayName": "◎ RadianceTemporalSmooth",
"category": "FXTD Studios/Radiance/Video",
"description": "Reduce inter-frame flicker in video batches via per-pixel EMA with optional motion-aware masking.",
"deprecated": false,
"experimental": false
},
{
"name": "◎ RadianceVectorscope",
"displayName": "◎ RadianceVectorscope",
"category": "FXTD Studios/Radiance/Analyze",
"description": "Visualize color saturation and hue distribution (U/V plot).",
"deprecated": false,
"experimental": false
},
{
"name": "◎ RadianceWaveform",
"displayName": "◎ RadianceWaveform",
"category": "FXTD Studios/Radiance/Analyze",
"description": "Visualize image exposure and channel balance using a Waveform monitor.",
"deprecated": false,
"experimental": false
},
{
"name": "ACES2OutputTransform",
"displayName": "ACES2OutputTransform",
"category": "FXTD Studios/Radiance/Color",
"description": "Apply ACES 2.0 Output Transform with proper gamut mapping for SDR, HDR, or Cinema output.",
"deprecated": false,
"experimental": false
},
{
"name": "ARRIWideGamut4",
"displayName": "ARRIWideGamut4",
"category": "FXTD Studios/Radiance/Color",
"description": "Convert to/from ARRI Wide Gamut 4 (AWG4) for Alexa 35.",
"deprecated": false,
"experimental": false
},
{
"name": "ColorSpaceConvert",
"displayName": "ColorSpaceConvert",
"category": "FXTD Studios/Radiance/Color",
"description": "GPU-accelerated color space conversion (sRGB, ACEScg, ACEScct, Rec.2020, DCI-P3). Uses industry-standard matrices.",
"deprecated": false,
"experimental": false
},
{
"name": "DaVinciWideGamut",
"displayName": "DaVinciWideGamut",
"category": "FXTD Studios/Radiance/Color",
"description": "Convert to/from DaVinci Wide Gamut and DaVinci Intermediate.",
"deprecated": false,
"experimental": false
},
{
"name": "Float32ColorCorrect",
"displayName": "Float32ColorCorrect",
"category": "FXTD Studios/Radiance/Color",
"description": "Professional 32-bit color correction with exposure, contrast, saturation, gamma, and per-channel lift/gain controls.",
"deprecated": false,
"experimental": false
},
{
"name": "FXTD_RadianceGradeApply",
"displayName": "FXTD_RadianceGradeApply",
"category": "FXTD Studios/Radiance/Color",
"description": "Bakes Radiance grading math into the image tensor permanently.",
"deprecated": false,
"experimental": false
},
{
"name": "FXTD_RadianceViewer",
"displayName": "FXTD_RadianceViewer",
"category": "FXTD Studios/Radiance/Views",
"description": "VFX Industry-Standard Viewer v2.3.3 — Pro Evolution:\n• GPU Waveform / RGB Parade / Vectorscope / Histogram scopes\n• Power Windows masking (Radial + Box, feather, rotation)\n• Comparison Bridge — mouse-draggable wipe + reference shelf (8 stills)\n• Anamorphic lens streaks + Brown-Conrady k1/k2 distortion\n• Edge-preserving Bilateral Filter denoising (7×7 GPU kernel)\n• Channel viewing (RGB/R/G/B/Alpha/Luma), False Color, Zebra\n• 16-bit PNG + .rhdr HDR sidecar + .exr export\n• IMAGE passthrough — no longer a dead-end node",
"deprecated": false,
"experimental": false
},
{
"name": "GPUTensorOps",
"displayName": "GPUTensorOps",
"category": "FXTD Studios/Radiance/Color",
"description": "GPU-accelerated HDR operations. Fast exposure, gamma, and normalization.",
"deprecated": false,
"experimental": false
},
{
"name": "HDR360Generate",
"displayName": "HDR360Generate",
"category": "FXTD Studios/Radiance/Image",
"description": "Generate 360° equirectangular panoramas for HDRI environment mapping in 3D applications.",
"deprecated": false,
"experimental": false
},
{
"name": "HDRExpandDynamicRange",
"displayName": "HDRExpandDynamicRange",
"category": "FXTD Studios/Radiance/Color",
"description": "Expand SDR images to HDR dynamic range by recovering highlights and extending stops of exposure latitude.",
"deprecated": false,
"experimental": false
},
{
"name": "HDRExposureBlend",
"displayName": "HDRExposureBlend",
"category": "FXTD Studios/Radiance/Color",
"description": "Blend multiple exposures (bracketing) for extended dynamic range. Takes highlights from low exposure and shadows from high exposure for optimal color grading.",
"deprecated": false,
"experimental": false
},
{
"name": "HDRHistogram",
"displayName": "HDRHistogram",
"category": "FXTD Studios/Radiance/Analyze",
"description": "Analyze HDR image histogram with dynamic range statistics, clipping indicators, and stops visualization.",
"deprecated": false,
"experimental": false
},
{
"name": "HDRShadowHighlightRecovery",
"displayName": "HDRShadowHighlightRecovery",
"category": "FXTD Studios/Radiance/Color",
"description": "Recover shadow and highlight detail from a single HDR image for better color grading flexibility.",
"deprecated": false,
"experimental": false
},
{
"name": "HDRToneMap",
"displayName": "HDRToneMap",
"category": "FXTD Studios/Radiance/Color",
"description": "Professional HDR tone mapping with presets and advanced controls. GPU-accelerated.",
"deprecated": false,
"experimental": false
},
{
"name": "ImageToFloat32",
"displayName": "ImageToFloat32",
"category": "FXTD Studios/Radiance/Color",
"description": "Convert images to 32-bit float precision for HDR processing. Preserves full dynamic range without clamping.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceAdvancedReroute",
"displayName": "RadianceAdvancedReroute",
"category": "FXTD Studios/Radiance/Layout",
"description": "Professional labeled reroute — color, icon, style, group tag, description tooltip, and live type introspection. Renders as a styled pill via radiance_layout.js.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceAIUpscale",
"displayName": "RadianceAIUpscale",
"category": "FXTD Studios/Radiance/Image",
"description": "AI-powered upscaling using neural network models. Supports tiled processing for large images.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceApplyGradeInfo",
"displayName": "RadianceApplyGradeInfo",
"category": "FXTD Studios/Radiance/Color",
"description": "Apply a saved grade_info JSON to any image. Replicates a RadianceGrade exactly.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceBitDepthConvert",
"displayName": "RadianceBitDepthConvert",
"category": "FXTD Studios/Radiance/Image",
"description": "Convert between bit depths with professional dithering to reduce banding.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceCinematicPromptEncoder",
"displayName": "RadianceCinematicPromptEncoder",
"category": "FXTD Studios/Radiance/Generate",
"description": "v2.3.3 — Universal cinematic encoder. Auto-selects prose format for Flux/T5/Kolors and structured format for SD1.5/SDXL. Supports scene mood, A/B prompts, subject weighting, real token counts, art direction and architecture-aware negatives.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceCompressionArtifacts",
"displayName": "RadianceCompressionArtifacts",
"category": "FXTD Studios/Radiance/Filter",
"description": "Add compression artifacts (JPEG blocking, color banding).",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceControlApply",
"displayName": "RadianceControlApply",
"category": "FXTD Studios/Radiance/Generate",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceDebugProbe",
"displayName": "RadianceDebugProbe",
"category": "FXTD Studios/Radiance/Layout",
"description": "Non-destructive debug probe. Logs tensor shape/range/dtype, string values, list/dict lengths. Data is passed through unchanged.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceDepthOfField",
"displayName": "RadianceDepthOfField",
"category": "FXTD Studios/Radiance/Filter",
"description": "Apply cinematic depth of field blur with optional depth map input.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceDNAReader",
"displayName": "RadianceDNAReader",
"category": "FXTD Studios/Radiance/Data",
"description": "Reads Radiance Digital DNA signature from all frames in a batch.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceDNAValidator",
"displayName": "RadianceDNAValidator",
"category": "FXTD Studios/Radiance/Data",
"description": "QC gate — validates DNA signature (optionally blocks unsigned images).",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceDNAWriter",
"displayName": "RadianceDNAWriter",
"category": "FXTD Studios/Radiance/Data",
"description": "Signs images with Radiance DNA metadata (preserves HDR special values).",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceDownscale32bit",
"displayName": "RadianceDownscale32bit",
"category": "FXTD Studios/Radiance/Image",
"description": "GPU-accelerated 32-bit downscaling with anti-aliasing.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceFilmGrain",
"displayName": "RadianceFilmGrain",
"category": "FXTD Studios/Radiance/Filter",
"description": "Unified photographic grain simulation with camera and film stock profiles. Full float32/HDR pipeline — zero output clamping. Physically-based grain with silver halide clumping, exposure-dependent density, and HDR-safe compositing.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceGate",
"displayName": "RadianceGate",
"category": "FXTD Studios/Radiance/Layout",
"description": "Boolean gate — passes data when open=True, returns fallback (or None) when open=False. Use to enable/disable branches without rewiring.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceGPUColorMatrix",
"displayName": "RadianceGPUColorMatrix",
"category": "FXTD Studios/Radiance/Color",
"description": "Apply a 3×3 or 4×4 color matrix to an image. Includes presets (Identity, Sepia, B&W, Invert) and full custom vector entry with optional offset.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceGrade",
"displayName": "RadianceGrade",
"category": "FXTD Studios/Radiance/Color",
"description": "Professional color grading with per-channel LGG/Offset, cinematic presets, LAB match grading, and JSON grade export.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceGradeMatch",
"displayName": "RadianceGradeMatch",
"category": "FXTD Studios/Radiance/Color",
"description": "Match source image color statistics to a reference image using LAB mean/std matching.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceHighlightSynthesis",
"displayName": "RadianceHighlightSynthesis",
"category": "FXTD Studios/Radiance/Color",
"description": "Synthesize high dynamic range details in clipped highlights to simulate film scan quality.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceLoadImageMask",
"displayName": "RadianceLoadImageMask",
"category": "FXTD Studios/Radiance/Masking",
"description": "Load an image with optional non-destructive mask override. If a companion '_radmask.png' file exists alongside the source image, its alpha channel is used as the mask instead of the image's own alpha. The Radiance mask editor frontend saves masks in this companion format.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceLogCurveDecode",
"displayName": "RadianceLogCurveDecode",
"category": "FXTD Studios/Radiance/Color",
"description": "Decode log footage (LogC3/4, S-Log3, Log3G10, etc.) to linear with EI control and gamut transform.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceLogCurveEncode",
"displayName": "RadianceLogCurveEncode",
"category": "FXTD Studios/Radiance/Color",
"description": "Encode linear footage to log curves (LogC3/4, S-Log3, Log3G10, etc.) with EI control.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceLoraStack",
"displayName": "RadianceLoraStack",
"category": "FXTD Studios/Radiance/Generate",
"description": "Compose up to 5 LoRAs into an accumulating LORA_STACK. Chain multiple stacks together. Feed into Radiance Unified Loader.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceLUTApply",
"displayName": "RadianceLUTApply",
"category": "FXTD Studios/Radiance/Color",
"description": "Apply a 3D LUT (.cube) with trilinear or tetrahedral interpolation. Supports log-space input and HDR (unclamped) output.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceLUTBlend",
"displayName": "RadianceLUTBlend",
"category": "FXTD Studios/Radiance/Color",
"description": "Blend two LUTs with various blend modes for creative color grading.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceMotionBlur",
"displayName": "RadianceMotionBlur",
"category": "FXTD Studios/Radiance/Filter",
"description": "Apply motion blur (directional, radial, or zoom) to simulate camera movement.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceMux",
"displayName": "RadianceMux",
"category": "FXTD Studios/Radiance/Layout",
"description": "A/B/C/D input multiplexer — select which of up to 4 inputs to pass through using an index (0=A, 1=B, 2=C, 3=D). Perfect for rapid comparisons without rewiring.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceNote",
"displayName": "RadianceNote",
"category": "FXTD Studios/Radiance/Layout",
"description": "Sticky note for workflow documentation. No data connections — pure display. Supports a title, body text, and color selection.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceOCIOCDL",
"displayName": "RadianceOCIOCDL",
"category": "FXTD Studios/Radiance/Color",
"description": "ASC CDL transform for shot matching. Supports .cc/.ccc files or manual SOP values.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceOCIOColorTransform",
"displayName": "RadianceOCIOColorTransform",
"category": "FXTD Studios/Radiance/Color",
"description": "Apply an OpenColorIO color space transform between any two spaces defined in the config.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceOCIODisplayView",
"displayName": "RadianceOCIODisplayView",
"category": "FXTD Studios/Radiance/Color",
"description": "OCIO Display/View transform for professional output. Supports ACES configs with Look and context variables.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceProUpscale",
"displayName": "RadianceProUpscale",
"category": "FXTD Studios/Radiance/Image",
"description": "Professional 32-bit upscaler optimized for Flux with HDR support.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceReroute",
"displayName": "RadianceReroute",
"category": "FXTD Studios/Radiance/Layout",
"description": "Lightweight named reroute — label any wire without visual overhead. Backward compatible: the label is optional and purely informational. Use Reroute+ for color, icons, styles and group tags.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceResolution",
"displayName": "RadianceResolution",
"category": "FXTD Studios/Radiance/Image",
"description": "Professional resolution selector with internal preview card. Outputs empty LATENT for Flux/SDXL/SD with correct channel count. 30+ cinema/social/AI presets. Manual latent_channels override for custom architectures.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceRollingShutter",
"displayName": "RadianceRollingShutter",
"category": "FXTD Studios/Radiance/Filter",
"description": "Simulate rolling shutter artifacts (skew, wobble, flash banding).",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceSamplerPro",
"displayName": "RadianceSamplerPro",
"category": "FXTD Studios/Radiance/Generate",
"description": "v4.2 — Universal diffusion sampler. Auto-detects model type (Flux, SD3, SDXL, WAN, LTX, HunyuanVideo, Lumina2, Chroma). Phase-shift sampling, AYS schedules, PAG, dynamic guidance, tiled sampling, multi-conditioning, noise types, refiner chain.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceSceneLinearWorkflow",
"displayName": "RadianceSceneLinearWorkflow",
"category": "FXTD Studios/Radiance/Color",
"description": "Scene-linear workflow presets. Returns decode/working_space/encode settings for color pipeline.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceUnifiedLoader",
"displayName": "RadianceUnifiedLoader",
"category": "FXTD Studios/Radiance/Generate",
"description": "Universal loader v3.1 — auto-detects architecture (Flux, SD3, SDXL, Wan, LTX 2.3, HunyuanVideo, PixArt, Lumina2, etc.), named CLIP slots, chainable LORA_STACK, model_meta JSON, latent_format, offload mode. ZERO stale cache hits (mtime + size fingerprinting).",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceUpscaleBySize",
"displayName": "RadianceUpscaleBySize",
"category": "FXTD Studios/Radiance/Image",
"description": "Upscale to exact dimensions with aspect ratio control.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceVAEDecode",
"displayName": "RadianceVAEDecode",
"category": "FXTD Studios/Radiance/Generate",
"description": "v2.3 — Universal 4K+ VAE decode. True HDR Compress(Log) with soft-shoulder and highlight denoise for clean, clamp-free HDR output. Auto VAE-factor, 11 color spaces, video 5D support, auto-crop from radiance_meta.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceVAEEncode",
"displayName": "RadianceVAEEncode",
"category": "FXTD Studios/Radiance/Generate",
"description": "v2.3 — Universal 4K+ VAE encode. Auto VAE-factor detection, video 5D latent support, 11 color spaces, mean/sample/mode latent sampling, batched tile processing, quality report, latent_format output. Compress (Log) HDR mode now passes full scene-linear range through log curve without any post-encode clamp — decode side handles noise cleanly.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceWhiteBalance",
"displayName": "RadianceWhiteBalance",
"category": "FXTD Studios/Radiance/Color",
"description": "Adjust white balance using color temperature (Kelvin) and tint.",
"deprecated": false,
"experimental": false
},
{
"name": "RadianceWorkspace",
"displayName": "RadianceWorkspace",
"category": "FXTD Studios/Radiance/Layout",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "RES4LYF",
"displayName": "RES4LYF",
"nodes": [
{
"name": "ClownSamplerSelector_Beta",
"displayName": "ClownSamplerSelector",
"category": "RES4LYF/sampler_options"
},
{
"name": "Constant Scheduler",
"displayName": "Constant Scheduler",
"category": "RES4LYF/schedulers"
},
{
"name": "EmptyLatentImage64",
"displayName": "EmptyLatentImage64",
"category": "RES4LYF/latents"
},
{
"name": "EmptyLatentImageCustom",
"displayName": "EmptyLatentImageCustom",
"category": "RES4LYF/latents"
},
{
"name": "Mask Sketch",
"displayName": "Mask Sketch",
"category": "image"
},
{
"name": "SeedGenerator",
"displayName": "SeedGenerator",
"category": "RES4LYF/utilities"
},
{
"name": "SetImageSize",
"displayName": "SetImageSize",
"category": "RES4LYF/images",
"description": "Generate a pair of integers for image sizes."
},
{
"name": "SetImageSizeWithScale",
"displayName": "SetImageSizeWithScale",
"category": "RES4LYF/images",
"description": "Generate a pair of integers for image sizes."
},
{
"name": "Sigmas Abs",
"displayName": "Sigmas Abs",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas AdaptiveNoiseFloor",
"displayName": "Sigmas AdaptiveNoiseFloor",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas AdaptiveStep",
"displayName": "Sigmas AdaptiveStep",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Add",
"displayName": "Sigmas Add",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Append",
"displayName": "Sigmas Append",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas ArcCosine",
"displayName": "Sigmas ArcCosine",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas ArcSine",
"displayName": "Sigmas ArcSine",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas ArcTangent",
"displayName": "Sigmas ArcTangent",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Attractor",
"displayName": "Sigmas Attractor",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas CatmullRom",
"displayName": "Sigmas CatmullRom",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Chaos",
"displayName": "Sigmas Chaos",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Cleanup",
"displayName": "Sigmas Cleanup",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas CNFInverse",
"displayName": "Sigmas CNFInverse",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas CollatzIteration",
"displayName": "Sigmas CollatzIteration",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Concat",
"displayName": "Sigmas Concat",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas ConwaySequence",
"displayName": "Sigmas ConwaySequence",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas CrossProduct",
"displayName": "Sigmas CrossProduct",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas DeleteBelowFloor",
"displayName": "Sigmas DeleteBelowFloor",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas DeleteDuplicates",
"displayName": "Sigmas DeleteDuplicates",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas DotProduct",
"displayName": "Sigmas DotProduct",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Easing",
"displayName": "Sigmas Easing",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Fmod",
"displayName": "Sigmas Fmod",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Frac",
"displayName": "Sigmas Frac",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas From Text",
"displayName": "Sigmas From Text",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas GammaBeta",
"displayName": "Sigmas GammaBeta",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Gaussian",
"displayName": "Sigmas Gaussian",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas GaussianCDF",
"displayName": "Sigmas GaussianCDF",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas GilbreathSequence",
"displayName": "Sigmas GilbreathSequence",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas HarmonicDecay",
"displayName": "Sigmas HarmonicDecay",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Hyperbolic",
"displayName": "Sigmas Hyperbolic",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas If",
"displayName": "Sigmas If",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas InvLerp",
"displayName": "Sigmas InvLerp",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Iteration Karras",
"displayName": "Sigmas Iteration Karras",
"category": "RES4LYF/schedulers"
},
{
"name": "Sigmas Iteration Polyexp",
"displayName": "Sigmas Iteration Polyexp",
"category": "RES4LYF/schedulers"
},
{
"name": "Sigmas KernelSmooth",
"displayName": "Sigmas KernelSmooth",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas LambertW",
"displayName": "Sigmas LambertW",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas LangevinDynamics",
"displayName": "Sigmas LangevinDynamics",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Lerp",
"displayName": "Sigmas Lerp",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas LinearSine",
"displayName": "Sigmas LinearSine",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Logarithm2",
"displayName": "Sigmas Logarithm2",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Modulus",
"displayName": "Sigmas Modulus",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Mult",
"displayName": "Sigmas Mult",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Noise Inversion",
"displayName": "Sigmas Noise Inversion",
"category": "RES4LYF/sigmas",
"description": "For use with unsampling. Connect sigmas_fwd to the unsampling (first) node, and sigmas_rev to the sampling (second) node."
},
{
"name": "Sigmas NormalizingFlows",
"displayName": "Sigmas NormalizingFlows",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Pad",
"displayName": "Sigmas Pad",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Percentile",
"displayName": "Sigmas Percentile",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas PersistentHomology",
"displayName": "Sigmas PersistentHomology",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Power",
"displayName": "Sigmas Power",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas QuantileNorm",
"displayName": "Sigmas QuantileNorm",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Quotient",
"displayName": "Sigmas Quotient",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas ReactionDiffusion",
"displayName": "Sigmas ReactionDiffusion",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas RiemannianFlow",
"displayName": "Sigmas RiemannianFlow",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas SetFloor",
"displayName": "Sigmas SetFloor",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Sigmoid",
"displayName": "Sigmas Sigmoid",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas SmoothStep",
"displayName": "Sigmas SmoothStep",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Split",
"displayName": "Sigmas Split",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas SquareRoot",
"displayName": "Sigmas SquareRoot",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Start",
"displayName": "Sigmas Start",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas StepwiseMultirate",
"displayName": "Sigmas StepwiseMultirate",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas TimeStep",
"displayName": "Sigmas TimeStep",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Truncate",
"displayName": "Sigmas Truncate",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Unpad",
"displayName": "Sigmas Unpad",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas Variance Floor",
"displayName": "Sigmas Variance Floor",
"category": "RES4LYF/sigmas",
"description": "Process a sigma schedule so that any steps that are too large for variance-locked SDE sampling are replaced with the maximum permissible value.Will be very difficult to approach sigma = 0 due to the nature of the math, as steps become very small much below approximately sigma = 0.15 to 0.2."
},
{
"name": "Sigmas ZetaEta",
"displayName": "Sigmas ZetaEta",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas2 Add",
"displayName": "Sigmas2 Add",
"category": "RES4LYF/sigmas"
},
{
"name": "Sigmas2 Mult",
"displayName": "Sigmas2 Mult",
"category": "RES4LYF/sigmas"
},
{
"name": "Tan Scheduler",
"displayName": "Tan Scheduler",
"category": "RES4LYF/schedulers"
},
{
"name": "Tan Scheduler 2",
"displayName": "Tan Scheduler 2",
"category": "RES4LYF/schedulers"
},
{
"name": "Tan Scheduler 2 Simple",
"displayName": "Tan Scheduler 2 Simple",
"category": "RES4LYF/schedulers"
},
{
"name": "TemporalCrossAttnMask",
"displayName": "TemporalCrossAttnMask",
"category": "RES4LYF/masks"
},
{
"name": "TemporalMaskGenerator",
"displayName": "TemporalMaskGenerator",
"category": "RES4LYF/masks",
"experimental": true
},
{
"name": "TemporalSplitAttnMask",
"displayName": "TemporalSplitAttnMask",
"category": "RES4LYF/masks"
},
{
"name": "TemporalSplitAttnMask (Midframe)",
"displayName": "TemporalSplitAttnMask (Midframe)",
"category": "RES4LYF/masks",
"experimental": true
},
{
"name": "TextBox1",
"displayName": "TextBox1",
"category": "RES4LYF/text",
"description": "Multiline textbox."
},
{
"name": "TextBox2",
"displayName": "TextBox2",
"category": "RES4LYF/text",
"description": "Multiline textbox."
},
{
"name": "TextBox3",
"displayName": "TextBox3",
"category": "RES4LYF/text",
"description": "Multiline textbox."
},
{
"name": "TextConcatenate",
"displayName": "TextConcatenate",
"category": "RES4LYF/text"
},
{
"name": "TextShuffle",
"displayName": "TextShuffle",
"category": "RES4LYF/text"
}
]
},
{
"id": "wanvaceadvanced",
"registryId": "wanvaceadvanced",
"displayName": "ComfyUI-WanVaceAdvanced",
"description": "Precise control over Vace frame strengths for reference images, control videos. Also allows Phantom embeddings to be combined with VACE accurately.",
"repoUrl": "https://github.com/drozbay/ComfyUI-WanVaceAdvanced",
"publisher": {
"id": "drozbay",
"name": "drozbay"
},
"downloads": 20594,
"githubStars": 84,
"latestVersion": "1.4.0",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2025-12-09T14:11:04.698353Z",
"supportedOs": [],
"supportedAccelerators": [],
"nodes": [
{
"name": "HuMoI2VPatch",
"displayName": "HuMoI2VPatch",
"category": "WanVaceAdvanced",
"deprecated": false,
"experimental": false
},
{
"name": "StringToFloatListRanged",
"displayName": "StringToFloatListRanged",
"category": "WanVaceAdvanced",
"description": "Converts a comma-separated string to a float list. Supports repeat notation using '#' (e.g., '3#5' repeats 3.0 five times). Mix regular numbers and repeats: '1, 2.5#3, 7' becomes [1.0, 2.5, 2.5, 2.5, 7.0].",
"deprecated": false,
"experimental": false
},
{
"name": "VaceAdvancedModelPatch",
"displayName": "VaceAdvancedModelPatch",
"category": "WanVaceAdvanced",
"deprecated": false,
"experimental": false
},
{
"name": "VaceStrengthTester",
"displayName": "VaceStrengthTester",
"category": "WanVaceAdvanced",
"deprecated": false,
"experimental": false
},
{
"name": "WanVacePhantomDual",
"displayName": "WanVacePhantomDual",
"category": "WanVaceAdvanced",
"deprecated": true,
"experimental": false
},
{
"name": "WanVacePhantomDualV2",
"displayName": "WanVacePhantomDualV2",
"category": "WanVaceAdvanced",
"deprecated": false,
"experimental": false
},
{
"name": "WanVacePhantomExperimental",
"displayName": "WanVacePhantomExperimental",
"category": "WanVaceAdvanced",
"deprecated": true,
"experimental": true
},
{
"name": "WanVacePhantomExperimentalV2",
"displayName": "WanVacePhantomExperimentalV2",
"category": "WanVaceAdvanced",
"deprecated": false,
"experimental": true
},
{
"name": "WanVacePhantomSimple",
"displayName": "WanVacePhantomSimple",
"category": "WanVaceAdvanced",
"deprecated": true,
"experimental": false
},
{
"name": "WanVacePhantomSimpleV2",
"displayName": "WanVacePhantomSimpleV2",
"category": "WanVaceAdvanced",
"deprecated": false,
"experimental": false
},
{
"name": "WanVaceToVideoLatent",
"displayName": "WanVaceToVideoLatent",
"category": "WanVaceAdvanced",
"deprecated": false,
"experimental": true
},
{
"name": "WVAOptionsNode",
"displayName": "WVAOptionsNode",
"category": "WanVaceAdvanced",
"deprecated": false,
"experimental": false
},
{
"name": "WVAPipeSimple",
"displayName": "WVAPipeSimple",
"category": "WanVaceAdvanced",
"deprecated": false,
"experimental": false
}
]
},
{
"id": "was-node-suite-comfyui",
"registryId": "was-node-suite-comfyui",
"displayName": "WAS Node Suite",
"repoUrl": "https://github.com/WASasquatch/was-node-suite-comfyui",
"publisher": {
"id": "was",
"name": "WAS"
},
"downloads": 1002453,
"githubStars": 1786,
"latestVersion": "1.0.1",
"license": "{\"file\": \"LICENSE\"}",
"lastUpdated": "2024-08-01T05:28:23.655235Z",
"nodes": [
{
"name": "Blend Latents",
"displayName": "Blend Latents",
"category": "WAS Suite/Latent",
"deprecated": false,
"experimental": false
},
{
"name": "BLIP Analyze Image",
"displayName": "BLIP Analyze Image",
"category": "WAS Suite/Text/AI",
"deprecated": false,
"experimental": false
},
{
"name": "BLIP Model Loader",
"displayName": "BLIP Model Loader",
"category": "WAS Suite/Loaders",
"deprecated": false,
"experimental": false
},
{
"name": "Boolean To Text",
"displayName": "Boolean To Text",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Bounded Image Blend",
"displayName": "Bounded Image Blend",
"category": "WAS Suite/Image/Bound",
"deprecated": false,
"experimental": false
},
{
"name": "Bounded Image Blend with Mask",
"displayName": "Bounded Image Blend with Mask",
"category": "WAS Suite/Image/Bound",
"deprecated": false,
"experimental": false
},
{
"name": "Bounded Image Crop",
"displayName": "Bounded Image Crop",
"category": "WAS Suite/Image/Bound",
"deprecated": false,
"experimental": false
},
{
"name": "Bounded Image Crop with Mask",
"displayName": "Bounded Image Crop with Mask",
"category": "WAS Suite/Image/Bound",
"deprecated": false,
"experimental": false
},
{
"name": "Bus Node",
"displayName": "Bus Node",
"category": "WAS Suite/Utilities",
"deprecated": false,
"experimental": false
},
{
"name": "Cache Node",
"displayName": "Cache Node",
"category": "WAS Suite/IO",
"deprecated": false,
"experimental": false
},
{
"name": "Checkpoint Loader",
"displayName": "Checkpoint Loader",
"category": "WAS Suite/Loaders/Advanced",
"deprecated": false,
"experimental": false
},
{
"name": "Checkpoint Loader (Simple)",
"displayName": "Checkpoint Loader (Simple)",
"category": "WAS Suite/Loaders",
"deprecated": false,
"experimental": false
},
{
"name": "CLIP Input Switch",
"displayName": "CLIP Input Switch",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "CLIP Vision Input Switch",
"displayName": "CLIP Vision Input Switch",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "CLIPSeg Batch Masking",
"displayName": "CLIPSeg Batch Masking",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "CLIPSeg Masking",
"displayName": "CLIPSeg Masking",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "CLIPSeg Model Loader",
"displayName": "CLIPSeg Model Loader",
"category": "WAS Suite/Loaders",
"deprecated": false,
"experimental": false
},
{
"name": "CLIPTextEncode (NSP)",
"displayName": "CLIPTextEncode (NSP)",
"category": "WAS Suite/Conditioning",
"deprecated": false,
"experimental": false
},
{
"name": "Conditioning Input Switch",
"displayName": "Conditioning Input Switch",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Constant Number",
"displayName": "Constant Number",
"category": "WAS Suite/Number",
"deprecated": false,
"experimental": false
},
{
"name": "Control Net Model Input Switch",
"displayName": "Control Net Model Input Switch",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Convert Masks to Images",
"displayName": "Convert Masks to Images",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Create Grid Image",
"displayName": "Create Grid Image",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Create Grid Image from Batch",
"displayName": "Create Grid Image from Batch",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Create Morph Image",
"displayName": "Create Morph Image",
"category": "WAS Suite/Animation",
"deprecated": false,
"experimental": false
},
{
"name": "Create Morph Image from Path",
"displayName": "Create Morph Image from Path",
"category": "WAS Suite/Animation",
"deprecated": false,
"experimental": false
},
{
"name": "Create Video from Path",
"displayName": "Create Video from Path",
"category": "WAS Suite/Animation",
"deprecated": false,
"experimental": false
},
{
"name": "Debug Number to Console",
"displayName": "Debug Number to Console",
"category": "WAS Suite/Debug",
"deprecated": false,
"experimental": false
},
{
"name": "Dictionary to Console",
"displayName": "Dictionary to Console",
"category": "WAS Suite/Debug",
"deprecated": false,
"experimental": false
},
{
"name": "Diffusers Hub Model Down-Loader",
"displayName": "Diffusers Hub Model Down-Loader",
"category": "WAS Suite/Loaders/Advanced",
"deprecated": false,
"experimental": false
},
{
"name": "Diffusers Model Loader",
"displayName": "Diffusers Model Loader",
"category": "WAS Suite/Loaders/Advanced",
"deprecated": false,
"experimental": false
},
{
"name": "Export API",
"displayName": "Export API",
"category": "WAS Suite/Debug",
"deprecated": false,
"experimental": false
},
{
"name": "Hex to HSL",
"displayName": "Hex to HSL",
"category": "WAS Suite/Utilities",
"deprecated": false,
"experimental": false
},
{
"name": "HSL to Hex",
"displayName": "HSL to Hex",
"category": "WAS Suite/Utilities",
"deprecated": false,
"experimental": false
},
{
"name": "Image Analyze",
"displayName": "Image Analyze",
"category": "WAS Suite/Image/Analyze",
"deprecated": false,
"experimental": false
},
{
"name": "Image Aspect Ratio",
"displayName": "Image Aspect Ratio",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Image Batch",
"displayName": "Image Batch",
"category": "WAS Suite/Image",
"deprecated": false,
"experimental": false
},
{
"name": "Image Blank",
"displayName": "Image Blank",
"category": "WAS Suite/Image",
"deprecated": false,
"experimental": false
},
{
"name": "Image Blend",
"displayName": "Image Blend",
"category": "WAS Suite/Image",
"deprecated": false,
"experimental": false
},
{
"name": "Image Blend by Mask",
"displayName": "Image Blend by Mask",
"category": "WAS Suite/Image",
"deprecated": false,
"experimental": false
},
{
"name": "Image Blending Mode",
"displayName": "Image Blending Mode",
"category": "WAS Suite/Image",
"deprecated": false,
"experimental": false
},
{
"name": "Image Bloom Filter",
"displayName": "Image Bloom Filter",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image Bounds",
"displayName": "Image Bounds",
"category": "WAS Suite/Image/Bound",
"deprecated": false,
"experimental": false
},
{
"name": "Image Bounds to Console",
"displayName": "Image Bounds to Console",
"category": "WAS Suite/Debug",
"deprecated": false,
"experimental": false
},
{
"name": "Image Canny Filter",
"displayName": "Image Canny Filter",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image Chromatic Aberration",
"displayName": "Image Chromatic Aberration",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image Color Palette",
"displayName": "Image Color Palette",
"category": "WAS Suite/Image/Analyze",
"deprecated": false,
"experimental": false
},
{
"name": "Image Crop Face",
"displayName": "Image Crop Face",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Image Crop Location",
"displayName": "Image Crop Location",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Image Crop Square Location",
"displayName": "Image Crop Square Location",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Image Displacement Warp",
"displayName": "Image Displacement Warp",
"category": "WAS Suite/Image/Transform",
"deprecated": false,
"experimental": false
},
{
"name": "Image Dragan Photography Filter",
"displayName": "Image Dragan Photography Filter",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image Edge Detection Filter",
"displayName": "Image Edge Detection Filter",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image fDOF Filter",
"displayName": "Image fDOF Filter",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image Film Grain",
"displayName": "Image Film Grain",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image Filter Adjustments",
"displayName": "Image Filter Adjustments",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image Flip",
"displayName": "Image Flip",
"category": "WAS Suite/Image/Transform",
"deprecated": false,
"experimental": false
},
{
"name": "Image Generate Gradient",
"displayName": "Image Generate Gradient",
"category": "WAS Suite/Image/Generate",
"deprecated": false,
"experimental": false
},
{
"name": "Image Gradient Map",
"displayName": "Image Gradient Map",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image High Pass Filter",
"displayName": "Image High Pass Filter",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image History Loader",
"displayName": "Image History Loader",
"category": "WAS Suite/History",
"deprecated": false,
"experimental": false
},
{
"name": "Image Input Switch",
"displayName": "Image Input Switch",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Image Levels Adjustment",
"displayName": "Image Levels Adjustment",
"category": "WAS Suite/Image/Adjustment",
"deprecated": false,
"experimental": false
},
{
"name": "Image Load",
"displayName": "Image Load",
"category": "WAS Suite/IO",
"deprecated": false,
"experimental": false
},
{
"name": "Image Lucy Sharpen",
"displayName": "Image Lucy Sharpen",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image Median Filter",
"displayName": "Image Median Filter",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image Mix RGB Channels",
"displayName": "Image Mix RGB Channels",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Image Monitor Effects Filter",
"displayName": "Image Monitor Effects Filter",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image Nova Filter",
"displayName": "Image Nova Filter",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image Padding",
"displayName": "Image Padding",
"category": "WAS Suite/Image/Transform",
"deprecated": false,
"experimental": false
},
{
"name": "Image Paste Crop",
"displayName": "Image Paste Crop",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Image Paste Crop by Location",
"displayName": "Image Paste Crop by Location",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Image Paste Face",
"displayName": "Image Paste Face",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Image Perlin Noise",
"displayName": "Image Perlin Noise",
"category": "WAS Suite/Image/Generate/Noise",
"deprecated": false,
"experimental": false
},
{
"name": "Image Perlin Power Fractal",
"displayName": "Image Perlin Power Fractal",
"category": "WAS Suite/Image/Generate/Noise",
"deprecated": false,
"experimental": false
},
{
"name": "Image Pixelate",
"displayName": "Image Pixelate",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Image Power Noise",
"displayName": "Image Power Noise",
"category": "WAS Suite/Image/Generate/Noise",
"deprecated": false,
"experimental": false
},
{
"name": "Image Rembg (Remove Background)",
"displayName": "Image Rembg (Remove Background)",
"category": "WAS Suite/Image/AI",
"deprecated": false,
"experimental": false
},
{
"name": "Image Remove Background (Alpha)",
"displayName": "Image Remove Background (Alpha)",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Image Remove Color",
"displayName": "Image Remove Color",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Image Resize",
"displayName": "Image Resize",
"category": "WAS Suite/Image/Transform",
"deprecated": false,
"experimental": false
},
{
"name": "Image Rotate",
"displayName": "Image Rotate",
"category": "WAS Suite/Image/Transform",
"deprecated": false,
"experimental": false
},
{
"name": "Image Rotate Hue",
"displayName": "Image Rotate Hue",
"category": "WAS Suite/Image/Adjustment",
"deprecated": false,
"experimental": false
},
{
"name": "Image Save",
"displayName": "Image Save",
"category": "WAS Suite/IO",
"deprecated": false,
"experimental": false
},
{
"name": "Image Seamless Texture",
"displayName": "Image Seamless Texture",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Image Select Channel",
"displayName": "Image Select Channel",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Image Select Color",
"displayName": "Image Select Color",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Image Send HTTP",
"displayName": "Image Send HTTP",
"category": "WAS Suite/IO",
"deprecated": false,
"experimental": false
},
{
"name": "Image Shadows and Highlights",
"displayName": "Image Shadows and Highlights",
"category": "WAS Suite/Image/Adjustment",
"deprecated": false,
"experimental": false
},
{
"name": "Image Size to Number",
"displayName": "Image Size to Number",
"category": "WAS Suite/Number/Operations",
"deprecated": false,
"experimental": false
},
{
"name": "Image SSAO (Ambient Occlusion)",
"displayName": "Image SSAO (Ambient Occlusion)",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image SSDO (Direct Occlusion)",
"displayName": "Image SSDO (Direct Occlusion)",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image Stitch",
"displayName": "Image Stitch",
"category": "WAS Suite/Image/Transform",
"deprecated": false,
"experimental": false
},
{
"name": "Image Style Filter",
"displayName": "Image Style Filter",
"category": "WAS Suite/Image/Filter",
"deprecated": false,
"experimental": false
},
{
"name": "Image Threshold",
"displayName": "Image Threshold",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Image Tiled",
"displayName": "Image Tiled",
"category": "WAS Suite/Image/Process",
"deprecated": false,
"experimental": false
},
{
"name": "Image to Latent Mask",
"displayName": "Image to Latent Mask",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Image to Noise",
"displayName": "Image to Noise",
"category": "WAS Suite/Image/Generate/Noise",
"deprecated": false,
"experimental": false
},
{
"name": "Image to Seed",
"displayName": "Image to Seed",
"category": "WAS Suite/Image/Analyze",
"deprecated": false,
"experimental": false
},
{
"name": "Image Transpose",
"displayName": "Image Transpose",
"category": "WAS Suite/Image/Transform",
"deprecated": false,
"experimental": false
},
{
"name": "Image Voronoi Noise Filter",
"displayName": "Image Voronoi Noise Filter",
"category": "WAS Suite/Image/Generate/Noise",
"deprecated": false,
"experimental": false
},
{
"name": "Images to Linear",
"displayName": "Images to Linear",
"category": "WAS Suite/Image",
"deprecated": false,
"experimental": false
},
{
"name": "Images to RGB",
"displayName": "Images to RGB",
"category": "WAS Suite/Image",
"deprecated": false,
"experimental": false
},
{
"name": "Inset Image Bounds",
"displayName": "Inset Image Bounds",
"category": "WAS Suite/Image/Bound",
"deprecated": false,
"experimental": false
},
{
"name": "Integer place counter",
"displayName": "Integer place counter",
"category": "WAS Suite/Integer",
"deprecated": false,
"experimental": false
},
{
"name": "KSampler (WAS)",
"displayName": "KSampler (WAS)",
"category": "WAS Suite/Sampling",
"deprecated": false,
"experimental": false
},
{
"name": "KSampler Cycle",
"displayName": "KSampler Cycle",
"category": "WAS Suite/Sampling",
"deprecated": false,
"experimental": false
},
{
"name": "Latent Batch",
"displayName": "Latent Batch",
"category": "WAS Suite/Latent",
"deprecated": false,
"experimental": false
},
{
"name": "Latent Input Switch",
"displayName": "Latent Input Switch",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Latent Noise Injection",
"displayName": "Latent Noise Injection",
"category": "WAS Suite/Latent/Generate",
"deprecated": false,
"experimental": false
},
{
"name": "Latent Size to Number",
"displayName": "Latent Size to Number",
"category": "WAS Suite/Number/Operations",
"deprecated": false,
"experimental": false
},
{
"name": "Latent Upscale by Factor (WAS)",
"displayName": "Latent Upscale by Factor (WAS)",
"category": "WAS Suite/Latent/Transform",
"deprecated": false,
"experimental": false
},
{
"name": "Load Cache",
"displayName": "Load Cache",
"category": "WAS Suite/IO",
"deprecated": false,
"experimental": false
},
{
"name": "Load Image Batch",
"displayName": "Load Image Batch",
"category": "WAS Suite/IO",
"deprecated": false,
"experimental": false
},
{
"name": "Load Lora",
"displayName": "Load Lora",
"category": "WAS Suite/Loaders",
"deprecated": false,
"experimental": false
},
{
"name": "Load Text File",
"displayName": "Load Text File",
"category": "WAS Suite/IO",
"deprecated": false,
"experimental": false
},
{
"name": "Logic Boolean",
"displayName": "Logic Boolean",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Logic Boolean Primitive",
"displayName": "Logic Boolean Primitive",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Logic Comparison AND",
"displayName": "Logic Comparison AND",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Logic Comparison OR",
"displayName": "Logic Comparison OR",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Logic Comparison XOR",
"displayName": "Logic Comparison XOR",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Logic NOT",
"displayName": "Logic NOT",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Lora Input Switch",
"displayName": "Lora Input Switch",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Lora Loader",
"displayName": "Lora Loader",
"category": "WAS Suite/Loaders",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Arbitrary Region",
"displayName": "Mask Arbitrary Region",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Batch",
"displayName": "Mask Batch",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Batch to Mask",
"displayName": "Mask Batch to Mask",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Ceiling Region",
"displayName": "Mask Ceiling Region",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Crop Dominant Region",
"displayName": "Mask Crop Dominant Region",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Crop Minority Region",
"displayName": "Mask Crop Minority Region",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Crop Region",
"displayName": "Mask Crop Region",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Dilate Region",
"displayName": "Mask Dilate Region",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Dominant Region",
"displayName": "Mask Dominant Region",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Erode Region",
"displayName": "Mask Erode Region",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Fill Holes",
"displayName": "Mask Fill Holes",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Floor Region",
"displayName": "Mask Floor Region",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Gaussian Region",
"displayName": "Mask Gaussian Region",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Invert",
"displayName": "Mask Invert",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Minority Region",
"displayName": "Mask Minority Region",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Paste Region",
"displayName": "Mask Paste Region",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Smooth Region",
"displayName": "Mask Smooth Region",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Mask Threshold Region",
"displayName": "Mask Threshold Region",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Masks Add",
"displayName": "Masks Add",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Masks Combine Batch",
"displayName": "Masks Combine Batch",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Masks Combine Regions",
"displayName": "Masks Combine Regions",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Masks Subtract",
"displayName": "Masks Subtract",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "MiDaS Depth Approximation",
"displayName": "MiDaS Depth Approximation",
"category": "WAS Suite/Image/AI",
"deprecated": false,
"experimental": false
},
{
"name": "MiDaS Mask Image",
"displayName": "MiDaS Mask Image",
"category": "WAS Suite/Image/AI",
"deprecated": false,
"experimental": false
},
{
"name": "MiDaS Model Loader",
"displayName": "MiDaS Model Loader",
"category": "WAS Suite/Loaders",
"deprecated": false,
"experimental": false
},
{
"name": "Model Input Switch",
"displayName": "Model Input Switch",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Number Counter",
"displayName": "Number Counter",
"category": "WAS Suite/Number",
"deprecated": false,
"experimental": false
},
{
"name": "Number Input Condition",
"displayName": "Number Input Condition",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Number Input Switch",
"displayName": "Number Input Switch",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Number Multiple Of",
"displayName": "Number Multiple Of",
"category": "WAS Suite/Number/Functions",
"deprecated": false,
"experimental": false
},
{
"name": "Number Operation",
"displayName": "Number Operation",
"category": "WAS Suite/Number/Operations",
"deprecated": false,
"experimental": false
},
{
"name": "Number PI",
"displayName": "Number PI",
"category": "WAS Suite/Number",
"deprecated": false,
"experimental": false
},
{
"name": "Number to Float",
"displayName": "Number to Float",
"category": "WAS Suite/Number/Operations",
"deprecated": false,
"experimental": false
},
{
"name": "Number to Int",
"displayName": "Number to Int",
"category": "WAS Suite/Number/Operations",
"deprecated": false,
"experimental": false
},
{
"name": "Number to Seed",
"displayName": "Number to Seed",
"category": "WAS Suite/Number/Operations",
"deprecated": false,
"experimental": false
},
{
"name": "Number to String",
"displayName": "Number to String",
"category": "WAS Suite/Number/Operations",
"deprecated": false,
"experimental": false
},
{
"name": "Number to Text",
"displayName": "Number to Text",
"category": "WAS Suite/Number/Operations",
"deprecated": false,
"experimental": false
},
{
"name": "Prompt Multiple Styles Selector",
"displayName": "Prompt Multiple Styles Selector",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Prompt Styles Selector",
"displayName": "Prompt Styles Selector",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Random Number",
"displayName": "Random Number",
"category": "WAS Suite/Number",
"deprecated": false,
"experimental": false
},
{
"name": "SAM Image Mask",
"displayName": "SAM Image Mask",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "SAM Model Loader",
"displayName": "SAM Model Loader",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "SAM Parameters",
"displayName": "SAM Parameters",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "SAM Parameters Combine",
"displayName": "SAM Parameters Combine",
"category": "WAS Suite/Image/Masking",
"deprecated": false,
"experimental": false
},
{
"name": "Samples Passthrough (Stat System)",
"displayName": "Samples Passthrough (Stat System)",
"category": "WAS Suite/Debug",
"deprecated": false,
"experimental": false
},
{
"name": "Save Text File",
"displayName": "Save Text File",
"category": "WAS Suite/IO",
"deprecated": false,
"experimental": false
},
{
"name": "Seed",
"displayName": "Seed",
"category": "WAS Suite/Number",
"deprecated": false,
"experimental": false
},
{
"name": "String to Text",
"displayName": "String to Text",
"category": "WAS Suite/Text/Operations",
"deprecated": false,
"experimental": false
},
{
"name": "Tensor Batch to Image",
"displayName": "Tensor Batch to Image",
"category": "WAS Suite/Latent/Transform",
"deprecated": false,
"experimental": false
},
{
"name": "Text Add Token by Input",
"displayName": "Text Add Token by Input",
"category": "WAS Suite/Text/Tokens",
"deprecated": false,
"experimental": false
},
{
"name": "Text Add Tokens",
"displayName": "Text Add Tokens",
"category": "WAS Suite/Text/Tokens",
"deprecated": false,
"experimental": false
},
{
"name": "Text Compare",
"displayName": "Text Compare",
"category": "WAS Suite/Text/Search",
"deprecated": false,
"experimental": false
},
{
"name": "Text Concatenate",
"displayName": "Text Concatenate",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Text Contains",
"displayName": "Text Contains",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Text Dictionary Convert",
"displayName": "Text Dictionary Convert",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Text Dictionary Get",
"displayName": "Text Dictionary Get",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Text Dictionary Keys",
"displayName": "Text Dictionary Keys",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Text Dictionary New",
"displayName": "Text Dictionary New",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Text Dictionary To Text",
"displayName": "Text Dictionary To Text",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Text Dictionary Update",
"displayName": "Text Dictionary Update",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Text File History Loader",
"displayName": "Text File History Loader",
"category": "WAS Suite/History",
"deprecated": false,
"experimental": false
},
{
"name": "Text Find",
"displayName": "Text Find",
"category": "WAS Suite/Text/Search",
"deprecated": false,
"experimental": false
},
{
"name": "Text Find and Replace",
"displayName": "Text Find and Replace",
"category": "WAS Suite/Text/Search",
"deprecated": false,
"experimental": false
},
{
"name": "Text Find and Replace by Dictionary",
"displayName": "Text Find and Replace by Dictionary",
"category": "WAS Suite/Text/Search",
"deprecated": false,
"experimental": false
},
{
"name": "Text Find and Replace Input",
"displayName": "Text Find and Replace Input",
"category": "WAS Suite/Text/Search",
"deprecated": false,
"experimental": false
},
{
"name": "Text Input Switch",
"displayName": "Text Input Switch",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Text List",
"displayName": "Text List",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Text List Concatenate",
"displayName": "Text List Concatenate",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Text List to Text",
"displayName": "Text List to Text",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Text Load Line From File",
"displayName": "Text Load Line From File",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Text Multiline",
"displayName": "Text Multiline",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Text Multiline (Code Compatible)",
"displayName": "Text Multiline (Code Compatible)",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Text Parse A1111 Embeddings",
"displayName": "Text Parse A1111 Embeddings",
"category": "WAS Suite/Text/Parse",
"deprecated": false,
"experimental": false
},
{
"name": "Text Parse Noodle Soup Prompts",
"displayName": "Text Parse Noodle Soup Prompts",
"category": "WAS Suite/Text/Parse",
"deprecated": false,
"experimental": false
},
{
"name": "Text Parse Tokens",
"displayName": "Text Parse Tokens",
"category": "WAS Suite/Text/Tokens",
"deprecated": false,
"experimental": false
},
{
"name": "Text Random Line",
"displayName": "Text Random Line",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Text Random Prompt",
"displayName": "Text Random Prompt",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Text Shuffle",
"displayName": "Text Shuffle",
"category": "WAS Suite/Text/Operations",
"deprecated": false,
"experimental": false
},
{
"name": "Text Sort",
"displayName": "Text Sort",
"category": "WAS Suite/Text/Operations",
"deprecated": false,
"experimental": false
},
{
"name": "Text String",
"displayName": "Text String",
"category": "WAS Suite/Text",
"deprecated": false,
"experimental": false
},
{
"name": "Text String Truncate",
"displayName": "Text String Truncate",
"category": "WAS Suite/Text/Operations",
"deprecated": false,
"experimental": false
},
{
"name": "Text to Conditioning",
"displayName": "Text to Conditioning",
"category": "WAS Suite/Text/Operations",
"deprecated": false,
"experimental": false
},
{
"name": "Text to Console",
"displayName": "Text to Console",
"category": "WAS Suite/Debug",
"deprecated": false,
"experimental": false
},
{
"name": "Text to Number",
"displayName": "Text to Number",
"category": "WAS Suite/Text/Operations",
"deprecated": false,
"experimental": false
},
{
"name": "Text to String",
"displayName": "Text to String",
"category": "WAS Suite/Text/Operations",
"deprecated": false,
"experimental": false
},
{
"name": "True Random.org Number Generator",
"displayName": "True Random.org Number Generator",
"category": "WAS Suite/Number",
"deprecated": false,
"experimental": false
},
{
"name": "unCLIP Checkpoint Loader",
"displayName": "unCLIP Checkpoint Loader",
"category": "WAS Suite/Loaders",
"deprecated": false,
"experimental": false
},
{
"name": "Upscale Model Loader",
"displayName": "Upscale Model Loader",
"category": "WAS Suite/Loaders",
"deprecated": false,
"experimental": false
},
{
"name": "Upscale Model Switch",
"displayName": "Upscale Model Switch",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "VAE Input Switch",
"displayName": "VAE Input Switch",
"category": "WAS Suite/Logic",
"deprecated": false,
"experimental": false
},
{
"name": "Video Dump Frames",
"displayName": "Video Dump Frames",
"category": "WAS Suite/Animation",
"deprecated": false,
"experimental": false
},
{
"name": "Write to GIF",
"displayName": "Write to GIF",
"category": "WAS Suite/Animation/Writer",
"deprecated": false,
"experimental": false
},
{
"name": "Write to Video",
"displayName": "Write to Video",
"category": "WAS Suite/Animation/Writer",
"deprecated": false,
"experimental": false
}
]
}
]
}