diff --git a/docs/nodetool_os.md b/docs/nodetool_os.md index 1f3b9bd..0995d18 100644 --- a/docs/nodetool_os.md +++ b/docs/nodetool_os.md @@ -82,6 +82,36 @@ Use cases: - **exist_ok**: Don't error if directory already exists (bool) +## CreateTemporaryDirectory + +Create a temporary directory on disk. + +Use cases: +- Provide working directories for intermediate results +- Store ephemeral data across nodes + +**Tags:** files, directory, temporary, create + +**Fields:** +- **prefix**: Prefix for the directory name (str) +- **suffix**: Suffix for the directory name (str) +- **dir**: Parent directory for the temp directory (str) + +## CreateTemporaryFile + +Create a temporary file on disk. + +Use cases: +- Provide scratch storage for workflows +- Generate unique filenames for intermediate data + +**Tags:** files, temporary, create + +**Fields:** +- **prefix**: Prefix for the temp file name (str) +- **suffix**: Suffix for the temp file name (str) +- **dir**: Directory where the file is created (str) + ## CreatedTime Get file creation timestamp. diff --git a/src/nodetool/nodes/nodetool/os.py b/src/nodetool/nodes/nodetool/os.py index 86349f6..97f64fb 100644 --- a/src/nodetool/nodes/nodetool/os.py +++ b/src/nodetool/nodes/nodetool/os.py @@ -20,6 +20,7 @@ ) import subprocess +import tempfile class GetEnvironmentVariable(BaseNode): @@ -228,6 +229,54 @@ async def process(self, context: ProcessingContext): os.makedirs(expanded_path, exist_ok=self.exist_ok) +class CreateTemporaryFile(BaseNode): + """ + Create a temporary file on disk. + files, temporary, create + + Use cases: + - Provide scratch storage for workflows + - Generate unique filenames for intermediate data + """ + + prefix: str = Field(default="", description="Prefix for the temp file name") + suffix: str = Field(default="", description="Suffix for the temp file name") + dir: str = Field(default="", description="Directory where the file is created") + + async def process(self, context: ProcessingContext) -> FilePath: + if Environment.is_production(): + raise ValueError("This node is not available in production") + tmp_dir = os.path.expanduser(self.dir) if self.dir else None + tmp = tempfile.NamedTemporaryFile( + prefix=self.prefix, suffix=self.suffix, dir=tmp_dir, delete=False + ) + path = tmp.name + tmp.close() + return FilePath(path=path) + + +class CreateTemporaryDirectory(BaseNode): + """ + Create a temporary directory on disk. + files, directory, temporary, create + + Use cases: + - Provide working directories for intermediate results + - Store ephemeral data across nodes + """ + + prefix: str = Field(default="", description="Prefix for the directory name") + suffix: str = Field(default="", description="Suffix for the directory name") + dir: str = Field(default="", description="Parent directory for the temp directory") + + async def process(self, context: ProcessingContext) -> FilePath: + if Environment.is_production(): + raise ValueError("This node is not available in production") + tmp_dir = os.path.expanduser(self.dir) if self.dir else None + path = tempfile.mkdtemp(prefix=self.prefix, suffix=self.suffix, dir=tmp_dir) + return FilePath(path=path) + + class GetFileSize(BaseNode): """ Get file size in bytes. diff --git a/src/nodetool/package_metadata/nodetool-base.json b/src/nodetool/package_metadata/nodetool-base.json index f71bcd6..ebfa723 100644 --- a/src/nodetool/package_metadata/nodetool-base.json +++ b/src/nodetool/package_metadata/nodetool-base.json @@ -8,355 +8,365 @@ "repo_id": "nodetool-ai/nodetool-base", "nodes": [ { - "title": "Chroma", - "description": "Base class for Chroma vector database nodes.\n\n chroma, base, database\n\n Use cases:\n - Provide shared helpers for Chroma indexing and queries\n - Disable caching for subclasses\n - Convert result IDs into asset references", - "namespace": "chroma.chroma_node", - "node_type": "chroma.chroma_node.Chroma", + "title": "Array Output", + "description": "Output node for generic array data.\n array, numerical\n\n Use cases:\n - Outputting results from machine learning models\n - Representing complex numerical data structures", + "namespace": "nodetool.output", + "node_type": "nodetool.output.ArrayOutput", "layout": "default", - "properties": [], + "properties": [ + { + "name": "value", + "type": { + "type": "np_array" + }, + "default": {}, + "title": "Value" + }, + { + "name": "name", + "type": { + "type": "str" + }, + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." + } + ], "outputs": [ { "type": { - "type": "any" + "type": "np_array" }, "name": "output" } ], "the_model_info": {}, "recommended_models": [], - "basic_fields": [], + "basic_fields": [ + "value" + ], "is_dynamic": false }, { - "title": "Hybrid Search", - "description": "Hybrid search combining semantic and keyword-based search for better retrieval.\n Uses reciprocal rank fusion to combine results from both methods.", - "namespace": "chroma.query", - "node_type": "chroma.query.HybridSearch", + "title": "Audio Output", + "description": "Output node for audio content references.\n audio, sound, media\n\n Use cases:\n - Displaying processed or generated audio\n - Passing audio data between workflow nodes\n - Returning results of audio analysis", + "namespace": "nodetool.output", + "node_type": "nodetool.output.AudioOutput", "layout": "default", "properties": [ { - "name": "collection", + "name": "value", "type": { - "type": "collection" + "type": "audio" }, "default": {}, - "title": "Collection", - "description": "The collection to query" + "title": "Value" }, { - "name": "text", + "name": "name", "type": { "type": "str" }, "default": "", - "title": "Text", - "description": "The text to query" - }, - { - "name": "n_results", - "type": { - "type": "int" - }, - "default": 5, - "title": "N Results", - "description": "The number of final results to return" - }, - { - "name": "k_constant", - "type": { - "type": "float" - }, - "default": 60.0, - "title": "K Constant", - "description": "Constant for reciprocal rank fusion (default: 60.0)" - }, - { - "name": "min_keyword_length", - "type": { - "type": "int" - }, - "default": 3, - "title": "Min Keyword Length", - "description": "Minimum length for keyword tokens" + "title": "Name", + "description": "The parameter name for the workflow." } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] - }, - "name": "ids" - }, - { - "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] + "type": "audio" }, - "name": "documents" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "value" + ], + "is_dynamic": false + }, + { + "title": "Boolean Output", + "description": "Output node for a single boolean value.\n boolean, true, false, flag, condition, flow-control, branch, else, true, false, switch, toggle\n\n Use cases:\n - Returning binary results (yes/no, true/false)\n - Controlling conditional logic in workflows\n - Indicating success/failure of operations", + "namespace": "nodetool.output", + "node_type": "nodetool.output.BooleanOutput", + "layout": "default", + "properties": [ { + "name": "value", "type": { - "type": "list", - "type_args": [ - { - "type": "dict" - } - ] + "type": "bool" }, - "name": "metadatas" + "default": false, + "title": "Value" }, { + "name": "name", "type": { - "type": "list", - "type_args": [ - { - "type": "float" - } - ] + "type": "str" }, - "name": "distances" - }, + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." + } + ], + "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "float" - } - ] + "type": "bool" }, - "name": "scores" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "collection", - "text", - "n_results", - "k_constant", - "min_keyword_length" + "value" ], "is_dynamic": false }, { - "title": "Query Image", - "description": "Query the index for similar images.", - "namespace": "chroma.query", - "node_type": "chroma.query.QueryImage", + "title": "Dataframe Output", + "description": "Output node for structured data references.\n dataframe, table, structured\n\n Use cases:\n - Outputting tabular data results\n - Passing structured data between analysis steps\n - Displaying data in table format", + "namespace": "nodetool.output", + "node_type": "nodetool.output.DataframeOutput", "layout": "default", "properties": [ { - "name": "collection", - "type": { - "type": "collection" - }, - "default": {}, - "title": "Collection", - "description": "The collection to query" - }, - { - "name": "image", + "name": "value", "type": { - "type": "image" + "type": "dataframe" }, "default": {}, - "title": "Image", - "description": "The image to query" + "title": "Value" }, { - "name": "n_results", + "name": "name", "type": { - "type": "int" + "type": "str" }, - "default": 1, - "title": "N Results", - "description": "The number of results to return" + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] + "type": "dataframe" }, - "name": "ids" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "value" + ], + "is_dynamic": false + }, + { + "title": "Dictionary Output", + "description": "Output node for key-value pair data.\n dictionary, key-value, mapping\n\n Use cases:\n - Returning multiple named values\n - Passing complex data structures between nodes\n - Organizing heterogeneous output data", + "namespace": "nodetool.output", + "node_type": "nodetool.output.DictionaryOutput", + "layout": "default", + "properties": [ { + "name": "value", "type": { - "type": "list", + "type": "dict", "type_args": [ { "type": "str" + }, + { + "type": "any" } ] }, - "name": "documents" + "default": {}, + "title": "Value" }, { + "name": "name", "type": { - "type": "list", - "type_args": [ - { - "type": "dict" - } - ] + "type": "str" }, - "name": "metadatas" - }, + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." + } + ], + "outputs": [ { "type": { - "type": "list", + "type": "dict", "type_args": [ { - "type": "float" + "type": "str" + }, + { + "type": "any" } ] }, - "name": "distances" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "collection", - "image", - "n_results" + "value" ], "is_dynamic": false }, { - "title": "Query Text", - "description": "Query the index for similar text.", - "namespace": "chroma.query", - "node_type": "chroma.query.QueryText", + "title": "Document Output", + "description": "Output node for document content references.\n document, pdf, file\n\n Use cases:\n - Displaying processed or generated documents\n - Passing document data between workflow nodes\n - Returning results of document analysis", + "namespace": "nodetool.output", + "node_type": "nodetool.output.DocumentOutput", "layout": "default", "properties": [ { - "name": "collection", + "name": "value", "type": { - "type": "collection" + "type": "document" }, "default": {}, - "title": "Collection", - "description": "The collection to query" + "title": "Value" }, { - "name": "text", + "name": "name", "type": { "type": "str" }, "default": "", - "title": "Text", - "description": "The text to query" - }, + "title": "Name", + "description": "The parameter name for the workflow." + } + ], + "outputs": [ { - "name": "n_results", "type": { - "type": "int" + "type": "document" }, - "default": 1, - "title": "N Results", - "description": "The number of results to return" + "name": "output" } ], - "outputs": [ + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "value" + ], + "is_dynamic": false + }, + { + "title": "Float Output", + "description": "Output node for a single float value.\n float, decimal, number\n\n Use cases:\n - Returning decimal results (e.g. percentages, ratios)\n - Passing floating-point parameters between nodes\n - Displaying numeric metrics with decimal precision", + "namespace": "nodetool.output", + "node_type": "nodetool.output.FloatOutput", + "layout": "default", + "properties": [ { + "name": "value", "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] + "type": "float" }, - "name": "ids" + "default": 0, + "title": "Value" }, { + "name": "name", "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] + "type": "str" }, - "name": "documents" - }, + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." + } + ], + "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "dict" - } - ] + "type": "float" }, - "name": "metadatas" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "value" + ], + "is_dynamic": false + }, + { + "title": "Group Output", + "description": "Generic output node for grouped data from any node.\n group, composite, multi-output\n\n Use cases:\n - Aggregating multiple outputs from a single node\n - Passing varied data types as a single unit\n - Organizing related outputs in workflows", + "namespace": "nodetool.output", + "node_type": "nodetool.output.GroupOutput", + "layout": "default", + "properties": [ + { + "name": "input", + "type": { + "type": "any" + }, + "title": "Input" + } + ], + "outputs": [ { "type": { "type": "list", "type_args": [ { - "type": "float" + "type": "any" } ] }, - "name": "distances" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "collection", - "text", - "n_results" + "input" ], "is_dynamic": false }, { - "title": "Remove Overlap", - "description": "Removes overlapping words between consecutive strings in a list.\n Splits text into words and matches word sequences for more accurate overlap detection.", - "namespace": "chroma.query", - "node_type": "chroma.query.RemoveOverlap", + "title": "Image List Output", + "description": "Output node for a list of image references.\n images, list, gallery\n\n Use cases:\n - Displaying multiple images in a grid\n - Returning image search results", + "namespace": "nodetool.output", + "node_type": "nodetool.output.ImageListOutput", "layout": "default", "properties": [ { - "name": "documents", + "name": "value", "type": { "type": "list", "type_args": [ { - "type": "str" + "type": "image" } ] }, "default": [], - "title": "Documents", - "description": "List of strings to process for overlap removal" + "title": "Value", + "description": "The images to display." }, { - "name": "min_overlap_words", + "name": "name", "type": { - "type": "int" + "type": "str" }, - "default": 2, - "title": "Min Overlap Words", - "description": "Minimum number of words that must overlap to be considered" + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." } ], "outputs": [ @@ -365,447 +375,430 @@ "type": "list", "type_args": [ { - "type": "str" + "type": "image" } ] }, - "name": "documents" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "documents", - "min_overlap_words" + "value" ], "is_dynamic": false }, { - "title": "Index Aggregated Text", - "description": "Index multiple text chunks at once with aggregated embeddings from Ollama.\n chroma, embedding, collection, RAG, index, text, chunk, batch, ollama", - "namespace": "chroma.index", - "node_type": "chroma.index.IndexAggregatedText", + "title": "Image Output", + "description": "Output node for a single image reference.\n image, picture, visual\n\n Use cases:\n - Displaying a single processed or generated image\n - Passing image data between workflow nodes\n - Returning image analysis results", + "namespace": "nodetool.output", + "node_type": "nodetool.output.ImageOutput", "layout": "default", "properties": [ { - "name": "collection", + "name": "value", "type": { - "type": "collection" + "type": "image" }, "default": {}, - "title": "Collection", - "description": "The collection to index" + "title": "Value" }, { - "name": "document", + "name": "name", "type": { "type": "str" }, "default": "", - "title": "Document", - "description": "The document to index" + "title": "Name", + "description": "The parameter name for the workflow." + } + ], + "outputs": [ + { + "type": { + "type": "image" + }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "value" + ], + "is_dynamic": false + }, + { + "title": "Integer Output", + "description": "Output node for a single integer value.\n integer, number, count\n\n Use cases:\n - Returning numeric results (e.g. counts, indices)\n - Passing integer parameters between nodes\n - Displaying numeric metrics", + "namespace": "nodetool.output", + "node_type": "nodetool.output.IntegerOutput", + "layout": "default", + "properties": [ + { + "name": "value", + "type": { + "type": "int" + }, + "default": 0, + "title": "Value" }, { - "name": "document_id", + "name": "name", "type": { "type": "str" }, "default": "", - "title": "Document Id", - "description": "The document ID to associate with the text" - }, + "title": "Name", + "description": "The parameter name for the workflow." + } + ], + "outputs": [ { - "name": "metadata", "type": { - "type": "dict" + "type": "int" }, - "default": {}, - "title": "Metadata", - "description": "The metadata to associate with the text" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "value" + ], + "is_dynamic": false + }, + { + "title": "List Output", + "description": "Output node for a list of arbitrary values.\n list, output, any\n\n Use cases:\n - Returning multiple results from a workflow\n - Aggregating outputs from multiple nodes", + "namespace": "nodetool.output", + "node_type": "nodetool.output.ListOutput", + "layout": "default", + "properties": [ { - "name": "text_chunks", + "name": "value", "type": { "type": "list", "type_args": [ { - "type": "union", - "type_args": [ - { - "type": "text_chunk" - }, - { - "type": "str" - } - ] + "type": "any" } ] }, "default": [], - "title": "Text Chunks", - "description": "List of text chunks to index" + "title": "Value" }, { - "name": "context_window", + "name": "name", "type": { - "type": "int" + "type": "str" }, - "default": 4096, - "title": "Context Window", - "description": "The context window size to use for the model", - "min": 1.0 - }, + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." + } + ], + "outputs": [ { - "name": "aggregation", "type": { - "type": "enum", - "values": [ - "mean", - "max", - "min", - "sum" - ], - "type_name": "nodetool.nodes.chroma.index.EmbeddingAggregation" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": "mean", - "title": "Aggregation", - "description": "The aggregation method to use for the embeddings." + "name": "output" } ], - "outputs": [], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "collection", - "document", - "document_id", - "metadata", - "text_chunks", - "context_window", - "aggregation" + "value" ], "is_dynamic": false }, { - "title": "Index Embedding", - "description": "Index a list of embeddings.", - "namespace": "chroma.index", - "node_type": "chroma.index.IndexEmbedding", + "title": "Model Output", + "description": "Output node for machine learning model references.\n model, ml, ai\n\n Use cases:\n - Passing trained models between workflow steps\n - Outputting newly created or fine-tuned models\n - Referencing models for later use in the workflow", + "namespace": "nodetool.output", + "node_type": "nodetool.output.ModelOutput", "layout": "default", "properties": [ { - "name": "collection", - "type": { - "type": "collection" - }, - "default": {}, - "title": "Collection", - "description": "The collection to index" - }, - { - "name": "embedding", + "name": "value", "type": { - "type": "np_array" + "type": "model_ref" }, "default": {}, - "title": "Embedding", - "description": "The embedding to index" + "title": "Value" }, { - "name": "id", + "name": "name", "type": { "type": "str" }, "default": "", - "title": "Id", - "description": "The ID to associate with the embedding" - }, + "title": "Name", + "description": "The parameter name for the workflow." + } + ], + "outputs": [ { - "name": "metadata", "type": { - "type": "dict" + "type": "model_ref" }, - "default": {}, - "title": "Metadata", - "description": "The metadata to associate with the embedding" + "name": "output" } ], - "outputs": [], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "collection", - "embedding", - "id", - "metadata" + "value" ], "is_dynamic": false }, { - "title": "Index Image", - "description": "Index a single image asset.\n chroma, embedding, collection, RAG, index, image", - "namespace": "chroma.index", - "node_type": "chroma.index.IndexImage", + "title": "String Output", + "description": "Output node for a single string value.\n string, text, output\n\n Use cases:\n - Returning text results or messages\n - Passing string parameters between nodes\n - Displaying short text outputs", + "namespace": "nodetool.output", + "node_type": "nodetool.output.StringOutput", "layout": "default", "properties": [ { - "name": "collection", + "name": "value", "type": { - "type": "collection" + "type": "str" }, - "default": {}, - "title": "Collection", - "description": "The collection to index" + "default": "", + "title": "Value" }, { - "name": "image", + "name": "name", "type": { - "type": "image" + "type": "str" }, - "default": {}, - "title": "Image", - "description": "Image asset to index" - }, + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." + } + ], + "outputs": [ { - "name": "metadata", "type": { - "type": "dict" + "type": "str" }, - "default": {}, - "title": "Metadata", - "description": "The metadata to associate with the image" + "name": "output" } ], - "outputs": [], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "collection", - "image", - "metadata" + "value" ], "is_dynamic": false }, { - "title": "Index Images", - "description": "Index a list of image assets or files.\n chroma, embedding, collection, RAG, index, image, batch", - "namespace": "chroma.index", - "node_type": "chroma.index.IndexImages", + "title": "Text Output", + "description": "Output node for structured text content.\n text, content, document\n\n Use cases:\n - Returning longer text content or documents\n - Passing formatted text between processing steps\n - Displaying rich text output", + "namespace": "nodetool.output", + "node_type": "nodetool.output.TextOutput", "layout": "default", "properties": [ { - "name": "collection", + "name": "value", "type": { - "type": "collection" + "type": "text" }, "default": {}, - "title": "Collection", - "description": "The collection to index" + "title": "Value" }, { - "name": "images", + "name": "name", "type": { - "type": "list", - "type_args": [ - { - "type": "image" - } - ] + "type": "str" }, - "default": [], - "title": "Images", - "description": "List of image assets to index" - }, + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." + } + ], + "outputs": [ { - "name": "upsert", "type": { - "type": "bool" + "type": "text" }, - "default": false, - "title": "Upsert", - "description": "Whether to upsert the images" + "name": "output" } ], - "outputs": [], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "collection", - "images", - "upsert" + "value" ], "is_dynamic": false }, { - "title": "Index String", - "description": "Index a string with a Document ID to a collection.\n chroma, embedding, collection, RAG, index, text, string\n\n Use cases:\n - Index documents for a vector search", - "namespace": "chroma.index", - "node_type": "chroma.index.IndexString", + "title": "Video Output", + "description": "Output node for video content references.\n video, media, clip\n\n Use cases:\n - Displaying processed or generated video content\n - Passing video data between workflow steps\n - Returning results of video analysis", + "namespace": "nodetool.output", + "node_type": "nodetool.output.VideoOutput", "layout": "default", "properties": [ { - "name": "collection", + "name": "value", "type": { - "type": "collection" + "type": "video" }, "default": {}, - "title": "Collection", - "description": "The collection to index" - }, - { - "name": "text", - "type": { - "type": "str" - }, - "default": "", - "title": "Text", - "description": "Text content to index" + "title": "Value" }, { - "name": "document_id", + "name": "name", "type": { "type": "str" }, "default": "", - "title": "Document Id", - "description": "Document ID to associate with the text content" - }, + "title": "Name", + "description": "The parameter name for the workflow." + } + ], + "outputs": [ { - "name": "metadata", "type": { - "type": "dict" + "type": "video" }, - "default": {}, - "title": "Metadata", - "description": "The metadata to associate with the text" + "name": "output" } ], - "outputs": [], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "collection", - "text", - "document_id", - "metadata" + "value" ], "is_dynamic": false }, { - "title": "Index Text Chunk", - "description": "Index a single text chunk.\n chroma, embedding, collection, RAG, index, text, chunk", - "namespace": "chroma.index", - "node_type": "chroma.index.IndexTextChunk", + "title": "Add Column", + "description": "Add list of values as new column to dataframe.\n dataframe, column, list\n\n Use cases:\n - Incorporate external data into existing dataframe\n - Add calculated results as new column\n - Augment dataframe with additional features", + "namespace": "nodetool.data", + "node_type": "nodetool.data.AddColumn", "layout": "default", "properties": [ { - "name": "collection", + "name": "dataframe", "type": { - "type": "collection" + "type": "dataframe" }, "default": {}, - "title": "Collection", - "description": "The collection to index" + "title": "Dataframe", + "description": "Dataframe object to add a new column to." }, { - "name": "text_chunk", + "name": "column_name", "type": { - "type": "text_chunk" + "type": "str" }, - "default": {}, - "title": "Text Chunk", - "description": "Text chunk to index" + "default": "", + "title": "Column Name", + "description": "The name of the new column to be added to the dataframe." }, { - "name": "metadata", + "name": "values", "type": { - "type": "dict" - }, - "default": {}, - "title": "Metadata", - "description": "The metadata to associate with the text chunk" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] + }, + "default": [], + "title": "Values", + "description": "A list of any type of elements which will be the new column's values." + } + ], + "outputs": [ + { + "type": { + "type": "dataframe" + }, + "name": "output" } ], - "outputs": [], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "collection", - "text_chunk", - "metadata" + "dataframe", + "column_name", + "values" ], "is_dynamic": false }, { - "title": "Index Text Chunks", - "description": "Index multiple text chunks at once.\n chroma, embedding, collection, RAG, index, text, chunk, batch", - "namespace": "chroma.index", - "node_type": "chroma.index.IndexTextChunks", + "title": "Append", + "description": "Append two dataframes along rows.\n append, concat, rows\n\n Use cases:\n - Combine data from multiple time periods\n - Merge datasets with same structure\n - Aggregate data from different sources", + "namespace": "nodetool.data", + "node_type": "nodetool.data.Append", "layout": "default", "properties": [ { - "name": "collection", + "name": "dataframe_a", "type": { - "type": "collection" + "type": "dataframe" }, "default": {}, - "title": "Collection", - "description": "The collection to index" + "title": "Dataframe A", + "description": "First DataFrame to be appended." }, { - "name": "text_chunks", + "name": "dataframe_b", "type": { - "type": "list", - "type_args": [ - { - "type": "text_chunk" - } - ] + "type": "dataframe" }, - "default": [], - "title": "Text Chunks", - "description": "List of text chunks to index" + "default": {}, + "title": "Dataframe B", + "description": "Second DataFrame to be appended." + } + ], + "outputs": [ + { + "type": { + "type": "dataframe" + }, + "name": "output" } ], - "outputs": [], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "collection", - "text_chunks" + "dataframe_a", + "dataframe_b" ], "is_dynamic": false }, { - "title": "Collection", - "description": "Get or create a collection.\n chroma, embedding, collection, RAG, get, create", - "namespace": "chroma.collections", - "node_type": "chroma.collections.Collection", + "title": "Drop Duplicates", + "description": "Remove duplicate rows from dataframe.\n duplicates, unique, clean\n\n Use cases:\n - Clean dataset by removing redundant entries\n - Ensure data integrity in analysis\n - Prepare data for unique value operations", + "namespace": "nodetool.data", + "node_type": "nodetool.data.DropDuplicates", "layout": "default", "properties": [ { - "name": "name", - "type": { - "type": "str" - }, - "default": "", - "title": "Name", - "description": "The name of the collection to create" - }, - { - "name": "embedding_model", + "name": "df", "type": { - "type": "llama_model" + "type": "dataframe" }, "default": {}, - "title": "Embedding Model", - "description": "The embedding model to use" + "title": "Df", + "description": "The input DataFrame." } ], "outputs": [ { "type": { - "type": "collection" + "type": "dataframe" }, "name": "output" } @@ -813,32 +806,31 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "name", - "embedding_model" + "df" ], "is_dynamic": false }, { - "title": "Count", - "description": "Count the number of documents in a collection.\n chroma, embedding, collection, RAG", - "namespace": "chroma.collections", - "node_type": "chroma.collections.Count", + "title": "Drop NA", + "description": "Remove rows with NA values from dataframe.\n na, missing, clean\n\n Use cases:\n - Clean dataset by removing incomplete entries\n - Prepare data for analysis requiring complete cases\n - Improve data quality for modeling", + "namespace": "nodetool.data", + "node_type": "nodetool.data.DropNA", "layout": "default", "properties": [ { - "name": "collection", + "name": "df", "type": { - "type": "collection" + "type": "dataframe" }, "default": {}, - "title": "Collection", - "description": "The collection to count" + "title": "Df", + "description": "The input DataFrame." } ], "outputs": [ { "type": { - "type": "int" + "type": "dataframe" }, "name": "output" } @@ -846,57 +838,34 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "collection" + "df" ], "is_dynamic": false }, { - "title": "Get Documents", - "description": "Get documents from a chroma collection.\n chroma, embedding, collection, RAG, retrieve", - "namespace": "chroma.collections", - "node_type": "chroma.collections.GetDocuments", + "title": "Extract Column", + "description": "Convert dataframe column to list.\n dataframe, column, list\n\n Use cases:\n - Extract data for use in other processing steps\n - Prepare column data for plotting or analysis\n - Convert categorical data to list for encoding", + "namespace": "nodetool.data", + "node_type": "nodetool.data.ExtractColumn", "layout": "default", "properties": [ { - "name": "collection", + "name": "dataframe", "type": { - "type": "collection" + "type": "dataframe" }, "default": {}, - "title": "Collection", - "description": "The collection to get" - }, - { - "name": "ids", - "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] - }, - "default": [], - "title": "Ids", - "description": "The ids of the documents to get" - }, - { - "name": "limit", - "type": { - "type": "int" - }, - "default": 100, - "title": "Limit", - "description": "The limit of the documents to get" + "title": "Dataframe", + "description": "The input dataframe." }, { - "name": "offset", + "name": "column_name", "type": { - "type": "int" + "type": "str" }, - "default": 0, - "title": "Offset", - "description": "The offset of the documents to get" + "default": "", + "title": "Column Name", + "description": "The name of the column to be converted to a list." } ], "outputs": [ @@ -905,7 +874,7 @@ "type": "list", "type_args": [ { - "type": "str" + "type": "any" } ] }, @@ -915,48 +884,41 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "collection", - "ids", - "limit", - "offset" + "dataframe", + "column_name" ], "is_dynamic": false }, { - "title": "Peek", - "description": "Peek at the documents in a collection.\n chroma, embedding, collection, RAG, preview", - "namespace": "chroma.collections", - "node_type": "chroma.collections.Peek", + "title": "Filter", + "description": "Filter dataframe based on condition.\n filter, query, condition\n\n Example conditions:\n age > 30\n age > 30 and salary < 50000\n name == 'John Doe'\n 100 <= price <= 200\n status in ['Active', 'Pending']\n not (age < 18)\n\n Use cases:\n - Extract subset of data meeting specific criteria\n - Remove outliers or invalid data points\n - Focus analysis on relevant data segments", + "namespace": "nodetool.data", + "node_type": "nodetool.data.Filter", "layout": "default", "properties": [ { - "name": "collection", + "name": "df", "type": { - "type": "collection" + "type": "dataframe" }, "default": {}, - "title": "Collection", - "description": "The collection to peek" + "title": "Df", + "description": "The DataFrame to filter." }, { - "name": "limit", + "name": "condition", "type": { - "type": "int" + "type": "str" }, - "default": 100, - "title": "Limit", - "description": "The limit of the documents to peek" + "default": "", + "title": "Condition", + "description": "The filtering condition to be applied to the DataFrame, e.g. column_name > 5." } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] + "type": "dataframe" }, "name": "output" } @@ -964,41 +926,41 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "collection", - "limit" + "df", + "condition" ], "is_dynamic": false }, { - "title": "Add Label", - "description": "Adds a label to a Gmail message.\n email, gmail, label", - "namespace": "nodetool.mail", - "node_type": "nodetool.mail.AddLabel", + "title": "Find Row", + "description": "Find the first row in a dataframe that matches a given condition.\n filter, query, condition, single row\n\n Example conditions:\n age > 30\n age > 30 and salary < 50000\n name == 'John Doe'\n 100 <= price <= 200\n status in ['Active', 'Pending']\n not (age < 18)\n\n Use cases:\n - Retrieve specific record based on criteria\n - Find first occurrence of a particular condition\n - Extract single data point for further analysis", + "namespace": "nodetool.data", + "node_type": "nodetool.data.FindRow", "layout": "default", "properties": [ { - "name": "message_id", + "name": "df", "type": { - "type": "str" + "type": "dataframe" }, - "default": "", - "title": "Message Id", - "description": "Message ID to label" + "default": {}, + "title": "Df", + "description": "The DataFrame to search." }, { - "name": "label", + "name": "condition", "type": { "type": "str" }, "default": "", - "title": "Label", - "description": "Label to add to the message" + "title": "Condition", + "description": "The condition to filter the DataFrame, e.g. 'column_name == value'." } ], "outputs": [ { "type": { - "type": "bool" + "type": "dataframe" }, "name": "output" } @@ -1006,218 +968,100 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "message_id", - "label" + "df", + "condition" ], "is_dynamic": false }, { - "title": "Email Fields", - "description": "Decomposes an email into its individual components.\n email, decompose, extract\n\n Takes an Email object and returns its individual fields:\n - id: Message ID\n - subject: Email subject\n - sender: Sender address\n - date: Datetime of email\n - body: Email body content", - "namespace": "nodetool.mail", - "node_type": "nodetool.mail.EmailFields", + "title": "From List", + "description": "Convert list of dicts to dataframe.\n list, dataframe, convert\n\n Use cases:\n - Transform list data into structured dataframe\n - Prepare list data for analysis or visualization\n - Convert API responses to dataframe format", + "namespace": "nodetool.data", + "node_type": "nodetool.data.FromList", "layout": "default", "properties": [ { - "name": "email", + "name": "values", "type": { - "type": "email" - }, - "default": {}, - "title": "Email", - "description": "Email object to decompose" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] + }, + "default": [], + "title": "Values", + "description": "List of values to be converted, each value will be a row." } ], "outputs": [ { "type": { - "type": "str" - }, - "name": "id" - }, - { - "type": { - "type": "str" - }, - "name": "subject" - }, - { - "type": { - "type": "str" - }, - "name": "sender" - }, - { - "type": { - "type": "datetime" - }, - "name": "date" - }, - { - "type": { - "type": "str" + "type": "dataframe" }, - "name": "body" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "email" + "values" ], "is_dynamic": false }, { - "title": "Gmail Search", - "description": "Searches Gmail using Gmail-specific search operators and yields matching emails.\n email, gmail, search\n\n Use cases:\n - Search for emails based on specific criteria\n - Retrieve emails from a specific sender\n - Filter emails by subject, sender, or date", - "namespace": "nodetool.mail", - "node_type": "nodetool.mail.GmailSearch", + "title": "Import CSV", + "description": "Convert CSV string to dataframe.\n csv, dataframe, import\n\n Use cases:\n - Import CSV data from string input\n - Convert CSV responses from APIs to dataframe", + "namespace": "nodetool.data", + "node_type": "nodetool.data.ImportCSV", "layout": "default", "properties": [ { - "name": "from_address", - "type": { - "type": "str" - }, - "default": "", - "title": "From Address", - "description": "Sender's email address to search for" - }, - { - "name": "to_address", - "type": { - "type": "str" - }, - "default": "", - "title": "To Address", - "description": "Recipient's email address to search for" - }, - { - "name": "subject", - "type": { - "type": "str" - }, - "default": "", - "title": "Subject", - "description": "Text to search for in email subject" - }, - { - "name": "body", - "type": { - "type": "str" - }, - "default": "", - "title": "Body", - "description": "Text to search for in email body" - }, - { - "name": "date_filter", - "type": { - "type": "enum", - "values": [ - "SINCE_ONE_HOUR", - "SINCE_ONE_DAY", - "SINCE_ONE_WEEK", - "SINCE_ONE_MONTH", - "SINCE_ONE_YEAR" - ], - "type_name": "nodetool.nodes.nodetool.mail.DateFilter" - }, - "default": "SINCE_ONE_DAY", - "title": "Date Filter", - "description": "Date filter to search for" - }, - { - "name": "keywords", - "type": { - "type": "str" - }, - "default": "", - "title": "Keywords", - "description": "Custom keywords or labels to search for" - }, - { - "name": "folder", - "type": { - "type": "enum", - "values": [ - "INBOX", - "[Gmail]/Sent Mail", - "[Gmail]/Drafts", - "[Gmail]/Spam", - "[Gmail]/Trash" - ], - "type_name": "nodetool.nodes.nodetool.mail.GmailFolder" - }, - "default": "INBOX", - "title": "Folder", - "description": "Email folder to search in" - }, - { - "name": "text", + "name": "csv_data", "type": { "type": "str" }, "default": "", - "title": "Text", - "description": "General text to search for anywhere in the email" - }, - { - "name": "max_results", - "type": { - "type": "int" - }, - "default": 50, - "title": "Max Results", - "description": "Maximum number of emails to return" + "title": "CSV Data", + "description": "String input of CSV formatted text." } ], "outputs": [ { "type": { - "type": "email" - }, - "name": "email" - }, - { - "type": { - "type": "str" + "type": "dataframe" }, - "name": "message_id" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "from_address", - "subject", - "body", - "date_filter", - "max_results" + "csv_data" ], "is_dynamic": false }, { - "title": "Move To Archive", - "description": "Moves specified emails to Gmail archive.\n email, gmail, archive", - "namespace": "nodetool.mail", - "node_type": "nodetool.mail.MoveToArchive", + "title": "Convert JSON to DataFrame", + "description": "Transforms a JSON string into a pandas DataFrame.\n json, dataframe, conversion\n\n Use cases:\n - Converting API responses to tabular format\n - Preparing JSON data for analysis or visualization\n - Structuring unstructured JSON data for further processing", + "namespace": "nodetool.data", + "node_type": "nodetool.data.JSONToDataframe", "layout": "default", "properties": [ { - "name": "message_id", + "name": "text", "type": { "type": "str" }, "default": "", - "title": "Message Id", - "description": "Message ID to archive" + "title": "JSON" } ], "outputs": [ { "type": { - "type": "bool" + "type": "dataframe" }, "name": "output" } @@ -1225,47 +1069,49 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "message_id" + "text" ], "is_dynamic": false }, { - "title": "Append", - "description": "Adds a value to the end of a list.\n list, add, insert, extend\n\n Use cases:\n - Grow a list dynamically\n - Add new elements to an existing list\n - Implement a stack-like structure", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Append", + "title": "Join", + "description": "Join two dataframes on specified column.\n join, merge, column\n\n Use cases:\n - Combine data from related tables\n - Enrich dataset with additional information\n - Link data based on common identifiers", + "namespace": "nodetool.data", + "node_type": "nodetool.data.Join", "layout": "default", "properties": [ { - "name": "values", + "name": "dataframe_a", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "dataframe" }, - "default": [], - "title": "Values" + "default": {}, + "title": "Dataframe A", + "description": "First DataFrame to be merged." }, { - "name": "value", + "name": "dataframe_b", "type": { - "type": "any" + "type": "dataframe" }, - "title": "Value" + "default": {}, + "title": "Dataframe B", + "description": "Second DataFrame to be merged." + }, + { + "name": "join_on", + "type": { + "type": "str" + }, + "default": "", + "title": "Join On", + "description": "The column name on which to join the two dataframes." } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "dataframe" }, "name": "output" } @@ -1273,90 +1119,80 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values", - "value" + "dataframe_a", + "dataframe_b", + "join_on" ], "is_dynamic": false }, { - "title": "Average", - "description": "Calculates the arithmetic mean of a list of numbers.\n list, average, mean, aggregate, math\n\n Use cases:\n - Find average value\n - Calculate mean of numeric data", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Average", + "title": "Load CSV Assets", + "description": "Load dataframes from an asset folder.\n load, dataframe, file, import\n\n Use cases:\n - Load multiple dataframes from a folder\n - Process multiple datasets in sequence\n - Batch import of data files", + "namespace": "nodetool.data", + "node_type": "nodetool.data.LoadCSVAssets", "layout": "default", "properties": [ { - "name": "values", + "name": "folder", "type": { - "type": "list", - "type_args": [ - { - "type": "float" - } - ] + "type": "folder" }, - "default": [], - "title": "Values" + "default": {}, + "title": "Folder", + "description": "The asset folder to load the dataframes from." } ], "outputs": [ { "type": { - "type": "float" + "type": "dataframe" }, - "name": "output" - } - ], + "name": "dataframe" + }, + { + "type": { + "type": "str" + }, + "name": "name" + } + ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values" + "folder" ], "is_dynamic": false }, { - "title": "Chunk", - "description": "Splits a list into smaller chunks of specified size.\n list, chunk, split, group\n\n Use cases:\n - Batch processing\n - Pagination\n - Creating sublists of fixed size", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Chunk", + "title": "Merge", + "description": "Merge two dataframes along columns.\n merge, concat, columns\n\n Use cases:\n - Combine data from multiple sources\n - Add new features to existing dataframe\n - Merge time series data from different periods", + "namespace": "nodetool.data", + "node_type": "nodetool.data.Merge", "layout": "default", "properties": [ { - "name": "values", + "name": "dataframe_a", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "dataframe" }, - "default": [], - "title": "Values" + "default": {}, + "title": "Dataframe A", + "description": "First DataFrame to be merged." }, { - "name": "chunk_size", + "name": "dataframe_b", "type": { - "type": "int" + "type": "dataframe" }, - "default": 1, - "title": "Chunk Size" + "default": {}, + "title": "Dataframe B", + "description": "Second DataFrame to be merged." } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] - } - ] + "type": "dataframe" }, "name": "output" } @@ -1364,95 +1200,87 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values", - "chunk_size" + "dataframe_a", + "dataframe_b" ], "is_dynamic": false }, { - "title": "Dedupe", - "description": "Removes duplicate elements from a list, ensuring uniqueness.\n list, unique, distinct, deduplicate\n\n Use cases:\n - Remove redundant entries\n - Create a set-like structure\n - Ensure list elements are unique", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Dedupe", + "title": "Row Iterator", + "description": "Iterate over rows of a dataframe.", + "namespace": "nodetool.data", + "node_type": "nodetool.data.RowIterator", "layout": "default", "properties": [ { - "name": "values", + "name": "dataframe", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "dataframe" }, - "default": [], - "title": "Values" + "default": {}, + "title": "Dataframe", + "description": "The input dataframe." } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "dict" }, - "name": "output" + "name": "dict" + }, + { + "type": { + "type": "int" + }, + "name": "index" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values" + "dataframe" ], "is_dynamic": false }, { - "title": "Difference", - "description": "Finds elements that exist in first list but not in second list.\n list, set, difference, subtract\n\n Use cases:\n - Find unique elements in one list\n - Remove items present in another list\n - Identify distinct elements", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Difference", + "title": "Save Dataframe", + "description": "Save dataframe in specified folder.\n csv, folder, save\n\n Use cases:\n - Export processed data for external use\n - Create backups of dataframes", + "namespace": "nodetool.data", + "node_type": "nodetool.data.SaveDataframe", "layout": "default", "properties": [ { - "name": "list1", + "name": "df", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "dataframe" }, - "default": [], - "title": "List1" + "default": {}, + "title": "Df" }, { - "name": "list2", + "name": "folder", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "folder" }, - "default": [], - "title": "List2" + "default": {}, + "title": "Folder", + "description": "Name of the output folder." + }, + { + "name": "name", + "type": { + "type": "str" + }, + "default": "output.csv", + "title": "Name", + "description": "\n Name of the output file.\n You can use time and date variables to create unique names:\n %Y - Year\n %m - Month\n %d - Day\n %H - Hour\n %M - Minute\n %S - Second\n " } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "dataframe" }, "name": "output" } @@ -1460,54 +1288,42 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "list1", - "list2" + "df", + "folder", + "name" ], "is_dynamic": false }, { - "title": "Extend", - "description": "Merges one list into another, extending the original list.\n list, merge, concatenate, combine\n\n Use cases:\n - Combine multiple lists\n - Add all elements from one list to another", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Extend", + "title": "Select Column", + "description": "Select specific columns from dataframe.\n dataframe, columns, filter\n\n Use cases:\n - Extract relevant features for analysis\n - Reduce dataframe size by removing unnecessary columns\n - Prepare data for specific visualizations or models", + "namespace": "nodetool.data", + "node_type": "nodetool.data.SelectColumn", "layout": "default", "properties": [ { - "name": "values", + "name": "dataframe", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "dataframe" }, - "default": [], - "title": "Values" + "default": {}, + "title": "Dataframe", + "description": "a dataframe from which columns are to be selected" }, { - "name": "other_values", + "name": "columns", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "str" }, - "default": [], - "title": "Other Values" + "default": "", + "title": "Columns", + "description": "comma separated list of column names" } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "dataframe" }, "name": "output" } @@ -1515,50 +1331,50 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values", - "other_values" + "dataframe", + "columns" ], "is_dynamic": false }, { - "title": "Filter Dicts", - "description": "Filter a list of dictionaries based on a condition.\n list, filter, query, condition\n\n Basic Operators:\n - Comparison: >, <, >=, <=, ==, !=\n - Logical: and, or, not\n - Membership: in, not in\n\n Example Conditions:\n # Basic comparisons\n age > 30\n price <= 100\n status == 'active'\n\n # Multiple conditions\n age > 30 and salary < 50000\n (price >= 100) and (price <= 200)\n department in ['Sales', 'Marketing']\n\n # String operations\n name.str.startswith('J')\n email.str.contains('@company.com')\n\n # Datetime conditions\n date > '2024-01-01'\n date.dt.year == 2024\n date.dt.month >= 6\n date.dt.day_name() == 'Monday'\n\n # Date ranges\n date.between('2024-01-01', '2024-12-31')\n date >= '2024-01-01' and date < '2025-01-01'\n\n # Complex datetime\n date.dt.hour < 12\n date.dt.dayofweek <= 4 # Weekdays only\n\n # Numeric operations\n price.between(100, 200)\n quantity % 2 == 0 # Even numbers\n\n # Special values\n value.isna() # Check for NULL/NaN\n value.notna() # Check for non-NULL/non-NaN\n\n Note: Dates should be in ISO format (YYYY-MM-DD) or include time (YYYY-MM-DD HH:MM:SS)\n\n Use cases:\n - Filter list of dictionary objects based on criteria\n - Extract subset of data meeting specific conditions\n - Clean data by removing unwanted entries", - "namespace": "nodetool.list", - "node_type": "nodetool.list.FilterDicts", + "title": "Slice", + "description": "Slice a dataframe by rows using start and end indices.\n slice, subset, rows\n\n Use cases:\n - Extract a specific range of rows from a large dataset\n - Create training and testing subsets for machine learning\n - Analyze data in smaller chunks", + "namespace": "nodetool.data", + "node_type": "nodetool.data.Slice", "layout": "default", "properties": [ { - "name": "values", + "name": "dataframe", "type": { - "type": "list", - "type_args": [ - { - "type": "dict" - } - ] + "type": "dataframe" }, - "default": [], - "title": "Values" + "default": {}, + "title": "Dataframe", + "description": "The input dataframe to be sliced." }, { - "name": "condition", + "name": "start_index", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Condition", - "description": "\n The filtering condition using pandas query syntax.\n\n Basic Operators:\n - Comparison: >, <, >=, <=, ==, !=\n - Logical: and, or, not\n - Membership: in, not in\n \n Example Conditions:\n # Basic comparisons\n age > 30\n price <= 100\n status == 'active'\n \n See node documentation for more examples.\n " + "default": 0, + "title": "Start Index", + "description": "The starting index of the slice (inclusive)." + }, + { + "name": "end_index", + "type": { + "type": "int" + }, + "default": -1, + "title": "End Index", + "description": "The ending index of the slice (exclusive). Use -1 for the last row." } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "dict" - } - ] + "type": "dataframe" }, "name": "output" } @@ -1566,71 +1382,68 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values", - "condition" + "dataframe", + "start_index", + "end_index" ], "is_dynamic": false }, { - "title": "Filter Dicts By Number", - "description": "Filters a list of dictionaries based on numeric values for a specified key.\n list, filter, dictionary, numbers, numeric\n\n Use cases:\n - Filter dictionaries by numeric comparisons (greater than, less than, equal to)\n - Filter records with even/odd numeric values\n - Filter entries with positive/negative numbers", - "namespace": "nodetool.list", - "node_type": "nodetool.list.FilterDictsByNumber", + "title": "Sort By Column", + "description": "Sort dataframe by specified column.\n sort, order, column\n\n Use cases:\n - Arrange data in ascending or descending order\n - Identify top or bottom values in dataset\n - Prepare data for rank-based analysis", + "namespace": "nodetool.data", + "node_type": "nodetool.data.SortByColumn", "layout": "default", "properties": [ { - "name": "values", + "name": "df", "type": { - "type": "list", - "type_args": [ - { - "type": "dict" - } - ] + "type": "dataframe" }, - "default": [], - "title": "Values" + "default": {}, + "title": "Df" }, { - "name": "key", + "name": "column", "type": { "type": "str" }, "default": "", - "title": "Key" - }, + "title": "Column", + "description": "The column to sort the DataFrame by." + } + ], + "outputs": [ { - "name": "filter_type", "type": { - "type": "enum", - "values": [ - "greater_than", - "less_than", - "equal_to", - "even", - "odd", - "positive", - "negative" - ], - "type_name": "nodetool.nodes.nodetool.list.FilterDictNumberType" + "type": "dataframe" }, - "default": "greater_than", - "title": "Filter Type" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "df", + "column" + ], + "is_dynamic": false + }, + { + "title": "To List", + "description": "Convert dataframe to list of dictionaries.\n dataframe, list, convert\n\n Use cases:\n - Convert dataframe data for API consumption\n - Transform data for JSON serialization\n - Prepare data for document-based storage", + "namespace": "nodetool.data", + "node_type": "nodetool.data.ToList", + "layout": "default", + "properties": [ { - "name": "value", + "name": "dataframe", "type": { - "type": "union", - "type_args": [ - { - "type": "float" - }, - { - "type": "none" - } - ] + "type": "dataframe" }, - "title": "Value" + "default": {}, + "title": "Dataframe", + "description": "The input dataframe to convert." } ], "outputs": [ @@ -1649,18 +1462,15 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values", - "key", - "filter_type", - "value" + "dataframe" ], "is_dynamic": false }, { - "title": "Filter Dicts By Range", - "description": "Filters a list of dictionaries based on a numeric range for a specified key.\n list, filter, dictionary, range, between\n\n Use cases:\n - Filter records based on numeric ranges (e.g., price range, age range)\n - Find entries with values within specified bounds\n - Filter data sets based on numeric criteria", - "namespace": "nodetool.list", - "node_type": "nodetool.list.FilterDictsByRange", + "title": "All", + "description": "Checks if all boolean values in a list are True.\n boolean, all, check, logic, condition, flow-control, branch\n\n\n Use cases:\n - Ensure all conditions in a set are met\n - Implement comprehensive checks\n - Validate multiple criteria simultaneously", + "namespace": "nodetool.boolean", + "node_type": "nodetool.boolean.All", "layout": "default", "properties": [ { @@ -1669,59 +1479,19 @@ "type": "list", "type_args": [ { - "type": "dict" + "type": "bool" } ] }, "default": [], - "title": "Values" - }, - { - "name": "key", - "type": { - "type": "str" - }, - "default": "", - "title": "Key", - "description": "The dictionary key to check for the range" - }, - { - "name": "min_value", - "type": { - "type": "float" - }, - "default": 0, - "title": "Min Value", - "description": "The minimum value (inclusive) of the range" - }, - { - "name": "max_value", - "type": { - "type": "float" - }, - "default": 0, - "title": "Max Value", - "description": "The maximum value (inclusive) of the range" - }, - { - "name": "inclusive", - "type": { - "type": "bool" - }, - "default": true, - "title": "Inclusive", - "description": "If True, includes the min and max values in the results" + "title": "Values", + "description": "List of boolean values to check" } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "dict" - } - ] + "type": "bool" }, "name": "output" } @@ -1729,82 +1499,56 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values", - "key", - "min_value", - "max_value", - "inclusive" + "values" ], "is_dynamic": false }, { - "title": "Filter Dicts By Value", - "description": "Filters a list of dictionaries based on their values using various criteria.\n list, filter, dictionary, values\n\n Use cases:\n - Filter dictionaries by value content\n - Filter dictionaries by value type\n - Filter dictionaries by value patterns", - "namespace": "nodetool.list", - "node_type": "nodetool.list.FilterDictsByValue", + "title": "Compare", + "description": "Compares two values using a specified comparison operator.\n compare, condition, logic\n\n Use cases:\n - Implement decision points in workflows\n - Filter data based on specific criteria\n - Create dynamic thresholds or limits", + "namespace": "nodetool.boolean", + "node_type": "nodetool.boolean.Compare", "layout": "default", "properties": [ { - "name": "values", + "name": "a", "type": { - "type": "list", - "type_args": [ - { - "type": "dict" - } - ] + "type": "any" }, - "default": [], - "title": "Values" + "title": "A", + "description": "First value to compare" }, { - "name": "key", + "name": "b", "type": { - "type": "str" + "type": "any" }, - "default": "", - "title": "Key", - "description": "The dictionary key to check" + "title": "B", + "description": "Second value to compare" }, { - "name": "filter_type", + "name": "comparison", "type": { "type": "enum", "values": [ - "contains", - "starts_with", - "ends_with", - "equals", - "type_is", - "length_greater", - "length_less", - "exact_length" + "==", + "!=", + ">", + "<", + ">=", + "<=" ], - "type_name": "nodetool.nodes.nodetool.list.FilterType" - }, - "default": "contains", - "title": "Filter Type", - "description": "The type of filter to apply" - }, - { - "name": "criteria", - "type": { - "type": "str" + "type_name": "nodetool.nodes.nodetool.boolean.Comparison" }, - "default": "", - "title": "Criteria", - "description": "The filtering criteria (text to match, type name, or length as string)" + "default": "==", + "title": "Comparison", + "description": "Comparison operator to use" } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "dict" - } - ] + "type": "bool" }, "name": "output" } @@ -1812,67 +1556,49 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values", - "key", - "filter_type", - "criteria" + "a", + "b", + "comparison" ], "is_dynamic": false }, { - "title": "Filter Dicts Regex", - "description": "Filters a list of dictionaries using regular expressions on specified keys.\n list, filter, regex, dictionary, pattern\n\n Use cases:\n - Filter dictionaries with values matching complex patterns\n - Search for dictionaries containing emails, dates, or specific formats\n - Advanced text pattern matching across dictionary values", - "namespace": "nodetool.list", - "node_type": "nodetool.list.FilterDictsRegex", + "title": "Conditional Switch", + "description": "Performs a conditional check on a boolean input and returns a value based on the result.\n if, condition, flow-control, branch, true, false, switch, toggle\n\n Use cases:\n - Implement conditional logic in workflows\n - Create dynamic branches in workflows\n - Implement decision points in workflows", + "namespace": "nodetool.boolean", + "node_type": "nodetool.boolean.ConditionalSwitch", "layout": "default", "properties": [ { - "name": "values", + "name": "condition", "type": { - "type": "list", - "type_args": [ - { - "type": "dict" - } - ] + "type": "bool" }, - "default": [], - "title": "Values" + "default": false, + "title": "Condition", + "description": "The condition to check" }, { - "name": "key", + "name": "if_true", "type": { - "type": "str" + "type": "any" }, - "default": "", - "title": "Key" + "title": "If True", + "description": "The value to return if the condition is true" }, { - "name": "pattern", + "name": "if_false", "type": { - "type": "str" + "type": "any" }, - "default": "", - "title": "Pattern" - }, - { - "name": "full_match", - "type": { - "type": "bool" - }, - "default": false, - "title": "Full Match" + "title": "If False", + "description": "The value to return if the condition is false" } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "dict" - } - ] + "type": "any" }, "name": "output" } @@ -1880,22 +1606,29 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values", - "key", - "pattern", - "full_match" + "condition", + "if_true", + "if_false" ], "is_dynamic": false }, { - "title": "Filter None", - "description": "Filters out None values from a list.\n list, filter, none, null\n\n Use cases:\n - Clean data by removing null values\n - Get only valid entries\n - Remove placeholder values", - "namespace": "nodetool.list", - "node_type": "nodetool.list.FilterNone", + "title": "Is In", + "description": "Checks if a value is present in a list of options.\n membership, contains, check\n\n Use cases:\n - Validate input against a set of allowed values\n - Implement category or group checks\n - Filter data based on inclusion criteria", + "namespace": "nodetool.boolean", + "node_type": "nodetool.boolean.IsIn", "layout": "default", "properties": [ { - "name": "values", + "name": "value", + "type": { + "type": "any" + }, + "title": "Value", + "description": "The value to check for membership" + }, + { + "name": "options", "type": { "type": "list", "type_args": [ @@ -1905,18 +1638,14 @@ ] }, "default": [], - "title": "Values" + "title": "Options", + "description": "The list of options to check against" } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "bool" }, "name": "output" } @@ -1924,64 +1653,31 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values" + "value", + "options" ], "is_dynamic": false }, { - "title": "Filter Number Range", - "description": "Filters a list of numbers to find values within a specified range.\n list, filter, numbers, range, between\n\n Use cases:\n - Find numbers within a specific range\n - Filter data points within bounds\n - Implement range-based filtering", - "namespace": "nodetool.list", - "node_type": "nodetool.list.FilterNumberRange", + "title": "Is None", + "description": "Checks if a value is None.\n null, none, check\n\n Use cases:\n - Validate input presence\n - Handle optional parameters\n - Implement null checks in data processing", + "namespace": "nodetool.boolean", + "node_type": "nodetool.boolean.IsNone", "layout": "default", "properties": [ { - "name": "values", - "type": { - "type": "list", - "type_args": [ - { - "type": "float" - } - ] - }, - "default": [], - "title": "Values" - }, - { - "name": "min_value", - "type": { - "type": "float" - }, - "default": 0, - "title": "Min Value" - }, - { - "name": "max_value", - "type": { - "type": "float" - }, - "default": 0, - "title": "Max Value" - }, - { - "name": "inclusive", + "name": "value", "type": { - "type": "bool" + "type": "any" }, - "default": true, - "title": "Inclusive" + "title": "Value", + "description": "The value to check for None" } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "float" - } - ] + "type": "bool" }, "name": "output" } @@ -1989,78 +1685,57 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values", - "min_value", - "max_value", - "inclusive" + "value" ], "is_dynamic": false }, { - "title": "Filter Numbers", - "description": "Filters a list of numbers based on various numerical conditions.\n list, filter, numbers, numeric\n\n Use cases:\n - Filter numbers by comparison (greater than, less than, equal to)\n - Filter even/odd numbers\n - Filter positive/negative numbers", - "namespace": "nodetool.list", - "node_type": "nodetool.list.FilterNumbers", + "title": "Logical Operator", + "description": "Performs logical operations on two boolean inputs.\n boolean, logic, operator, condition, flow-control, branch, else, true, false, switch, toggle\n\n Use cases:\n - Combine multiple conditions in decision-making\n - Implement complex logical rules in workflows\n - Create advanced filters or triggers", + "namespace": "nodetool.boolean", + "node_type": "nodetool.boolean.LogicalOperator", "layout": "default", "properties": [ { - "name": "values", + "name": "a", "type": { - "type": "list", - "type_args": [ - { - "type": "float" - } - ] + "type": "bool" }, - "default": [], - "title": "Values" + "default": false, + "title": "A", + "description": "First boolean input" }, { - "name": "filter_type", + "name": "b", "type": { - "type": "enum", - "values": [ - "greater_than", - "less_than", - "equal_to", - "even", - "odd", - "positive", - "negative" - ], - "type_name": "nodetool.nodes.nodetool.list.FilterNumberType" + "type": "bool" }, - "default": "greater_than", - "title": "Filter Type", - "description": "The type of filter to apply" + "default": false, + "title": "B", + "description": "Second boolean input" }, { - "name": "value", + "name": "operation", "type": { - "type": "union", - "type_args": [ - { - "type": "float" - }, - { - "type": "none" - } - ] + "type": "enum", + "values": [ + "and", + "or", + "xor", + "nand", + "nor" + ], + "type_name": "nodetool.nodes.nodetool.boolean.BooleanOperation" }, - "title": "Value", - "description": "The comparison value (for greater_than, less_than, equal_to)" + "default": "and", + "title": "Operation", + "description": "Logical operation to perform" } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "float" - } - ] + "type": "bool" }, "name": "output" } @@ -2068,60 +1743,33 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values", - "filter_type", - "value" + "a", + "b", + "operation" ], "is_dynamic": false }, { - "title": "Filter Regex", - "description": "Filters a list of strings using regular expressions.\n list, filter, regex, pattern, text\n\n Use cases:\n - Filter strings using complex patterns\n - Extract strings matching specific formats (emails, dates, etc.)\n - Advanced text pattern matching", - "namespace": "nodetool.list", - "node_type": "nodetool.list.FilterRegex", + "title": "Not", + "description": "Performs logical NOT operation on a boolean input.\n boolean, logic, not, invert, !, negation, condition, else, true, false, switch, toggle, flow-control, branch\n\n Use cases:\n - Invert a condition's result\n - Implement toggle functionality\n - Create opposite logic branches", + "namespace": "nodetool.boolean", + "node_type": "nodetool.boolean.Not", "layout": "default", "properties": [ { - "name": "values", - "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] - }, - "default": [], - "title": "Values" - }, - { - "name": "pattern", - "type": { - "type": "str" - }, - "default": "", - "title": "Pattern", - "description": "The regular expression pattern to match against." - }, - { - "name": "full_match", + "name": "value", "type": { "type": "bool" }, "default": false, - "title": "Full Match", - "description": "Whether to match the entire string or find pattern anywhere in string" + "title": "Value", + "description": "Boolean input to negate" } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] + "type": "bool" }, "name": "output" } @@ -2129,17 +1777,15 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values", - "pattern", - "full_match" + "value" ], "is_dynamic": false }, { - "title": "Filter Strings", - "description": "Filters a list of strings based on various criteria.\n list, filter, strings, text\n\n Use cases:\n - Filter strings by length\n - Filter strings containing specific text\n - Filter strings by prefix/suffix\n - Filter strings using regex patterns", - "namespace": "nodetool.list", - "node_type": "nodetool.list.FilterStrings", + "title": "Some", + "description": "Checks if any boolean value in a list is True.\n boolean, any, check, logic, condition, flow-control, branch\n\n Use cases:\n - Check if at least one condition in a set is met\n - Implement optional criteria checks\n - Create flexible validation rules", + "namespace": "nodetool.boolean", + "node_type": "nodetool.boolean.Some", "layout": "default", "properties": [ { @@ -2148,50 +1794,19 @@ "type": "list", "type_args": [ { - "type": "str" + "type": "bool" } ] }, "default": [], - "title": "Values" - }, - { - "name": "filter_type", - "type": { - "type": "enum", - "values": [ - "contains", - "starts_with", - "ends_with", - "length_greater", - "length_less", - "exact_length" - ], - "type_name": "nodetool.nodes.nodetool.list.FilterType" - }, - "default": "contains", - "title": "Filter Type", - "description": "The type of filter to apply" - }, - { - "name": "criteria", - "type": { - "type": "str" - }, - "default": "", - "title": "Criteria", - "description": "The filtering criteria (text to match or length as string)" + "title": "Values", + "description": "List of boolean values to check" } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] + "type": "bool" }, "name": "output" } @@ -2199,150 +1814,129 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values", - "filter_type", - "criteria" + "values" ], "is_dynamic": false }, { - "title": "Flatten", - "description": "Flattens a nested list structure into a single flat list.\n list, flatten, nested, structure\n\n Use cases:\n - Convert nested lists into a single flat list\n - Simplify complex list structures\n - Process hierarchical data as a sequence\n\n Examples:\n [[1, 2], [3, 4]] -> [1, 2, 3, 4]\n [[1, [2, 3]], [4, [5, 6]]] -> [1, 2, 3, 4, 5, 6]", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Flatten", + "title": "Agent", + "description": "Executes tasks using a multi-step agent that can call tools\n agent, execution, tasks\n\n Use cases:\n - Automate complex workflows with reasoning\n - Process tasks with tool calling capabilities\n - Solve problems step-by-step with LLM reasoning", + "namespace": "nodetool.agents", + "node_type": "nodetool.agents.Agent", "layout": "default", "properties": [ { - "name": "values", + "name": "name", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "str" }, - "default": [], - "title": "Values" + "default": "Agent", + "title": "Name", + "description": "The name of the agent executor" }, { - "name": "max_depth", - "type": { - "type": "int" - }, - "default": -1, - "title": "Max Depth", - "min": -1.0 - } - ], - "outputs": [ - { + "name": "objective", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "str" }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "values", - "max_depth" - ], - "is_dynamic": false - }, - { - "title": "Generate Sequence", - "description": "Generates a list of integers within a specified range.\n list, range, sequence, numbers\n\n Use cases:\n - Create numbered lists\n - Generate index sequences\n - Produce arithmetic progressions", - "namespace": "nodetool.list", - "node_type": "nodetool.list.GenerateSequence", - "layout": "default", - "properties": [ + "default": "", + "title": "Objective", + "description": "The objective or problem to create a plan for" + }, { - "name": "start", + "name": "model", "type": { - "type": "int" + "type": "language_model" }, - "default": 0, - "title": "Start" + "default": {}, + "title": "Model", + "description": "Model to use for execution" }, { - "name": "stop", + "name": "reasoning_model", "type": { - "type": "int" + "type": "language_model" }, - "default": 0, - "title": "Stop" + "default": {}, + "title": "Reasoning Model", + "description": "Model to use for reasoning tasks" }, { - "name": "step", + "name": "task", "type": { - "type": "int" + "type": "task" }, - "default": 1, - "title": "Step" - } - ], - "outputs": [ + "default": {}, + "title": "Task", + "description": "Pre-defined task to execute, skipping planning" + }, { + "name": "tools", "type": { "type": "list", "type_args": [ { - "type": "int" + "type": "tool_name" } ] }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "start", - "stop", - "step" - ], - "is_dynamic": false - }, - { - "title": "Get Element", - "description": "Retrieves a single value from a list at a specific index.\n list, get, extract, value\n\n Use cases:\n - Access a specific element by position\n - Implement array-like indexing\n - Extract the first or last element", - "namespace": "nodetool.list", - "node_type": "nodetool.list.GetElement", - "layout": "default", - "properties": [ + "default": [], + "title": "Tools", + "description": "List of tools to use for execution" + }, { - "name": "values", + "name": "input_files", "type": { "type": "list", "type_args": [ { - "type": "any" + "type": "file_path" } ] }, "default": [], - "title": "Values" + "title": "Input Files", + "description": "List of input files to use for the agent" }, { - "name": "index", + "name": "output_type", + "type": { + "type": "enum", + "values": [ + "markdown", + "json", + "csv", + "txt", + "html", + "xml", + "yaml", + "python", + "javascript", + "typescript", + "svg", + "sql", + "xlsx" + ], + "type_name": "nodetool.nodes.nodetool.agents.OutputFormatEnum" + }, + "default": "markdown", + "title": "Output Type", + "description": "The type of output format for the agent result" + }, + { + "name": "max_steps", "type": { "type": "int" }, - "default": 0, - "title": "Index" + "default": 30, + "title": "Max Steps", + "description": "Maximum execution steps to prevent infinite loops" } ], "outputs": [ { "type": { - "type": "any" + "type": "str" }, "name": "output" } @@ -2350,307 +1944,288 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values", - "index" + "objective", + "model", + "task", + "tools", + "output_type" ], "is_dynamic": false }, { - "title": "Intersection", - "description": "Finds common elements between two lists.\n list, set, intersection, common\n\n Use cases:\n - Find elements present in both lists\n - Identify shared items between collections\n - Filter for matching elements", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Intersection", + "title": "Agent (Streaming)", + "description": "Executes tasks using a multi-step agent that streams results as they're generated.\n agent, execution, tasks, streaming\n\n Use cases:\n - Real-time interactive applications\n - Progressive rendering of agent responses\n - Streaming AI interfaces\n - Live-updating workflows", + "namespace": "nodetool.agents", + "node_type": "nodetool.agents.AgentStreaming", "layout": "default", "properties": [ { - "name": "list1", + "name": "name", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "str" }, - "default": [], - "title": "List1" + "default": "Agent", + "title": "Name", + "description": "The name of the agent executor" }, { - "name": "list2", + "name": "objective", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "str" }, - "default": [], - "title": "List2" - } - ], - "outputs": [ + "default": "", + "title": "Objective", + "description": "The objective or problem to create a plan for" + }, { + "name": "model", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "language_model" }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "list1", - "list2" - ], - "is_dynamic": false - }, - { - "title": "Length", - "description": "Calculates the length of a list.\n list, count, size\n\n Use cases:\n - Determine the number of elements in a list\n - Check if a list is empty\n - Validate list size constraints", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Length", - "layout": "default", - "properties": [ + "default": {}, + "title": "Model", + "description": "Model to use for execution" + }, { - "name": "values", + "name": "reasoning_model", + "type": { + "type": "language_model" + }, + "default": {}, + "title": "Reasoning Model", + "description": "Model to use for reasoning tasks" + }, + { + "name": "task", + "type": { + "type": "task" + }, + "default": {}, + "title": "Task", + "description": "Pre-defined task to execute, skipping planning" + }, + { + "name": "tools", "type": { "type": "list", "type_args": [ { - "type": "any" + "type": "tool_name" } ] }, "default": [], - "title": "Values" - } - ], - "outputs": [ - { - "type": { - "type": "int" - }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "values" - ], - "is_dynamic": false - }, - { - "title": "List Iterator", - "description": "Iterate over rows of a dataframe.", - "namespace": "nodetool.list", - "node_type": "nodetool.list.ListIterator", - "layout": "default", - "properties": [ + "title": "Tools", + "description": "List of tools to use for execution" + }, { - "name": "values", + "name": "input_files", "type": { "type": "list", "type_args": [ { - "type": "any" + "type": "file_path" } ] }, "default": [], - "title": "Values" + "title": "Input Files", + "description": "List of input files to use for the agent" + }, + { + "name": "output_type", + "type": { + "type": "enum", + "values": [ + "markdown", + "json", + "csv", + "txt", + "html", + "xml", + "yaml", + "python", + "javascript", + "typescript", + "svg", + "sql", + "xlsx" + ], + "type_name": "nodetool.nodes.nodetool.agents.OutputFormatEnum" + }, + "default": "markdown", + "title": "Output Type", + "description": "The type of output format for the agent result" + }, + { + "name": "max_steps", + "type": { + "type": "int" + }, + "default": 30, + "title": "Max Steps", + "description": "Maximum execution steps to prevent infinite loops" } ], "outputs": [ { "type": { - "type": "any" + "type": "str" }, - "name": "value" + "name": "text" }, { "type": { - "type": "int" + "type": "image" }, - "name": "index" + "name": "image" + }, + { + "type": { + "type": "audio" + }, + "name": "audio" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values" + "objective", + "model", + "task", + "tools", + "output_type" ], "is_dynamic": false }, { - "title": "Map Field", - "description": "Extracts a specific field from a list of dictionaries or objects.\n list, map, field, extract, pluck\n\n Use cases:\n - Extract specific fields from a list of objects\n - Transform complex data structures into simple lists\n - Collect values for a particular key across multiple dictionaries", - "namespace": "nodetool.list", - "node_type": "nodetool.list.MapField", + "title": "Dataframe Agent", + "description": "Executes tasks using a multi-step agent that can call tools and return a dataframe\n agent, execution, tasks\n\n Use cases:\n - Automate complex workflows with reasoning\n - Process tasks with tool calling capabilities\n - Solve problems step-by-step with LLM reasoning", + "namespace": "nodetool.agents", + "node_type": "nodetool.agents.DataframeAgent", "layout": "default", "properties": [ { - "name": "values", + "name": "name", "type": { - "type": "list", - "type_args": [ - { - "type": "union", - "type_args": [ - { - "type": "dict" - }, - { - "type": "object" - } - ] - } - ] + "type": "str" }, - "default": [], - "title": "Values" + "default": "Agent", + "title": "Name", + "description": "The name of the agent executor" }, { - "name": "field", + "name": "objective", "type": { "type": "str" }, "default": "", - "title": "Field" + "title": "Objective", + "description": "The objective or problem to create a plan for" }, { - "name": "default", + "name": "model", "type": { - "type": "any" + "type": "language_model" }, - "title": "Default" - } - ], - "outputs": [ + "default": {}, + "title": "Model", + "description": "Model to use for execution" + }, { + "name": "reasoning_model", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "language_model" }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "values", - "field", - "default" - ], - "is_dynamic": false - }, - { - "title": "Maximum", - "description": "Finds the largest value in a list of numbers.\n list, max, maximum, aggregate, math\n\n Use cases:\n - Find highest value\n - Get largest number in dataset", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Maximum", - "layout": "default", - "properties": [ + "default": {}, + "title": "Reasoning Model", + "description": "Model to use for reasoning tasks" + }, { - "name": "values", + "name": "task", + "type": { + "type": "task" + }, + "default": {}, + "title": "Task", + "description": "Pre-defined task to execute, skipping planning" + }, + { + "name": "tools", "type": { "type": "list", "type_args": [ { - "type": "float" + "type": "tool_name" } ] }, "default": [], - "title": "Values" - } - ], - "outputs": [ - { - "type": { - "type": "float" - }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "values" - ], - "is_dynamic": false - }, - { - "title": "Minimum", - "description": "Finds the smallest value in a list of numbers.\n list, min, minimum, aggregate, math\n\n Use cases:\n - Find lowest value\n - Get smallest number in dataset", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Minimum", - "layout": "default", - "properties": [ + "title": "Tools", + "description": "List of tools to use for execution" + }, { - "name": "values", + "name": "input_files", "type": { "type": "list", "type_args": [ { - "type": "float" + "type": "file_path" } ] }, "default": [], - "title": "Values" - } - ], - "outputs": [ + "title": "Input Files", + "description": "List of input files to use for the agent" + }, { + "name": "output_type", "type": { - "type": "float" + "type": "enum", + "values": [ + "markdown", + "json", + "csv", + "txt", + "html", + "xml", + "yaml", + "python", + "javascript", + "typescript", + "svg", + "sql", + "xlsx" + ], + "type_name": "nodetool.nodes.nodetool.agents.OutputFormatEnum" }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "values" - ], - "is_dynamic": false - }, - { - "title": "Product", - "description": "Calculates the product of all numbers in a list.\n list, product, multiply, aggregate, math\n\n Use cases:\n - Multiply all numbers together\n - Calculate compound values", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Product", - "layout": "default", - "properties": [ + "default": "markdown", + "title": "Output Type", + "description": "The type of output format for the agent result" + }, { - "name": "values", + "name": "max_steps", "type": { - "type": "list", - "type_args": [ - { - "type": "float" - } - ] + "type": "int" }, - "default": [], - "title": "Values" + "default": 30, + "title": "Max Steps", + "description": "Maximum execution steps to prevent infinite loops" + }, + { + "name": "columns", + "type": { + "type": "record_type" + }, + "default": {}, + "title": "Columns", + "description": "The columns to use in the dataframe." } ], "outputs": [ { "type": { - "type": "float" + "type": "dataframe" }, "name": "output" } @@ -2658,77 +2233,147 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values" + "objective", + "model", + "task", + "tools", + "output_type", + "columns" ], "is_dynamic": false }, { - "title": "Randomize", - "description": "Randomly shuffles the elements of a list.\n list, shuffle, random, order\n\n Use cases:\n - Randomize the order of items in a playlist\n - Implement random sampling without replacement\n - Create randomized data sets for testing", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Randomize", + "title": "Dict Agent", + "description": "Executes tasks using a multi-step agent that can call tools and return a dictionary\n agent, execution, tasks", + "namespace": "nodetool.agents", + "node_type": "nodetool.agents.DictAgent", "layout": "default", "properties": [ { - "name": "values", + "name": "name", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "str" }, - "default": [], - "title": "Values" - } - ], - "outputs": [ + "default": "Agent", + "title": "Name", + "description": "The name of the agent executor" + }, + { + "name": "objective", + "type": { + "type": "str" + }, + "default": "", + "title": "Objective", + "description": "The objective or problem to create a plan for" + }, + { + "name": "model", + "type": { + "type": "language_model" + }, + "default": {}, + "title": "Model", + "description": "Model to use for execution" + }, + { + "name": "reasoning_model", + "type": { + "type": "language_model" + }, + "default": {}, + "title": "Reasoning Model", + "description": "Model to use for reasoning tasks" + }, + { + "name": "task", + "type": { + "type": "task" + }, + "default": {}, + "title": "Task", + "description": "Pre-defined task to execute, skipping planning" + }, { + "name": "tools", "type": { "type": "list", "type_args": [ { - "type": "any" + "type": "tool_name" } ] }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "values" - ], - "is_dynamic": false - }, - { - "title": "Reverse", - "description": "Inverts the order of elements in a list.\n list, reverse, invert, flip\n\n Use cases:\n - Reverse the order of a sequence", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Reverse", - "layout": "default", - "properties": [ + "default": [], + "title": "Tools", + "description": "List of tools to use for execution" + }, { - "name": "values", + "name": "input_files", "type": { "type": "list", "type_args": [ { - "type": "any" + "type": "file_path" } ] }, "default": [], - "title": "Values" + "title": "Input Files", + "description": "List of input files to use for the agent" + }, + { + "name": "output_type", + "type": { + "type": "enum", + "values": [ + "markdown", + "json", + "csv", + "txt", + "html", + "xml", + "yaml", + "python", + "javascript", + "typescript", + "svg", + "sql", + "xlsx" + ], + "type_name": "nodetool.nodes.nodetool.agents.OutputFormatEnum" + }, + "default": "markdown", + "title": "Output Type", + "description": "The type of output format for the agent result" + }, + { + "name": "max_steps", + "type": { + "type": "int" + }, + "default": 30, + "title": "Max Steps", + "description": "Maximum execution steps to prevent infinite loops" + }, + { + "name": "fields", + "type": { + "type": "record_type" + }, + "default": {}, + "title": "Fields", + "description": "The fields to use in the dictionary." } ], "outputs": [ { "type": { - "type": "list", + "type": "dict", "type_args": [ + { + "type": "str" + }, { "type": "any" } @@ -2740,99 +2385,134 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values" + "objective", + "model", + "task", + "tools", + "output_type", + "fields" ], "is_dynamic": false }, { - "title": "Save List", - "description": "Saves a list to a text file, placing each element on a new line.\n list, save, file, serialize\n\n Use cases:\n - Export list data to a file\n - Create a simple text-based database\n - Generate line-separated output", - "namespace": "nodetool.list", - "node_type": "nodetool.list.SaveList", + "title": "Image Agent", + "description": "Executes tasks using a multi-step agent that can call tools and return an image path.\n agent, execution, tasks, image\n\n Use cases:\n - Generate images based on prompts\n - Find relevant images using search tools", + "namespace": "nodetool.agents", + "node_type": "nodetool.agents.ImageAgent", "layout": "default", "properties": [ { - "name": "values", + "name": "name", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "str" }, - "default": [], - "title": "Values" + "default": "Agent", + "title": "Name", + "description": "The name of the agent executor" }, { - "name": "name", + "name": "objective", "type": { "type": "str" }, - "default": "text.txt", - "title": "Name", - "description": "\n Name of the output file.\n You can use time and date variables to create unique names:\n %Y - Year\n %m - Month\n %d - Day\n %H - Hour\n %M - Minute\n %S - Second\n " - } - ], - "outputs": [ + "default": "", + "title": "Objective", + "description": "The objective or problem to create a plan for" + }, { + "name": "model", "type": { - "type": "text" + "type": "language_model" }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "values", - "name" - ], - "is_dynamic": false - }, - { - "title": "Select Elements", - "description": "Selects specific values from a list using index positions.\n list, select, index, extract\n\n Use cases:\n - Pick specific elements by their positions\n - Rearrange list elements\n - Create a new list from selected indices", - "namespace": "nodetool.list", - "node_type": "nodetool.list.SelectElements", - "layout": "default", - "properties": [ + "default": {}, + "title": "Model", + "description": "Model to use for execution" + }, { - "name": "values", + "name": "reasoning_model", + "type": { + "type": "language_model" + }, + "default": {}, + "title": "Reasoning Model", + "description": "Model to use for reasoning tasks" + }, + { + "name": "task", + "type": { + "type": "task" + }, + "default": {}, + "title": "Task", + "description": "Pre-defined task to execute, skipping planning" + }, + { + "name": "tools", "type": { "type": "list", "type_args": [ { - "type": "any" + "type": "tool_name" } ] }, "default": [], - "title": "Values" + "title": "Tools", + "description": "List of tools to use for execution" }, { - "name": "indices", + "name": "input_files", "type": { "type": "list", "type_args": [ { - "type": "int" + "type": "file_path" } ] }, "default": [], - "title": "Indices" + "title": "Input Files", + "description": "List of input files to use for the agent" + }, + { + "name": "output_type", + "type": { + "type": "enum", + "values": [ + "markdown", + "json", + "csv", + "txt", + "html", + "xml", + "yaml", + "python", + "javascript", + "typescript", + "svg", + "sql", + "xlsx" + ], + "type_name": "nodetool.nodes.nodetool.agents.OutputFormatEnum" + }, + "default": "markdown", + "title": "Output Type", + "description": "The type of output format for the agent result" + }, + { + "name": "max_steps", + "type": { + "type": "int" + }, + "default": 30, + "title": "Max Steps", + "description": "Maximum execution steps to prevent infinite loops" } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "image" }, "name": "output" } @@ -2840,111 +2520,136 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values", - "indices" + "objective", + "model", + "task", + "tools", + "output_type" ], "is_dynamic": false }, { - "title": "Slice", - "description": "Extracts a subset from a list using start, stop, and step indices.\n list, slice, subset, extract\n\n Use cases:\n - Get a portion of a list\n - Implement pagination\n - Extract every nth element", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Slice", + "title": "List Agent", + "description": "Executes tasks using a multi-step agent that can call tools and return a list\n agent, execution, tasks, list\n\n Use cases:\n - Generate lists of items\n - Create sequences of steps\n - Collect multiple results", + "namespace": "nodetool.agents", + "node_type": "nodetool.agents.ListAgent", "layout": "default", "properties": [ { - "name": "values", + "name": "name", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "str" }, - "default": [], - "title": "Values" + "default": "Agent", + "title": "Name", + "description": "The name of the agent executor" }, { - "name": "start", + "name": "objective", "type": { - "type": "int" + "type": "str" }, - "default": 0, - "title": "Start" + "default": "", + "title": "Objective", + "description": "The objective or problem to create a plan for" }, { - "name": "stop", + "name": "model", "type": { - "type": "int" + "type": "language_model" }, - "default": 0, - "title": "Stop" + "default": {}, + "title": "Model", + "description": "Model to use for execution" }, { - "name": "step", + "name": "reasoning_model", "type": { - "type": "int" + "type": "language_model" }, - "default": 1, - "title": "Step" - } - ], - "outputs": [ + "default": {}, + "title": "Reasoning Model", + "description": "Model to use for reasoning tasks" + }, + { + "name": "task", + "type": { + "type": "task" + }, + "default": {}, + "title": "Task", + "description": "Pre-defined task to execute, skipping planning" + }, { + "name": "tools", "type": { "type": "list", "type_args": [ { - "type": "any" + "type": "tool_name" } ] }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "values", - "start", - "stop", - "step" - ], - "is_dynamic": false - }, - { - "title": "Sort", - "description": "Sorts the elements of a list in ascending or descending order.\n list, sort, order, arrange\n\n Use cases:\n - Organize data in a specific order\n - Prepare data for binary search or other algorithms\n - Rank items based on their values", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Sort", - "layout": "default", - "properties": [ + "default": [], + "title": "Tools", + "description": "List of tools to use for execution" + }, { - "name": "values", + "name": "input_files", "type": { "type": "list", "type_args": [ { - "type": "any" + "type": "file_path" } ] }, "default": [], - "title": "Values" + "title": "Input Files", + "description": "List of input files to use for the agent" }, { - "name": "order", + "name": "output_type", "type": { "type": "enum", "values": [ - "ascending", - "descending" + "markdown", + "json", + "csv", + "txt", + "html", + "xml", + "yaml", + "python", + "javascript", + "typescript", + "svg", + "sql", + "xlsx" ], - "type_name": "nodetool.nodes.nodetool.list.SortOrder" + "type_name": "nodetool.nodes.nodetool.agents.OutputFormatEnum" }, - "default": "ascending", - "title": "Order" + "default": "markdown", + "title": "Output Type", + "description": "The type of output format for the agent result" + }, + { + "name": "max_steps", + "type": { + "type": "int" + }, + "default": 30, + "title": "Max Steps", + "description": "Maximum execution steps to prevent infinite loops" + }, + { + "name": "item_type", + "type": { + "type": "str" + }, + "default": "string", + "title": "Item Type", + "description": "The type of items in the list (string, number, object)" } ], "outputs": [ @@ -2963,94 +2668,125 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values", - "order" + "objective", + "model", + "task", + "tools", + "output_type", + "item_type" ], "is_dynamic": false }, { - "title": "Sum", - "description": "Calculates the sum of a list of numbers.\n list, sum, aggregate, math\n\n Use cases:\n - Calculate total of numeric values\n - Add up all elements in a list", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Sum", + "title": "Simple Agent", + "description": "Executes a single task using a simple agent that can call tools.\n agent, execution, tasks, simple\n\n Use cases:\n - Simple, focused tasks with a clear objective\n - Tasks that don't require complex planning\n - Quick responses with tool calling capabilities", + "namespace": "nodetool.agents", + "node_type": "nodetool.agents.SimpleAgent", "layout": "default", "properties": [ { - "name": "values", + "name": "name", + "type": { + "type": "str" + }, + "default": "Simple Agent", + "title": "Name", + "description": "The name of the simple agent executor" + }, + { + "name": "objective", + "type": { + "type": "str" + }, + "default": "", + "title": "Objective", + "description": "The objective or task to complete" + }, + { + "name": "model", + "type": { + "type": "language_model" + }, + "default": {}, + "title": "Model", + "description": "Model to use for execution" + }, + { + "name": "tools", "type": { "type": "list", "type_args": [ { - "type": "float" + "type": "tool_name" } ] }, "default": [], - "title": "Values" - } - ], - "outputs": [ - { - "type": { - "type": "float" - }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "values" - ], - "is_dynamic": false - }, - { - "title": "Transform", - "description": "Applies a transformation to each element in a list.\n list, transform, map, convert\n\n Use cases:\n - Convert types (str to int, etc.)\n - Apply formatting\n - Mathematical operations", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Transform", - "layout": "default", - "properties": [ + "title": "Tools", + "description": "List of tools to use for execution" + }, { - "name": "values", + "name": "input_files", "type": { "type": "list", "type_args": [ { - "type": "any" + "type": "file_path" } ] }, "default": [], - "title": "Values" + "title": "Input Files", + "description": "List of input files to use for the agent" }, { - "name": "transform_type", + "name": "output_type", "type": { "type": "enum", "values": [ - "to_int", - "to_float", - "to_string", - "uppercase", - "lowercase", - "strip" + "markdown", + "json", + "csv", + "txt", + "html", + "xml", + "yaml", + "python", + "javascript", + "typescript", + "svg", + "sql", + "xlsx" ], - "type_name": "nodetool.nodes.nodetool.list.TransformType" + "type_name": "nodetool.nodes.nodetool.agents.OutputFormatEnum" }, - "default": "to_string", - "title": "Transform Type" + "default": "markdown", + "title": "Output Type", + "description": "The type of output format for the agent result" + }, + { + "name": "output_schema", + "type": { + "type": "dict", + "optional": true + }, + "title": "Output Schema", + "description": "Optional JSON schema for the output" + }, + { + "name": "max_iterations", + "type": { + "type": "int" + }, + "default": 20, + "title": "Max Iterations", + "description": "Maximum execution iterations to prevent infinite loops" } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "str" }, "name": "output" } @@ -3058,54 +2794,153 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values", - "transform_type" + "objective", + "model", + "tools", + "input_files", + "output_type", + "output_schema", + "max_iterations" ], "is_dynamic": false }, { - "title": "Union", - "description": "Combines unique elements from two lists.\n list, set, union, combine\n\n Use cases:\n - Merge lists while removing duplicates\n - Combine collections uniquely\n - Create comprehensive set of items", - "namespace": "nodetool.list", - "node_type": "nodetool.list.Union", + "title": "Task Planner", + "description": "Generates a Task execution plan based on an objective, model, and tools.\n Outputs a Task object that can be used by an Agent executor.\n planning, task generation, workflow design", + "namespace": "nodetool.agents", + "node_type": "nodetool.agents.TaskPlanner", "layout": "default", "properties": [ { - "name": "list1", + "name": "name", + "type": { + "type": "str" + }, + "default": "Task Planner", + "title": "Name", + "description": "The name of the task planner node" + }, + { + "name": "objective", + "type": { + "type": "str" + }, + "default": "", + "title": "Objective", + "description": "The objective or problem to create a plan for" + }, + { + "name": "model", + "type": { + "type": "language_model" + }, + "default": {}, + "title": "Model", + "description": "Model to use for planning" + }, + { + "name": "reasoning_model", + "type": { + "type": "language_model" + }, + "default": {}, + "title": "Reasoning Model", + "description": "Model to use for reasoning" + }, + { + "name": "tools", "type": { "type": "list", "type_args": [ { - "type": "any" + "type": "tool_name" } ] }, "default": [], - "title": "List1" + "title": "Tools", + "description": "List of EXECUTION tools available for the planned subtasks" }, { - "name": "list2", + "name": "input_files", "type": { "type": "list", "type_args": [ { - "type": "any" + "type": "file_path" } ] }, "default": [], - "title": "List2" + "title": "Input Files", + "description": "List of input files to use for planning" + }, + { + "name": "output_schema", + "type": { + "type": "dict", + "optional": true + }, + "title": "Output Schema", + "description": "Optional JSON schema for the final task output" + }, + { + "name": "output_type", + "type": { + "type": "enum", + "values": [ + "markdown", + "json", + "csv", + "txt", + "html", + "xml", + "yaml", + "python", + "javascript", + "typescript", + "svg", + "sql", + "xlsx" + ], + "type_name": "nodetool.nodes.nodetool.agents.OutputFormatEnum" + }, + "default": "markdown", + "title": "Output Type", + "description": "Optional type hint for the final task output (e.g., 'markdown', 'json', 'csv')" + }, + { + "name": "enable_analysis_phase", + "type": { + "type": "bool" + }, + "default": true, + "title": "Enable Analysis Phase", + "description": "Whether to use analysis in the planning phase" + }, + { + "name": "enable_data_contracts_phase", + "type": { + "type": "bool" + }, + "default": true, + "title": "Enable Data Contracts Phase", + "description": "Whether to use data contracts in the planning phase" + }, + { + "name": "use_structured_output", + "type": { + "type": "bool" + }, + "default": false, + "title": "Use Structured Output", + "description": "Attempt to use structured output for plan generation" } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "task" }, "name": "output" } @@ -3113,255 +2948,15 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "list1", - "list2" - ], - "is_dynamic": false - }, - { - "title": "Collector", - "description": "Collect items until a \"done\" event and return them as a list.\n collector, aggregate, list, stream\n\n Use cases:\n - Gather results from multiple processing steps\n - Collect streaming data into batches\n - Aggregate outputs from parallel operations", - "namespace": "nodetool.control", - "node_type": "nodetool.control.Collector", - "layout": "default", - "properties": [ - { - "name": "input_item", - "type": { - "type": "any" - }, - "title": "Input Item", - "description": "The input item to collect." - }, - { - "name": "event", - "type": { - "type": "event" - }, - "default": {}, - "title": "Event", - "description": "Signal end of stream" - } - ], - "outputs": [ - { - "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] - }, - "name": "output" - }, - { - "type": { - "type": "event" - }, - "name": "event" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "input_item", - "event" - ], - "is_dynamic": false - }, - { - "title": "If", - "description": "Conditionally executes one of two branches based on a condition.\n control, flow, condition, logic, else, true, false, switch, toggle, flow-control\n\n Use cases:\n - Branch workflow based on conditions\n - Handle different cases in data processing\n - Implement decision logic", - "namespace": "nodetool.control", - "node_type": "nodetool.control.If", - "layout": "default", - "properties": [ - { - "name": "condition", - "type": { - "type": "bool" - }, - "default": false, - "title": "Condition", - "description": "The condition to evaluate" - }, - { - "name": "value", - "type": { - "type": "any" - }, - "title": "Value", - "description": "The value to pass to the next node" - } - ], - "outputs": [ - { - "type": { - "type": "any" - }, - "name": "if_true" - }, - { - "type": { - "type": "any" - }, - "name": "if_false" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "condition", - "value" - ], - "is_dynamic": false - }, - { - "title": "Iterator", - "description": "Iterate over a list and emit each item sequentially.\n iterator, loop, list, sequence\n\n Use cases:\n - Process each item of a collection in order\n - Drive downstream nodes with individual elements", - "namespace": "nodetool.control", - "node_type": "nodetool.control.Iterator", - "layout": "default", - "properties": [ - { - "name": "input_list", - "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] - }, - "title": "Input List", - "description": "The list of items to iterate over." - } - ], - "outputs": [ - { - "type": { - "type": "any" - }, - "name": "output" - }, - { - "type": { - "type": "int" - }, - "name": "index" - }, - { - "type": { - "type": "event" - }, - "name": "event" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "input_list" - ], - "is_dynamic": false - }, - { - "title": "Evaluate Expression", - "description": "Evaluates a Python expression with safety restrictions.\n python, expression, evaluate\n\n Use cases:\n - Calculate values dynamically\n - Transform data with simple expressions\n - Quick data validation\n\n IMPORTANT: Only enabled in non-production environments", - "namespace": "nodetool.code", - "node_type": "nodetool.code.EvaluateExpression", - "layout": "default", - "properties": [ - { - "name": "expression", - "type": { - "type": "str" - }, - "default": "", - "title": "Expression", - "description": "Python expression to evaluate. Variables are available as locals." - }, - { - "name": "variables", - "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] - }, - "default": {}, - "title": "Variables", - "description": "Variables available to the expression" - } - ], - "outputs": [ - { - "type": { - "type": "any" - }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "expression", - "variables" - ], - "is_dynamic": false - }, - { - "title": "Execute Python", - "description": "Executes Python code with safety restrictions.\n python, code, execute\n\n Use cases:\n - Run custom data transformations\n - Prototype node functionality\n - Debug and testing workflows\n\n IMPORTANT: Only enabled in non-production environments", - "namespace": "nodetool.code", - "node_type": "nodetool.code.ExecutePython", - "layout": "default", - "properties": [ - { - "name": "code", - "type": { - "type": "str" - }, - "default": "", - "title": "Code", - "description": "Python code to execute. Input variables are available as locals. Assign the desired output to the 'result' variable." - }, - { - "name": "inputs", - "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] - }, - "default": {}, - "title": "Inputs", - "description": "Input variables available to the code as locals." - } - ], - "outputs": [ - { - "type": { - "type": "any" - }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "code", - "inputs" + "objective", + "model", + "tools", + "input_files", + "output_schema", + "output_type", + "enable_analysis_phase", + "enable_data_contracts_phase", + "use_structured_output" ], "is_dynamic": false }, @@ -5011,25 +4606,38 @@ "is_dynamic": false }, { - "title": "All", - "description": "Checks if all boolean values in a list are True.\n boolean, all, check, logic, condition, flow-control, branch\n\n\n Use cases:\n - Ensure all conditions in a set are met\n - Implement comprehensive checks\n - Validate multiple criteria simultaneously", - "namespace": "nodetool.boolean", - "node_type": "nodetool.boolean.All", + "title": "Browser", + "description": "Fetches content from a web page using a headless browser.\n browser, web, scraping, content, fetch\n\n Use cases:\n - Extract content from JavaScript-heavy websites\n - Retrieve text content from web pages\n - Get metadata from web pages\n - Save extracted content to files", + "namespace": "nodetool.browser", + "node_type": "nodetool.browser.Browser", "layout": "default", "properties": [ { - "name": "values", + "name": "url", "type": { - "type": "list", - "type_args": [ - { - "type": "bool" - } - ] + "type": "str" }, - "default": [], - "title": "Values", - "description": "List of boolean values to check" + "default": "", + "title": "Url", + "description": "URL to navigate to" + }, + { + "name": "timeout", + "type": { + "type": "int" + }, + "default": 20000, + "title": "Timeout", + "description": "Timeout in milliseconds for page navigation" + }, + { + "name": "use_readability", + "type": { + "type": "bool" + }, + "default": true, + "title": "Use Readability", + "description": "Use Python's Readability for better content extraction" } ], "outputs": [ @@ -5037,62 +4645,137 @@ "type": { "type": "bool" }, - "name": "output" + "name": "success" + }, + { + "type": { + "type": "str" + }, + "name": "content" + }, + { + "type": { + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] + }, + "name": "metadata" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values" + "url", + "timeout", + "use_readability" ], "is_dynamic": false }, { - "title": "Compare", - "description": "Compares two values using a specified comparison operator.\n compare, condition, logic\n\n Use cases:\n - Implement decision points in workflows\n - Filter data based on specific criteria\n - Create dynamic thresholds or limits", - "namespace": "nodetool.boolean", - "node_type": "nodetool.boolean.Compare", + "title": "Browser Navigation", + "description": "Navigates and interacts with web pages in a browser session.\n browser, navigation, interaction, click, extract\n\n Use cases:\n - Perform complex web interactions\n - Navigate through multi-step web processes\n - Extract content after interaction", + "namespace": "nodetool.browser", + "node_type": "nodetool.browser.BrowserNavigation", "layout": "default", "properties": [ { - "name": "a", + "name": "url", "type": { - "type": "any" + "type": "str" }, - "title": "A", - "description": "First value to compare" + "default": "", + "title": "Url", + "description": "URL to navigate to (required for 'goto' action)" }, { - "name": "b", + "name": "action", "type": { - "type": "any" + "type": "enum", + "values": [ + "click", + "goto", + "back", + "forward", + "reload", + "extract" + ], + "type_name": "nodetool.nodes.nodetool.browser.Action" }, - "title": "B", - "description": "Second value to compare" + "default": "goto", + "title": "Action", + "description": "Navigation or extraction action to perform" }, { - "name": "comparison", + "name": "selector", + "type": { + "type": "str" + }, + "default": "", + "title": "Selector", + "description": "CSS selector for the element to interact with or extract from" + }, + { + "name": "timeout", + "type": { + "type": "int" + }, + "default": 30000, + "title": "Timeout", + "description": "Timeout in milliseconds for the action" + }, + { + "name": "wait_for", + "type": { + "type": "str" + }, + "default": "", + "title": "Wait For", + "description": "Optional selector to wait for after performing the action" + }, + { + "name": "extract_type", "type": { "type": "enum", "values": [ - "==", - "!=", - ">", - "<", - ">=", - "<=" + "text", + "html", + "value", + "attribute" ], - "type_name": "nodetool.nodes.nodetool.boolean.Comparison" + "type_name": "nodetool.nodes.nodetool.browser.ExtractType" }, - "default": "==", - "title": "Comparison", - "description": "Comparison operator to use" + "default": "text", + "title": "Extract Type", + "description": "Type of content to extract (for 'extract' action)" + }, + { + "name": "attribute", + "type": { + "type": "str" + }, + "default": "", + "title": "Attribute", + "description": "Attribute name to extract (when extract_type is 'attribute')" } ], "outputs": [ { "type": { - "type": "bool" + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] }, "name": "output" } @@ -5100,96 +4783,125 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "a", - "b", - "comparison" + "url", + "action", + "selector", + "timeout", + "wait_for", + "extract_type", + "attribute" ], "is_dynamic": false }, { - "title": "Conditional Switch", - "description": "Performs a conditional check on a boolean input and returns a value based on the result.\n if, condition, flow-control, branch, true, false, switch, toggle\n\n Use cases:\n - Implement conditional logic in workflows\n - Create dynamic branches in workflows\n - Implement decision points in workflows", - "namespace": "nodetool.boolean", - "node_type": "nodetool.boolean.ConditionalSwitch", + "title": "Browser Use", + "description": "Browser agent tool that uses browser_use under the hood.\n\n This module provides a tool for running browser-based agents using the browser_use library.\n The agent can perform complex web automation tasks like form filling, navigation, data extraction,\n and multi-step workflows using natural language instructions.\n\n Use cases:\n - Perform complex web automation tasks based on natural language.\n - Automate form filling and data entry.\n - Scrape data after complex navigation or interaction sequences.\n - Automate multi-step web workflows.", + "namespace": "nodetool.browser", + "node_type": "nodetool.browser.BrowserUse", "layout": "default", "properties": [ { - "name": "condition", + "name": "model", "type": { - "type": "bool" + "type": "enum", + "values": [ + "gpt-4o", + "claude-3-5-sonnet" + ], + "type_name": "nodetool.nodes.nodetool.browser.BrowserUseModel" }, - "default": false, - "title": "Condition", - "description": "The condition to check" + "default": "gpt-4o", + "title": "Model", + "description": "The model to use for the browser agent." }, { - "name": "if_true", + "name": "task", "type": { - "type": "any" + "type": "str" }, - "title": "If True", - "description": "The value to return if the condition is true" + "default": "", + "title": "Task", + "description": "Natural language description of the browser task to perform. Can include complex multi-step instructions like 'Compare prices between websites', 'Fill out forms', or 'Extract specific data'." }, { - "name": "if_false", + "name": "timeout", "type": { - "type": "any" + "type": "int" }, - "title": "If False", - "description": "The value to return if the condition is false" + "default": 300, + "title": "Timeout", + "description": "Maximum time in seconds to allow for task completion. Complex tasks may require longer timeouts.", + "min": 1.0, + "max": 3600.0 + }, + { + "name": "use_remote_browser", + "type": { + "type": "bool" + }, + "default": true, + "title": "Use Remote Browser", + "description": "Use a remote browser instead of a local one" } ], "outputs": [ + { + "type": { + "type": "bool" + }, + "name": "success" + }, + { + "type": { + "type": "str" + }, + "name": "task" + }, { "type": { "type": "any" }, - "name": "output" + "name": "result" + }, + { + "type": { + "type": "str", + "optional": true + }, + "name": "error" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "condition", - "if_true", - "if_false" - ], - "is_dynamic": false + "model", + "task", + "timeout", + "use_remote_browser" + ], + "is_dynamic": false }, { - "title": "Is In", - "description": "Checks if a value is present in a list of options.\n membership, contains, check\n\n Use cases:\n - Validate input against a set of allowed values\n - Implement category or group checks\n - Filter data based on inclusion criteria", - "namespace": "nodetool.boolean", - "node_type": "nodetool.boolean.IsIn", + "title": "Download File", + "description": "Downloads a file from a URL and saves it to disk.\n download, file, web, save\n\n Use cases:\n - Download documents, images, or other files from the web\n - Save data for further processing\n - Retrieve file assets for analysis", + "namespace": "nodetool.browser", + "node_type": "nodetool.browser.DownloadFile", "layout": "default", "properties": [ { - "name": "value", - "type": { - "type": "any" - }, - "title": "Value", - "description": "The value to check for membership" - }, - { - "name": "options", + "name": "url", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "str" }, - "default": [], - "title": "Options", - "description": "The list of options to check against" + "default": "", + "title": "Url", + "description": "URL of the file to download" } ], "outputs": [ { "type": { - "type": "bool" + "type": "bytes" }, "name": "output" } @@ -5197,31 +4909,68 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value", - "options" + "url" ], "is_dynamic": false }, { - "title": "Is None", - "description": "Checks if a value is None.\n null, none, check\n\n Use cases:\n - Validate input presence\n - Handle optional parameters\n - Implement null checks in data processing", - "namespace": "nodetool.boolean", - "node_type": "nodetool.boolean.IsNone", + "title": "Screenshot", + "description": "Takes a screenshot of a web page or specific element.\n browser, screenshot, capture, image\n\n Use cases:\n - Capture visual representation of web pages\n - Document specific UI elements\n - Create visual records of web content", + "namespace": "nodetool.browser", + "node_type": "nodetool.browser.Screenshot", "layout": "default", "properties": [ { - "name": "value", + "name": "url", "type": { - "type": "any" + "type": "str" }, - "title": "Value", - "description": "The value to check for None" + "default": "", + "title": "Url", + "description": "URL to navigate to before taking screenshot" + }, + { + "name": "selector", + "type": { + "type": "str" + }, + "default": "", + "title": "Selector", + "description": "Optional CSS selector for capturing a specific element" + }, + { + "name": "output_file", + "type": { + "type": "file_path" + }, + "default": { + "path": "screenshot.png" + }, + "title": "Output File", + "description": "Path to save the screenshot (relative to workspace)" + }, + { + "name": "timeout", + "type": { + "type": "int" + }, + "default": 30000, + "title": "Timeout", + "description": "Timeout in milliseconds for page navigation" } ], "outputs": [ { "type": { - "type": "bool" + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] }, "name": "output" } @@ -5229,57 +4978,43 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "url", + "selector", + "output_file", + "timeout" ], "is_dynamic": false }, { - "title": "Logical Operator", - "description": "Performs logical operations on two boolean inputs.\n boolean, logic, operator, condition, flow-control, branch, else, true, false, switch, toggle\n\n Use cases:\n - Combine multiple conditions in decision-making\n - Implement complex logical rules in workflows\n - Create advanced filters or triggers", - "namespace": "nodetool.boolean", - "node_type": "nodetool.boolean.LogicalOperator", + "title": "Web Fetch", + "description": "Fetches HTML content from a URL and converts it to text.\n web, fetch, html, markdown, http\n\n Use cases:\n - Extract text content from web pages\n - Process web content for analysis\n - Save web content to files", + "namespace": "nodetool.browser", + "node_type": "nodetool.browser.WebFetch", "layout": "default", "properties": [ { - "name": "a", - "type": { - "type": "bool" - }, - "default": false, - "title": "A", - "description": "First boolean input" - }, - { - "name": "b", + "name": "url", "type": { - "type": "bool" + "type": "str" }, - "default": false, - "title": "B", - "description": "Second boolean input" + "default": "", + "title": "Url", + "description": "URL to fetch content from" }, { - "name": "operation", + "name": "selector", "type": { - "type": "enum", - "values": [ - "and", - "or", - "xor", - "nand", - "nor" - ], - "type_name": "nodetool.nodes.nodetool.boolean.BooleanOperation" + "type": "str" }, - "default": "and", - "title": "Operation", - "description": "Logical operation to perform" + "default": "body", + "title": "Selector", + "description": "CSS selector to extract specific elements" } ], "outputs": [ { "type": { - "type": "bool" + "type": "str" }, "name": "output" } @@ -5287,33 +5022,40 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "a", - "b", - "operation" + "url", + "selector" ], "is_dynamic": false }, { - "title": "Not", - "description": "Performs logical NOT operation on a boolean input.\n boolean, logic, not, invert, !, negation, condition, else, true, false, switch, toggle, flow-control, branch\n\n Use cases:\n - Invert a condition's result\n - Implement toggle functionality\n - Create opposite logic branches", - "namespace": "nodetool.boolean", - "node_type": "nodetool.boolean.Not", - "layout": "default", + "title": "Arg Max", + "description": "Returns the label associated with the highest value in a dictionary.\n dictionary, maximum, label, argmax\n\n Use cases:\n - Get the most likely class from classification probabilities\n - Find the category with highest score\n - Identify the winner in a voting/ranking system", + "namespace": "nodetool.dictionary", + "node_type": "nodetool.dictionary.ArgMax", + "layout": "small", "properties": [ { - "name": "value", + "name": "scores", "type": { - "type": "bool" + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "float" + } + ] }, - "default": false, - "title": "Value", - "description": "Boolean input to negate" + "default": {}, + "title": "Scores", + "description": "Dictionary mapping labels to their corresponding scores/values" } ], "outputs": [ { "type": { - "type": "bool" + "type": "str" }, "name": "output" } @@ -5321,36 +5063,62 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "scores" ], "is_dynamic": false }, { - "title": "Some", - "description": "Checks if any boolean value in a list is True.\n boolean, any, check, logic, condition, flow-control, branch\n\n Use cases:\n - Check if at least one condition in a set is met\n - Implement optional criteria checks\n - Create flexible validation rules", - "namespace": "nodetool.boolean", - "node_type": "nodetool.boolean.Some", - "layout": "default", + "title": "Combine", + "description": "Merges two dictionaries, with second dictionary values taking precedence.\n dictionary, merge, update, +, add, concatenate\n\n Use cases:\n - Combine default and custom configurations\n - Merge partial updates with existing data\n - Create aggregate data structures", + "namespace": "nodetool.dictionary", + "node_type": "nodetool.dictionary.Combine", + "layout": "small", "properties": [ { - "name": "values", + "name": "dict_a", "type": { - "type": "list", + "type": "dict", "type_args": [ { - "type": "bool" + "type": "str" + }, + { + "type": "any" } ] }, - "default": [], - "title": "Values", - "description": "List of boolean values to check" + "default": {}, + "title": "Dict A" + }, + { + "name": "dict_b", + "type": { + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] + }, + "default": {}, + "title": "Dict B" } ], "outputs": [ { "type": { - "type": "bool" + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] }, "name": "output" } @@ -5358,560 +5126,20 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "values" + "dict_a", + "dict_b" ], "is_dynamic": false }, { - "title": "Agent", - "description": "Executes tasks using a multi-step agent that can call tools\n agent, execution, tasks\n\n Use cases:\n - Automate complex workflows with reasoning\n - Process tasks with tool calling capabilities\n - Solve problems step-by-step with LLM reasoning", - "namespace": "nodetool.agents", - "node_type": "nodetool.agents.Agent", + "title": "Filter", + "description": "Creates a new dictionary with only specified keys from the input.\n dictionary, filter, select\n\n Use cases:\n - Extract relevant fields from a larger data structure\n - Implement data access controls\n - Prepare specific data subsets for processing", + "namespace": "nodetool.dictionary", + "node_type": "nodetool.dictionary.Filter", "layout": "default", "properties": [ { - "name": "name", - "type": { - "type": "str" - }, - "default": "Agent", - "title": "Name", - "description": "The name of the agent executor" - }, - { - "name": "objective", - "type": { - "type": "str" - }, - "default": "", - "title": "Objective", - "description": "The objective or problem to create a plan for" - }, - { - "name": "model", - "type": { - "type": "language_model" - }, - "default": {}, - "title": "Model", - "description": "Model to use for execution" - }, - { - "name": "reasoning_model", - "type": { - "type": "language_model" - }, - "default": {}, - "title": "Reasoning Model", - "description": "Model to use for reasoning tasks" - }, - { - "name": "task", - "type": { - "type": "task" - }, - "default": {}, - "title": "Task", - "description": "Pre-defined task to execute, skipping planning" - }, - { - "name": "tools", - "type": { - "type": "list", - "type_args": [ - { - "type": "tool_name" - } - ] - }, - "default": [], - "title": "Tools", - "description": "List of tools to use for execution" - }, - { - "name": "input_files", - "type": { - "type": "list", - "type_args": [ - { - "type": "file_path" - } - ] - }, - "default": [], - "title": "Input Files", - "description": "List of input files to use for the agent" - }, - { - "name": "output_type", - "type": { - "type": "enum", - "values": [ - "markdown", - "json", - "csv", - "txt", - "html", - "xml", - "yaml", - "python", - "javascript", - "typescript", - "svg", - "sql", - "xlsx" - ], - "type_name": "nodetool.nodes.nodetool.agents.OutputFormatEnum" - }, - "default": "markdown", - "title": "Output Type", - "description": "The type of output format for the agent result" - }, - { - "name": "max_steps", - "type": { - "type": "int" - }, - "default": 30, - "title": "Max Steps", - "description": "Maximum execution steps to prevent infinite loops" - } - ], - "outputs": [ - { - "type": { - "type": "str" - }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "objective", - "model", - "task", - "tools", - "output_type" - ], - "is_dynamic": false - }, - { - "title": "Agent (Streaming)", - "description": "Executes tasks using a multi-step agent that streams results as they're generated.\n agent, execution, tasks, streaming\n\n Use cases:\n - Real-time interactive applications\n - Progressive rendering of agent responses\n - Streaming AI interfaces\n - Live-updating workflows", - "namespace": "nodetool.agents", - "node_type": "nodetool.agents.AgentStreaming", - "layout": "default", - "properties": [ - { - "name": "name", - "type": { - "type": "str" - }, - "default": "Agent", - "title": "Name", - "description": "The name of the agent executor" - }, - { - "name": "objective", - "type": { - "type": "str" - }, - "default": "", - "title": "Objective", - "description": "The objective or problem to create a plan for" - }, - { - "name": "model", - "type": { - "type": "language_model" - }, - "default": {}, - "title": "Model", - "description": "Model to use for execution" - }, - { - "name": "reasoning_model", - "type": { - "type": "language_model" - }, - "default": {}, - "title": "Reasoning Model", - "description": "Model to use for reasoning tasks" - }, - { - "name": "task", - "type": { - "type": "task" - }, - "default": {}, - "title": "Task", - "description": "Pre-defined task to execute, skipping planning" - }, - { - "name": "tools", - "type": { - "type": "list", - "type_args": [ - { - "type": "tool_name" - } - ] - }, - "default": [], - "title": "Tools", - "description": "List of tools to use for execution" - }, - { - "name": "input_files", - "type": { - "type": "list", - "type_args": [ - { - "type": "file_path" - } - ] - }, - "default": [], - "title": "Input Files", - "description": "List of input files to use for the agent" - }, - { - "name": "output_type", - "type": { - "type": "enum", - "values": [ - "markdown", - "json", - "csv", - "txt", - "html", - "xml", - "yaml", - "python", - "javascript", - "typescript", - "svg", - "sql", - "xlsx" - ], - "type_name": "nodetool.nodes.nodetool.agents.OutputFormatEnum" - }, - "default": "markdown", - "title": "Output Type", - "description": "The type of output format for the agent result" - }, - { - "name": "max_steps", - "type": { - "type": "int" - }, - "default": 30, - "title": "Max Steps", - "description": "Maximum execution steps to prevent infinite loops" - } - ], - "outputs": [ - { - "type": { - "type": "str" - }, - "name": "text" - }, - { - "type": { - "type": "image" - }, - "name": "image" - }, - { - "type": { - "type": "audio" - }, - "name": "audio" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "objective", - "model", - "task", - "tools", - "output_type" - ], - "is_dynamic": false - }, - { - "title": "Dataframe Agent", - "description": "Executes tasks using a multi-step agent that can call tools and return a dataframe\n agent, execution, tasks\n\n Use cases:\n - Automate complex workflows with reasoning\n - Process tasks with tool calling capabilities\n - Solve problems step-by-step with LLM reasoning", - "namespace": "nodetool.agents", - "node_type": "nodetool.agents.DataframeAgent", - "layout": "default", - "properties": [ - { - "name": "name", - "type": { - "type": "str" - }, - "default": "Agent", - "title": "Name", - "description": "The name of the agent executor" - }, - { - "name": "objective", - "type": { - "type": "str" - }, - "default": "", - "title": "Objective", - "description": "The objective or problem to create a plan for" - }, - { - "name": "model", - "type": { - "type": "language_model" - }, - "default": {}, - "title": "Model", - "description": "Model to use for execution" - }, - { - "name": "reasoning_model", - "type": { - "type": "language_model" - }, - "default": {}, - "title": "Reasoning Model", - "description": "Model to use for reasoning tasks" - }, - { - "name": "task", - "type": { - "type": "task" - }, - "default": {}, - "title": "Task", - "description": "Pre-defined task to execute, skipping planning" - }, - { - "name": "tools", - "type": { - "type": "list", - "type_args": [ - { - "type": "tool_name" - } - ] - }, - "default": [], - "title": "Tools", - "description": "List of tools to use for execution" - }, - { - "name": "input_files", - "type": { - "type": "list", - "type_args": [ - { - "type": "file_path" - } - ] - }, - "default": [], - "title": "Input Files", - "description": "List of input files to use for the agent" - }, - { - "name": "output_type", - "type": { - "type": "enum", - "values": [ - "markdown", - "json", - "csv", - "txt", - "html", - "xml", - "yaml", - "python", - "javascript", - "typescript", - "svg", - "sql", - "xlsx" - ], - "type_name": "nodetool.nodes.nodetool.agents.OutputFormatEnum" - }, - "default": "markdown", - "title": "Output Type", - "description": "The type of output format for the agent result" - }, - { - "name": "max_steps", - "type": { - "type": "int" - }, - "default": 30, - "title": "Max Steps", - "description": "Maximum execution steps to prevent infinite loops" - }, - { - "name": "columns", - "type": { - "type": "record_type" - }, - "default": {}, - "title": "Columns", - "description": "The columns to use in the dataframe." - } - ], - "outputs": [ - { - "type": { - "type": "dataframe" - }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "objective", - "model", - "task", - "tools", - "output_type", - "columns" - ], - "is_dynamic": false - }, - { - "title": "Dict Agent", - "description": "Executes tasks using a multi-step agent that can call tools and return a dictionary\n agent, execution, tasks", - "namespace": "nodetool.agents", - "node_type": "nodetool.agents.DictAgent", - "layout": "default", - "properties": [ - { - "name": "name", - "type": { - "type": "str" - }, - "default": "Agent", - "title": "Name", - "description": "The name of the agent executor" - }, - { - "name": "objective", - "type": { - "type": "str" - }, - "default": "", - "title": "Objective", - "description": "The objective or problem to create a plan for" - }, - { - "name": "model", - "type": { - "type": "language_model" - }, - "default": {}, - "title": "Model", - "description": "Model to use for execution" - }, - { - "name": "reasoning_model", - "type": { - "type": "language_model" - }, - "default": {}, - "title": "Reasoning Model", - "description": "Model to use for reasoning tasks" - }, - { - "name": "task", - "type": { - "type": "task" - }, - "default": {}, - "title": "Task", - "description": "Pre-defined task to execute, skipping planning" - }, - { - "name": "tools", - "type": { - "type": "list", - "type_args": [ - { - "type": "tool_name" - } - ] - }, - "default": [], - "title": "Tools", - "description": "List of tools to use for execution" - }, - { - "name": "input_files", - "type": { - "type": "list", - "type_args": [ - { - "type": "file_path" - } - ] - }, - "default": [], - "title": "Input Files", - "description": "List of input files to use for the agent" - }, - { - "name": "output_type", - "type": { - "type": "enum", - "values": [ - "markdown", - "json", - "csv", - "txt", - "html", - "xml", - "yaml", - "python", - "javascript", - "typescript", - "svg", - "sql", - "xlsx" - ], - "type_name": "nodetool.nodes.nodetool.agents.OutputFormatEnum" - }, - "default": "markdown", - "title": "Output Type", - "description": "The type of output format for the agent result" - }, - { - "name": "max_steps", - "type": { - "type": "int" - }, - "default": 30, - "title": "Max Steps", - "description": "Maximum execution steps to prevent infinite loops" - }, - { - "name": "fields", - "type": { - "type": "record_type" - }, - "default": {}, - "title": "Fields", - "description": "The fields to use in the dictionary." - } - ], - "outputs": [ - { + "name": "dictionary", "type": { "type": "dict", "type_args": [ @@ -5919,144 +5147,39 @@ "type": "str" }, { - "type": "any" - } - ] - }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "objective", - "model", - "task", - "tools", - "output_type", - "fields" - ], - "is_dynamic": false - }, - { - "title": "Image Agent", - "description": "Executes tasks using a multi-step agent that can call tools and return an image path.\n agent, execution, tasks, image\n\n Use cases:\n - Generate images based on prompts\n - Find relevant images using search tools", - "namespace": "nodetool.agents", - "node_type": "nodetool.agents.ImageAgent", - "layout": "default", - "properties": [ - { - "name": "name", - "type": { - "type": "str" - }, - "default": "Agent", - "title": "Name", - "description": "The name of the agent executor" - }, - { - "name": "objective", - "type": { - "type": "str" - }, - "default": "", - "title": "Objective", - "description": "The objective or problem to create a plan for" - }, - { - "name": "model", - "type": { - "type": "language_model" - }, - "default": {}, - "title": "Model", - "description": "Model to use for execution" - }, - { - "name": "reasoning_model", - "type": { - "type": "language_model" - }, - "default": {}, - "title": "Reasoning Model", - "description": "Model to use for reasoning tasks" - }, - { - "name": "task", - "type": { - "type": "task" - }, - "default": {}, - "title": "Task", - "description": "Pre-defined task to execute, skipping planning" - }, - { - "name": "tools", - "type": { - "type": "list", - "type_args": [ - { - "type": "tool_name" + "type": "any" } ] }, - "default": [], - "title": "Tools", - "description": "List of tools to use for execution" + "default": {}, + "title": "Dictionary" }, { - "name": "input_files", + "name": "keys", "type": { "type": "list", "type_args": [ { - "type": "file_path" + "type": "str" } ] }, "default": [], - "title": "Input Files", - "description": "List of input files to use for the agent" - }, - { - "name": "output_type", - "type": { - "type": "enum", - "values": [ - "markdown", - "json", - "csv", - "txt", - "html", - "xml", - "yaml", - "python", - "javascript", - "typescript", - "svg", - "sql", - "xlsx" - ], - "type_name": "nodetool.nodes.nodetool.agents.OutputFormatEnum" - }, - "default": "markdown", - "title": "Output Type", - "description": "The type of output format for the agent result" - }, - { - "name": "max_steps", - "type": { - "type": "int" - }, - "default": 30, - "title": "Max Steps", - "description": "Maximum execution steps to prevent infinite loops" + "title": "Keys" } ], "outputs": [ { "type": { - "type": "image" + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] }, "name": "output" } @@ -6064,143 +5187,212 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "objective", - "model", - "task", - "tools", - "output_type" + "dictionary", + "keys" ], "is_dynamic": false }, { - "title": "List Agent", - "description": "Executes tasks using a multi-step agent that can call tools and return a list\n agent, execution, tasks, list\n\n Use cases:\n - Generate lists of items\n - Create sequences of steps\n - Collect multiple results", - "namespace": "nodetool.agents", - "node_type": "nodetool.agents.ListAgent", - "layout": "default", + "title": "Get Value", + "description": "Retrieves a value from a dictionary using a specified key.\n dictionary, get, value, key\n\n Use cases:\n - Access a specific item in a configuration dictionary\n - Retrieve a value from a parsed JSON object\n - Extract a particular field from a data structure", + "namespace": "nodetool.dictionary", + "node_type": "nodetool.dictionary.GetValue", + "layout": "small", "properties": [ { - "name": "name", + "name": "dictionary", "type": { - "type": "str" + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] }, - "default": "Agent", - "title": "Name", - "description": "The name of the agent executor" + "default": {}, + "title": "Dictionary" }, { - "name": "objective", + "name": "key", "type": { "type": "str" }, "default": "", - "title": "Objective", - "description": "The objective or problem to create a plan for" + "title": "Key" }, { - "name": "model", + "name": "default", "type": { - "type": "language_model" + "type": "any" }, - "default": {}, - "title": "Model", - "description": "Model to use for execution" - }, + "title": "Default" + } + ], + "outputs": [ { - "name": "reasoning_model", "type": { - "type": "language_model" + "type": "any" }, - "default": {}, - "title": "Reasoning Model", - "description": "Model to use for reasoning tasks" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "dictionary", + "key", + "default" + ], + "is_dynamic": false + }, + { + "title": "Make Dictionary", + "description": "Creates a simple dictionary with up to three key-value pairs.\n dictionary, create, simple\n\n Use cases:\n - Create configuration entries\n - Initialize simple data structures\n - Build basic key-value mappings", + "namespace": "nodetool.dictionary", + "node_type": "nodetool.dictionary.MakeDictionary", + "layout": "small", + "properties": [], + "outputs": [ { - "name": "task", "type": { - "type": "task" + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] }, - "default": {}, - "title": "Task", - "description": "Pre-defined task to execute, skipping planning" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [], + "is_dynamic": true + }, + { + "title": "Parse JSON", + "description": "Parses a JSON string into a Python dictionary.\n json, parse, dictionary\n\n Use cases:\n - Process API responses\n - Load configuration files\n - Deserialize stored data", + "namespace": "nodetool.dictionary", + "node_type": "nodetool.dictionary.ParseJSON", + "layout": "small", + "properties": [ { - "name": "tools", + "name": "json_string", "type": { - "type": "list", + "type": "str" + }, + "default": "", + "title": "Json String" + } + ], + "outputs": [ + { + "type": { + "type": "dict", "type_args": [ { - "type": "tool_name" + "type": "str" + }, + { + "type": "any" } ] }, - "default": [], - "title": "Tools", - "description": "List of tools to use for execution" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "json_string" + ], + "is_dynamic": false + }, + { + "title": "Reduce Dictionaries", + "description": "Reduces a list of dictionaries into one dictionary based on a specified key field.\n dictionary, reduce, aggregate\n\n Use cases:\n - Aggregate data by a specific field\n - Create summary dictionaries from list of records\n - Combine multiple data points into a single structure", + "namespace": "nodetool.dictionary", + "node_type": "nodetool.dictionary.ReduceDictionaries", + "layout": "default", + "properties": [ { - "name": "input_files", + "name": "dictionaries", "type": { "type": "list", "type_args": [ { - "type": "file_path" + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] } ] }, "default": [], - "title": "Input Files", - "description": "List of input files to use for the agent" + "title": "Dictionaries", + "description": "List of dictionaries to be reduced" }, { - "name": "output_type", + "name": "key_field", "type": { - "type": "enum", - "values": [ - "markdown", - "json", - "csv", - "txt", - "html", - "xml", - "yaml", - "python", - "javascript", - "typescript", - "svg", - "sql", - "xlsx" - ], - "type_name": "nodetool.nodes.nodetool.agents.OutputFormatEnum" + "type": "str" }, - "default": "markdown", - "title": "Output Type", - "description": "The type of output format for the agent result" + "default": "", + "title": "Key Field", + "description": "The field to use as the key in the resulting dictionary" }, { - "name": "max_steps", + "name": "value_field", "type": { - "type": "int" + "type": "union", + "type_args": [ + { + "type": "str" + }, + { + "type": "none" + } + ] }, - "default": 30, - "title": "Max Steps", - "description": "Maximum execution steps to prevent infinite loops" + "title": "Value Field", + "description": "Optional field to use as the value. If not specified, the entire dictionary (minus the key field) will be used as the value." }, { - "name": "item_type", + "name": "conflict_resolution", "type": { - "type": "str" + "type": "enum", + "values": [ + "first", + "last", + "error" + ], + "type_name": "nodetool.nodes.nodetool.dictionary.ConflictResolution" }, - "default": "string", - "title": "Item Type", - "description": "The type of items in the list (string, number, object)" + "default": "first", + "title": "Conflict Resolution", + "description": "How to handle conflicts when the same key appears multiple times" } ], "outputs": [ { "type": { - "type": "list", + "type": "dict", "type_args": [ + { + "type": "any" + }, { "type": "any" } @@ -6212,125 +5404,121 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "objective", - "model", - "task", - "tools", - "output_type", - "item_type" + "dictionaries", + "key_field", + "value_field", + "conflict_resolution" ], "is_dynamic": false }, { - "title": "Simple Agent", - "description": "Executes a single task using a simple agent that can call tools.\n agent, execution, tasks, simple\n\n Use cases:\n - Simple, focused tasks with a clear objective\n - Tasks that don't require complex planning\n - Quick responses with tool calling capabilities", - "namespace": "nodetool.agents", - "node_type": "nodetool.agents.SimpleAgent", - "layout": "default", + "title": "Remove", + "description": "Removes a key-value pair from a dictionary.\n dictionary, remove, delete\n\n Use cases:\n - Delete a specific configuration option\n - Remove sensitive information before processing\n - Clean up temporary entries in a data structure", + "namespace": "nodetool.dictionary", + "node_type": "nodetool.dictionary.Remove", + "layout": "small", "properties": [ { - "name": "name", + "name": "dictionary", "type": { - "type": "str" + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] }, - "default": "Simple Agent", - "title": "Name", - "description": "The name of the simple agent executor" + "default": {}, + "title": "Dictionary" }, { - "name": "objective", + "name": "key", "type": { "type": "str" }, "default": "", - "title": "Objective", - "description": "The objective or task to complete" - }, - { - "name": "model", - "type": { - "type": "language_model" - }, - "default": {}, - "title": "Model", - "description": "Model to use for execution" - }, + "title": "Key" + } + ], + "outputs": [ { - "name": "tools", "type": { - "type": "list", + "type": "dict", "type_args": [ { - "type": "tool_name" + "type": "str" + }, + { + "type": "any" } ] }, - "default": [], - "title": "Tools", - "description": "List of tools to use for execution" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "dictionary", + "key" + ], + "is_dynamic": false + }, + { + "title": "Update", + "description": "Updates a dictionary with new key-value pairs.\n dictionary, add, update\n\n Use cases:\n - Extend a configuration with additional settings\n - Add new entries to a cache or lookup table\n - Merge user input with existing data", + "namespace": "nodetool.dictionary", + "node_type": "nodetool.dictionary.Update", + "layout": "small", + "properties": [ { - "name": "input_files", + "name": "dictionary", "type": { - "type": "list", + "type": "dict", "type_args": [ { - "type": "file_path" + "type": "str" + }, + { + "type": "any" } ] }, - "default": [], - "title": "Input Files", - "description": "List of input files to use for the agent" - }, - { - "name": "output_type", - "type": { - "type": "enum", - "values": [ - "markdown", - "json", - "csv", - "txt", - "html", - "xml", - "yaml", - "python", - "javascript", - "typescript", - "svg", - "sql", - "xlsx" - ], - "type_name": "nodetool.nodes.nodetool.agents.OutputFormatEnum" - }, - "default": "markdown", - "title": "Output Type", - "description": "The type of output format for the agent result" + "default": {}, + "title": "Dictionary" }, { - "name": "output_schema", + "name": "new_pairs", "type": { "type": "dict", - "optional": true - }, - "title": "Output Schema", - "description": "Optional JSON schema for the output" - }, - { - "name": "max_iterations", - "type": { - "type": "int" + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] }, - "default": 20, - "title": "Max Iterations", - "description": "Maximum execution iterations to prevent infinite loops" + "default": {}, + "title": "New Pairs" } ], "outputs": [ { "type": { - "type": "str" + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] }, "name": "output" } @@ -6338,153 +5526,171 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "objective", - "model", - "tools", - "input_files", - "output_type", - "output_schema", - "max_iterations" + "dictionary", + "new_pairs" ], "is_dynamic": false }, { - "title": "Task Planner", - "description": "Generates a Task execution plan based on an objective, model, and tools.\n Outputs a Task object that can be used by an Agent executor.\n planning, task generation, workflow design", - "namespace": "nodetool.agents", - "node_type": "nodetool.agents.TaskPlanner", - "layout": "default", + "title": "Zip", + "description": "Creates a dictionary from parallel lists of keys and values.\n dictionary, create, zip\n\n Use cases:\n - Convert separate data columns into key-value pairs\n - Create lookups from parallel data structures\n - Transform list data into associative arrays", + "namespace": "nodetool.dictionary", + "node_type": "nodetool.dictionary.Zip", + "layout": "small", "properties": [ { - "name": "name", - "type": { - "type": "str" - }, - "default": "Task Planner", - "title": "Name", - "description": "The name of the task planner node" - }, - { - "name": "objective", - "type": { - "type": "str" - }, - "default": "", - "title": "Objective", - "description": "The objective or problem to create a plan for" - }, - { - "name": "model", - "type": { - "type": "language_model" - }, - "default": {}, - "title": "Model", - "description": "Model to use for planning" - }, - { - "name": "reasoning_model", + "name": "keys", "type": { - "type": "language_model" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": {}, - "title": "Reasoning Model", - "description": "Model to use for reasoning" + "default": [], + "title": "Keys" }, { - "name": "tools", + "name": "values", "type": { "type": "list", "type_args": [ { - "type": "tool_name" + "type": "any" } ] }, "default": [], - "title": "Tools", - "description": "List of EXECUTION tools available for the planned subtasks" - }, + "title": "Values" + } + ], + "outputs": [ { - "name": "input_files", "type": { - "type": "list", + "type": "dict", "type_args": [ { - "type": "file_path" + "type": "any" + }, + { + "type": "any" } ] }, - "default": [], - "title": "Input Files", - "description": "List of input files to use for planning" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "keys", + "values" + ], + "is_dynamic": false + }, + { + "title": "Audio", + "description": "Represents an audio file constant in the workflow.\n audio, file, mp3, wav\n\n Use cases:\n - Provide a fixed audio input for audio processing nodes\n - Reference a specific audio file in the workflow\n - Set default audio for testing or demonstration purposes", + "namespace": "nodetool.constant", + "node_type": "nodetool.constant.Audio", + "layout": "default", + "properties": [ { - "name": "output_schema", + "name": "value", "type": { - "type": "dict", - "optional": true + "type": "audio" }, - "title": "Output Schema", - "description": "Optional JSON schema for the final task output" - }, + "default": {}, + "title": "Value" + } + ], + "outputs": [ { - "name": "output_type", "type": { - "type": "enum", - "values": [ - "markdown", - "json", - "csv", - "txt", - "html", - "xml", - "yaml", - "python", - "javascript", - "typescript", - "svg", - "sql", - "xlsx" - ], - "type_name": "nodetool.nodes.nodetool.agents.OutputFormatEnum" + "type": "audio" }, - "default": "markdown", - "title": "Output Type", - "description": "Optional type hint for the final task output (e.g., 'markdown', 'json', 'csv')" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "value" + ], + "is_dynamic": false + }, + { + "title": "Bool", + "description": "Represents a boolean constant in the workflow.\n boolean, logic, flag\n\n Use cases:\n - Control flow decisions in conditional nodes\n - Toggle features or behaviors in the workflow\n - Set default boolean values for configuration", + "namespace": "nodetool.constant", + "node_type": "nodetool.constant.Bool", + "layout": "default", + "properties": [ { - "name": "enable_analysis_phase", + "name": "value", "type": { "type": "bool" }, - "default": true, - "title": "Enable Analysis Phase", - "description": "Whether to use analysis in the planning phase" - }, + "default": false, + "title": "Value" + } + ], + "outputs": [ { - "name": "enable_data_contracts_phase", "type": { "type": "bool" }, - "default": true, - "title": "Enable Data Contracts Phase", - "description": "Whether to use data contracts in the planning phase" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "value" + ], + "is_dynamic": false + }, + { + "title": "Constant", + "description": "Base class for fixed-value nodes.\n\n constant, parameter, default\n\n Use cases:\n - Provide static inputs to a workflow\n - Hold configuration values\n - Simplify testing with deterministic outputs", + "namespace": "nodetool.constant", + "node_type": "nodetool.constant.Constant", + "layout": "default", + "properties": [], + "outputs": [ { - "name": "use_structured_output", "type": { - "type": "bool" + "type": "any" }, - "default": false, - "title": "Use Structured Output", - "description": "Attempt to use structured output for plan generation" + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [], + "is_dynamic": false + }, + { + "title": "Data Frame", + "description": "Represents a fixed DataFrame constant in the workflow.\n table, data, dataframe, pandas\n\n Use cases:\n - Provide static data for analysis or processing\n - Define lookup tables or reference data\n - Set sample data for testing or demonstration", + "namespace": "nodetool.constant", + "node_type": "nodetool.constant.DataFrame", + "layout": "default", + "properties": [ + { + "name": "value", + "type": { + "type": "dataframe" + }, + "default": {}, + "title": "DataFrame" } ], "outputs": [ { "type": { - "type": "task" + "type": "dataframe" }, "name": "output" } @@ -6492,175 +5698,196 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "objective", - "model", - "tools", - "input_files", - "output_schema", - "output_type", - "enable_analysis_phase", - "enable_data_contracts_phase", - "use_structured_output" + "value" ], "is_dynamic": false }, { - "title": "Browser", - "description": "Fetches content from a web page using a headless browser.\n browser, web, scraping, content, fetch\n\n Use cases:\n - Extract content from JavaScript-heavy websites\n - Retrieve text content from web pages\n - Get metadata from web pages\n - Save extracted content to files", - "namespace": "nodetool.browser", - "node_type": "nodetool.browser.Browser", + "title": "Date", + "description": "Make a date object from year, month, day.\n date, make, create", + "namespace": "nodetool.constant", + "node_type": "nodetool.constant.Date", "layout": "default", "properties": [ { - "name": "url", + "name": "year", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Url", - "description": "URL to navigate to" + "default": 1900, + "title": "Year", + "description": "Year of the date" }, { - "name": "timeout", + "name": "month", "type": { "type": "int" }, - "default": 20000, - "title": "Timeout", - "description": "Timeout in milliseconds for page navigation" + "default": 1, + "title": "Month", + "description": "Month of the date" }, { - "name": "use_readability", + "name": "day", "type": { - "type": "bool" + "type": "int" }, - "default": true, - "title": "Use Readability", - "description": "Use Python's Readability for better content extraction" + "default": 1, + "title": "Day", + "description": "Day of the date" } ], "outputs": [ { "type": { - "type": "bool" - }, - "name": "success" - }, - { - "type": { - "type": "str" - }, - "name": "content" - }, - { - "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] + "type": "date" }, - "name": "metadata" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url", - "timeout", - "use_readability" + "year", + "month", + "day" ], "is_dynamic": false }, { - "title": "Browser Navigation", - "description": "Navigates and interacts with web pages in a browser session.\n browser, navigation, interaction, click, extract\n\n Use cases:\n - Perform complex web interactions\n - Navigate through multi-step web processes\n - Extract content after interaction", - "namespace": "nodetool.browser", - "node_type": "nodetool.browser.BrowserNavigation", + "title": "Date Time", + "description": "Make a datetime object from year, month, day, hour, minute, second.\n datetime, make, create", + "namespace": "nodetool.constant", + "node_type": "nodetool.constant.DateTime", "layout": "default", "properties": [ { - "name": "url", + "name": "year", + "type": { + "type": "int" + }, + "default": 1900, + "title": "Year", + "description": "Year of the datetime" + }, + { + "name": "month", + "type": { + "type": "int" + }, + "default": 1, + "title": "Month", + "description": "Month of the datetime" + }, + { + "name": "day", + "type": { + "type": "int" + }, + "default": 1, + "title": "Day", + "description": "Day of the datetime" + }, + { + "name": "hour", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Url", - "description": "URL to navigate to (required for 'goto' action)" + "default": 0, + "title": "Hour", + "description": "Hour of the datetime" }, { - "name": "action", + "name": "minute", "type": { - "type": "enum", - "values": [ - "click", - "goto", - "back", - "forward", - "reload", - "extract" - ], - "type_name": "nodetool.nodes.nodetool.browser.Action" + "type": "int" }, - "default": "goto", - "title": "Action", - "description": "Navigation or extraction action to perform" + "default": 0, + "title": "Minute", + "description": "Minute of the datetime" }, { - "name": "selector", + "name": "second", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Selector", - "description": "CSS selector for the element to interact with or extract from" + "default": 0, + "title": "Second", + "description": "Second of the datetime" }, { - "name": "timeout", + "name": "microsecond", "type": { "type": "int" }, - "default": 30000, - "title": "Timeout", - "description": "Timeout in milliseconds for the action" + "default": 0, + "title": "Microsecond", + "description": "Microsecond of the datetime" }, { - "name": "wait_for", + "name": "tzinfo", "type": { "type": "str" }, - "default": "", - "title": "Wait For", - "description": "Optional selector to wait for after performing the action" + "default": "UTC", + "title": "Tzinfo", + "description": "Timezone of the datetime" }, { - "name": "extract_type", + "name": "utc_offset", "type": { - "type": "enum", - "values": [ - "text", - "html", - "value", - "attribute" - ], - "type_name": "nodetool.nodes.nodetool.browser.ExtractType" + "type": "int" }, - "default": "text", - "title": "Extract Type", - "description": "Type of content to extract (for 'extract' action)" - }, + "default": 0, + "title": "Utc Offset", + "description": "UTC offset of the datetime" + } + ], + "outputs": [ { - "name": "attribute", "type": { - "type": "str" + "type": "datetime" }, - "default": "", - "title": "Attribute", - "description": "Attribute name to extract (when extract_type is 'attribute')" + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "year", + "month", + "day", + "hour", + "minute", + "second", + "microsecond", + "tzinfo", + "utc_offset" + ], + "is_dynamic": false + }, + { + "title": "Dict", + "description": "Represents a dictionary constant in the workflow.\n dictionary, key-value, mapping\n\n Use cases:\n - Store configuration settings\n - Provide structured data inputs\n - Define parameter sets for other nodes", + "namespace": "nodetool.constant", + "node_type": "nodetool.constant.Dict", + "layout": "default", + "properties": [ + { + "name": "value", + "type": { + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] + }, + "default": {}, + "title": "Value" } ], "outputs": [ @@ -6682,125 +5909,154 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url", - "action", - "selector", - "timeout", - "wait_for", - "extract_type", - "attribute" + "value" ], "is_dynamic": false }, { - "title": "Browser Use", - "description": "Browser agent tool that uses browser_use under the hood.\n\n This module provides a tool for running browser-based agents using the browser_use library.\n The agent can perform complex web automation tasks like form filling, navigation, data extraction,\n and multi-step workflows using natural language instructions.\n\n Use cases:\n - Perform complex web automation tasks based on natural language.\n - Automate form filling and data entry.\n - Scrape data after complex navigation or interaction sequences.\n - Automate multi-step web workflows.", - "namespace": "nodetool.browser", - "node_type": "nodetool.browser.BrowserUse", + "title": "Document", + "description": "Represents a document constant in the workflow.\n document, pdf, word, docx", + "namespace": "nodetool.constant", + "node_type": "nodetool.constant.Document", "layout": "default", "properties": [ { - "name": "model", + "name": "value", "type": { - "type": "enum", - "values": [ - "gpt-4o", - "claude-3-5-sonnet" - ], - "type_name": "nodetool.nodes.nodetool.browser.BrowserUseModel" + "type": "document" }, - "default": "gpt-4o", - "title": "Model", - "description": "The model to use for the browser agent." - }, + "default": {}, + "title": "Document" + } + ], + "outputs": [ { - "name": "task", "type": { - "type": "str" + "type": "document" }, - "default": "", - "title": "Task", - "description": "Natural language description of the browser task to perform. Can include complex multi-step instructions like 'Compare prices between websites', 'Fill out forms', or 'Extract specific data'." - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "value" + ], + "is_dynamic": false + }, + { + "title": "Float", + "description": "Represents a floating-point number constant in the workflow.\n number, decimal, float\n\n Use cases:\n - Set numerical parameters for calculations\n - Define thresholds or limits\n - Provide fixed numerical inputs for processing", + "namespace": "nodetool.constant", + "node_type": "nodetool.constant.Float", + "layout": "default", + "properties": [ { - "name": "timeout", + "name": "value", "type": { - "type": "int" + "type": "float" }, - "default": 300, - "title": "Timeout", - "description": "Maximum time in seconds to allow for task completion. Complex tasks may require longer timeouts.", - "min": 1.0, - "max": 3600.0 - }, + "default": 0.0, + "title": "Value" + } + ], + "outputs": [ { - "name": "use_remote_browser", "type": { - "type": "bool" + "type": "float" }, - "default": true, - "title": "Use Remote Browser", - "description": "Use a remote browser instead of a local one" + "name": "output" } ], - "outputs": [ + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "value" + ], + "is_dynamic": false + }, + { + "title": "Image", + "description": "Represents an image file constant in the workflow.\n picture, photo, image\n\n Use cases:\n - Provide a fixed image input for image processing nodes\n - Reference a specific image file in the workflow\n - Set default image for testing or demonstration purposes", + "namespace": "nodetool.constant", + "node_type": "nodetool.constant.Image", + "layout": "default", + "properties": [ { + "name": "value", "type": { - "type": "bool" + "type": "image" }, - "name": "success" - }, + "default": {}, + "title": "Value" + } + ], + "outputs": [ { "type": { - "type": "str" + "type": "image" }, - "name": "task" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "value" + ], + "is_dynamic": false + }, + { + "title": "Integer", + "description": "Represents an integer constant in the workflow.\n number, integer, whole\n\n Use cases:\n - Set numerical parameters for calculations\n - Define counts, indices, or sizes\n - Provide fixed numerical inputs for processing", + "namespace": "nodetool.constant", + "node_type": "nodetool.constant.Integer", + "layout": "default", + "properties": [ { + "name": "value", "type": { - "type": "any" + "type": "int" }, - "name": "result" - }, + "default": 0, + "title": "Value" + } + ], + "outputs": [ { "type": { - "type": "str", - "optional": true + "type": "int" }, - "name": "error" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "model", - "task", - "timeout", - "use_remote_browser" + "value" ], "is_dynamic": false }, { - "title": "Download File", - "description": "Downloads a file from a URL and saves it to disk.\n download, file, web, save\n\n Use cases:\n - Download documents, images, or other files from the web\n - Save data for further processing\n - Retrieve file assets for analysis", - "namespace": "nodetool.browser", - "node_type": "nodetool.browser.DownloadFile", + "title": "JSON", + "description": "Represents a JSON constant in the workflow.\n json, object, dictionary", + "namespace": "nodetool.constant", + "node_type": "nodetool.constant.JSON", "layout": "default", "properties": [ { - "name": "url", + "name": "value", "type": { - "type": "str" + "type": "json" }, - "default": "", - "title": "Url", - "description": "URL of the file to download" + "default": {}, + "title": "Value" } ], "outputs": [ { "type": { - "type": "bytes" + "type": "json" }, "name": "output" } @@ -6808,64 +6064,36 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url" + "value" ], "is_dynamic": false }, { - "title": "Screenshot", - "description": "Takes a screenshot of a web page or specific element.\n browser, screenshot, capture, image\n\n Use cases:\n - Capture visual representation of web pages\n - Document specific UI elements\n - Create visual records of web content", - "namespace": "nodetool.browser", - "node_type": "nodetool.browser.Screenshot", + "title": "List", + "description": "Represents a list constant in the workflow.\n array, sequence, collection\n\n Use cases:\n - Store multiple values of the same type\n - Provide ordered data inputs\n - Define sequences for iteration in other nodes", + "namespace": "nodetool.constant", + "node_type": "nodetool.constant.List", "layout": "default", "properties": [ { - "name": "url", - "type": { - "type": "str" - }, - "default": "", - "title": "Url", - "description": "URL to navigate to before taking screenshot" - }, - { - "name": "selector", - "type": { - "type": "str" - }, - "default": "", - "title": "Selector", - "description": "Optional CSS selector for capturing a specific element" - }, - { - "name": "output_file", - "type": { - "type": "file_path" - }, - "default": { - "path": "screenshot.png" - }, - "title": "Output File", - "description": "Path to save the screenshot (relative to workspace)" - }, - { - "name": "timeout", + "name": "value", "type": { - "type": "int" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": 30000, - "title": "Timeout", - "description": "Timeout in milliseconds for page navigation" + "default": [], + "title": "Value" } ], "outputs": [ { "type": { - "type": "dict", + "type": "list", "type_args": [ - { - "type": "str" - }, { "type": "any" } @@ -6877,37 +6105,24 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url", - "selector", - "output_file", - "timeout" + "value" ], "is_dynamic": false }, { - "title": "Web Fetch", - "description": "Fetches HTML content from a URL and converts it to text.\n web, fetch, html, markdown, http\n\n Use cases:\n - Extract text content from web pages\n - Process web content for analysis\n - Save web content to files", - "namespace": "nodetool.browser", - "node_type": "nodetool.browser.WebFetch", + "title": "String", + "description": "Represents a string constant in the workflow.\n text, string, characters\n\n Use cases:\n - Provide fixed text inputs for processing\n - Define labels, identifiers, or names\n - Set default text values for configuration", + "namespace": "nodetool.constant", + "node_type": "nodetool.constant.String", "layout": "default", "properties": [ { - "name": "url", + "name": "value", "type": { "type": "str" }, "default": "", - "title": "Url", - "description": "URL to fetch content from" - }, - { - "name": "selector", - "type": { - "type": "str" - }, - "default": "body", - "title": "Selector", - "description": "CSS selector to extract specific elements" + "title": "Value" } ], "outputs": [ @@ -6921,61 +6136,30 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url", - "selector" + "value" ], "is_dynamic": false }, { - "title": "Chart Generator", - "description": "LLM Agent to create Plotly Express charts based on natural language descriptions.\n llm, data visualization, charts\n\n Use cases:\n - Generating interactive charts from natural language descriptions\n - Creating data visualizations with minimal configuration\n - Converting data analysis requirements into visual representations", - "namespace": "nodetool.generators", - "node_type": "nodetool.generators.ChartGenerator", + "title": "Video", + "description": "Represents a video file constant in the workflow.\n video, movie, mp4, file\n\n Use cases:\n - Provide a fixed video input for video processing nodes\n - Reference a specific video file in the workflow\n - Set default video for testing or demonstration purposes", + "namespace": "nodetool.constant", + "node_type": "nodetool.constant.Video", "layout": "default", "properties": [ { - "name": "model", - "type": { - "type": "language_model" - }, - "default": {}, - "title": "Model", - "description": "The GPT model to use for chart generation." - }, - { - "name": "prompt", - "type": { - "type": "str" - }, - "default": "", - "title": "Prompt", - "description": "Natural language description of the desired chart" - }, - { - "name": "data", + "name": "value", "type": { - "type": "dataframe" + "type": "video" }, "default": {}, - "title": "Data", - "description": "The data to visualize" - }, - { - "name": "max_tokens", - "type": { - "type": "int" - }, - "default": 4096, - "title": "Max Tokens", - "description": "The maximum number of tokens to generate.", - "min": 1.0, - "max": 100000.0 + "title": "Value" } ], "outputs": [ { "type": { - "type": "plotly_config" + "type": "video" }, "name": "output" } @@ -6983,71 +6167,60 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "prompt", - "data", - "model" + "value" ], "is_dynamic": false }, { - "title": "Data Generator", - "description": "LLM Agent to create a dataframe based on a user prompt.\n llm, dataframe creation, data structuring\n\n Use cases:\n - Generating structured data from natural language descriptions\n - Creating sample datasets for testing or demonstration\n - Converting unstructured text into tabular format", - "namespace": "nodetool.generators", - "node_type": "nodetool.generators.DataGenerator", + "title": "Add Audio", + "description": "Add an audio track to a video, replacing or mixing with existing audio.\n video, audio, soundtrack, merge\n\n Use cases:\n 1. Add background music or narration to a silent video\n 2. Replace original audio with a new soundtrack\n 3. Mix new audio with existing video sound", + "namespace": "nodetool.video", + "node_type": "nodetool.video.AddAudio", "layout": "default", "properties": [ { - "name": "model", + "name": "video", "type": { - "type": "language_model" + "type": "video" }, "default": {}, - "title": "Model", - "description": "The GPT model to use for data generation." - }, - { - "name": "prompt", - "type": { - "type": "str" - }, - "default": "", - "title": "Prompt", - "description": "The user prompt" + "title": "Video", + "description": "The input video to add audio to." }, { - "name": "input_text", + "name": "audio", "type": { - "type": "str" + "type": "audio" }, - "default": "", - "title": "Input Text", - "description": "The input text to be analyzed by the agent." + "default": {}, + "title": "Audio", + "description": "The audio file to add to the video." }, { - "name": "max_tokens", + "name": "volume", "type": { - "type": "int" + "type": "float" }, - "default": 4096, - "title": "Max Tokens", - "description": "The maximum number of tokens to generate.", - "min": 1.0, - "max": 100000.0 + "default": 1.0, + "title": "Volume", + "description": "Volume adjustment for the added audio. 1.0 is original volume.", + "min": 0.0, + "max": 2.0 }, { - "name": "columns", + "name": "mix", "type": { - "type": "record_type" + "type": "bool" }, - "default": {}, - "title": "Columns", - "description": "The columns to use in the dataframe." + "default": false, + "title": "Mix", + "description": "If True, mix new audio with existing. If False, replace existing audio." } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "video" }, "name": "output" } @@ -7055,71 +6228,94 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "prompt", - "model", - "columns" + "video", + "audio", + "volume", + "mix" ], "is_dynamic": false }, { - "title": "Data Streamer", - "description": "LLM Agent to create a stream of data based on a user prompt.\n llm, data streaming, data structuring\n\n Use cases:\n - Generating structured data from natural language descriptions\n - Creating sample datasets for testing or demonstration", - "namespace": "nodetool.generators", - "node_type": "nodetool.generators.DataStreamer", + "title": "Add Subtitles", + "description": "Add subtitles to a video.\n video, subtitles, text, caption\n\n Use cases:\n 1. Add translations or closed captions to videos\n 2. Include explanatory text or commentary in educational videos\n 3. Create lyric videos for music content", + "namespace": "nodetool.video", + "node_type": "nodetool.video.AddSubtitles", "layout": "default", "properties": [ { - "name": "model", + "name": "video", + "type": { + "type": "video" + }, + "default": {}, + "title": "Video", + "description": "The input video to add subtitles to." + }, + { + "name": "chunks", "type": { - "type": "language_model" + "type": "list", + "type_args": [ + { + "type": "audio_chunk" + } + ] }, - "default": {}, - "title": "Model", - "description": "The GPT model to use for data generation." + "default": [], + "title": "Chunks", + "description": "Audio chunks to add as subtitles." }, { - "name": "prompt", + "name": "font", "type": { - "type": "str" + "type": "font" }, - "default": "", - "title": "Prompt", - "description": "The user prompt" + "default": {}, + "title": "Font", + "description": "The font to use." }, { - "name": "input_text", + "name": "align", "type": { - "type": "str" + "type": "enum", + "values": [ + "top", + "center", + "bottom" + ], + "type_name": "nodetool.nodes.nodetool.video.SubtitleTextAlignment" }, - "default": "", - "title": "Input Text", - "description": "The input text to be analyzed by the agent." + "default": "bottom", + "title": "Align", + "description": "Vertical alignment of subtitles." }, { - "name": "max_tokens", + "name": "font_size", "type": { "type": "int" }, - "default": 4096, - "title": "Max Tokens", - "description": "The maximum number of tokens to generate.", + "default": 24, + "title": "Font Size", + "description": "The font size.", "min": 1.0, - "max": 100000.0 + "max": 72.0 }, { - "name": "columns", + "name": "font_color", "type": { - "type": "record_type" + "type": "color" }, - "default": {}, - "title": "Columns", - "description": "The columns to use in the dataframe." + "default": { + "value": "#FFFFFF" + }, + "title": "Font Color", + "description": "The font color." } ], "outputs": [ { "type": { - "type": "any" + "type": "video" }, "name": "output" } @@ -7127,144 +6323,113 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "prompt", - "model", - "columns" + "video", + "chunks", + "font", + "align", + "font_size", + "font_color" ], "is_dynamic": false }, { - "title": "List Generator", - "description": "LLM Agent to create a stream of strings based on a user prompt.\n llm, text streaming\n\n Use cases:\n - Generating text from natural language descriptions\n - Streaming responses from an LLM", - "namespace": "nodetool.generators", - "node_type": "nodetool.generators.ListGenerator", + "title": "Blur", + "description": "Apply a blur effect to a video.\n video, blur, smooth, soften\n\n Use cases:\n 1. Create a dreamy or soft focus effect\n 2. Obscure or censor specific areas of the video\n 3. Reduce noise or grain in low-quality footage", + "namespace": "nodetool.video", + "node_type": "nodetool.video.Blur", "layout": "default", "properties": [ { - "name": "model", + "name": "video", "type": { - "type": "language_model" + "type": "video" }, "default": {}, - "title": "Model", - "description": "The GPT model to use for string generation." - }, - { - "name": "prompt", - "type": { - "type": "str" - }, - "default": "", - "title": "Prompt", - "description": "The user prompt" - }, - { - "name": "input_text", - "type": { - "type": "str" - }, - "default": "", - "title": "Input Text", - "description": "The input text to be analyzed by the agent." + "title": "Video", + "description": "The input video to apply blur effect." }, { - "name": "max_tokens", + "name": "strength", "type": { - "type": "int" + "type": "float" }, - "default": 4096, - "title": "Max Tokens", - "description": "The maximum number of tokens to generate.", - "min": 1.0, - "max": 100000.0 + "default": 5.0, + "title": "Strength", + "description": "The strength of the blur effect. Higher values create a stronger blur.", + "min": 0.0, + "max": 20.0 } ], "outputs": [ { "type": { - "type": "str" - }, - "name": "item" - }, - { - "type": { - "type": "int" + "type": "video" }, - "name": "index" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "prompt", - "model" + "video", + "strength" ], "is_dynamic": false }, { - "title": "SVGGenerator", - "description": "LLM Agent to create SVG elements based on user prompts.\n svg, generator, vector, graphics\n\n Use cases:\n - Creating vector graphics from text descriptions\n - Generating scalable illustrations\n - Creating custom icons and diagrams", - "namespace": "nodetool.generators", - "node_type": "nodetool.generators.SVGGenerator", + "title": "Chroma Key", + "description": "Apply chroma key (green screen) effect to a video.\n video, chroma key, green screen, compositing\n\n Use cases:\n 1. Remove green or blue background from video footage\n 2. Create special effects by compositing video onto new backgrounds\n 3. Produce professional-looking videos for presentations or marketing", + "namespace": "nodetool.video", + "node_type": "nodetool.video.ChromaKey", "layout": "default", "properties": [ { - "name": "model", + "name": "video", "type": { - "type": "language_model" + "type": "video" }, "default": {}, - "title": "Model", - "description": "The language model to use for SVG generation." + "title": "Video", + "description": "The input video to apply chroma key effect." }, { - "name": "prompt", + "name": "key_color", "type": { - "type": "str" + "type": "color" }, - "default": "", - "title": "Prompt", - "description": "The user prompt for SVG generation" - }, - { - "name": "image", - "type": { - "type": "image" + "default": { + "value": "#00FF00" }, - "default": {}, - "title": "Image", - "description": "Image to use for generation" + "title": "Key Color", + "description": "The color to key out (e.g., '#00FF00' for green)." }, { - "name": "audio", + "name": "similarity", "type": { - "type": "audio" + "type": "float" }, - "default": {}, - "title": "Audio", - "description": "Audio to use for generation" + "default": 0.3, + "title": "Similarity", + "description": "Similarity threshold for the key color.", + "min": 0.0, + "max": 1.0 }, { - "name": "max_tokens", + "name": "blend", "type": { - "type": "int" + "type": "float" }, - "default": 8192, - "title": "Max Tokens", - "description": "The maximum number of tokens to generate.", - "min": 1.0, - "max": 100000.0 + "default": 0.1, + "title": "Blend", + "description": "Blending of the keyed area edges.", + "min": 0.0, + "max": 1.0 } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "svg_element" - } - ] + "type": "video" }, "name": "output" } @@ -7272,43 +6437,67 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "prompt", - "image", - "audio", - "model" + "video", + "key_color", + "similarity", + "blend" ], "is_dynamic": false }, { - "title": "Audio Input", - "description": "Audio asset input for workflows.\n input, parameter, audio\n\n Use cases:\n - Load audio files for processing\n - Analyze sound or speech content\n - Provide audio input to models", - "namespace": "nodetool.input", - "node_type": "nodetool.input.AudioInput", + "title": "Color Balance", + "description": "Adjust the color balance of a video.\n video, color, balance, adjustment\n\n Use cases:\n 1. Correct color casts in video footage\n 2. Enhance specific color tones for artistic effect\n 3. Normalize color balance across multiple video clips", + "namespace": "nodetool.video", + "node_type": "nodetool.video.ColorBalance", "layout": "default", "properties": [ { - "name": "value", + "name": "video", "type": { - "type": "audio" + "type": "video" }, "default": {}, - "title": "Value", - "description": "The audio to use as input." + "title": "Video", + "description": "The input video to adjust color balance." }, { - "name": "name", + "name": "red_adjust", "type": { - "type": "str" + "type": "float" }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "default": 1.0, + "title": "Red Adjust", + "description": "Red channel adjustment factor.", + "min": 0.0, + "max": 2.0 + }, + { + "name": "green_adjust", + "type": { + "type": "float" + }, + "default": 1.0, + "title": "Green Adjust", + "description": "Green channel adjustment factor.", + "min": 0.0, + "max": 2.0 + }, + { + "name": "blue_adjust", + "type": { + "type": "float" + }, + "default": 1.0, + "title": "Blue Adjust", + "description": "Blue channel adjustment factor.", + "min": 0.0, + "max": 2.0 } ], "outputs": [ { "type": { - "type": "audio" + "type": "video" }, "name": "output" } @@ -7316,39 +6505,43 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "video", + "red_adjust", + "green_adjust", + "blue_adjust" ], "is_dynamic": false }, { - "title": "Boolean Input", - "description": "Boolean parameter input for workflows.\n input, parameter, boolean, bool\n\n Use cases:\n - Toggle features on/off\n - Set binary flags\n - Control conditional logic", - "namespace": "nodetool.input", - "node_type": "nodetool.input.BooleanInput", + "title": "Concat", + "description": "Concatenate multiple video files into a single video, including audio when available.\n video, concat, merge, combine, audio, +", + "namespace": "nodetool.video", + "node_type": "nodetool.video.Concat", "layout": "default", "properties": [ { - "name": "value", + "name": "video_a", "type": { - "type": "bool" + "type": "video" }, - "default": false, - "title": "Value" + "default": {}, + "title": "Video A", + "description": "The first video to concatenate." }, { - "name": "name", + "name": "video_b", "type": { - "type": "str" + "type": "video" }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "default": {}, + "title": "Video B", + "description": "The second video to concatenate." } ], "outputs": [ { "type": { - "type": "bool" + "type": "video" }, "name": "output" } @@ -7356,132 +6549,76 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "video_a", + "video_b" ], "is_dynamic": false }, { - "title": "Chat Input", - "description": "Chat message input for workflows.\n input, parameter, chat, message\n\n Use cases:\n - Accept user prompts or queries\n - Capture conversational input\n - Provide instructions to language models", - "namespace": "nodetool.input", - "node_type": "nodetool.input.ChatInput", + "title": "Denoise", + "description": "Apply noise reduction to a video.\n video, denoise, clean, enhance\n\n Use cases:\n 1. Improve video quality by reducing unwanted noise\n 2. Enhance low-light footage\n 3. Prepare video for further processing or compression", + "namespace": "nodetool.video", + "node_type": "nodetool.video.Denoise", "layout": "default", "properties": [ { - "name": "value", + "name": "video", "type": { - "type": "list", - "type_args": [ - { - "type": "message" - } - ] + "type": "video" }, - "default": [], - "title": "Value", - "description": "The chat message to use as input." + "default": {}, + "title": "Video", + "description": "The input video to denoise." }, { - "name": "name", + "name": "strength", "type": { - "type": "str" + "type": "float" }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "default": 5.0, + "title": "Strength", + "description": "Strength of the denoising effect. Higher values mean more denoising.", + "min": 0.0, + "max": 20.0 } ], "outputs": [ - { - "type": { - "type": "list", - "type_args": [ - { - "type": "message" - } - ] - }, - "name": "history" - }, - { - "type": { - "type": "str" - }, - "name": "text" - }, - { - "type": { - "type": "image" - }, - "name": "image" - }, - { - "type": { - "type": "audio" - }, - "name": "audio" - }, { "type": { "type": "video" }, - "name": "video" - }, - { - "type": { - "type": "document" - }, - "name": "document" - }, - { - "type": { - "type": "list", - "type_args": [ - { - "type": "tool_name" - } - ] - }, - "name": "tools" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "video", + "strength" ], "is_dynamic": false }, { - "title": "Collection Input", - "description": "Collection input for workflows.\n input, parameter, collection, chroma\n\n Use cases:\n - Select a vector database collection\n - Specify target collection for indexing\n - Choose collection for similarity search", - "namespace": "nodetool.input", - "node_type": "nodetool.input.CollectionInput", + "title": "Extract Audio", + "description": "Separate audio from a video file.\n video, audio, extract, separate", + "namespace": "nodetool.video", + "node_type": "nodetool.video.ExtractAudio", "layout": "default", "properties": [ { - "name": "value", + "name": "video", "type": { - "type": "collection" + "type": "video" }, "default": {}, - "title": "Value", - "description": "The collection to use as input." - }, - { - "name": "name", - "type": { - "type": "str" - }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "title": "Video", + "description": "The input video to separate." } ], "outputs": [ { "type": { - "type": "collection" + "type": "audio" }, "name": "output" } @@ -7489,192 +6626,162 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "video" ], "is_dynamic": false }, { - "title": "Document File Input", - "description": "Document file input for workflows.\n input, parameter, document, text\n\n Use cases:\n - Load text documents for processing\n - Analyze document content\n - Extract text for NLP tasks\n - Index documents for search", - "namespace": "nodetool.input", - "node_type": "nodetool.input.DocumentFileInput", + "title": "Fps", + "description": "Get the frames per second (FPS) of a video file.\n video, analysis, frames, fps\n\n Use cases:\n 1. Analyze video properties for quality assessment\n 2. Determine appropriate playback speed for video editing\n 3. Ensure compatibility with target display systems", + "namespace": "nodetool.video", + "node_type": "nodetool.video.Fps", "layout": "default", "properties": [ { - "name": "value", + "name": "video", "type": { - "type": "file_path" + "type": "video" }, "default": {}, - "title": "Value", - "description": "The path to the document file." - }, - { - "name": "name", - "type": { - "type": "str" - }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "title": "Video", + "description": "The input video to analyze for FPS." } ], "outputs": [ { "type": { - "type": "document" - }, - "name": "document" - }, - { - "type": { - "type": "file_path" + "type": "float" }, - "name": "path" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "video" ], "is_dynamic": false }, { - "title": "Document Input", - "description": "Document asset input for workflows.\n input, parameter, document\n\n Use cases:\n - Load documents for processing\n - Analyze document content\n - Provide document input to models", - "namespace": "nodetool.input", - "node_type": "nodetool.input.DocumentInput", + "title": "Frame Iterator", + "description": "Extract frames from a video file using OpenCV.\n video, frames, extract, sequence\n\n Use cases:\n 1. Generate image sequences for further processing\n 2. Extract specific frame ranges from a video\n 3. Create thumbnails or previews from video content", + "namespace": "nodetool.video", + "node_type": "nodetool.video.FrameIterator", "layout": "default", "properties": [ { - "name": "value", + "name": "video", "type": { - "type": "document" + "type": "video" }, "default": {}, - "title": "Value", - "description": "The document to use as input." + "title": "Video", + "description": "The input video to extract frames from." }, { - "name": "name", + "name": "start", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." - } - ], - "outputs": [ + "default": 0, + "title": "Start", + "description": "The frame to start extracting from." + }, { + "name": "end", "type": { - "type": "document" + "type": "int" }, - "name": "output" + "default": -1, + "title": "End", + "description": "The frame to stop extracting from." } ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "value" - ], - "is_dynamic": false - }, - { - "title": "Enum Input", - "description": "Enumeration parameter input for workflows.\n input, parameter, enum, options, select\n\n Use cases:\n - Select from predefined options\n - Enforce choice from valid values\n - Configure categorical parameters", - "namespace": "nodetool.input", - "node_type": "nodetool.input.EnumInput", - "layout": "default", - "properties": [ + "outputs": [ { - "name": "value", "type": { - "type": "str" + "type": "image" }, - "default": "", - "title": "Value" + "name": "frame" }, { - "name": "name", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "name": "index" }, { - "name": "options", "type": { - "type": "str" + "type": "float" }, - "default": "", - "title": "Options", - "description": "Comma-separated list of valid options" - } - ], - "outputs": [ + "name": "fps" + }, { "type": { - "type": "str" + "type": "event" }, - "name": "output" + "name": "event" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "video", + "start", + "end" ], "is_dynamic": false }, { - "title": "Float Input", - "description": "Float parameter input for workflows.\n input, parameter, float, number\n\n Use cases:\n - Specify a numeric value within a defined range\n - Set thresholds or scaling factors\n - Configure continuous parameters like opacity or volume", - "namespace": "nodetool.input", - "node_type": "nodetool.input.FloatInput", + "title": "Frame To Video", + "description": "Combine a sequence of frames into a single video file.\n video, frames, combine, sequence\n\n Use cases:\n 1. Create time-lapse videos from image sequences\n 2. Compile processed frames back into a video\n 3. Generate animations from individual images", + "namespace": "nodetool.video", + "node_type": "nodetool.video.FrameToVideo", "layout": "default", "properties": [ { - "name": "value", + "name": "frame", "type": { - "type": "float" + "type": "image" }, - "default": 0.0, - "title": "Value" + "default": {}, + "title": "Frame", + "description": "Collect input frames" }, { - "name": "name", + "name": "index", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "default": 0, + "title": "Index", + "description": "Index of the current frame. -1 signals end of stream." }, { - "name": "min", + "name": "fps", "type": { "type": "float" }, - "default": 0, - "title": "Min" + "default": 30, + "title": "Fps", + "description": "The FPS of the output video." }, { - "name": "max", + "name": "event", "type": { - "type": "float" + "type": "event" }, - "default": 100, - "title": "Max" + "default": { + "name": "done" + }, + "title": "Event", + "description": "Signal end of stream" } ], "outputs": [ { "type": { - "type": "float" + "type": "any" }, "name": "output" } @@ -7682,60 +6789,119 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "frame", + "index", + "fps", + "event" ], "is_dynamic": false }, { - "title": "Group Input", - "description": "Generic group input for loops.\n input, group, collection, loop\n\n Use cases:\n - provides input for a loop\n - iterates over a group of items", - "namespace": "nodetool.input", - "node_type": "nodetool.input.GroupInput", + "title": "Load Video Folder", + "description": "Load video files from an asset folder.\n\n video, assets, load\n\n Use cases:\n - Provide videos for batch processing\n - Iterate over stored video assets\n - Prepare clips for editing or analysis", + "namespace": "nodetool.video", + "node_type": "nodetool.video.LoadVideoAssets", "layout": "default", - "properties": [], + "properties": [ + { + "name": "folder", + "type": { + "type": "folder" + }, + "default": {}, + "title": "Folder", + "description": "The asset folder to load the video files from." + } + ], "outputs": [ { "type": { - "type": "any" + "type": "video" }, - "name": "output" + "name": "video" + }, + { + "type": { + "type": "str" + }, + "name": "name" } ], "the_model_info": {}, "recommended_models": [], - "basic_fields": [], + "basic_fields": [ + "folder" + ], "is_dynamic": false }, { - "title": "Image Input", - "description": "Image asset input for workflows.\n input, parameter, image\n\n Use cases:\n - Load images for processing or analysis\n - Provide visual input to models\n - Select images for manipulation", - "namespace": "nodetool.input", - "node_type": "nodetool.input.ImageInput", + "title": "Overlay", + "description": "Overlay one video on top of another, including audio overlay when available.\n video, overlay, composite, picture-in-picture, audio", + "namespace": "nodetool.video", + "node_type": "nodetool.video.Overlay", "layout": "default", "properties": [ { - "name": "value", + "name": "main_video", "type": { - "type": "image" + "type": "video" }, "default": {}, - "title": "Value", - "description": "The image to use as input." + "title": "Main Video", + "description": "The main (background) video." }, { - "name": "name", + "name": "overlay_video", "type": { - "type": "str" + "type": "video" }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "default": {}, + "title": "Overlay Video", + "description": "The video to overlay on top." + }, + { + "name": "x", + "type": { + "type": "int" + }, + "default": 0, + "title": "X", + "description": "X-coordinate for overlay placement." + }, + { + "name": "y", + "type": { + "type": "int" + }, + "default": 0, + "title": "Y", + "description": "Y-coordinate for overlay placement." + }, + { + "name": "scale", + "type": { + "type": "float" + }, + "default": 1.0, + "title": "Scale", + "description": "Scale factor for the overlay video." + }, + { + "name": "overlay_audio_volume", + "type": { + "type": "float" + }, + "default": 0.5, + "title": "Overlay Audio Volume", + "description": "Volume of the overlay audio relative to the main audio.", + "min": 0.0, + "max": 1.0 } ], "outputs": [ { "type": { - "type": "image" + "type": "video" }, "name": "output" } @@ -7743,55 +6909,54 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "main_video", + "overlay_video", + "x", + "y", + "scale", + "overlay_audio_volume" ], "is_dynamic": false }, { - "title": "Integer Input", - "description": "Integer parameter input for workflows.\n input, parameter, integer, number\n\n Use cases:\n - Specify counts or quantities\n - Set index values\n - Configure discrete numeric parameters", - "namespace": "nodetool.input", - "node_type": "nodetool.input.IntegerInput", + "title": "Resize", + "description": "Resize a video to a specific width and height.\n video, resize, scale, dimensions\n\n Use cases:\n 1. Adjust video resolution for different display requirements\n 2. Reduce file size by downscaling video\n 3. Prepare videos for specific platforms with size constraints", + "namespace": "nodetool.video", + "node_type": "nodetool.video.Resize", "layout": "default", "properties": [ { - "name": "value", - "type": { - "type": "int" - }, - "default": 0, - "title": "Value" - }, - { - "name": "name", + "name": "video", "type": { - "type": "str" + "type": "video" }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "default": {}, + "title": "Video", + "description": "The input video to resize." }, { - "name": "min", + "name": "width", "type": { "type": "int" }, - "default": 0, - "title": "Min" + "default": -1, + "title": "Width", + "description": "The target width. Use -1 to maintain aspect ratio." }, { - "name": "max", + "name": "height", "type": { "type": "int" }, - "default": 100, - "title": "Max" + "default": -1, + "title": "Height", + "description": "The target height. Use -1 to maintain aspect ratio." } ], "outputs": [ { "type": { - "type": "int" + "type": "video" }, "name": "output" } @@ -7799,40 +6964,33 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "video", + "width", + "height" ], "is_dynamic": false }, { - "title": "Path Input", - "description": "Local path input for workflows.\n input, parameter, path\n\n Use cases:\n - Provide a local path to a file or directory\n - Specify a file or directory for processing\n - Load local data for analysis", - "namespace": "nodetool.input", - "node_type": "nodetool.input.PathInput", + "title": "Reverse", + "description": "Reverse the playback of a video.\n video, reverse, backwards, effect\n\n Use cases:\n 1. Create artistic effects by playing video in reverse\n 2. Analyze motion or events in reverse order\n 3. Generate unique transitions or intros for video projects", + "namespace": "nodetool.video", + "node_type": "nodetool.video.Reverse", "layout": "default", "properties": [ { - "name": "value", - "type": { - "type": "file_path" - }, - "default": {}, - "title": "Value", - "description": "The path to use as input." - }, - { - "name": "name", + "name": "video", "type": { - "type": "str" - }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "type": "video" + }, + "default": {}, + "title": "Video", + "description": "The input video to reverse." } ], "outputs": [ { "type": { - "type": "file_path" + "type": "video" }, "name": "output" } @@ -7840,39 +6998,42 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "video" ], "is_dynamic": false }, { - "title": "String Input", - "description": "String parameter input for workflows.\n input, parameter, string, text\n\n Use cases:\n - Provide text labels or names\n - Enter search queries\n - Specify file paths or URLs", - "namespace": "nodetool.input", - "node_type": "nodetool.input.StringInput", + "title": "Rotate", + "description": "Rotate a video by a specified angle.\n video, rotate, orientation, transform\n\n Use cases:\n 1. Correct orientation of videos taken with a rotated camera\n 2. Create artistic effects by rotating video content\n 3. Adjust video for different display orientations", + "namespace": "nodetool.video", + "node_type": "nodetool.video.Rotate", "layout": "default", "properties": [ { - "name": "value", + "name": "video", "type": { - "type": "str" + "type": "video" }, - "default": "", - "title": "Value" + "default": {}, + "title": "Video", + "description": "The input video to rotate." }, { - "name": "name", + "name": "angle", "type": { - "type": "str" + "type": "float" }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "default": 0.0, + "title": "Angle", + "description": "The angle of rotation in degrees.", + "min": -360.0, + "max": 360.0 } ], "outputs": [ { "type": { - "type": "str" + "type": "video" }, "name": "output" } @@ -7880,40 +7041,43 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "video", + "angle" ], "is_dynamic": false }, { - "title": "Text Input", - "description": "Text content input for workflows.\n input, parameter, text\n\n Use cases:\n - Load text documents or articles\n - Process multi-line text content\n - Analyze large text bodies", - "namespace": "nodetool.input", - "node_type": "nodetool.input.TextInput", + "title": "Saturation", + "description": "Adjust the color saturation of a video.\n video, saturation, color, enhance\n\n Use cases:\n 1. Enhance color vibrancy in dull or flat-looking footage\n 2. Create stylistic effects by over-saturating or desaturating video\n 3. Correct oversaturated footage from certain cameras", + "namespace": "nodetool.video", + "node_type": "nodetool.video.Saturation", "layout": "default", "properties": [ { - "name": "value", + "name": "video", "type": { - "type": "text" + "type": "video" }, "default": {}, - "title": "Value", - "description": "The text to use as input." + "title": "Video", + "description": "The input video to adjust saturation." }, { - "name": "name", + "name": "saturation", "type": { - "type": "str" + "type": "float" }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "default": 1.0, + "title": "Saturation", + "description": "Saturation level. 1.0 is original, <1 decreases saturation, >1 increases saturation.", + "min": 0.0, + "max": 3.0 } ], "outputs": [ { "type": { - "type": "text" + "type": "video" }, "name": "output" } @@ -7921,34 +7085,44 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "video", + "saturation" ], "is_dynamic": false }, { - "title": "Video Input", - "description": "Video asset input for workflows.\n input, parameter, video\n\n Use cases:\n - Load video files for processing\n - Analyze video content\n - Extract frames or audio from videos", - "namespace": "nodetool.input", - "node_type": "nodetool.input.VideoInput", + "title": "Save Video Asset", + "description": "Save a video to an asset folder.\n video, save, file, output\n\n Use cases:\n 1. Export processed video to a specific asset folder\n 2. Save video with a custom name\n 3. Create a copy of a video in a different location", + "namespace": "nodetool.video", + "node_type": "nodetool.video.SaveVideo", "layout": "default", "properties": [ { - "name": "value", + "name": "video", "type": { "type": "video" }, "default": {}, - "title": "Value", - "description": "The video to use as input." + "title": "Video", + "description": "The video to save." + }, + { + "name": "folder", + "type": { + "type": "folder" + }, + "default": {}, + "title": "Folder", + "description": "The asset folder to save the video in." }, { "name": "name", "type": { "type": "str" }, - "default": "", + "default": "%Y-%m-%d-%H-%M-%S.mp4", "title": "Name", - "description": "The parameter name for the workflow." + "description": "\n Name of the output video.\n You can use time and date variables to create unique names:\n %Y - Year\n %m - Month\n %d - Day\n %H - Hour\n %M - Minute\n %S - Second\n " } ], "outputs": [ @@ -7962,68 +7136,42 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "video", + "folder", + "name" ], "is_dynamic": false }, { - "title": "Split Text into Chunks", - "description": "Splits text into chunks of specified word length.\n text, chunk, split\n\n Use cases:\n - Preparing text for processing by models with input length limits\n - Creating manageable text segments for parallel processing\n - Generating summaries of text sections", - "namespace": "nodetool.text", - "node_type": "nodetool.text.Chunk", + "title": "Set Speed", + "description": "Adjust the playback speed of a video.\n video, speed, tempo, time\n\n Use cases:\n 1. Create slow-motion effects by decreasing video speed\n 2. Generate time-lapse videos by increasing playback speed\n 3. Synchronize video duration with audio or other timing requirements", + "namespace": "nodetool.video", + "node_type": "nodetool.video.SetSpeed", "layout": "default", "properties": [ { - "name": "text", - "type": { - "type": "str" - }, - "default": "", - "title": "Text" - }, - { - "name": "length", - "type": { - "type": "int" - }, - "default": 100, - "title": "Length", - "min": 1.0, - "max": 1000.0 - }, - { - "name": "overlap", + "name": "video", "type": { - "type": "int" + "type": "video" }, - "default": 0, - "title": "Overlap" + "default": {}, + "title": "Video", + "description": "The input video to adjust speed." }, { - "name": "separator", + "name": "speed_factor", "type": { - "type": "union", - "type_args": [ - { - "type": "str" - }, - { - "type": "none" - } - ] + "type": "float" }, - "title": "Separator" + "default": 1.0, + "title": "Speed Factor", + "description": "The speed adjustment factor. Values > 1 speed up, < 1 slow down." } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] + "type": "video" }, "name": "output" } @@ -8031,41 +7179,54 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "length", - "overlap", - "separator" + "video", + "speed_factor" ], "is_dynamic": false }, { - "title": "Concatenate Text", - "description": "Concatenates two text inputs into a single output.\n text, concatenation, combine, +\n\n Use cases:\n - Joining outputs from multiple text processing nodes\n - Combining parts of sentences or paragraphs\n - Merging text data from different sources", - "namespace": "nodetool.text", - "node_type": "nodetool.text.Concat", + "title": "Sharpness", + "description": "Adjust the sharpness of a video.\n video, sharpen, enhance, detail\n\n Use cases:\n 1. Enhance detail in slightly out-of-focus footage\n 2. Correct softness introduced by video compression\n 3. Create stylistic effects by over-sharpening", + "namespace": "nodetool.video", + "node_type": "nodetool.video.Sharpness", "layout": "default", "properties": [ { - "name": "a", + "name": "video", "type": { - "type": "str" + "type": "video" }, - "default": "", - "title": "A" + "default": {}, + "title": "Video", + "description": "The input video to sharpen." }, { - "name": "b", + "name": "luma_amount", "type": { - "type": "str" + "type": "float" }, - "default": "", - "title": "B" + "default": 1.0, + "title": "Luma Amount", + "description": "Amount of sharpening to apply to luma (brightness) channel.", + "min": 0.0, + "max": 3.0 + }, + { + "name": "chroma_amount", + "type": { + "type": "float" + }, + "default": 0.5, + "title": "Chroma Amount", + "description": "Amount of sharpening to apply to chroma (color) channels.", + "min": 0.0, + "max": 3.0 } ], "outputs": [ { "type": { - "type": "str" + "type": "video" }, "name": "output" } @@ -8073,95 +7234,177 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "a", - "b" + "video", + "luma_amount", + "chroma_amount" ], "is_dynamic": false }, { - "title": "Contains Text", - "description": "Checks if text contains a specified substring.\n text, check, contains, compare, validate, substring, string\n\n Use cases:\n - Searching for keywords in text\n - Filtering content based on presence of terms\n - Validating text content", - "namespace": "nodetool.text", - "node_type": "nodetool.text.Contains", + "title": "Stabilize", + "description": "Apply video stabilization to reduce camera shake and jitter.\n video, stabilize, smooth, shake-reduction\n\n Use cases:\n 1. Improve quality of handheld or action camera footage\n 2. Smooth out panning and tracking shots\n 3. Enhance viewer experience by reducing motion sickness", + "namespace": "nodetool.video", + "node_type": "nodetool.video.Stabilize", "layout": "default", "properties": [ { - "name": "text", + "name": "video", "type": { - "type": "str" + "type": "video" }, - "default": "", - "title": "Text" + "default": {}, + "title": "Video", + "description": "The input video to stabilize." }, { - "name": "substring", + "name": "smoothing", "type": { - "type": "str" + "type": "float" }, - "default": "", - "title": "Substring" + "default": 10.0, + "title": "Smoothing", + "description": "Smoothing strength. Higher values result in smoother but potentially more cropped video.", + "min": 1.0, + "max": 100.0 }, { - "name": "case_sensitive", + "name": "crop_black", "type": { "type": "bool" }, "default": true, - "title": "Case Sensitive" + "title": "Crop Black", + "description": "Whether to crop black borders that may appear after stabilization." } ], "outputs": [ { "type": { - "type": "bool" + "type": "video" }, "name": "output" } ], "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "text", - "substring", - "case_sensitive" + "recommended_models": [], + "basic_fields": [ + "video", + "smoothing", + "crop_black" ], "is_dynamic": false }, { - "title": "Count Tokens", - "description": "Counts the number of tokens in text using tiktoken.\n text, tokens, count, encoding\n\n Use cases:\n - Checking text length for LLM input limits\n - Estimating API costs\n - Managing token budgets in text processing", - "namespace": "nodetool.text", - "node_type": "nodetool.text.CountTokens", + "title": "Transition", + "description": "Create a transition effect between two videos, including audio transition when available.\n video, transition, effect, merge, audio\n\n Use cases:\n 1. Create smooth transitions between video clips in a montage\n 2. Add professional-looking effects to video projects\n 3. Blend scenes together for creative storytelling\n 4. Smoothly transition between audio tracks of different video clips", + "namespace": "nodetool.video", + "node_type": "nodetool.video.Transition", "layout": "default", "properties": [ { - "name": "text", + "name": "video_a", "type": { - "type": "str" + "type": "video" }, - "default": "", - "title": "Text" + "default": {}, + "title": "Video A", + "description": "The first video in the transition." }, { - "name": "encoding", + "name": "video_b", + "type": { + "type": "video" + }, + "default": {}, + "title": "Video B", + "description": "The second video in the transition." + }, + { + "name": "transition_type", "type": { "type": "enum", "values": [ - "cl100k_base", - "p50k_base", - "r50k_base" + "fade", + "wipeleft", + "wiperight", + "wipeup", + "wipedown", + "slideleft", + "slideright", + "slideup", + "slidedown", + "circlecrop", + "rectcrop", + "distance", + "fadeblack", + "fadewhite", + "radial", + "smoothleft", + "smoothright", + "smoothup", + "smoothdown", + "circleopen", + "circleclose", + "vertopen", + "vertclose", + "horzopen", + "horzclose", + "dissolve", + "pixelize", + "diagtl", + "diagtr", + "diagbl", + "diagbr", + "hlslice", + "hrslice", + "vuslice", + "vdslice", + "hblur", + "fadegrays", + "wipetl", + "wipetr", + "wipebl", + "wipebr", + "squeezeh", + "squeezev", + "zoomin", + "fadefast", + "fadeslow", + "hlwind", + "hrwind", + "vuwind", + "vdwind", + "coverleft", + "coverright", + "coverup", + "coverdown", + "revealleft", + "revealright", + "revealup", + "revealdown" ], - "type_name": "nodetool.nodes.nodetool.text.TiktokenEncoding" + "type_name": "nodetool.nodes.nodetool.video.TransitionType" }, - "default": "cl100k_base", - "title": "Encoding", - "description": "The tiktoken encoding to use for token counting" + "default": "fade", + "title": "Transition Type", + "description": "Type of transition effect" + }, + { + "name": "duration", + "type": { + "type": "float" + }, + "default": 1.0, + "title": "Duration", + "description": "Duration of the transition effect in seconds.", + "min": 0.1, + "max": 5.0 } ], "outputs": [ { "type": { - "type": "int" + "type": "video" }, "name": "output" } @@ -8169,39 +7412,52 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "encoding" + "video_a", + "video_b", + "transition_type", + "duration" ], "is_dynamic": false }, { - "title": "Ends With", - "description": "Checks if text ends with a specified suffix.\n text, check, suffix, compare, validate, substring, string\n\n Use cases:\n - Validating file extensions\n - Checking string endings\n - Filtering text based on ending content", - "namespace": "nodetool.text", - "node_type": "nodetool.text.EndsWith", + "title": "Trim", + "description": "Trim a video to a specific start and end time.\n video, trim, cut, segment\n\n Use cases:\n 1. Extract specific segments from a longer video\n 2. Remove unwanted parts from the beginning or end of a video\n 3. Create shorter clips from a full-length video", + "namespace": "nodetool.video", + "node_type": "nodetool.video.Trim", "layout": "default", "properties": [ { - "name": "text", + "name": "video", "type": { - "type": "str" + "type": "video" }, - "default": "", - "title": "Text" + "default": {}, + "title": "Video", + "description": "The input video to trim." }, { - "name": "suffix", + "name": "start_time", "type": { - "type": "str" + "type": "float" }, - "default": "", - "title": "Suffix" + "default": 0.0, + "title": "Start Time", + "description": "The start time in seconds for the trimmed video." + }, + { + "name": "end_time", + "type": { + "type": "float" + }, + "default": -1.0, + "title": "End Time", + "description": "The end time in seconds for the trimmed video. Use -1 for the end of the video." } ], "outputs": [ { "type": { - "type": "bool" + "type": "video" }, "name": "output" } @@ -8209,47 +7465,64 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "suffix" + "video", + "start_time", + "end_time" ], "is_dynamic": false }, { - "title": "Extract Text", - "description": "Extracts a substring from input text.\n text, extract, substring\n\n Use cases:\n - Extracting specific portions of text for analysis\n - Trimming unwanted parts from text data\n - Focusing on relevant sections of longer documents", - "namespace": "nodetool.text", - "node_type": "nodetool.text.Extract", - "layout": "default", + "title": "Add", + "description": "Performs addition on two inputs.\n math, plus, add, addition, sum, +", + "namespace": "nodetool.math", + "node_type": "nodetool.math.Add", + "layout": "small", "properties": [ { - "name": "text", - "type": { - "type": "str" - }, - "default": "", - "title": "Text" - }, - { - "name": "start", + "name": "a", "type": { - "type": "int" + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "float" + } + ] }, - "default": 0, - "title": "Start" + "default": 0.0, + "title": "A" }, { - "name": "end", + "name": "b", "type": { - "type": "int" + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "float" + } + ] }, - "default": 0, - "title": "End" + "default": 0.0, + "title": "B" } ], "outputs": [ { "type": { - "type": "str" + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "float" + } + ] }, "name": "output" } @@ -8257,42 +7530,49 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "start", - "end" + "a", + "b" ], "is_dynamic": false }, { - "title": "Extract JSON", - "description": "Extracts data from JSON using JSONPath expressions.\n json, extract, jsonpath\n\n Use cases:\n - Retrieving specific fields from complex JSON structures\n - Filtering and transforming JSON data for analysis\n - Extracting nested data from API responses or configurations", - "namespace": "nodetool.text", - "node_type": "nodetool.text.ExtractJSON", - "layout": "default", + "title": "Binary Operation", + "description": "Common base for binary math operations.", + "namespace": "nodetool.math", + "node_type": "nodetool.math.BinaryOperation", + "layout": "small", "properties": [ { - "name": "text", - "type": { - "type": "str" - }, - "default": "", - "title": "JSON Text" - }, - { - "name": "json_path", + "name": "a", "type": { - "type": "str" + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "float" + } + ] }, - "default": "$.*", - "title": "JSONPath Expression" + "default": 0.0, + "title": "A" }, { - "name": "find_all", + "name": "b", "type": { - "type": "bool" + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "float" + } + ] }, - "default": false, - "title": "Find All" + "default": 0.0, + "title": "B" } ], "outputs": [ @@ -8306,69 +7586,39 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "json_path", - "find_all" + "a", + "b" ], "is_dynamic": false }, { - "title": "Extract Regex Groups", - "description": "Extracts substrings matching regex groups from text.\n text, regex, extract\n\n Use cases:\n - Extracting structured data (e.g., dates, emails) from unstructured text\n - Parsing specific patterns in log files or documents\n - Isolating relevant information from complex text formats", - "namespace": "nodetool.text", - "node_type": "nodetool.text.ExtractRegex", - "layout": "default", + "title": "Cosine", + "description": "Computes the cosine of input angles in radians.\n math, trigonometry, cosine, cos\n\n Use cases:\n - Calculating horizontal components in physics\n - Creating circular motions\n - Phase calculations in signal processing", + "namespace": "nodetool.math", + "node_type": "nodetool.math.Cosine", + "layout": "small", "properties": [ { - "name": "text", - "type": { - "type": "str" - }, - "default": "", - "title": "Text" - }, - { - "name": "regex", - "type": { - "type": "str" - }, - "default": "", - "title": "Regex" - }, - { - "name": "dotall", - "type": { - "type": "bool" - }, - "default": false, - "title": "Dotall" - }, - { - "name": "ignorecase", - "type": { - "type": "bool" - }, - "default": false, - "title": "Ignorecase" - }, - { - "name": "multiline", + "name": "angle_rad", "type": { - "type": "bool" + "type": "union", + "type_args": [ + { + "type": "float" + }, + { + "type": "int" + } + ] }, - "default": false, - "title": "Multiline" + "default": 0.0, + "title": "Angle (Radians)" } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] + "type": "float" }, "name": "output" } @@ -8376,69 +7626,60 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "regex", - "dotall", - "ignorecase", - "multiline" + "angle_rad" ], "is_dynamic": false }, { - "title": "Find All Regex Matches", - "description": "Finds all regex matches in text as separate substrings.\n text, regex, find\n\n Use cases:\n - Identifying all occurrences of a pattern in text\n - Extracting multiple instances of structured data\n - Analyzing frequency and distribution of specific text patterns", - "namespace": "nodetool.text", - "node_type": "nodetool.text.FindAllRegex", - "layout": "default", + "title": "Divide", + "description": "Divides the first input by the second.\n math, division, arithmetic, quotient, /", + "namespace": "nodetool.math", + "node_type": "nodetool.math.Divide", + "layout": "small", "properties": [ { - "name": "text", - "type": { - "type": "str" - }, - "default": "", - "title": "Text" - }, - { - "name": "regex", - "type": { - "type": "str" - }, - "default": "", - "title": "Regex" - }, - { - "name": "dotall", - "type": { - "type": "bool" - }, - "default": false, - "title": "Dotall" - }, - { - "name": "ignorecase", + "name": "a", "type": { - "type": "bool" + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "float" + } + ] }, - "default": false, - "title": "Ignorecase" + "default": 0.0, + "title": "A" }, { - "name": "multiline", + "name": "b", "type": { - "type": "bool" + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "float" + } + ] }, - "default": false, - "title": "Multiline" + "default": 0.0, + "title": "B" } ], "outputs": [ { "type": { - "type": "list", + "type": "union", "type_args": [ { - "type": "str" + "type": "int" + }, + { + "type": "float" } ] }, @@ -8448,35 +7689,63 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "regex", - "dotall", - "ignorecase", - "multiline" + "a", + "b" ], "is_dynamic": false }, { - "title": "Format Text", - "description": "Replaces placeholders in a string with dynamic inputs using Jinja2 templating.\n text, template, formatting\n\n Use cases:\n - Generating personalized messages with dynamic content\n - Creating parameterized queries or commands\n - Formatting and filtering text output based on variable inputs\n\n Examples:\n - text: \"Hello, {{ name }}!\"\n - text: \"Title: {{ title|truncate(20) }}\"\n - text: \"Name: {{ name|upper }}\"\n\n Available filters:\n - truncate(length): Truncates text to given length\n - upper: Converts text to uppercase\n - lower: Converts text to lowercase\n - title: Converts text to title case\n - trim: Removes whitespace from start/end\n - replace(old, new): Replaces substring\n - default(value): Sets default if value is undefined\n - first: Gets first character/item\n - last: Gets last character/item\n - length: Gets length of string/list\n - sort: Sorts list\n - join(delimiter): Joins list with delimiter", - "namespace": "nodetool.text", - "node_type": "nodetool.text.FormatText", - "layout": "default", + "title": "Modulus", + "description": "Calculates the element-wise remainder of division.\n math, modulo, remainder, mod, %\n\n Use cases:\n - Implementing cyclic behaviors\n - Checking for even/odd numbers\n - Limiting values to a specific range", + "namespace": "nodetool.math", + "node_type": "nodetool.math.Modulus", + "layout": "small", "properties": [ { - "name": "template", + "name": "a", "type": { - "type": "str" + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "float" + } + ] }, - "default": "", - "title": "Template", - "description": "\n Examples:\n - text: \"Hello, {{ name }}!\"\n - text: \"Title: {{ title|truncate(20) }}\"\n - text: \"Name: {{ name|upper }}\" \n\n Available filters:\n - truncate(length): Truncates text to given length\n - upper: Converts text to uppercase\n - lower: Converts text to lowercase\n - title: Converts text to title case\n - trim: Removes whitespace from start/end\n - replace(old, new): Replaces substring\n - default(value): Sets default if value is undefined\n - first: Gets first character/item\n - last: Gets last character/item\n - length: Gets length of string/list\n - sort: Sorts list\n - join(delimiter): Joins list with delimiter\n" + "default": 0.0, + "title": "A" + }, + { + "name": "b", + "type": { + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "float" + } + ] + }, + "default": 0.0, + "title": "B" } ], "outputs": [ { "type": { - "type": "str" + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "float" + } + ] }, "name": "output" } @@ -8484,27 +7753,20 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "template" + "a", + "b" ], - "is_dynamic": true + "is_dynamic": false }, { - "title": "Check Length", - "description": "Checks if text length meets specified conditions.\n text, check, length, compare, validate, whitespace, string\n\n Use cases:\n - Validating input length requirements\n - Filtering text by length\n - Checking content size constraints", - "namespace": "nodetool.text", - "node_type": "nodetool.text.HasLength", - "layout": "default", + "title": "Multiply", + "description": "Multiplies two inputs.\n math, product, times, *", + "namespace": "nodetool.math", + "node_type": "nodetool.math.Multiply", + "layout": "small", "properties": [ { - "name": "text", - "type": { - "type": "str" - }, - "default": "", - "title": "Text" - }, - { - "name": "min_length", + "name": "a", "type": { "type": "union", "type_args": [ @@ -8512,14 +7774,15 @@ "type": "int" }, { - "type": "none" + "type": "float" } ] }, - "title": "Minimum Length" + "default": 0.0, + "title": "A" }, { - "name": "max_length", + "name": "b", "type": { "type": "union", "type_args": [ @@ -8527,14 +7790,16 @@ "type": "int" }, { - "type": "none" + "type": "float" } ] }, - "title": "Maximum Length" - }, + "default": 0.0, + "title": "B" + } + ], + "outputs": [ { - "name": "exact_length", "type": { "type": "union", "type_args": [ @@ -8542,88 +7807,73 @@ "type": "int" }, { - "type": "none" + "type": "float" } ] }, - "title": "Exact Length" - } - ], - "outputs": [ - { - "type": { - "type": "bool" - }, "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "min_length", - "max_length", - "exact_length" + "a", + "b" ], "is_dynamic": false }, { - "title": "HTML to Text", - "description": "Converts HTML content to plain text using html2text.\n html, convert, text, parse, extract\n\n Use cases:\n - Converting HTML documents to readable plain text\n - Extracting text content from web pages\n - Cleaning HTML markup from text data\n - Processing HTML emails or documents", - "namespace": "nodetool.text", - "node_type": "nodetool.text.HtmlToText", - "layout": "default", + "title": "Power", + "description": "Raises the base to the power of the exponent element-wise.\n math, exponentiation, power, pow, **\n\n Use cases:\n - Calculating compound interest\n - Implementing polynomial functions\n - Applying non-linear transformations to data", + "namespace": "nodetool.math", + "node_type": "nodetool.math.Power", + "layout": "small", "properties": [ { - "name": "html", - "type": { - "type": "str" - }, - "default": "", - "title": "HTML", - "description": "HTML content to convert" - }, - { - "name": "base_url", - "type": { - "type": "str" - }, - "default": "", - "title": "Base URL", - "description": "Base URL for resolving relative links" - }, - { - "name": "body_width", - "type": { - "type": "int" - }, - "default": 1000, - "title": "Body Width", - "description": "Width for text wrapping" - }, - { - "name": "ignore_images", + "name": "base", "type": { - "type": "bool" + "type": "union", + "type_args": [ + { + "type": "float" + }, + { + "type": "int" + } + ] }, - "default": true, - "title": "Ignore Images", - "description": "Whether to ignore image tags" + "default": 1.0, + "title": "Base" }, { - "name": "ignore_mailto_links", + "name": "exponent", "type": { - "type": "bool" + "type": "union", + "type_args": [ + { + "type": "float" + }, + { + "type": "int" + } + ] }, - "default": true, - "title": "Ignore Mailto Links", - "description": "Whether to ignore mailto links" + "default": 2.0, + "title": "Exponent" } ], "outputs": [ { "type": { - "type": "str" + "type": "union", + "type_args": [ + { + "type": "float" + }, + { + "type": "int" + } + ] }, "name": "output" } @@ -8631,42 +7881,39 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "html", - "base_url", - "body_width", - "ignore_images", - "ignore_mailto_links" + "base", + "exponent" ], "is_dynamic": false }, { - "title": "Is Empty", - "description": "Checks if text is empty or contains only whitespace.\n text, check, empty, compare, validate, whitespace, string\n\n Use cases:\n - Validating required text fields\n - Filtering out empty content\n - Checking for meaningful input", - "namespace": "nodetool.text", - "node_type": "nodetool.text.IsEmpty", - "layout": "default", + "title": "Sine", + "description": "Computes the sine of input angles in radians.\n math, trigonometry, sine, sin\n\n Use cases:\n - Calculating vertical components in physics\n - Generating smooth periodic functions\n - Audio signal processing", + "namespace": "nodetool.math", + "node_type": "nodetool.math.Sine", + "layout": "small", "properties": [ { - "name": "text", - "type": { - "type": "str" - }, - "default": "", - "title": "Text" - }, - { - "name": "trim_whitespace", + "name": "angle_rad", "type": { - "type": "bool" + "type": "union", + "type_args": [ + { + "type": "float" + }, + { + "type": "int" + } + ] }, - "default": true, - "title": "Trim Whitespace" + "default": 0.0, + "title": "Angle (Radians)" } ], "outputs": [ { "type": { - "type": "bool" + "type": "float" }, "name": "output" } @@ -8674,44 +7921,46 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "trim_whitespace" + "angle_rad" ], "is_dynamic": false }, { - "title": "Join Text", - "description": "Joins a list of strings into a single string using a specified separator.\n text, join, combine, +, add, concatenate\n\n Use cases:\n - Combining multiple text elements with a consistent delimiter\n - Creating comma-separated lists from individual items\n - Assembling formatted text from array elements", - "namespace": "nodetool.text", - "node_type": "nodetool.text.Join", - "layout": "default", + "title": "Sqrt", + "description": "Calculates the square root of the input element-wise.\n math, square root, sqrt, \u221a\n\n Use cases:\n - Normalizing data\n - Calculating distances in Euclidean space\n - Finding intermediate values in binary search", + "namespace": "nodetool.math", + "node_type": "nodetool.math.Sqrt", + "layout": "small", "properties": [ { - "name": "strings", + "name": "x", "type": { - "type": "list", + "type": "union", "type_args": [ { - "type": "str" + "type": "int" + }, + { + "type": "float" } ] }, - "default": [], - "title": "Strings" - }, - { - "name": "separator", - "type": { - "type": "str" - }, - "default": "", - "title": "Separator" + "default": 1.0, + "title": "Input" } ], "outputs": [ { "type": { - "type": "str" + "type": "union", + "type_args": [ + { + "type": "float" + }, + { + "type": "int" + } + ] }, "name": "output" } @@ -8719,69 +7968,104 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "strings", - "separator" + "x" ], "is_dynamic": false }, { - "title": "Load Text Assets", - "description": "Load text files from an asset folder.\n load, text, file, import\n\n Use cases:\n - Loading multiple text files for batch processing\n - Importing text content from a directory\n - Processing collections of text documents", - "namespace": "nodetool.text", - "node_type": "nodetool.text.LoadTextAssets", - "layout": "default", + "title": "Subtract", + "description": "Subtracts the second input from the first.\n math, minus, difference, -", + "namespace": "nodetool.math", + "node_type": "nodetool.math.Subtract", + "layout": "small", "properties": [ { - "name": "folder", + "name": "a", "type": { - "type": "folder" + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "float" + } + ] }, - "default": {}, - "title": "Folder", - "description": "The asset folder to load the text files from." - } - ], - "outputs": [ + "default": 0.0, + "title": "A" + }, { + "name": "b", "type": { - "type": "text" + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "float" + } + ] }, - "name": "text" - }, + "default": 0.0, + "title": "B" + } + ], + "outputs": [ { "type": { - "type": "str" + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "float" + } + ] }, - "name": "name" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "folder" + "a", + "b" ], "is_dynamic": false }, { - "title": "Parse JSON String", - "description": "Parses a JSON string into a Python object.\n json, parse, convert\n\n Use cases:\n - Converting JSON API responses for further processing\n - Preparing structured data for analysis or storage\n - Extracting configuration or settings from JSON files", - "namespace": "nodetool.text", - "node_type": "nodetool.text.ParseJSON", + "title": "Add Label", + "description": "Adds a label to a Gmail message.\n email, gmail, label", + "namespace": "nodetool.mail", + "node_type": "nodetool.mail.AddLabel", "layout": "default", "properties": [ { - "name": "text", + "name": "message_id", "type": { "type": "str" }, "default": "", - "title": "JSON string" + "title": "Message Id", + "description": "Message ID to label" + }, + { + "name": "label", + "type": { + "type": "str" + }, + "default": "", + "title": "Label", + "description": "Label to add to the message" } ], "outputs": [ { "type": { - "type": "any" + "type": "bool" }, "name": "output" } @@ -8789,217 +8073,212 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text" + "message_id", + "label" ], "is_dynamic": false }, { - "title": "Find Regex Matches", - "description": "Find all matches of a regex pattern in text.\n regex, search, pattern, match\n\n Use cases:\n - Extract specific patterns from text\n - Validate text against patterns\n - Find all occurrences of a pattern", - "namespace": "nodetool.text", - "node_type": "nodetool.text.RegexMatch", + "title": "Email Fields", + "description": "Decomposes an email into its individual components.\n email, decompose, extract\n\n Takes an Email object and returns its individual fields:\n - id: Message ID\n - subject: Email subject\n - sender: Sender address\n - date: Datetime of email\n - body: Email body content", + "namespace": "nodetool.mail", + "node_type": "nodetool.mail.EmailFields", "layout": "default", "properties": [ { - "name": "text", + "name": "email", + "type": { + "type": "email" + }, + "default": {}, + "title": "Email", + "description": "Email object to decompose" + } + ], + "outputs": [ + { "type": { "type": "str" }, - "default": "", - "title": "Text", - "description": "Text to search in" + "name": "id" }, { - "name": "pattern", "type": { "type": "str" }, - "default": "", - "title": "Pattern", - "description": "Regular expression pattern" + "name": "subject" }, { - "name": "group", "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "none" - } - ] + "type": "str" }, - "title": "Group", - "description": "Capture group to extract (0 for full match)" - } - ], - "outputs": [ + "name": "sender" + }, { "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] + "type": "datetime" }, - "name": "output" + "name": "date" + }, + { + "type": { + "type": "str" + }, + "name": "body" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "pattern", - "group" + "email" ], "is_dynamic": false }, { - "title": "Replace with Regex", - "description": "Replace text matching a regex pattern.\n regex, replace, substitute\n\n Use cases:\n - Clean or standardize text\n - Remove unwanted patterns\n - Transform text formats", - "namespace": "nodetool.text", - "node_type": "nodetool.text.RegexReplace", + "title": "Gmail Search", + "description": "Searches Gmail using Gmail-specific search operators and yields matching emails.\n email, gmail, search\n\n Use cases:\n - Search for emails based on specific criteria\n - Retrieve emails from a specific sender\n - Filter emails by subject, sender, or date", + "namespace": "nodetool.mail", + "node_type": "nodetool.mail.GmailSearch", "layout": "default", "properties": [ { - "name": "text", + "name": "from_address", "type": { "type": "str" }, "default": "", - "title": "Text", - "description": "Text to perform replacements on" + "title": "From Address", + "description": "Sender's email address to search for" }, { - "name": "pattern", + "name": "to_address", "type": { "type": "str" }, "default": "", - "title": "Pattern", - "description": "Regular expression pattern" + "title": "To Address", + "description": "Recipient's email address to search for" }, { - "name": "replacement", + "name": "subject", "type": { "type": "str" }, "default": "", - "title": "Replacement", - "description": "Replacement text" + "title": "Subject", + "description": "Text to search for in email subject" }, { - "name": "count", + "name": "body", "type": { - "type": "int" + "type": "str" }, - "default": 0, - "title": "Count", - "description": "Maximum replacements (0 for unlimited)" - } - ], - "outputs": [ + "default": "", + "title": "Body", + "description": "Text to search for in email body" + }, { + "name": "date_filter", "type": { - "type": "str" + "type": "enum", + "values": [ + "SINCE_ONE_HOUR", + "SINCE_ONE_DAY", + "SINCE_ONE_WEEK", + "SINCE_ONE_MONTH", + "SINCE_ONE_YEAR" + ], + "type_name": "nodetool.nodes.nodetool.mail.DateFilter" }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "text", - "pattern", - "replacement", - "count" - ], - "is_dynamic": false - }, - { - "title": "Split with Regex", - "description": "Split text using a regex pattern as delimiter.\n regex, split, tokenize\n\n Use cases:\n - Parse structured text\n - Extract fields from formatted strings\n - Tokenize text", - "namespace": "nodetool.text", - "node_type": "nodetool.text.RegexSplit", - "layout": "default", - "properties": [ + "default": "SINCE_ONE_DAY", + "title": "Date Filter", + "description": "Date filter to search for" + }, { - "name": "text", + "name": "keywords", "type": { "type": "str" }, "default": "", - "title": "Text", - "description": "Text to split" + "title": "Keywords", + "description": "Custom keywords or labels to search for" }, { - "name": "pattern", + "name": "folder", + "type": { + "type": "enum", + "values": [ + "INBOX", + "[Gmail]/Sent Mail", + "[Gmail]/Drafts", + "[Gmail]/Spam", + "[Gmail]/Trash" + ], + "type_name": "nodetool.nodes.nodetool.mail.GmailFolder" + }, + "default": "INBOX", + "title": "Folder", + "description": "Email folder to search in" + }, + { + "name": "text", "type": { "type": "str" }, "default": "", - "title": "Pattern", - "description": "Regular expression pattern to split on" + "title": "Text", + "description": "General text to search for anywhere in the email" }, { - "name": "maxsplit", + "name": "max_results", "type": { "type": "int" }, - "default": 0, - "title": "Maxsplit", - "description": "Maximum number of splits (0 for unlimited)" + "default": 50, + "title": "Max Results", + "description": "Maximum number of emails to return" } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] + "type": "email" }, - "name": "output" + "name": "email" + }, + { + "type": { + "type": "str" + }, + "name": "message_id" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "pattern", - "maxsplit" + "from_address", + "subject", + "body", + "date_filter", + "max_results" ], "is_dynamic": false }, - { - "title": "Validate with Regex", - "description": "Check if text matches a regex pattern.\n regex, validate, check\n\n Use cases:\n - Validate input formats (email, phone, etc)\n - Check text structure\n - Filter text based on patterns", - "namespace": "nodetool.text", - "node_type": "nodetool.text.RegexValidate", - "layout": "default", - "properties": [ - { - "name": "text", - "type": { - "type": "str" - }, - "default": "", - "title": "Text", - "description": "Text to validate" - }, + { + "title": "Move To Archive", + "description": "Moves specified emails to Gmail archive.\n email, gmail, archive", + "namespace": "nodetool.mail", + "node_type": "nodetool.mail.MoveToArchive", + "layout": "default", + "properties": [ { - "name": "pattern", + "name": "message_id", "type": { "type": "str" }, "default": "", - "title": "Pattern", - "description": "Regular expression pattern" + "title": "Message Id", + "description": "Message ID to archive" } ], "outputs": [ @@ -9013,41 +8292,57 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "pattern" + "message_id" ], "is_dynamic": false }, { - "title": "Replace Text", - "description": "Replaces a substring in a text with another substring.\n text, replace, substitute\n\n Use cases:\n - Correcting or updating specific text patterns\n - Sanitizing or normalizing text data\n - Implementing simple text transformations", - "namespace": "nodetool.text", - "node_type": "nodetool.text.Replace", + "title": "Classifier", + "description": "Classify text into predefined or dynamic categories using LLM.\n classification, nlp, categorization\n\n Use cases:\n - Sentiment analysis\n - Topic classification\n - Intent detection\n - Content categorization", + "namespace": "nodetool.llms", + "node_type": "nodetool.llms.Classifier", "layout": "default", "properties": [ { - "name": "text", + "name": "system_prompt", "type": { "type": "str" }, - "default": "", - "title": "Text" + "default": "\n You are a precise text classifier. Your task is to analyze the input text and assign confidence scores.\n ", + "title": "System Prompt", + "description": "The system prompt for the classifier" }, { - "name": "old", + "name": "model", "type": { - "type": "str" + "type": "language_model" }, - "default": "", - "title": "Old" + "default": {}, + "title": "Model", + "description": "Model to use for classification" }, { - "name": "new", + "name": "text", "type": { "type": "str" }, "default": "", - "title": "New" + "title": "Text", + "description": "Text to classify" + }, + { + "name": "categories", + "type": { + "type": "list", + "type_args": [ + { + "type": "str" + } + ] + }, + "default": [], + "title": "Categories", + "description": "List of possible categories. If empty, LLM will determine categories." } ], "outputs": [ @@ -9062,49 +8357,79 @@ "recommended_models": [], "basic_fields": [ "text", - "old", - "new" + "categories", + "model" ], "is_dynamic": false }, { - "title": "Save Text", - "description": "Saves input text to a file in the assets folder.\n text, save, file\n\n Use cases:\n - Persisting processed text results\n - Creating text files for downstream nodes or external use\n - Archiving text data within the workflow", - "namespace": "nodetool.text", - "node_type": "nodetool.text.SaveText", + "title": "Extractor", + "description": "Extract structured data from text content using LLM providers.\n data-extraction, structured-data, nlp, parsing\n\n Specialized for extracting structured information:\n - Converting unstructured text into structured data\n - Identifying and extracting specific fields from documents\n - Parsing text according to predefined schemas\n - Creating structured records from natural language content", + "namespace": "nodetool.llms", + "node_type": "nodetool.llms.Extractor", "layout": "default", "properties": [ + { + "name": "system_prompt", + "type": { + "type": "str" + }, + "default": "\n You are an expert data extractor. Your task is to extract specific information from text according to a defined schema.\n ", + "title": "System Prompt", + "description": "The system prompt for the data extractor" + }, + { + "name": "model", + "type": { + "type": "language_model" + }, + "default": {}, + "title": "Model", + "description": "Model to use for data extraction" + }, { "name": "text", "type": { "type": "str" }, "default": "", - "title": "Text" + "title": "Text", + "description": "The text to extract data from" }, { - "name": "folder", + "name": "extraction_prompt", "type": { - "type": "folder" + "type": "str" + }, + "default": "Extract the following information from the text:", + "title": "Extraction Prompt", + "description": "Additional instructions for the extraction process" + }, + { + "name": "columns", + "type": { + "type": "record_type" }, "default": {}, - "title": "Folder", - "description": "Name of the output folder." + "title": "Columns", + "description": "The fields to extract from the text" }, { - "name": "name", + "name": "max_tokens", "type": { - "type": "str" + "type": "int" }, - "default": "%Y-%m-%d-%H-%M-%S.txt", - "title": "Name", - "description": "\n Name of the output file.\n You can use time and date variables to create unique names:\n %Y - Year\n %m - Month\n %d - Day\n %H - Hour\n %M - Minute\n %S - Second\n " + "default": 4096, + "title": "Max Tokens", + "description": "The maximum number of tokens to generate.", + "min": 1.0, + "max": 100000.0 } ], "outputs": [ { "type": { - "type": "text" + "type": "dataframe" }, "name": "output" } @@ -9113,221 +8438,263 @@ "recommended_models": [], "basic_fields": [ "text", - "folder", - "name" + "extraction_prompt", + "columns", + "model" ], "is_dynamic": false }, { - "title": "Slice Text", - "description": "Slices text using Python's slice notation (start:stop:step).\n text, slice, substring\n\n Use cases:\n - Extracting specific portions of text with flexible indexing\n - Reversing text using negative step\n - Taking every nth character with step parameter\n\n Examples:\n - start=0, stop=5: first 5 characters\n - start=-5: last 5 characters\n - step=2: every second character\n - step=-1: reverse the text", - "namespace": "nodetool.text", - "node_type": "nodetool.text.Slice", + "title": "LLM", + "description": "Generate natural language responses using LLM providers.\n llm, text-generation, chatbot, question-answering\n\n Leverages LLM providers to:\n - Generate human-like text responses\n - Answer questions\n - Complete prompts\n - Engage in conversational interactions\n - Assist with writing and editing tasks\n - Perform text analysis and summarization", + "namespace": "nodetool.llms", + "node_type": "nodetool.llms.LLM", "layout": "default", "properties": [ { - "name": "text", + "name": "model", + "type": { + "type": "language_model" + }, + "default": {}, + "title": "Model", + "description": "Model to use for execution" + }, + { + "name": "system", + "type": { + "type": "str" + }, + "default": "You are a friendly assistant.", + "title": "System", + "description": "The system prompt for the LLM" + }, + { + "name": "prompt", "type": { "type": "str" }, "default": "", - "title": "Text" + "title": "Prompt", + "description": "The prompt for the LLM" }, { - "name": "start", + "name": "image", "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "none" - } - ] + "type": "image" }, - "title": "Start Index" + "default": {}, + "title": "Image", + "description": "The image to analyze" }, { - "name": "stop", + "name": "audio", "type": { - "type": "union", + "type": "audio" + }, + "default": {}, + "title": "Audio", + "description": "The audio to analyze" + }, + { + "name": "voice", + "type": { + "type": "enum", + "values": [ + "none", + "alloy", + "echo", + "fable", + "onyx", + "nova", + "shimmer" + ], + "type_name": "nodetool.nodes.nodetool.llms.Voice" + }, + "default": "none", + "title": "Voice", + "description": "The voice for the audio output (only for OpenAI)" + }, + { + "name": "tools", + "type": { + "type": "list", "type_args": [ { - "type": "int" - }, - { - "type": "none" + "type": "tool_name" } ] }, - "title": "Stop Index" + "default": [], + "title": "Tools", + "description": "List of tools to use for execution" }, { - "name": "step", + "name": "messages", "type": { - "type": "union", + "type": "list", "type_args": [ { - "type": "int" - }, - { - "type": "none" + "type": "message" } ] }, - "title": "Step" - } - ], - "outputs": [ - { - "type": { - "type": "str" - }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "text", - "start", - "stop", - "step" - ], - "is_dynamic": false - }, - { - "title": "Split Text", - "description": "Separates text into a list of strings based on a specified delimiter.\n text, split, tokenize\n\n Use cases:\n - Parsing CSV or similar delimited data\n - Breaking down sentences into words or phrases\n - Extracting specific elements from structured text", - "namespace": "nodetool.text", - "node_type": "nodetool.text.Split", - "layout": "default", - "properties": [ + "default": [], + "title": "Messages", + "description": "The messages for the LLM" + }, { - "name": "text", + "name": "max_tokens", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Text" + "default": 4096, + "title": "Max Tokens", + "min": 1.0, + "max": 100000.0 }, { - "name": "delimiter", + "name": "context_window", "type": { - "type": "str" + "type": "int" }, - "default": ",", - "title": "Delimiter" + "default": 4096, + "title": "Context Window (Ollama)", + "min": 1.0, + "max": 65536.0 } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] + "type": "str" }, - "name": "output" + "name": "text" + }, + { + "type": { + "type": "audio" + }, + "name": "audio" + }, + { + "type": { + "type": "image" + }, + "name": "image" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "delimiter" + "prompt", + "model", + "messages", + "image", + "audio", + "tools" ], "is_dynamic": false }, { - "title": "Starts With", - "description": "Checks if text starts with a specified prefix.\n text, check, prefix, compare, validate, substring, string\n\n Use cases:\n - Validating string prefixes\n - Filtering text based on starting content\n - Checking file name patterns", - "namespace": "nodetool.text", - "node_type": "nodetool.text.StartsWith", + "title": "LLM (Streaming)", + "description": "Generate natural language responses using LLM providers and streams output.\n llm, text-generation, chatbot, question-answering, streaming", + "namespace": "nodetool.llms", + "node_type": "nodetool.llms.LLMStreaming", "layout": "default", "properties": [ { - "name": "text", + "name": "model", + "type": { + "type": "language_model" + }, + "default": {}, + "title": "Model", + "description": "Model to use for execution" + }, + { + "name": "system", "type": { "type": "str" }, - "default": "", - "title": "Text" + "default": "You are a friendly assistant.", + "title": "System", + "description": "The system prompt for the LLM" }, { - "name": "prefix", + "name": "prompt", "type": { "type": "str" }, "default": "", - "title": "Prefix" - } - ], - "outputs": [ + "title": "Prompt", + "description": "The prompt for the LLM" + }, { + "name": "image", "type": { - "type": "bool" + "type": "image" }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "text", - "prefix" - ], - "is_dynamic": false - }, - { - "title": "Template", - "description": "Uses Jinja2 templating to format strings with variables and filters.\n text, template, formatting, format, combine, concatenate, +, add, variable, replace, filter\n\n Use cases:\n - Generating personalized messages with dynamic content\n - Creating parameterized queries or commands\n - Formatting and filtering text output based on variable inputs\n\n Examples:\n - text: \"Hello, {{ name }}!\"\n - text: \"Title: {{ title|truncate(20) }}\"\n - text: \"Name: {{ name|upper }}\"\n\n Available filters:\n - truncate(length): Truncates text to given length\n - upper: Converts text to uppercase\n - lower: Converts text to lowercase\n - title: Converts text to title case\n - trim: Removes whitespace from start/end\n - replace(old, new): Replaces substring\n - default(value): Sets default if value is undefined\n - first: Gets first character/item\n - last: Gets last character/item\n - length: Gets length of string/list\n - sort: Sorts list\n - join(delimiter): Joins list with delimiter", - "namespace": "nodetool.text", - "node_type": "nodetool.text.Template", - "layout": "default", - "properties": [ + "default": {}, + "title": "Image", + "description": "The image to analyze" + }, { - "name": "string", + "name": "audio", "type": { - "type": "str" + "type": "audio" }, - "default": "", - "title": "String", - "description": "\n Examples:\n - text: \"Hello, {{ name }}!\"\n - text: \"Title: {{ title|truncate(20) }}\"\n - text: \"Name: {{ name|upper }}\"\n\n Available filters:\n - truncate(length): Truncates text to given length\n - upper: Converts text to uppercase\n - lower: Converts text to lowercase\n - title: Converts text to title case\n - trim: Removes whitespace from start/end\n - replace(old, new): Replaces substring\n - default(value): Sets default if value is undefined\n - first: Gets first character/item\n - last: Gets last character/item\n - length: Gets length of string/list\n - sort: Sorts list\n - join(delimiter): Joins list with delimiter\n" + "default": {}, + "title": "Audio", + "description": "The audio to analyze" }, { - "name": "values", + "name": "tools", "type": { - "type": "union", + "type": "list", "type_args": [ { - "type": "str" - }, - { - "type": "list" - }, - { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] - }, + "type": "tool_name" + } + ] + }, + "default": [], + "title": "Tools", + "description": "List of tools to use for execution" + }, + { + "name": "messages", + "type": { + "type": "list", + "type_args": [ { - "type": "object" + "type": "message" } ] }, - "default": {}, - "title": "Values", - "description": "\n The values to replace in the string.\n - If a string, it will be used as the format string.\n - If a list, it will be used as the format arguments.\n - If a dictionary, it will be used as the template variables.\n - If an object, it will be converted to a dictionary using the object's __dict__ method.\n " + "default": [], + "title": "Messages", + "description": "The messages for the LLM" + }, + { + "name": "max_tokens", + "type": { + "type": "int" + }, + "default": 4096, + "title": "Max Tokens", + "min": 1.0, + "max": 100000.0 + }, + { + "name": "context_window", + "type": { + "type": "int" + }, + "default": 4096, + "title": "Context Window (Ollama)", + "min": 1.0, + "max": 65536.0 } ], "outputs": [ @@ -9335,22 +8702,38 @@ "type": { "type": "str" }, - "name": "output" + "name": "text" + }, + { + "type": { + "type": "image" + }, + "name": "image" + }, + { + "type": { + "type": "audio" + }, + "name": "audio" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "string", - "values" + "prompt", + "model", + "messages", + "image", + "audio", + "tools" ], "is_dynamic": false }, { - "title": "Classifier", - "description": "Classify text into predefined or dynamic categories using LLM.\n classification, nlp, categorization\n\n Use cases:\n - Sentiment analysis\n - Topic classification\n - Intent detection\n - Content categorization", + "title": "Summarizer", + "description": "Generate concise summaries of text content using LLM providers.\n text, summarization, nlp, content\n\n Specialized for creating high-quality summaries:\n - Condensing long documents into key points\n - Creating executive summaries\n - Extracting main ideas from text\n - Maintaining factual accuracy while reducing length", "namespace": "nodetool.llms", - "node_type": "nodetool.llms.Classifier", + "node_type": "nodetool.llms.Summarizer", "layout": "default", "properties": [ { @@ -9358,9 +8741,9 @@ "type": { "type": "str" }, - "default": "\n You are a precise text classifier. Your task is to analyze the input text and assign confidence scores.\n ", + "default": "\n You are an expert summarizer. Your task is to create clear, accurate, and concise summaries using Markdown for structuring. \n Follow these guidelines:\n 1. Identify and include only the most important information.\n 2. Maintain factual accuracy - do not add or modify information.\n 3. Use clear, direct language.\n 4. Aim for approximately {self.max_words} words.\n ", "title": "System Prompt", - "description": "The system prompt for the classifier" + "description": "The system prompt for the summarizer" }, { "name": "model", @@ -9369,7 +8752,7 @@ }, "default": {}, "title": "Model", - "description": "Model to use for classification" + "description": "Model to use for summarization" }, { "name": "text", @@ -9378,21 +8761,18 @@ }, "default": "", "title": "Text", - "description": "Text to classify" + "description": "The text to summarize" }, { - "name": "categories", + "name": "max_words", "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] + "type": "int" }, - "default": [], - "title": "Categories", - "description": "List of possible categories. If empty, LLM will determine categories." + "default": 150, + "title": "Max Words", + "description": "Target maximum number of words for the summary", + "min": 50.0, + "max": 500.0 } ], "outputs": [ @@ -9407,79 +8787,123 @@ "recommended_models": [], "basic_fields": [ "text", - "categories", + "max_words", "model" ], "is_dynamic": false }, { - "title": "Extractor", - "description": "Extract structured data from text content using LLM providers.\n data-extraction, structured-data, nlp, parsing\n\n Specialized for extracting structured information:\n - Converting unstructured text into structured data\n - Identifying and extracting specific fields from documents\n - Parsing text according to predefined schemas\n - Creating structured records from natural language content", - "namespace": "nodetool.llms", - "node_type": "nodetool.llms.Extractor", + "title": "Audio Mixer", + "description": "Mix up to 5 audio tracks together with individual volume controls.\n audio, mix, volume, combine, blend, layer, add, overlay\n\n Use cases:\n - Mix multiple audio tracks into a single output\n - Create layered soundscapes\n - Combine music, voice, and sound effects\n - Adjust individual track volumes", + "namespace": "nodetool.audio", + "node_type": "nodetool.audio.AudioMixer", "layout": "default", "properties": [ { - "name": "system_prompt", + "name": "track1", + "type": { + "type": "audio" + }, + "default": {}, + "title": "Track1", + "description": "First audio track to mix." + }, + { + "name": "track2", + "type": { + "type": "audio" + }, + "default": {}, + "title": "Track2", + "description": "Second audio track to mix." + }, + { + "name": "track3", "type": { - "type": "str" + "type": "audio" }, - "default": "\n You are an expert data extractor. Your task is to extract specific information from text according to a defined schema.\n ", - "title": "System Prompt", - "description": "The system prompt for the data extractor" + "default": {}, + "title": "Track3", + "description": "Third audio track to mix." }, { - "name": "model", + "name": "track4", "type": { - "type": "language_model" + "type": "audio" }, "default": {}, - "title": "Model", - "description": "Model to use for data extraction" + "title": "Track4", + "description": "Fourth audio track to mix." }, { - "name": "text", + "name": "track5", "type": { - "type": "str" + "type": "audio" }, - "default": "", - "title": "Text", - "description": "The text to extract data from" + "default": {}, + "title": "Track5", + "description": "Fifth audio track to mix." }, { - "name": "extraction_prompt", + "name": "volume1", "type": { - "type": "str" + "type": "float" }, - "default": "Extract the following information from the text:", - "title": "Extraction Prompt", - "description": "Additional instructions for the extraction process" + "default": 1.0, + "title": "Volume1", + "description": "Volume for track 1. 1.0 is original volume.", + "min": 0.0, + "max": 2.0 }, { - "name": "columns", + "name": "volume2", "type": { - "type": "record_type" + "type": "float" }, - "default": {}, - "title": "Columns", - "description": "The fields to extract from the text" + "default": 1.0, + "title": "Volume2", + "description": "Volume for track 2. 1.0 is original volume.", + "min": 0.0, + "max": 2.0 }, { - "name": "max_tokens", + "name": "volume3", "type": { - "type": "int" + "type": "float" }, - "default": 4096, - "title": "Max Tokens", - "description": "The maximum number of tokens to generate.", - "min": 1.0, - "max": 100000.0 + "default": 1.0, + "title": "Volume3", + "description": "Volume for track 3. 1.0 is original volume.", + "min": 0.0, + "max": 2.0 + }, + { + "name": "volume4", + "type": { + "type": "float" + }, + "default": 1.0, + "title": "Volume4", + "description": "Volume for track 4. 1.0 is original volume.", + "min": 0.0, + "max": 2.0 + }, + { + "name": "volume5", + "type": { + "type": "float" + }, + "default": 1.0, + "title": "Volume5", + "description": "Volume for track 5. 1.0 is original volume.", + "min": 0.0, + "max": 2.0 } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "audio" }, "name": "output" } @@ -9487,208 +8911,213 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "extraction_prompt", - "columns", - "model" + "track1", + "track2", + "track3", + "track4", + "track5", + "volume1", + "volume2", + "volume3", + "volume4", + "volume5" ], "is_dynamic": false }, { - "title": "LLM", - "description": "Generate natural language responses using LLM providers.\n llm, text-generation, chatbot, question-answering\n\n Leverages LLM providers to:\n - Generate human-like text responses\n - Answer questions\n - Complete prompts\n - Engage in conversational interactions\n - Assist with writing and editing tasks\n - Perform text analysis and summarization", - "namespace": "nodetool.llms", - "node_type": "nodetool.llms.LLM", + "title": "Concat", + "description": "Concatenates two audio files together.\n audio, edit, join, +\n\n Use cases:\n - Combine multiple audio clips into a single file\n - Create longer audio tracks from shorter segments", + "namespace": "nodetool.audio", + "node_type": "nodetool.audio.Concat", "layout": "default", "properties": [ { - "name": "model", - "type": { - "type": "language_model" - }, - "default": {}, - "title": "Model", - "description": "Model to use for execution" - }, - { - "name": "system", - "type": { - "type": "str" - }, - "default": "You are a friendly assistant.", - "title": "System", - "description": "The system prompt for the LLM" - }, - { - "name": "prompt", - "type": { - "type": "str" - }, - "default": "", - "title": "Prompt", - "description": "The prompt for the LLM" - }, - { - "name": "image", + "name": "a", "type": { - "type": "image" + "type": "audio" }, "default": {}, - "title": "Image", - "description": "The image to analyze" + "title": "A", + "description": "The first audio file." }, { - "name": "audio", + "name": "b", "type": { "type": "audio" }, "default": {}, - "title": "Audio", - "description": "The audio to analyze" - }, - { - "name": "voice", - "type": { - "type": "enum", - "values": [ - "none", - "alloy", - "echo", - "fable", - "onyx", - "nova", - "shimmer" - ], - "type_name": "nodetool.nodes.nodetool.llms.Voice" - }, - "default": "none", - "title": "Voice", - "description": "The voice for the audio output (only for OpenAI)" - }, + "title": "B", + "description": "The second audio file." + } + ], + "outputs": [ { - "name": "tools", "type": { - "type": "list", - "type_args": [ - { - "type": "tool_name" - } - ] + "type": "audio" }, - "default": [], - "title": "Tools", - "description": "List of tools to use for execution" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "a", + "b" + ], + "is_dynamic": false + }, + { + "title": "Concat List", + "description": "Concatenates multiple audio files together in sequence.\n audio, edit, join, multiple, +\n\n Use cases:\n - Combine multiple audio clips into a single file\n - Create longer audio tracks from multiple segments\n - Chain multiple audio files in order", + "namespace": "nodetool.audio", + "node_type": "nodetool.audio.ConcatList", + "layout": "default", + "properties": [ { - "name": "messages", + "name": "audio_files", "type": { "type": "list", "type_args": [ { - "type": "message" + "type": "audio" } ] }, "default": [], - "title": "Messages", - "description": "The messages for the LLM" - }, + "title": "Audio Files", + "description": "List of audio files to concatenate in sequence." + } + ], + "outputs": [ { - "name": "max_tokens", "type": { - "type": "int" + "type": "audio" }, - "default": 4096, - "title": "Max Tokens", - "min": 1.0, - "max": 100000.0 - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "audio_files" + ], + "is_dynamic": false + }, + { + "title": "Convert To Array", + "description": "Converts an audio file to a Array for further processing.\n audio, conversion, tensor\n\n Use cases:\n - Prepare audio data for machine learning models\n - Enable signal processing operations on audio\n - Convert audio to a format suitable for spectral analysisr", + "namespace": "nodetool.audio", + "node_type": "nodetool.audio.ConvertToArray", + "layout": "default", + "properties": [ { - "name": "context_window", + "name": "audio", "type": { - "type": "int" + "type": "audio" }, - "default": 4096, - "title": "Context Window (Ollama)", - "min": 1.0, - "max": 65536.0 + "default": {}, + "title": "Audio", + "description": "The audio file to convert to a tensor." } ], "outputs": [ { "type": { - "type": "str" + "type": "np_array" }, - "name": "text" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "audio" + ], + "is_dynamic": false + }, + { + "title": "Create Silence", + "description": "Creates a silent audio file with a specified duration.\n audio, silence, empty\n\n Use cases:\n - Generate placeholder audio files\n - Create audio segments for padding or spacing\n - Add silence to the beginning or end of audio files", + "namespace": "nodetool.audio", + "node_type": "nodetool.audio.CreateSilence", + "layout": "default", + "properties": [ { + "name": "duration", "type": { - "type": "audio" + "type": "float" }, - "name": "audio" - }, + "default": 1.0, + "title": "Duration", + "description": "The duration of the silence in seconds.", + "min": 0.0 + } + ], + "outputs": [ { "type": { - "type": "image" + "type": "audio" }, - "name": "image" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "prompt", - "model", - "messages", - "image", - "audio", - "tools" + "duration" ], "is_dynamic": false }, { - "title": "LLM (Streaming)", - "description": "Generate natural language responses using LLM providers and streams output.\n llm, text-generation, chatbot, question-answering, streaming", - "namespace": "nodetool.llms", - "node_type": "nodetool.llms.LLMStreaming", + "title": "Fade In", + "description": "Applies a fade-in effect to the beginning of an audio file.\n audio, edit, transition\n\n Use cases:\n - Create smooth introductions to audio tracks\n - Gradually increase volume at the start of a clip", + "namespace": "nodetool.audio", + "node_type": "nodetool.audio.FadeIn", "layout": "default", "properties": [ { - "name": "model", + "name": "audio", "type": { - "type": "language_model" + "type": "audio" }, "default": {}, - "title": "Model", - "description": "Model to use for execution" - }, - { - "name": "system", - "type": { - "type": "str" - }, - "default": "You are a friendly assistant.", - "title": "System", - "description": "The system prompt for the LLM" + "title": "Audio", + "description": "The audio file to apply fade-in to." }, { - "name": "prompt", + "name": "duration", "type": { - "type": "str" + "type": "float" }, - "default": "", - "title": "Prompt", - "description": "The prompt for the LLM" - }, + "default": 1.0, + "title": "Duration", + "description": "Duration of the fade-in effect in seconds.", + "min": 0.0 + } + ], + "outputs": [ { - "name": "image", "type": { - "type": "image" + "type": "audio" }, - "default": {}, - "title": "Image", - "description": "The image to analyze" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "audio", + "duration" + ], + "is_dynamic": false + }, + { + "title": "Fade Out", + "description": "Applies a fade-out effect to the end of an audio file.\n audio, edit, transition\n\n Use cases:\n - Create smooth endings to audio tracks\n - Gradually decrease volume at the end of a clip", + "namespace": "nodetool.audio", + "node_type": "nodetool.audio.FadeOut", + "layout": "default", + "properties": [ { "name": "audio", "type": { @@ -9696,139 +9125,126 @@ }, "default": {}, "title": "Audio", - "description": "The audio to analyze" - }, - { - "name": "tools", - "type": { - "type": "list", - "type_args": [ - { - "type": "tool_name" - } - ] - }, - "default": [], - "title": "Tools", - "description": "List of tools to use for execution" + "description": "The audio file to apply fade-out to." }, { - "name": "messages", + "name": "duration", "type": { - "type": "list", - "type_args": [ - { - "type": "message" - } - ] + "type": "float" }, - "default": [], - "title": "Messages", - "description": "The messages for the LLM" - }, + "default": 1.0, + "title": "Duration", + "description": "Duration of the fade-out effect in seconds.", + "min": 0.0 + } + ], + "outputs": [ { - "name": "max_tokens", "type": { - "type": "int" + "type": "audio" }, - "default": 4096, - "title": "Max Tokens", - "min": 1.0, - "max": 100000.0 - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "audio", + "duration" + ], + "is_dynamic": false + }, + { + "title": "Load Audio Assets", + "description": "Load audio files from an asset folder.\n load, audio, file, import", + "namespace": "nodetool.audio", + "node_type": "nodetool.audio.LoadAudioAssets", + "layout": "default", + "properties": [ { - "name": "context_window", + "name": "folder", "type": { - "type": "int" + "type": "folder" }, - "default": 4096, - "title": "Context Window (Ollama)", - "min": 1.0, - "max": 65536.0 + "default": {}, + "title": "Folder", + "description": "The asset folder to load the audio files from." } ], "outputs": [ { "type": { - "type": "str" - }, - "name": "text" - }, - { - "type": { - "type": "image" + "type": "audio" }, - "name": "image" + "name": "audio" }, { "type": { - "type": "audio" + "type": "str" }, - "name": "audio" + "name": "name" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "prompt", - "model", - "messages", - "image", - "audio", - "tools" + "folder" ], "is_dynamic": false }, { - "title": "Summarizer", - "description": "Generate concise summaries of text content using LLM providers.\n text, summarization, nlp, content\n\n Specialized for creating high-quality summaries:\n - Condensing long documents into key points\n - Creating executive summaries\n - Extracting main ideas from text\n - Maintaining factual accuracy while reducing length", - "namespace": "nodetool.llms", - "node_type": "nodetool.llms.Summarizer", + "title": "Mono To Stereo", + "description": "Converts a mono audio signal to stereo.\n audio, convert, channels\n\n Use cases:\n - Expand mono recordings for stereo playback systems\n - Prepare audio for further stereo processing", + "namespace": "nodetool.audio", + "node_type": "nodetool.audio.MonoToStereo", "layout": "default", "properties": [ { - "name": "system_prompt", - "type": { - "type": "str" - }, - "default": "\n You are an expert summarizer. Your task is to create clear, accurate, and concise summaries using Markdown for structuring. \n Follow these guidelines:\n 1. Identify and include only the most important information.\n 2. Maintain factual accuracy - do not add or modify information.\n 3. Use clear, direct language.\n 4. Aim for approximately {self.max_words} words.\n ", - "title": "System Prompt", - "description": "The system prompt for the summarizer" - }, - { - "name": "model", + "name": "audio", "type": { - "type": "language_model" + "type": "audio" }, "default": {}, - "title": "Model", - "description": "Model to use for summarization" - }, + "title": "Audio", + "description": "The mono audio file to convert." + } + ], + "outputs": [ { - "name": "text", "type": { - "type": "str" + "type": "audio" }, - "default": "", - "title": "Text", - "description": "The text to summarize" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "audio" + ], + "is_dynamic": false + }, + { + "title": "Normalize", + "description": "Normalizes the volume of an audio file.\n audio, fix, dynamics, volume\n\n Use cases:\n - Ensure consistent volume across multiple audio files\n - Adjust overall volume level before further processing", + "namespace": "nodetool.audio", + "node_type": "nodetool.audio.Normalize", + "layout": "default", + "properties": [ { - "name": "max_words", + "name": "audio", "type": { - "type": "int" + "type": "audio" }, - "default": 150, - "title": "Max Words", - "description": "Target maximum number of words for the summary", - "min": 50.0, - "max": 500.0 + "default": {}, + "title": "Audio", + "description": "The audio file to normalize." } ], "outputs": [ { "type": { - "type": "str" + "type": "audio" }, "name": "output" } @@ -9836,118 +9252,122 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "max_words", - "model" + "audio" ], "is_dynamic": false }, { - "title": "Audio Mixer", - "description": "Mix up to 5 audio tracks together with individual volume controls.\n audio, mix, volume, combine, blend, layer, add, overlay\n\n Use cases:\n - Mix multiple audio tracks into a single output\n - Create layered soundscapes\n - Combine music, voice, and sound effects\n - Adjust individual track volumes", + "title": "Overlay Audio", + "description": "Overlays two audio files together.\n audio, edit, transform\n\n Use cases:\n - Mix background music with voice recording\n - Layer sound effects over an existing audio track", "namespace": "nodetool.audio", - "node_type": "nodetool.audio.AudioMixer", + "node_type": "nodetool.audio.OverlayAudio", "layout": "default", "properties": [ { - "name": "track1", - "type": { - "type": "audio" - }, - "default": {}, - "title": "Track1", - "description": "First audio track to mix." - }, - { - "name": "track2", + "name": "a", "type": { "type": "audio" }, "default": {}, - "title": "Track2", - "description": "Second audio track to mix." + "title": "A", + "description": "The first audio file." }, { - "name": "track3", + "name": "b", "type": { "type": "audio" }, "default": {}, - "title": "Track3", - "description": "Third audio track to mix." - }, + "title": "B", + "description": "The second audio file." + } + ], + "outputs": [ { - "name": "track4", "type": { "type": "audio" }, - "default": {}, - "title": "Track4", - "description": "Fourth audio track to mix." - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "a", + "b" + ], + "is_dynamic": false + }, + { + "title": "Remove Silence", + "description": "Removes or shortens silence in an audio file with smooth transitions.\n audio, edit, clean\n\n Use cases:\n - Trim silent parts from beginning/end of recordings\n - Remove or shorten long pauses between speech segments\n - Apply crossfade for smooth transitions", + "namespace": "nodetool.audio", + "node_type": "nodetool.audio.RemoveSilence", + "layout": "default", + "properties": [ { - "name": "track5", + "name": "audio", "type": { "type": "audio" }, "default": {}, - "title": "Track5", - "description": "Fifth audio track to mix." + "title": "Audio", + "description": "The audio file to process." }, { - "name": "volume1", + "name": "min_length", "type": { - "type": "float" + "type": "int" }, - "default": 1.0, - "title": "Volume1", - "description": "Volume for track 1. 1.0 is original volume.", + "default": 200, + "title": "Min Length", + "description": "Minimum length of silence to be processed (in milliseconds).", "min": 0.0, - "max": 2.0 + "max": 10000.0 }, { - "name": "volume2", + "name": "threshold", "type": { - "type": "float" + "type": "int" }, - "default": 1.0, - "title": "Volume2", - "description": "Volume for track 2. 1.0 is original volume.", - "min": 0.0, - "max": 2.0 + "default": -40, + "title": "Threshold", + "description": "Silence threshold in dB (relative to full scale). Higher values detect more silence.", + "min": -60.0, + "max": 0.0 }, { - "name": "volume3", + "name": "reduction_factor", "type": { "type": "float" }, "default": 1.0, - "title": "Volume3", - "description": "Volume for track 3. 1.0 is original volume.", + "title": "Reduction Factor", + "description": "Factor to reduce silent parts (0.0 to 1.0). 0.0 keeps silence as is, 1.0 removes it completely.", "min": 0.0, - "max": 2.0 + "max": 1.0 }, { - "name": "volume4", + "name": "crossfade", "type": { - "type": "float" + "type": "int" }, - "default": 1.0, - "title": "Volume4", - "description": "Volume for track 4. 1.0 is original volume.", + "default": 10, + "title": "Crossfade", + "description": "Duration of crossfade in milliseconds to apply between segments for smooth transitions.", "min": 0.0, - "max": 2.0 + "max": 50.0 }, { - "name": "volume5", + "name": "min_silence_between_parts", "type": { - "type": "float" + "type": "int" }, - "default": 1.0, - "title": "Volume5", - "description": "Volume for track 5. 1.0 is original volume.", + "default": 100, + "title": "Min Silence Between Parts", + "description": "Minimum silence duration in milliseconds to maintain between non-silent segments", "min": 0.0, - "max": 2.0 + "max": 500.0 } ], "outputs": [ @@ -9961,43 +9381,74 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "track1", - "track2", - "track3", - "track4", - "track5", - "volume1", - "volume2", - "volume3", - "volume4", - "volume5" + "audio", + "min_length", + "threshold", + "reduction_factor", + "crossfade", + "min_silence_between_parts" ], "is_dynamic": false }, { - "title": "Concat", - "description": "Concatenates two audio files together.\n audio, edit, join, +\n\n Use cases:\n - Combine multiple audio clips into a single file\n - Create longer audio tracks from shorter segments", + "title": "Repeat", + "description": "Loops an audio file a specified number of times.\n audio, edit, repeat\n\n Use cases:\n - Create repeating background sounds or music\n - Extend short audio clips to fill longer durations\n - Generate rhythmic patterns from short samples", "namespace": "nodetool.audio", - "node_type": "nodetool.audio.Concat", + "node_type": "nodetool.audio.Repeat", "layout": "default", "properties": [ { - "name": "a", + "name": "audio", "type": { "type": "audio" }, "default": {}, - "title": "A", - "description": "The first audio file." + "title": "Audio", + "description": "The audio file to loop." }, { - "name": "b", + "name": "loops", + "type": { + "type": "int" + }, + "default": 2, + "title": "Loops", + "description": "Number of times to loop the audio. Minimum 1 (plays once), maximum 100.", + "min": 1.0, + "max": 100.0 + } + ], + "outputs": [ + { + "type": { + "type": "audio" + }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "audio", + "loops" + ], + "is_dynamic": false + }, + { + "title": "Reverse", + "description": "Reverses an audio file.\n audio, edit, transform\n\n Use cases:\n - Create reverse audio effects\n - Generate backwards speech or music", + "namespace": "nodetool.audio", + "node_type": "nodetool.audio.Reverse", + "layout": "default", + "properties": [ + { + "name": "audio", "type": { "type": "audio" }, "default": {}, - "title": "B", - "description": "The second audio file." + "title": "Audio", + "description": "The audio file to reverse." } ], "outputs": [ @@ -10011,31 +9462,42 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "a", - "b" + "audio" ], "is_dynamic": false }, { - "title": "Concat List", - "description": "Concatenates multiple audio files together in sequence.\n audio, edit, join, multiple, +\n\n Use cases:\n - Combine multiple audio clips into a single file\n - Create longer audio tracks from multiple segments\n - Chain multiple audio files in order", + "title": "Save Audio Asset", + "description": "Save an audio file to a specified asset folder.\n audio, folder, name\n\n Use cases:\n - Save generated audio files with timestamps\n - Organize outputs into specific folders\n - Create backups of generated audio", "namespace": "nodetool.audio", - "node_type": "nodetool.audio.ConcatList", + "node_type": "nodetool.audio.SaveAudio", "layout": "default", "properties": [ { - "name": "audio_files", + "name": "audio", "type": { - "type": "list", - "type_args": [ - { - "type": "audio" - } - ] + "type": "audio" }, - "default": [], - "title": "Audio Files", - "description": "List of audio files to concatenate in sequence." + "default": {}, + "title": "Audio" + }, + { + "name": "folder", + "type": { + "type": "folder" + }, + "default": {}, + "title": "Folder", + "description": "The asset folder to save the audio file to. " + }, + { + "name": "name", + "type": { + "type": "str" + }, + "default": "%Y-%m-%d-%H-%M-%S.opus", + "title": "Name", + "description": "\n The name of the audio file.\n You can use time and date variables to create unique names:\n %Y - Year\n %m - Month\n %d - Day\n %H - Hour\n %M - Minute\n %S - Second\n " } ], "outputs": [ @@ -10049,15 +9511,17 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "audio_files" + "audio", + "folder", + "name" ], "is_dynamic": false }, { - "title": "Convert To Array", - "description": "Converts an audio file to a Array for further processing.\n audio, conversion, tensor\n\n Use cases:\n - Prepare audio data for machine learning models\n - Enable signal processing operations on audio\n - Convert audio to a format suitable for spectral analysisr", + "title": "Slice Audio", + "description": "Extracts a section of an audio file.\n audio, edit, trim\n\n Use cases:\n - Cut out a specific clip from a longer audio file\n - Remove unwanted portions from beginning or end", "namespace": "nodetool.audio", - "node_type": "nodetool.audio.ConvertToArray", + "node_type": "nodetool.audio.SliceAudio", "layout": "default", "properties": [ { @@ -10067,13 +9531,33 @@ }, "default": {}, "title": "Audio", - "description": "The audio file to convert to a tensor." + "description": "The audio file." + }, + { + "name": "start", + "type": { + "type": "float" + }, + "default": 0.0, + "title": "Start", + "description": "The start time in seconds.", + "min": 0.0 + }, + { + "name": "end", + "type": { + "type": "float" + }, + "default": 1.0, + "title": "End", + "description": "The end time in seconds.", + "min": 0.0 } ], "outputs": [ { "type": { - "type": "np_array" + "type": "audio" }, "name": "output" } @@ -10081,26 +9565,36 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "audio" + "audio", + "start", + "end" ], "is_dynamic": false }, { - "title": "Create Silence", - "description": "Creates a silent audio file with a specified duration.\n audio, silence, empty\n\n Use cases:\n - Generate placeholder audio files\n - Create audio segments for padding or spacing\n - Add silence to the beginning or end of audio files", + "title": "Stereo To Mono", + "description": "Converts a stereo audio signal to mono.\n audio, convert, channels\n\n Use cases:\n - Reduce file size for mono-only applications\n - Simplify audio for certain processing tasks", "namespace": "nodetool.audio", - "node_type": "nodetool.audio.CreateSilence", + "node_type": "nodetool.audio.StereoToMono", "layout": "default", "properties": [ { - "name": "duration", + "name": "audio", "type": { - "type": "float" + "type": "audio" }, - "default": 1.0, - "title": "Duration", - "description": "The duration of the silence in seconds.", - "min": 0.0 + "default": {}, + "title": "Audio", + "description": "The stereo audio file to convert." + }, + { + "name": "method", + "type": { + "type": "str" + }, + "default": "average", + "title": "Method", + "description": "Method to use for conversion: 'average', 'left', or 'right'." } ], "outputs": [ @@ -10114,15 +9608,16 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "duration" + "audio", + "method" ], "is_dynamic": false }, { - "title": "Fade In", - "description": "Applies a fade-in effect to the beginning of an audio file.\n audio, edit, transition\n\n Use cases:\n - Create smooth introductions to audio tracks\n - Gradually increase volume at the start of a clip", + "title": "Trim", + "description": "Trim an audio file to a specified duration.\n audio, trim, cut\n\n Use cases:\n - Remove silence from the beginning or end of audio files\n - Extract specific segments from audio files\n - Prepare audio data for machine learning models", "namespace": "nodetool.audio", - "node_type": "nodetool.audio.FadeIn", + "node_type": "nodetool.audio.Trim", "layout": "default", "properties": [ { @@ -10132,16 +9627,26 @@ }, "default": {}, "title": "Audio", - "description": "The audio file to apply fade-in to." + "description": "The audio file to trim." }, { - "name": "duration", + "name": "start", "type": { "type": "float" }, - "default": 1.0, - "title": "Duration", - "description": "Duration of the fade-in effect in seconds.", + "default": 0.0, + "title": "Start", + "description": "The start time of the trimmed audio in seconds.", + "min": 0.0 + }, + { + "name": "end", + "type": { + "type": "float" + }, + "default": 0.0, + "title": "End", + "description": "The end time of the trimmed audio in seconds.", "min": 0.0 } ], @@ -10157,41 +9662,65 @@ "recommended_models": [], "basic_fields": [ "audio", - "duration" + "start", + "end" ], "is_dynamic": false }, { - "title": "Fade Out", - "description": "Applies a fade-out effect to the end of an audio file.\n audio, edit, transition\n\n Use cases:\n - Create smooth endings to audio tracks\n - Gradually decrease volume at the end of a clip", - "namespace": "nodetool.audio", - "node_type": "nodetool.audio.FadeOut", + "title": "Add Time Delta", + "description": "Add or subtract time from a datetime.\n datetime, add, subtract\n\n Use cases:\n - Calculate future/past dates\n - Generate date ranges", + "namespace": "nodetool.date", + "node_type": "nodetool.date.AddTimeDelta", "layout": "default", "properties": [ { - "name": "audio", + "name": "input_datetime", "type": { - "type": "audio" + "type": "datetime" }, "default": {}, - "title": "Audio", - "description": "The audio file to apply fade-out to." + "title": "Input Datetime", + "description": "Starting datetime" }, { - "name": "duration", + "name": "days", "type": { - "type": "float" + "type": "int" }, - "default": 1.0, - "title": "Duration", - "description": "Duration of the fade-out effect in seconds.", - "min": 0.0 + "default": 0, + "title": "Days", + "description": "Number of days to add (negative to subtract)", + "min": -3650.0, + "max": 3650.0 + }, + { + "name": "hours", + "type": { + "type": "int" + }, + "default": 0, + "title": "Hours", + "description": "Number of hours to add (negative to subtract)", + "min": -24.0, + "max": 24.0 + }, + { + "name": "minutes", + "type": { + "type": "int" + }, + "default": 0, + "title": "Minutes", + "description": "Number of minutes to add (negative to subtract)", + "min": -60.0, + "max": 60.0 } ], "outputs": [ { "type": { - "type": "audio" + "type": "datetime" }, "name": "output" } @@ -10199,70 +9728,123 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "audio", - "duration" + "input_datetime", + "days", + "hours", + "minutes" ], "is_dynamic": false }, { - "title": "Load Audio Assets", - "description": "Load audio files from an asset folder.\n load, audio, file, import", - "namespace": "nodetool.audio", - "node_type": "nodetool.audio.LoadAudioAssets", + "title": "Date Difference", + "description": "Calculate the difference between two dates.\n datetime, difference, duration\n\n Use cases:\n - Calculate time periods\n - Measure durations", + "namespace": "nodetool.date", + "node_type": "nodetool.date.DateDifference", "layout": "default", "properties": [ { - "name": "folder", + "name": "start_date", "type": { - "type": "folder" + "type": "datetime" }, "default": {}, - "title": "Folder", - "description": "The asset folder to load the audio files from." + "title": "Start Date", + "description": "Start datetime" + }, + { + "name": "end_date", + "type": { + "type": "datetime" + }, + "default": {}, + "title": "End Date", + "description": "End datetime" } ], "outputs": [ { "type": { - "type": "audio" + "type": "int" }, - "name": "audio" + "name": "total_seconds" }, { "type": { - "type": "str" + "type": "int" }, - "name": "name" + "name": "days" + }, + { + "type": { + "type": "int" + }, + "name": "hours" + }, + { + "type": { + "type": "int" + }, + "name": "minutes" + }, + { + "type": { + "type": "int" + }, + "name": "seconds" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "folder" + "start_date", + "end_date" ], "is_dynamic": false }, { - "title": "Mono To Stereo", - "description": "Converts a mono audio signal to stereo.\n audio, convert, channels\n\n Use cases:\n - Expand mono recordings for stereo playback systems\n - Prepare audio for further stereo processing", - "namespace": "nodetool.audio", - "node_type": "nodetool.audio.MonoToStereo", + "title": "Date Range", + "description": "Generate a list of dates between start and end dates.\n datetime, range, list\n\n Use cases:\n - Generate date sequences\n - Create date-based iterations", + "namespace": "nodetool.date", + "node_type": "nodetool.date.DateRange", "layout": "default", "properties": [ { - "name": "audio", + "name": "start_date", "type": { - "type": "audio" + "type": "datetime" }, "default": {}, - "title": "Audio", - "description": "The mono audio file to convert." + "title": "Start Date", + "description": "Start date of the range" + }, + { + "name": "end_date", + "type": { + "type": "datetime" + }, + "default": {}, + "title": "End Date", + "description": "End date of the range" + }, + { + "name": "step_days", + "type": { + "type": "int" + }, + "default": 1, + "title": "Step Days", + "description": "Number of days between each date" } ], "outputs": [ { "type": { - "type": "audio" + "type": "list", + "type_args": [ + { + "type": "datetime" + } + ] }, "name": "output" } @@ -10270,31 +9852,33 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "audio" + "start_date", + "end_date", + "step_days" ], "is_dynamic": false }, { - "title": "Normalize", - "description": "Normalizes the volume of an audio file.\n audio, fix, dynamics, volume\n\n Use cases:\n - Ensure consistent volume across multiple audio files\n - Adjust overall volume level before further processing", - "namespace": "nodetool.audio", - "node_type": "nodetool.audio.Normalize", + "title": "Date To Datetime", + "description": "Convert a Date object to a Datetime object.\n date, datetime, convert", + "namespace": "nodetool.date", + "node_type": "nodetool.date.DateToDatetime", "layout": "default", "properties": [ { - "name": "audio", + "name": "input_date", "type": { - "type": "audio" + "type": "date" }, "default": {}, - "title": "Audio", - "description": "The audio file to normalize." + "title": "Input Date", + "description": "Date to convert" } ], "outputs": [ { "type": { - "type": "audio" + "type": "datetime" }, "name": "output" } @@ -10302,40 +9886,31 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "audio" + "input_date" ], "is_dynamic": false }, { - "title": "Overlay Audio", - "description": "Overlays two audio files together.\n audio, edit, transform\n\n Use cases:\n - Mix background music with voice recording\n - Layer sound effects over an existing audio track", - "namespace": "nodetool.audio", - "node_type": "nodetool.audio.OverlayAudio", + "title": "Datetime To Date", + "description": "Convert a Datetime object to a Date object.\n date, datetime, convert", + "namespace": "nodetool.date", + "node_type": "nodetool.date.DatetimeToDate", "layout": "default", "properties": [ { - "name": "a", - "type": { - "type": "audio" - }, - "default": {}, - "title": "A", - "description": "The first audio file." - }, - { - "name": "b", + "name": "input_datetime", "type": { - "type": "audio" + "type": "datetime" }, "default": {}, - "title": "B", - "description": "The second audio file." + "title": "Input Datetime", + "description": "Datetime to convert" } ], "outputs": [ { "type": { - "type": "audio" + "type": "date" }, "name": "output" } @@ -10343,87 +9918,32 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "a", - "b" + "input_datetime" ], "is_dynamic": false }, { - "title": "Remove Silence", - "description": "Removes or shortens silence in an audio file with smooth transitions.\n audio, edit, clean\n\n Use cases:\n - Trim silent parts from beginning/end of recordings\n - Remove or shorten long pauses between speech segments\n - Apply crossfade for smooth transitions", - "namespace": "nodetool.audio", - "node_type": "nodetool.audio.RemoveSilence", + "title": "Days Ago", + "description": "Get datetime from specified days ago.\n datetime, past, days", + "namespace": "nodetool.date", + "node_type": "nodetool.date.DaysAgo", "layout": "default", "properties": [ { - "name": "audio", - "type": { - "type": "audio" - }, - "default": {}, - "title": "Audio", - "description": "The audio file to process." - }, - { - "name": "min_length", - "type": { - "type": "int" - }, - "default": 200, - "title": "Min Length", - "description": "Minimum length of silence to be processed (in milliseconds).", - "min": 0.0, - "max": 10000.0 - }, - { - "name": "threshold", - "type": { - "type": "int" - }, - "default": -40, - "title": "Threshold", - "description": "Silence threshold in dB (relative to full scale). Higher values detect more silence.", - "min": -60.0, - "max": 0.0 - }, - { - "name": "reduction_factor", - "type": { - "type": "float" - }, - "default": 1.0, - "title": "Reduction Factor", - "description": "Factor to reduce silent parts (0.0 to 1.0). 0.0 keeps silence as is, 1.0 removes it completely.", - "min": 0.0, - "max": 1.0 - }, - { - "name": "crossfade", - "type": { - "type": "int" - }, - "default": 10, - "title": "Crossfade", - "description": "Duration of crossfade in milliseconds to apply between segments for smooth transitions.", - "min": 0.0, - "max": 50.0 - }, - { - "name": "min_silence_between_parts", + "name": "days", "type": { "type": "int" }, - "default": 100, - "title": "Min Silence Between Parts", - "description": "Minimum silence duration in milliseconds to maintain between non-silent segments", - "min": 0.0, - "max": 500.0 + "default": 1, + "title": "Days", + "description": "Number of days ago", + "min": 0.0 } ], "outputs": [ { "type": { - "type": "audio" + "type": "datetime" }, "name": "output" } @@ -10431,47 +9951,32 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "audio", - "min_length", - "threshold", - "reduction_factor", - "crossfade", - "min_silence_between_parts" + "days" ], "is_dynamic": false }, { - "title": "Repeat", - "description": "Loops an audio file a specified number of times.\n audio, edit, repeat\n\n Use cases:\n - Create repeating background sounds or music\n - Extend short audio clips to fill longer durations\n - Generate rhythmic patterns from short samples", - "namespace": "nodetool.audio", - "node_type": "nodetool.audio.Repeat", + "title": "Days From Now", + "description": "Get datetime specified days in the future.\n datetime, future, days", + "namespace": "nodetool.date", + "node_type": "nodetool.date.DaysFromNow", "layout": "default", "properties": [ { - "name": "audio", - "type": { - "type": "audio" - }, - "default": {}, - "title": "Audio", - "description": "The audio file to loop." - }, - { - "name": "loops", + "name": "days", "type": { "type": "int" }, - "default": 2, - "title": "Loops", - "description": "Number of times to loop the audio. Minimum 1 (plays once), maximum 100.", - "min": 1.0, - "max": 100.0 + "default": 1, + "title": "Days", + "description": "Number of days in the future", + "min": 0.0 } ], "outputs": [ { "type": { - "type": "audio" + "type": "datetime" }, "name": "output" } @@ -10479,32 +9984,31 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "audio", - "loops" + "days" ], "is_dynamic": false }, { - "title": "Reverse", - "description": "Reverses an audio file.\n audio, edit, transform\n\n Use cases:\n - Create reverse audio effects\n - Generate backwards speech or music", - "namespace": "nodetool.audio", - "node_type": "nodetool.audio.Reverse", + "title": "End Of Day", + "description": "Get the datetime set to the end of the day (23:59:59).\n datetime, day, end", + "namespace": "nodetool.date", + "node_type": "nodetool.date.EndOfDay", "layout": "default", "properties": [ { - "name": "audio", + "name": "input_datetime", "type": { - "type": "audio" + "type": "datetime" }, "default": {}, - "title": "Audio", - "description": "The audio file to reverse." + "title": "Input Datetime", + "description": "Input datetime" } ], "outputs": [ { "type": { - "type": "audio" + "type": "datetime" }, "name": "output" } @@ -10512,48 +10016,31 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "audio" + "input_datetime" ], "is_dynamic": false }, { - "title": "Save Audio Asset", - "description": "Save an audio file to a specified asset folder.\n audio, folder, name\n\n Use cases:\n - Save generated audio files with timestamps\n - Organize outputs into specific folders\n - Create backups of generated audio", - "namespace": "nodetool.audio", - "node_type": "nodetool.audio.SaveAudio", + "title": "End Of Month", + "description": "Get the datetime set to the last day of the month.\n datetime, month, end", + "namespace": "nodetool.date", + "node_type": "nodetool.date.EndOfMonth", "layout": "default", "properties": [ { - "name": "audio", - "type": { - "type": "audio" - }, - "default": {}, - "title": "Audio" - }, - { - "name": "folder", + "name": "input_datetime", "type": { - "type": "folder" + "type": "datetime" }, "default": {}, - "title": "Folder", - "description": "The asset folder to save the audio file to. " - }, - { - "name": "name", - "type": { - "type": "str" - }, - "default": "%Y-%m-%d-%H-%M-%S.opus", - "title": "Name", - "description": "\n The name of the audio file.\n You can use time and date variables to create unique names:\n %Y - Year\n %m - Month\n %d - Day\n %H - Hour\n %M - Minute\n %S - Second\n " + "title": "Input Datetime", + "description": "Input datetime" } ], "outputs": [ { "type": { - "type": "audio" + "type": "datetime" }, "name": "output" } @@ -10561,53 +10048,40 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "audio", - "folder", - "name" + "input_datetime" ], "is_dynamic": false }, { - "title": "Slice Audio", - "description": "Extracts a section of an audio file.\n audio, edit, trim\n\n Use cases:\n - Cut out a specific clip from a longer audio file\n - Remove unwanted portions from beginning or end", - "namespace": "nodetool.audio", - "node_type": "nodetool.audio.SliceAudio", + "title": "End Of Week", + "description": "Get the datetime set to the last day of the week (Sunday by default).\n datetime, week, end", + "namespace": "nodetool.date", + "node_type": "nodetool.date.EndOfWeek", "layout": "default", "properties": [ { - "name": "audio", + "name": "input_datetime", "type": { - "type": "audio" + "type": "datetime" }, "default": {}, - "title": "Audio", - "description": "The audio file." - }, - { - "name": "start", - "type": { - "type": "float" - }, - "default": 0.0, - "title": "Start", - "description": "The start time in seconds.", - "min": 0.0 + "title": "Input Datetime", + "description": "Input datetime" }, { - "name": "end", + "name": "start_monday", "type": { - "type": "float" + "type": "bool" }, - "default": 1.0, - "title": "End", - "description": "The end time in seconds.", - "min": 0.0 + "default": true, + "title": "Start Monday", + "description": "Consider Monday as start of week (False for Sunday)" } ], "outputs": [ { "type": { - "type": "audio" + "type": "datetime" }, "name": "output" } @@ -10615,42 +10089,32 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "audio", - "start", - "end" + "input_datetime", + "start_monday" ], "is_dynamic": false }, { - "title": "Stereo To Mono", - "description": "Converts a stereo audio signal to mono.\n audio, convert, channels\n\n Use cases:\n - Reduce file size for mono-only applications\n - Simplify audio for certain processing tasks", - "namespace": "nodetool.audio", - "node_type": "nodetool.audio.StereoToMono", + "title": "End Of Year", + "description": "Get the datetime set to the last day of the year.\n datetime, year, end", + "namespace": "nodetool.date", + "node_type": "nodetool.date.EndOfYear", "layout": "default", "properties": [ { - "name": "audio", + "name": "input_datetime", "type": { - "type": "audio" + "type": "datetime" }, "default": {}, - "title": "Audio", - "description": "The stereo audio file to convert." - }, - { - "name": "method", - "type": { - "type": "str" - }, - "default": "average", - "title": "Method", - "description": "Method to use for conversion: 'average', 'left', or 'right'." + "title": "Input Datetime", + "description": "Input datetime" } ], "outputs": [ { "type": { - "type": "audio" + "type": "datetime" }, "name": "output" } @@ -10658,61 +10122,52 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "audio", - "method" + "input_datetime" ], "is_dynamic": false }, { - "title": "Tone", - "description": "Generates a constant tone signal.\n audio, generate, sound\n\n Use cases:\n - Create test tones for audio equipment calibration\n - Produce reference pitches for musical applications", - "namespace": "nodetool.audio", - "node_type": "nodetool.audio.Tone", + "title": "Format Date Time", + "description": "Convert a datetime object to a formatted string.\n datetime, format, convert\n\n Use cases:\n - Standardize date formats\n - Prepare dates for different systems", + "namespace": "nodetool.date", + "node_type": "nodetool.date.FormatDateTime", "layout": "default", "properties": [ { - "name": "frequency", - "type": { - "type": "float" - }, - "default": 440.0, - "title": "Frequency", - "description": "Frequency of the tone in Hertz." - }, - { - "name": "sampling_rate", - "type": { - "type": "int" - }, - "default": 44100, - "title": "Sampling Rate", - "description": "Sampling rate.", - "min": 0.0, - "max": 44100.0 - }, - { - "name": "duration", + "name": "input_datetime", "type": { - "type": "float" + "type": "datetime" }, - "default": 1.0, - "title": "Duration", - "description": "Duration of the tone in seconds." + "default": {}, + "title": "Input Datetime", + "description": "Datetime object to format" }, { - "name": "phi", + "name": "output_format", "type": { - "type": "float" + "type": "enum", + "values": [ + "%Y-%m-%d", + "%m/%d/%Y", + "%d/%m/%Y", + "%B %d, %Y", + "%Y%m%d", + "%Y%m%d_%H%M%S", + "%Y-%m-%dT%H:%M:%S", + "%Y-%m-%dT%H:%M:%S%z", + "%Y-%m-%dT%H:%M:%S%z" + ], + "type_name": "nodetool.nodes.nodetool.date.DateFormat" }, - "default": 0.0, - "title": "Phi", - "description": "Initial phase of the waveform in radians." + "default": "%B %d, %Y", + "title": "Output Format", + "description": "Desired output format" } ], "outputs": [ { "type": { - "type": "np_array" + "type": "str" }, "name": "output" } @@ -10720,105 +10175,79 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "frequency", - "sampling_rate", - "duration", - "phi" + "input_datetime", + "output_format" ], "is_dynamic": false }, { - "title": "Trim", - "description": "Trim an audio file to a specified duration.\n audio, trim, cut\n\n Use cases:\n - Remove silence from the beginning or end of audio files\n - Extract specific segments from audio files\n - Prepare audio data for machine learning models", - "namespace": "nodetool.audio", - "node_type": "nodetool.audio.Trim", + "title": "Get Quarter", + "description": "Get the quarter number and start/end dates for a given datetime.\n datetime, quarter, period\n\n Use cases:\n - Financial reporting periods\n - Quarterly analytics", + "namespace": "nodetool.date", + "node_type": "nodetool.date.GetQuarter", "layout": "default", "properties": [ { - "name": "audio", + "name": "input_datetime", "type": { - "type": "audio" + "type": "datetime" }, "default": {}, - "title": "Audio", - "description": "The audio file to trim." - }, + "title": "Input Datetime", + "description": "Input datetime" + } + ], + "outputs": [ { - "name": "start", "type": { - "type": "float" + "type": "int" }, - "default": 0.0, - "title": "Start", - "description": "The start time of the trimmed audio in seconds.", - "min": 0.0 + "name": "quarter" }, { - "name": "end", "type": { - "type": "float" + "type": "datetime" }, - "default": 0.0, - "title": "End", - "description": "The end time of the trimmed audio in seconds.", - "min": 0.0 - } - ], - "outputs": [ + "name": "quarter_start" + }, { "type": { - "type": "audio" + "type": "datetime" }, - "name": "output" + "name": "quarter_end" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "audio", - "start", - "end" + "input_datetime" ], "is_dynamic": false }, { - "title": "Add", - "description": "Performs addition on two inputs.\n math, plus, add, addition, sum, +", - "namespace": "nodetool.math", - "node_type": "nodetool.math.Add", - "layout": "small", + "title": "Get Weekday", + "description": "Get the weekday name or number from a datetime.\n datetime, weekday, name\n\n Use cases:\n - Get day names for scheduling\n - Filter events by weekday", + "namespace": "nodetool.date", + "node_type": "nodetool.date.GetWeekday", + "layout": "default", "properties": [ { - "name": "a", + "name": "input_datetime", "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] + "type": "datetime" }, - "default": 0.0, - "title": "A" + "default": {}, + "title": "Input Datetime", + "description": "Input datetime" }, { - "name": "b", + "name": "as_name", "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] + "type": "bool" }, - "default": 0.0, - "title": "B" + "default": true, + "title": "As Name", + "description": "Return weekday name instead of number (0-6)" } ], "outputs": [ @@ -10827,10 +10256,10 @@ "type": "union", "type_args": [ { - "type": "int" + "type": "str" }, { - "type": "float" + "type": "int" } ] }, @@ -10840,55 +10269,33 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "a", - "b" + "input_datetime", + "as_name" ], "is_dynamic": false }, { - "title": "Binary Operation", - "description": "Common base for binary math operations.", - "namespace": "nodetool.math", - "node_type": "nodetool.math.BinaryOperation", - "layout": "small", + "title": "Hours Ago", + "description": "Get datetime from specified hours ago.\n datetime, past, hours", + "namespace": "nodetool.date", + "node_type": "nodetool.date.HoursAgo", + "layout": "default", "properties": [ { - "name": "a", - "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] - }, - "default": 0.0, - "title": "A" - }, - { - "name": "b", + "name": "hours", "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] + "type": "int" }, - "default": 0.0, - "title": "B" + "default": 1, + "title": "Hours", + "description": "Number of hours ago", + "min": 0.0 } ], "outputs": [ { "type": { - "type": "any" + "type": "datetime" }, "name": "output" } @@ -10896,39 +10303,32 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "a", - "b" + "hours" ], "is_dynamic": false }, { - "title": "Cosine", - "description": "Computes the cosine of input angles in radians.\n math, trigonometry, cosine, cos\n\n Use cases:\n - Calculating horizontal components in physics\n - Creating circular motions\n - Phase calculations in signal processing", - "namespace": "nodetool.math", - "node_type": "nodetool.math.Cosine", - "layout": "small", + "title": "Hours From Now", + "description": "Get datetime specified hours in the future.\n datetime, future, hours", + "namespace": "nodetool.date", + "node_type": "nodetool.date.HoursFromNow", + "layout": "default", "properties": [ { - "name": "angle_rad", + "name": "hours", "type": { - "type": "union", - "type_args": [ - { - "type": "float" - }, - { - "type": "int" - } - ] + "type": "int" }, - "default": 0.0, - "title": "Angle (Radians)" + "default": 1, + "title": "Hours", + "description": "Number of hours in the future", + "min": 0.0 } ], "outputs": [ { "type": { - "type": "float" + "type": "datetime" }, "name": "output" } @@ -10936,62 +10336,58 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "angle_rad" + "hours" ], "is_dynamic": false }, { - "title": "Divide", - "description": "Divides the first input by the second.\n math, division, arithmetic, quotient, /", - "namespace": "nodetool.math", - "node_type": "nodetool.math.Divide", - "layout": "small", + "title": "Is Date In Range", + "description": "Check if a date falls within a specified range.\n datetime, range, check\n\n Use cases:\n - Validate date ranges\n - Filter date-based data", + "namespace": "nodetool.date", + "node_type": "nodetool.date.IsDateInRange", + "layout": "default", "properties": [ { - "name": "a", + "name": "check_date", "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] + "type": "datetime" }, - "default": 0.0, - "title": "A" + "default": {}, + "title": "Check Date", + "description": "Date to check" }, { - "name": "b", + "name": "start_date", "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] + "type": "datetime" }, - "default": 0.0, - "title": "B" + "default": {}, + "title": "Start Date", + "description": "Start of date range" + }, + { + "name": "end_date", + "type": { + "type": "datetime" + }, + "default": {}, + "title": "End Date", + "description": "End of date range" + }, + { + "name": "inclusive", + "type": { + "type": "bool" + }, + "default": true, + "title": "Inclusive", + "description": "Include start and end dates in range" } ], "outputs": [ { "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] + "type": "bool" }, "name": "output" } @@ -10999,63 +10395,35 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "a", - "b" + "check_date", + "start_date", + "end_date", + "inclusive" ], "is_dynamic": false }, { - "title": "Modulus", - "description": "Calculates the element-wise remainder of division.\n math, modulo, remainder, mod, %\n\n Use cases:\n - Implementing cyclic behaviors\n - Checking for even/odd numbers\n - Limiting values to a specific range", - "namespace": "nodetool.math", - "node_type": "nodetool.math.Modulus", - "layout": "small", + "title": "Months Ago", + "description": "Get datetime from specified months ago.\n datetime, past, months", + "namespace": "nodetool.date", + "node_type": "nodetool.date.MonthsAgo", + "layout": "default", "properties": [ { - "name": "a", - "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] - }, - "default": 0.0, - "title": "A" - }, - { - "name": "b", + "name": "months", "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] + "type": "int" }, - "default": 0.0, - "title": "B" + "default": 1, + "title": "Months", + "description": "Number of months ago", + "min": 0.0 } ], "outputs": [ { "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] + "type": "datetime" }, "name": "output" } @@ -11063,127 +10431,105 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "a", - "b" + "months" ], "is_dynamic": false }, { - "title": "Multiply", - "description": "Multiplies two inputs.\n math, product, times, *", - "namespace": "nodetool.math", - "node_type": "nodetool.math.Multiply", - "layout": "small", + "title": "Months From Now", + "description": "Get datetime specified months in the future.\n datetime, future, months", + "namespace": "nodetool.date", + "node_type": "nodetool.date.MonthsFromNow", + "layout": "default", "properties": [ { - "name": "a", + "name": "months", "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] + "type": "int" }, - "default": 0.0, - "title": "A" - }, + "default": 1, + "title": "Months", + "description": "Number of months in the future", + "min": 0.0 + } + ], + "outputs": [ { - "name": "b", "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] + "type": "datetime" }, - "default": 0.0, - "title": "B" + "name": "output" } ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "months" + ], + "is_dynamic": false + }, + { + "title": "Now", + "description": "Get the current date and time.\n datetime, current, now", + "namespace": "nodetool.date", + "node_type": "nodetool.date.Now", + "layout": "default", + "properties": [], "outputs": [ { "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] + "type": "datetime" }, "name": "output" } ], "the_model_info": {}, "recommended_models": [], - "basic_fields": [ - "a", - "b" - ], + "basic_fields": [], "is_dynamic": false }, { - "title": "Power", - "description": "Raises the base to the power of the exponent element-wise.\n math, exponentiation, power, pow, **\n\n Use cases:\n - Calculating compound interest\n - Implementing polynomial functions\n - Applying non-linear transformations to data", - "namespace": "nodetool.math", - "node_type": "nodetool.math.Power", - "layout": "small", + "title": "Parse Date", + "description": "Parse a date string into components.\n date, parse, format", + "namespace": "nodetool.date", + "node_type": "nodetool.date.ParseDate", + "layout": "default", "properties": [ { - "name": "base", + "name": "date_string", "type": { - "type": "union", - "type_args": [ - { - "type": "float" - }, - { - "type": "int" - } - ] + "type": "str" }, - "default": 1.0, - "title": "Base" + "default": "", + "title": "Date String", + "description": "The date string to parse" }, { - "name": "exponent", + "name": "input_format", "type": { - "type": "union", - "type_args": [ - { - "type": "float" - }, - { - "type": "int" - } - ] + "type": "enum", + "values": [ + "%Y-%m-%d", + "%m/%d/%Y", + "%d/%m/%Y", + "%B %d, %Y", + "%Y%m%d", + "%Y%m%d_%H%M%S", + "%Y-%m-%dT%H:%M:%S", + "%Y-%m-%dT%H:%M:%S%z", + "%Y-%m-%dT%H:%M:%S%z" + ], + "type_name": "nodetool.nodes.nodetool.date.DateFormat" }, - "default": 2.0, - "title": "Exponent" + "default": "%Y-%m-%d", + "title": "Input Format", + "description": "Format of the input date string" } ], "outputs": [ { "type": { - "type": "union", - "type_args": [ - { - "type": "float" - }, - { - "type": "int" - } - ] + "type": "date" }, "name": "output" } @@ -11191,39 +10537,53 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "base", - "exponent" + "date_string", + "input_format" ], "is_dynamic": false }, { - "title": "Sine", - "description": "Computes the sine of input angles in radians.\n math, trigonometry, sine, sin\n\n Use cases:\n - Calculating vertical components in physics\n - Generating smooth periodic functions\n - Audio signal processing", - "namespace": "nodetool.math", - "node_type": "nodetool.math.Sine", - "layout": "small", + "title": "Parse Date Time", + "description": "Parse a date/time string into components.\n datetime, parse, format\n\n Use cases:\n - Extract date components from strings\n - Convert between date formats", + "namespace": "nodetool.date", + "node_type": "nodetool.date.ParseDateTime", + "layout": "default", "properties": [ { - "name": "angle_rad", + "name": "datetime_string", "type": { - "type": "union", - "type_args": [ - { - "type": "float" - }, - { - "type": "int" - } - ] + "type": "str" }, - "default": 0.0, - "title": "Angle (Radians)" + "default": "", + "title": "Datetime String", + "description": "The datetime string to parse" + }, + { + "name": "input_format", + "type": { + "type": "enum", + "values": [ + "%Y-%m-%d", + "%m/%d/%Y", + "%d/%m/%Y", + "%B %d, %Y", + "%Y%m%d", + "%Y%m%d_%H%M%S", + "%Y-%m-%dT%H:%M:%S", + "%Y-%m-%dT%H:%M:%S%z", + "%Y-%m-%dT%H:%M:%S%z" + ], + "type_name": "nodetool.nodes.nodetool.date.DateFormat" + }, + "default": "%Y-%m-%d", + "title": "Input Format", + "description": "Format of the input datetime string" } ], "outputs": [ { "type": { - "type": "float" + "type": "datetime" }, "name": "output" } @@ -11231,46 +10591,32 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "angle_rad" + "datetime_string", + "input_format" ], "is_dynamic": false }, { - "title": "Sqrt", - "description": "Calculates the square root of the input element-wise.\n math, square root, sqrt, \u221a\n\n Use cases:\n - Normalizing data\n - Calculating distances in Euclidean space\n - Finding intermediate values in binary search", - "namespace": "nodetool.math", - "node_type": "nodetool.math.Sqrt", - "layout": "small", + "title": "Start Of Day", + "description": "Get the datetime set to the start of the day (00:00:00).\n datetime, day, start", + "namespace": "nodetool.date", + "node_type": "nodetool.date.StartOfDay", + "layout": "default", "properties": [ { - "name": "x", + "name": "input_datetime", "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] + "type": "datetime" }, - "default": 1.0, - "title": "Input" + "default": {}, + "title": "Input Datetime", + "description": "Input datetime" } ], "outputs": [ { "type": { - "type": "union", - "type_args": [ - { - "type": "float" - }, - { - "type": "int" - } - ] + "type": "datetime" }, "name": "output" } @@ -11278,62 +10624,31 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "x" + "input_datetime" ], "is_dynamic": false }, { - "title": "Subtract", - "description": "Subtracts the second input from the first.\n math, minus, difference, -", - "namespace": "nodetool.math", - "node_type": "nodetool.math.Subtract", - "layout": "small", + "title": "Start Of Month", + "description": "Get the datetime set to the first day of the month.\n datetime, month, start", + "namespace": "nodetool.date", + "node_type": "nodetool.date.StartOfMonth", + "layout": "default", "properties": [ { - "name": "a", - "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] - }, - "default": 0.0, - "title": "A" - }, - { - "name": "b", + "name": "input_datetime", "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] + "type": "datetime" }, - "default": 0.0, - "title": "B" + "default": {}, + "title": "Input Datetime", + "description": "Input datetime" } ], "outputs": [ { "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "float" - } - ] + "type": "datetime" }, "name": "output" } @@ -11341,31 +10656,40 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "a", - "b" + "input_datetime" ], "is_dynamic": false }, { - "title": "Audio", - "description": "Represents an audio file constant in the workflow.\n audio, file, mp3, wav\n\n Use cases:\n - Provide a fixed audio input for audio processing nodes\n - Reference a specific audio file in the workflow\n - Set default audio for testing or demonstration purposes", - "namespace": "nodetool.constant", - "node_type": "nodetool.constant.Audio", + "title": "Start Of Week", + "description": "Get the datetime set to the first day of the week (Monday by default).\n datetime, week, start", + "namespace": "nodetool.date", + "node_type": "nodetool.date.StartOfWeek", "layout": "default", "properties": [ { - "name": "value", + "name": "input_datetime", "type": { - "type": "audio" + "type": "datetime" }, "default": {}, - "title": "Value" + "title": "Input Datetime", + "description": "Input datetime" + }, + { + "name": "start_monday", + "type": { + "type": "bool" + }, + "default": true, + "title": "Start Monday", + "description": "Consider Monday as start of week (False for Sunday)" } ], "outputs": [ { "type": { - "type": "audio" + "type": "datetime" }, "name": "output" } @@ -11373,30 +10697,32 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "input_datetime", + "start_monday" ], "is_dynamic": false }, { - "title": "Bool", - "description": "Represents a boolean constant in the workflow.\n boolean, logic, flag\n\n Use cases:\n - Control flow decisions in conditional nodes\n - Toggle features or behaviors in the workflow\n - Set default boolean values for configuration", - "namespace": "nodetool.constant", - "node_type": "nodetool.constant.Bool", + "title": "Start Of Year", + "description": "Get the datetime set to the first day of the year.\n datetime, year, start", + "namespace": "nodetool.date", + "node_type": "nodetool.date.StartOfYear", "layout": "default", "properties": [ { - "name": "value", + "name": "input_datetime", "type": { - "type": "bool" + "type": "datetime" }, - "default": false, - "title": "Value" + "default": {}, + "title": "Input Datetime", + "description": "Input datetime" } ], "outputs": [ { "type": { - "type": "bool" + "type": "datetime" }, "name": "output" } @@ -11404,21 +10730,21 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "input_datetime" ], "is_dynamic": false }, { - "title": "Constant", - "description": "Base class for fixed-value nodes.\n\n constant, parameter, default\n\n Use cases:\n - Provide static inputs to a workflow\n - Hold configuration values\n - Simplify testing with deterministic outputs", - "namespace": "nodetool.constant", - "node_type": "nodetool.constant.Constant", + "title": "Today", + "description": "Get the current date.\n date, today, now", + "namespace": "nodetool.date", + "node_type": "nodetool.date.Today", "layout": "default", "properties": [], "outputs": [ { "type": { - "type": "any" + "type": "date" }, "name": "output" } @@ -11429,25 +10755,43 @@ "is_dynamic": false }, { - "title": "Data Frame", - "description": "Represents a fixed DataFrame constant in the workflow.\n table, data, dataframe, pandas\n\n Use cases:\n - Provide static data for analysis or processing\n - Define lookup tables or reference data\n - Set sample data for testing or demonstration", - "namespace": "nodetool.constant", - "node_type": "nodetool.constant.DataFrame", + "title": "Evaluate Expression", + "description": "Evaluates a Python expression with safety restrictions.\n python, expression, evaluate\n\n Use cases:\n - Calculate values dynamically\n - Transform data with simple expressions\n - Quick data validation\n\n IMPORTANT: Only enabled in non-production environments", + "namespace": "nodetool.code", + "node_type": "nodetool.code.EvaluateExpression", "layout": "default", "properties": [ { - "name": "value", + "name": "expression", "type": { - "type": "dataframe" + "type": "str" + }, + "default": "", + "title": "Expression", + "description": "Python expression to evaluate. Variables are available as locals." + }, + { + "name": "variables", + "type": { + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] }, "default": {}, - "title": "DataFrame" + "title": "Variables", + "description": "Variables available to the expression" } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "any" }, "name": "output" } @@ -11455,49 +10799,49 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "expression", + "variables" ], "is_dynamic": false }, { - "title": "Date", - "description": "Make a date object from year, month, day.\n date, make, create", - "namespace": "nodetool.constant", - "node_type": "nodetool.constant.Date", + "title": "Execute Python", + "description": "Executes Python code with safety restrictions.\n python, code, execute\n\n Use cases:\n - Run custom data transformations\n - Prototype node functionality\n - Debug and testing workflows\n\n IMPORTANT: Only enabled in non-production environments", + "namespace": "nodetool.code", + "node_type": "nodetool.code.ExecutePython", "layout": "default", "properties": [ { - "name": "year", - "type": { - "type": "int" - }, - "default": 1900, - "title": "Year", - "description": "Year of the date" - }, - { - "name": "month", + "name": "code", "type": { - "type": "int" + "type": "str" }, - "default": 1, - "title": "Month", - "description": "Month of the date" + "default": "", + "title": "Code", + "description": "Python code to execute. Input variables are available as locals. Assign the desired output to the 'result' variable." }, { - "name": "day", + "name": "inputs", "type": { - "type": "int" + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] }, - "default": 1, - "title": "Day", - "description": "Day of the date" + "default": {}, + "title": "Inputs", + "description": "Input variables available to the code as locals." } ], "outputs": [ { "type": { - "type": "date" + "type": "any" }, "name": "output" } @@ -11505,105 +10849,69 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "year", - "month", - "day" + "code", + "inputs" ], "is_dynamic": false }, { - "title": "Date Time", - "description": "Make a datetime object from year, month, day, hour, minute, second.\n datetime, make, create", - "namespace": "nodetool.constant", - "node_type": "nodetool.constant.DateTime", + "title": "Split Text into Chunks", + "description": "Splits text into chunks of specified word length.\n text, chunk, split\n\n Use cases:\n - Preparing text for processing by models with input length limits\n - Creating manageable text segments for parallel processing\n - Generating summaries of text sections", + "namespace": "nodetool.text", + "node_type": "nodetool.text.Chunk", "layout": "default", "properties": [ { - "name": "year", - "type": { - "type": "int" - }, - "default": 1900, - "title": "Year", - "description": "Year of the datetime" - }, - { - "name": "month", - "type": { - "type": "int" - }, - "default": 1, - "title": "Month", - "description": "Month of the datetime" - }, - { - "name": "day", - "type": { - "type": "int" - }, - "default": 1, - "title": "Day", - "description": "Day of the datetime" - }, - { - "name": "hour", - "type": { - "type": "int" - }, - "default": 0, - "title": "Hour", - "description": "Hour of the datetime" - }, - { - "name": "minute", + "name": "text", "type": { - "type": "int" + "type": "str" }, - "default": 0, - "title": "Minute", - "description": "Minute of the datetime" + "default": "", + "title": "Text" }, { - "name": "second", + "name": "length", "type": { "type": "int" }, - "default": 0, - "title": "Second", - "description": "Second of the datetime" + "default": 100, + "title": "Length", + "min": 1.0, + "max": 1000.0 }, { - "name": "microsecond", + "name": "overlap", "type": { "type": "int" }, "default": 0, - "title": "Microsecond", - "description": "Microsecond of the datetime" - }, - { - "name": "tzinfo", - "type": { - "type": "str" - }, - "default": "UTC", - "title": "Tzinfo", - "description": "Timezone of the datetime" + "title": "Overlap" }, { - "name": "utc_offset", + "name": "separator", "type": { - "type": "int" + "type": "union", + "type_args": [ + { + "type": "str" + }, + { + "type": "none" + } + ] }, - "default": 0, - "title": "Utc Offset", - "description": "UTC offset of the datetime" + "title": "Separator" } ], "outputs": [ { "type": { - "type": "datetime" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, "name": "output" } @@ -11611,54 +10919,41 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "year", - "month", - "day", - "hour", - "minute", - "second", - "microsecond", - "tzinfo", - "utc_offset" + "text", + "length", + "overlap", + "separator" ], "is_dynamic": false }, { - "title": "Dict", - "description": "Represents a dictionary constant in the workflow.\n dictionary, key-value, mapping\n\n Use cases:\n - Store configuration settings\n - Provide structured data inputs\n - Define parameter sets for other nodes", - "namespace": "nodetool.constant", - "node_type": "nodetool.constant.Dict", + "title": "Concatenate Text", + "description": "Concatenates two text inputs into a single output.\n text, concatenation, combine, +\n\n Use cases:\n - Joining outputs from multiple text processing nodes\n - Combining parts of sentences or paragraphs\n - Merging text data from different sources", + "namespace": "nodetool.text", + "node_type": "nodetool.text.Concat", "layout": "default", "properties": [ { - "name": "value", + "name": "a", "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] + "type": "str" }, - "default": {}, - "title": "Value" + "default": "", + "title": "A" + }, + { + "name": "b", + "type": { + "type": "str" + }, + "default": "", + "title": "B" } ], "outputs": [ { "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] + "type": "str" }, "name": "output" } @@ -11666,30 +10961,47 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "a", + "b" ], "is_dynamic": false }, { - "title": "Document", - "description": "Represents a document constant in the workflow.\n document, pdf, word, docx", - "namespace": "nodetool.constant", - "node_type": "nodetool.constant.Document", + "title": "Contains Text", + "description": "Checks if text contains a specified substring.\n text, check, contains, compare, validate, substring, string\n\n Use cases:\n - Searching for keywords in text\n - Filtering content based on presence of terms\n - Validating text content", + "namespace": "nodetool.text", + "node_type": "nodetool.text.Contains", "layout": "default", "properties": [ { - "name": "value", + "name": "text", "type": { - "type": "document" + "type": "str" }, - "default": {}, - "title": "Document" + "default": "", + "title": "Text" + }, + { + "name": "substring", + "type": { + "type": "str" + }, + "default": "", + "title": "Substring" + }, + { + "name": "case_sensitive", + "type": { + "type": "bool" + }, + "default": true, + "title": "Case Sensitive" } ], "outputs": [ { "type": { - "type": "document" + "type": "bool" }, "name": "output" } @@ -11697,30 +11009,47 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "text", + "substring", + "case_sensitive" ], "is_dynamic": false }, { - "title": "Float", - "description": "Represents a floating-point number constant in the workflow.\n number, decimal, float\n\n Use cases:\n - Set numerical parameters for calculations\n - Define thresholds or limits\n - Provide fixed numerical inputs for processing", - "namespace": "nodetool.constant", - "node_type": "nodetool.constant.Float", + "title": "Count Tokens", + "description": "Counts the number of tokens in text using tiktoken.\n text, tokens, count, encoding\n\n Use cases:\n - Checking text length for LLM input limits\n - Estimating API costs\n - Managing token budgets in text processing", + "namespace": "nodetool.text", + "node_type": "nodetool.text.CountTokens", "layout": "default", "properties": [ { - "name": "value", + "name": "text", "type": { - "type": "float" + "type": "str" }, - "default": 0.0, - "title": "Value" + "default": "", + "title": "Text" + }, + { + "name": "encoding", + "type": { + "type": "enum", + "values": [ + "cl100k_base", + "p50k_base", + "r50k_base" + ], + "type_name": "nodetool.nodes.nodetool.text.TiktokenEncoding" + }, + "default": "cl100k_base", + "title": "Encoding", + "description": "The tiktoken encoding to use for token counting" } ], "outputs": [ { "type": { - "type": "float" + "type": "int" }, "name": "output" } @@ -11728,30 +11057,39 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "text", + "encoding" ], "is_dynamic": false }, { - "title": "Image", - "description": "Represents an image file constant in the workflow.\n picture, photo, image\n\n Use cases:\n - Provide a fixed image input for image processing nodes\n - Reference a specific image file in the workflow\n - Set default image for testing or demonstration purposes", - "namespace": "nodetool.constant", - "node_type": "nodetool.constant.Image", + "title": "Ends With", + "description": "Checks if text ends with a specified suffix.\n text, check, suffix, compare, validate, substring, string\n\n Use cases:\n - Validating file extensions\n - Checking string endings\n - Filtering text based on ending content", + "namespace": "nodetool.text", + "node_type": "nodetool.text.EndsWith", "layout": "default", "properties": [ { - "name": "value", + "name": "text", "type": { - "type": "image" + "type": "str" }, - "default": {}, - "title": "Value" + "default": "", + "title": "Text" + }, + { + "name": "suffix", + "type": { + "type": "str" + }, + "default": "", + "title": "Suffix" } ], "outputs": [ { "type": { - "type": "image" + "type": "bool" }, "name": "output" } @@ -11759,30 +11097,47 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "text", + "suffix" ], "is_dynamic": false }, { - "title": "Integer", - "description": "Represents an integer constant in the workflow.\n number, integer, whole\n\n Use cases:\n - Set numerical parameters for calculations\n - Define counts, indices, or sizes\n - Provide fixed numerical inputs for processing", - "namespace": "nodetool.constant", - "node_type": "nodetool.constant.Integer", + "title": "Extract Text", + "description": "Extracts a substring from input text.\n text, extract, substring\n\n Use cases:\n - Extracting specific portions of text for analysis\n - Trimming unwanted parts from text data\n - Focusing on relevant sections of longer documents", + "namespace": "nodetool.text", + "node_type": "nodetool.text.Extract", "layout": "default", "properties": [ { - "name": "value", + "name": "text", + "type": { + "type": "str" + }, + "default": "", + "title": "Text" + }, + { + "name": "start", "type": { "type": "int" }, "default": 0, - "title": "Value" + "title": "Start" + }, + { + "name": "end", + "type": { + "type": "int" + }, + "default": 0, + "title": "End" } ], "outputs": [ { "type": { - "type": "int" + "type": "str" }, "name": "output" } @@ -11790,30 +11145,48 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "text", + "start", + "end" ], "is_dynamic": false }, { - "title": "JSON", - "description": "Represents a JSON constant in the workflow.\n json, object, dictionary", - "namespace": "nodetool.constant", - "node_type": "nodetool.constant.JSON", + "title": "Extract JSON", + "description": "Extracts data from JSON using JSONPath expressions.\n json, extract, jsonpath\n\n Use cases:\n - Retrieving specific fields from complex JSON structures\n - Filtering and transforming JSON data for analysis\n - Extracting nested data from API responses or configurations", + "namespace": "nodetool.text", + "node_type": "nodetool.text.ExtractJSON", "layout": "default", "properties": [ { - "name": "value", + "name": "text", "type": { - "type": "json" + "type": "str" }, - "default": {}, - "title": "Value" + "default": "", + "title": "JSON Text" + }, + { + "name": "json_path", + "type": { + "type": "str" + }, + "default": "$.*", + "title": "JSONPath Expression" + }, + { + "name": "find_all", + "type": { + "type": "bool" + }, + "default": false, + "title": "Find All" } ], "outputs": [ { "type": { - "type": "json" + "type": "any" }, "name": "output" } @@ -11821,29 +11194,58 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "text", + "json_path", + "find_all" ], "is_dynamic": false }, { - "title": "List", - "description": "Represents a list constant in the workflow.\n array, sequence, collection\n\n Use cases:\n - Store multiple values of the same type\n - Provide ordered data inputs\n - Define sequences for iteration in other nodes", - "namespace": "nodetool.constant", - "node_type": "nodetool.constant.List", + "title": "Extract Regex Groups", + "description": "Extracts substrings matching regex groups from text.\n text, regex, extract\n\n Use cases:\n - Extracting structured data (e.g., dates, emails) from unstructured text\n - Parsing specific patterns in log files or documents\n - Isolating relevant information from complex text formats", + "namespace": "nodetool.text", + "node_type": "nodetool.text.ExtractRegex", "layout": "default", "properties": [ { - "name": "value", + "name": "text", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "str" }, - "default": [], - "title": "Value" + "default": "", + "title": "Text" + }, + { + "name": "regex", + "type": { + "type": "str" + }, + "default": "", + "title": "Regex" + }, + { + "name": "dotall", + "type": { + "type": "bool" + }, + "default": false, + "title": "Dotall" + }, + { + "name": "ignorecase", + "type": { + "type": "bool" + }, + "default": false, + "title": "Ignorecase" + }, + { + "name": "multiline", + "type": { + "type": "bool" + }, + "default": false, + "title": "Multiline" } ], "outputs": [ @@ -11852,7 +11254,7 @@ "type": "list", "type_args": [ { - "type": "any" + "type": "str" } ] }, @@ -11862,61 +11264,71 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "text", + "regex", + "dotall", + "ignorecase", + "multiline" ], "is_dynamic": false }, { - "title": "String", - "description": "Represents a string constant in the workflow.\n text, string, characters\n\n Use cases:\n - Provide fixed text inputs for processing\n - Define labels, identifiers, or names\n - Set default text values for configuration", - "namespace": "nodetool.constant", - "node_type": "nodetool.constant.String", + "title": "Find All Regex Matches", + "description": "Finds all regex matches in text as separate substrings.\n text, regex, find\n\n Use cases:\n - Identifying all occurrences of a pattern in text\n - Extracting multiple instances of structured data\n - Analyzing frequency and distribution of specific text patterns", + "namespace": "nodetool.text", + "node_type": "nodetool.text.FindAllRegex", "layout": "default", "properties": [ { - "name": "value", + "name": "text", "type": { "type": "str" }, "default": "", - "title": "Value" - } - ], - "outputs": [ + "title": "Text" + }, { + "name": "regex", "type": { "type": "str" }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "value" - ], - "is_dynamic": false - }, - { - "title": "Video", - "description": "Represents a video file constant in the workflow.\n video, movie, mp4, file\n\n Use cases:\n - Provide a fixed video input for video processing nodes\n - Reference a specific video file in the workflow\n - Set default video for testing or demonstration purposes", - "namespace": "nodetool.constant", - "node_type": "nodetool.constant.Video", - "layout": "default", - "properties": [ + "default": "", + "title": "Regex" + }, + { + "name": "dotall", + "type": { + "type": "bool" + }, + "default": false, + "title": "Dotall" + }, + { + "name": "ignorecase", + "type": { + "type": "bool" + }, + "default": false, + "title": "Ignorecase" + }, { - "name": "value", + "name": "multiline", "type": { - "type": "video" + "type": "bool" }, - "default": {}, - "title": "Value" + "default": false, + "title": "Multiline" } ], "outputs": [ { "type": { - "type": "video" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, "name": "output" } @@ -11924,33 +11336,29 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "text", + "regex", + "dotall", + "ignorecase", + "multiline" ], "is_dynamic": false }, { - "title": "Arg Max", - "description": "Returns the label associated with the highest value in a dictionary.\n dictionary, maximum, label, argmax\n\n Use cases:\n - Get the most likely class from classification probabilities\n - Find the category with highest score\n - Identify the winner in a voting/ranking system", - "namespace": "nodetool.dictionary", - "node_type": "nodetool.dictionary.ArgMax", - "layout": "small", + "title": "Format Text", + "description": "Replaces placeholders in a string with dynamic inputs using Jinja2 templating.\n text, template, formatting\n\n Use cases:\n - Generating personalized messages with dynamic content\n - Creating parameterized queries or commands\n - Formatting and filtering text output based on variable inputs\n\n Examples:\n - text: \"Hello, {{ name }}!\"\n - text: \"Title: {{ title|truncate(20) }}\"\n - text: \"Name: {{ name|upper }}\"\n\n Available filters:\n - truncate(length): Truncates text to given length\n - upper: Converts text to uppercase\n - lower: Converts text to lowercase\n - title: Converts text to title case\n - trim: Removes whitespace from start/end\n - replace(old, new): Replaces substring\n - default(value): Sets default if value is undefined\n - first: Gets first character/item\n - last: Gets last character/item\n - length: Gets length of string/list\n - sort: Sorts list\n - join(delimiter): Joins list with delimiter", + "namespace": "nodetool.text", + "node_type": "nodetool.text.FormatText", + "layout": "default", "properties": [ { - "name": "scores", + "name": "template", "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "float" - } - ] + "type": "str" }, - "default": {}, - "title": "Scores", - "description": "Dictionary mapping labels to their corresponding scores/values" + "default": "", + "title": "Template", + "description": "\n Examples:\n - text: \"Hello, {{ name }}!\"\n - text: \"Title: {{ title|truncate(20) }}\"\n - text: \"Name: {{ name|upper }}\" \n\n Available filters:\n - truncate(length): Truncates text to given length\n - upper: Converts text to uppercase\n - lower: Converts text to lowercase\n - title: Converts text to title case\n - trim: Removes whitespace from start/end\n - replace(old, new): Replaces substring\n - default(value): Sets default if value is undefined\n - first: Gets first character/item\n - last: Gets last character/item\n - length: Gets length of string/list\n - sort: Sorts list\n - join(delimiter): Joins list with delimiter\n" } ], "outputs": [ @@ -11964,123 +11372,75 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "scores" + "template" ], - "is_dynamic": false + "is_dynamic": true }, { - "title": "Combine", - "description": "Merges two dictionaries, with second dictionary values taking precedence.\n dictionary, merge, update, +, add, concatenate\n\n Use cases:\n - Combine default and custom configurations\n - Merge partial updates with existing data\n - Create aggregate data structures", - "namespace": "nodetool.dictionary", - "node_type": "nodetool.dictionary.Combine", - "layout": "small", + "title": "Check Length", + "description": "Checks if text length meets specified conditions.\n text, check, length, compare, validate, whitespace, string\n\n Use cases:\n - Validating input length requirements\n - Filtering text by length\n - Checking content size constraints", + "namespace": "nodetool.text", + "node_type": "nodetool.text.HasLength", + "layout": "default", "properties": [ { - "name": "dict_a", + "name": "text", "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] + "type": "str" }, - "default": {}, - "title": "Dict A" + "default": "", + "title": "Text" }, { - "name": "dict_b", + "name": "min_length", "type": { - "type": "dict", + "type": "union", "type_args": [ { - "type": "str" + "type": "int" }, { - "type": "any" + "type": "none" } ] }, - "default": {}, - "title": "Dict B" - } - ], - "outputs": [ + "title": "Minimum Length" + }, { + "name": "max_length", "type": { - "type": "dict", + "type": "union", "type_args": [ { - "type": "str" + "type": "int" }, { - "type": "any" + "type": "none" } ] }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "dict_a", - "dict_b" - ], - "is_dynamic": false - }, - { - "title": "Filter", - "description": "Creates a new dictionary with only specified keys from the input.\n dictionary, filter, select\n\n Use cases:\n - Extract relevant fields from a larger data structure\n - Implement data access controls\n - Prepare specific data subsets for processing", - "namespace": "nodetool.dictionary", - "node_type": "nodetool.dictionary.Filter", - "layout": "default", - "properties": [ + "title": "Maximum Length" + }, { - "name": "dictionary", + "name": "exact_length", "type": { - "type": "dict", + "type": "union", "type_args": [ { - "type": "str" + "type": "int" }, { - "type": "any" - } - ] - }, - "default": {}, - "title": "Dictionary" - }, - { - "name": "keys", - "type": { - "type": "list", - "type_args": [ - { - "type": "str" + "type": "none" } ] }, - "default": [], - "title": "Keys" + "title": "Exact Length" } ], "outputs": [ { "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] + "type": "bool" }, "name": "output" } @@ -12088,123 +11448,70 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "dictionary", - "keys" + "text", + "min_length", + "max_length", + "exact_length" ], "is_dynamic": false }, { - "title": "Get Value", - "description": "Retrieves a value from a dictionary using a specified key.\n dictionary, get, value, key\n\n Use cases:\n - Access a specific item in a configuration dictionary\n - Retrieve a value from a parsed JSON object\n - Extract a particular field from a data structure", - "namespace": "nodetool.dictionary", - "node_type": "nodetool.dictionary.GetValue", - "layout": "small", + "title": "HTML to Text", + "description": "Converts HTML content to plain text using html2text.\n html, convert, text, parse, extract\n\n Use cases:\n - Converting HTML documents to readable plain text\n - Extracting text content from web pages\n - Cleaning HTML markup from text data\n - Processing HTML emails or documents", + "namespace": "nodetool.text", + "node_type": "nodetool.text.HtmlToText", + "layout": "default", "properties": [ { - "name": "dictionary", + "name": "html", "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] + "type": "str" }, - "default": {}, - "title": "Dictionary" + "default": "", + "title": "HTML", + "description": "HTML content to convert" }, { - "name": "key", + "name": "base_url", "type": { "type": "str" }, "default": "", - "title": "Key" + "title": "Base URL", + "description": "Base URL for resolving relative links" }, { - "name": "default", - "type": { - "type": "any" - }, - "title": "Default" - } - ], - "outputs": [ - { - "type": { - "type": "any" - }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "dictionary", - "key", - "default" - ], - "is_dynamic": false - }, - { - "title": "Make Dictionary", - "description": "Creates a simple dictionary with up to three key-value pairs.\n dictionary, create, simple\n\n Use cases:\n - Create configuration entries\n - Initialize simple data structures\n - Build basic key-value mappings", - "namespace": "nodetool.dictionary", - "node_type": "nodetool.dictionary.MakeDictionary", - "layout": "small", - "properties": [], - "outputs": [ - { + "name": "body_width", "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] + "type": "int" }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [], - "is_dynamic": true - }, - { - "title": "Parse JSON", - "description": "Parses a JSON string into a Python dictionary.\n json, parse, dictionary\n\n Use cases:\n - Process API responses\n - Load configuration files\n - Deserialize stored data", - "namespace": "nodetool.dictionary", - "node_type": "nodetool.dictionary.ParseJSON", - "layout": "small", - "properties": [ + "default": 1000, + "title": "Body Width", + "description": "Width for text wrapping" + }, { - "name": "json_string", + "name": "ignore_images", "type": { - "type": "str" + "type": "bool" }, - "default": "", - "title": "Json String" + "default": true, + "title": "Ignore Images", + "description": "Whether to ignore image tags" + }, + { + "name": "ignore_mailto_links", + "type": { + "type": "bool" + }, + "default": true, + "title": "Ignore Mailto Links", + "description": "Whether to ignore mailto links" } ], "outputs": [ { "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] + "type": "str" }, "name": "output" } @@ -12212,92 +11519,42 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "json_string" + "html", + "base_url", + "body_width", + "ignore_images", + "ignore_mailto_links" ], "is_dynamic": false }, { - "title": "Reduce Dictionaries", - "description": "Reduces a list of dictionaries into one dictionary based on a specified key field.\n dictionary, reduce, aggregate\n\n Use cases:\n - Aggregate data by a specific field\n - Create summary dictionaries from list of records\n - Combine multiple data points into a single structure", - "namespace": "nodetool.dictionary", - "node_type": "nodetool.dictionary.ReduceDictionaries", + "title": "Is Empty", + "description": "Checks if text is empty or contains only whitespace.\n text, check, empty, compare, validate, whitespace, string\n\n Use cases:\n - Validating required text fields\n - Filtering out empty content\n - Checking for meaningful input", + "namespace": "nodetool.text", + "node_type": "nodetool.text.IsEmpty", "layout": "default", "properties": [ { - "name": "dictionaries", - "type": { - "type": "list", - "type_args": [ - { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] - } - ] - }, - "default": [], - "title": "Dictionaries", - "description": "List of dictionaries to be reduced" - }, - { - "name": "key_field", + "name": "text", "type": { "type": "str" }, "default": "", - "title": "Key Field", - "description": "The field to use as the key in the resulting dictionary" - }, - { - "name": "value_field", - "type": { - "type": "union", - "type_args": [ - { - "type": "str" - }, - { - "type": "none" - } - ] - }, - "title": "Value Field", - "description": "Optional field to use as the value. If not specified, the entire dictionary (minus the key field) will be used as the value." + "title": "Text" }, { - "name": "conflict_resolution", + "name": "trim_whitespace", "type": { - "type": "enum", - "values": [ - "first", - "last", - "error" - ], - "type_name": "nodetool.nodes.nodetool.dictionary.ConflictResolution" + "type": "bool" }, - "default": "first", - "title": "Conflict Resolution", - "description": "How to handle conflicts when the same key appears multiple times" + "default": true, + "title": "Trim Whitespace" } ], "outputs": [ { "type": { - "type": "dict", - "type_args": [ - { - "type": "any" - }, - { - "type": "any" - } - ] + "type": "bool" }, "name": "output" } @@ -12305,57 +11562,44 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "dictionaries", - "key_field", - "value_field", - "conflict_resolution" + "text", + "trim_whitespace" ], "is_dynamic": false }, { - "title": "Remove", - "description": "Removes a key-value pair from a dictionary.\n dictionary, remove, delete\n\n Use cases:\n - Delete a specific configuration option\n - Remove sensitive information before processing\n - Clean up temporary entries in a data structure", - "namespace": "nodetool.dictionary", - "node_type": "nodetool.dictionary.Remove", - "layout": "small", + "title": "Join Text", + "description": "Joins a list of strings into a single string using a specified separator.\n text, join, combine, +, add, concatenate\n\n Use cases:\n - Combining multiple text elements with a consistent delimiter\n - Creating comma-separated lists from individual items\n - Assembling formatted text from array elements", + "namespace": "nodetool.text", + "node_type": "nodetool.text.Join", + "layout": "default", "properties": [ { - "name": "dictionary", + "name": "strings", "type": { - "type": "dict", + "type": "list", "type_args": [ { "type": "str" - }, - { - "type": "any" } ] }, - "default": {}, - "title": "Dictionary" + "default": [], + "title": "Strings" }, { - "name": "key", + "name": "separator", "type": { "type": "str" }, "default": "", - "title": "Key" + "title": "Separator" } ], "outputs": [ { "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] + "type": "str" }, "name": "output" } @@ -12363,121 +11607,69 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "dictionary", - "key" + "strings", + "separator" ], "is_dynamic": false }, { - "title": "Update", - "description": "Updates a dictionary with new key-value pairs.\n dictionary, add, update\n\n Use cases:\n - Extend a configuration with additional settings\n - Add new entries to a cache or lookup table\n - Merge user input with existing data", - "namespace": "nodetool.dictionary", - "node_type": "nodetool.dictionary.Update", - "layout": "small", + "title": "Load Text Assets", + "description": "Load text files from an asset folder.\n load, text, file, import\n\n Use cases:\n - Loading multiple text files for batch processing\n - Importing text content from a directory\n - Processing collections of text documents", + "namespace": "nodetool.text", + "node_type": "nodetool.text.LoadTextAssets", + "layout": "default", "properties": [ { - "name": "dictionary", - "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] - }, - "default": {}, - "title": "Dictionary" - }, - { - "name": "new_pairs", + "name": "folder", "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] + "type": "folder" }, "default": {}, - "title": "New Pairs" + "title": "Folder", + "description": "The asset folder to load the text files from." } ], "outputs": [ { "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] + "type": "text" }, - "name": "output" + "name": "text" + }, + { + "type": { + "type": "str" + }, + "name": "name" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "dictionary", - "new_pairs" + "folder" ], "is_dynamic": false }, { - "title": "Zip", - "description": "Creates a dictionary from parallel lists of keys and values.\n dictionary, create, zip\n\n Use cases:\n - Convert separate data columns into key-value pairs\n - Create lookups from parallel data structures\n - Transform list data into associative arrays", - "namespace": "nodetool.dictionary", - "node_type": "nodetool.dictionary.Zip", - "layout": "small", + "title": "Parse JSON String", + "description": "Parses a JSON string into a Python object.\n json, parse, convert\n\n Use cases:\n - Converting JSON API responses for further processing\n - Preparing structured data for analysis or storage\n - Extracting configuration or settings from JSON files", + "namespace": "nodetool.text", + "node_type": "nodetool.text.ParseJSON", + "layout": "default", "properties": [ { - "name": "keys", - "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] - }, - "default": [], - "title": "Keys" - }, - { - "name": "values", + "name": "text", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "str" }, - "default": [], - "title": "Values" + "default": "", + "title": "JSON string" } ], "outputs": [ { "type": { - "type": "dict", - "type_args": [ - { - "type": "any" - }, - { - "type": "any" - } - ] + "type": "any" }, "name": "output" } @@ -12485,65 +11677,61 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "keys", - "values" + "text" ], "is_dynamic": false }, { - "title": "Add Time Delta", - "description": "Add or subtract time from a datetime.\n datetime, add, subtract\n\n Use cases:\n - Calculate future/past dates\n - Generate date ranges", - "namespace": "nodetool.date", - "node_type": "nodetool.date.AddTimeDelta", + "title": "Find Regex Matches", + "description": "Find all matches of a regex pattern in text.\n regex, search, pattern, match\n\n Use cases:\n - Extract specific patterns from text\n - Validate text against patterns\n - Find all occurrences of a pattern", + "namespace": "nodetool.text", + "node_type": "nodetool.text.RegexMatch", "layout": "default", "properties": [ { - "name": "input_datetime", - "type": { - "type": "datetime" - }, - "default": {}, - "title": "Input Datetime", - "description": "Starting datetime" - }, - { - "name": "days", + "name": "text", "type": { - "type": "int" + "type": "str" }, - "default": 0, - "title": "Days", - "description": "Number of days to add (negative to subtract)", - "min": -3650.0, - "max": 3650.0 + "default": "", + "title": "Text", + "description": "Text to search in" }, { - "name": "hours", + "name": "pattern", "type": { - "type": "int" + "type": "str" }, - "default": 0, - "title": "Hours", - "description": "Number of hours to add (negative to subtract)", - "min": -24.0, - "max": 24.0 + "default": "", + "title": "Pattern", + "description": "Regular expression pattern" }, { - "name": "minutes", + "name": "group", "type": { - "type": "int" + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "none" + } + ] }, - "default": 0, - "title": "Minutes", - "description": "Number of minutes to add (negative to subtract)", - "min": -60.0, - "max": 60.0 + "title": "Group", + "description": "Capture group to extract (0 for full match)" } ], "outputs": [ { "type": { - "type": "datetime" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, "name": "output" } @@ -12551,112 +11739,107 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "input_datetime", - "days", - "hours", - "minutes" + "text", + "pattern", + "group" ], "is_dynamic": false }, { - "title": "Date Difference", - "description": "Calculate the difference between two dates.\n datetime, difference, duration\n\n Use cases:\n - Calculate time periods\n - Measure durations", - "namespace": "nodetool.date", - "node_type": "nodetool.date.DateDifference", + "title": "Replace with Regex", + "description": "Replace text matching a regex pattern.\n regex, replace, substitute\n\n Use cases:\n - Clean or standardize text\n - Remove unwanted patterns\n - Transform text formats", + "namespace": "nodetool.text", + "node_type": "nodetool.text.RegexReplace", "layout": "default", "properties": [ { - "name": "start_date", - "type": { - "type": "datetime" - }, - "default": {}, - "title": "Start Date", - "description": "Start datetime" - }, - { - "name": "end_date", - "type": { - "type": "datetime" - }, - "default": {}, - "title": "End Date", - "description": "End datetime" - } - ], - "outputs": [ - { + "name": "text", "type": { - "type": "int" + "type": "str" }, - "name": "total_seconds" + "default": "", + "title": "Text", + "description": "Text to perform replacements on" }, { + "name": "pattern", "type": { - "type": "int" + "type": "str" }, - "name": "days" + "default": "", + "title": "Pattern", + "description": "Regular expression pattern" }, { + "name": "replacement", "type": { - "type": "int" + "type": "str" }, - "name": "hours" + "default": "", + "title": "Replacement", + "description": "Replacement text" }, { + "name": "count", "type": { "type": "int" }, - "name": "minutes" - }, + "default": 0, + "title": "Count", + "description": "Maximum replacements (0 for unlimited)" + } + ], + "outputs": [ { "type": { - "type": "int" + "type": "str" }, - "name": "seconds" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "start_date", - "end_date" + "text", + "pattern", + "replacement", + "count" ], "is_dynamic": false }, { - "title": "Date Range", - "description": "Generate a list of dates between start and end dates.\n datetime, range, list\n\n Use cases:\n - Generate date sequences\n - Create date-based iterations", - "namespace": "nodetool.date", - "node_type": "nodetool.date.DateRange", + "title": "Split with Regex", + "description": "Split text using a regex pattern as delimiter.\n regex, split, tokenize\n\n Use cases:\n - Parse structured text\n - Extract fields from formatted strings\n - Tokenize text", + "namespace": "nodetool.text", + "node_type": "nodetool.text.RegexSplit", "layout": "default", "properties": [ { - "name": "start_date", + "name": "text", "type": { - "type": "datetime" + "type": "str" }, - "default": {}, - "title": "Start Date", - "description": "Start date of the range" + "default": "", + "title": "Text", + "description": "Text to split" }, { - "name": "end_date", + "name": "pattern", "type": { - "type": "datetime" + "type": "str" }, - "default": {}, - "title": "End Date", - "description": "End date of the range" + "default": "", + "title": "Pattern", + "description": "Regular expression pattern to split on" }, { - "name": "step_days", + "name": "maxsplit", "type": { "type": "int" }, - "default": 1, - "title": "Step Days", - "description": "Number of days between each date" + "default": 0, + "title": "Maxsplit", + "description": "Maximum number of splits (0 for unlimited)" } ], "outputs": [ @@ -12665,7 +11848,7 @@ "type": "list", "type_args": [ { - "type": "datetime" + "type": "str" } ] }, @@ -12675,33 +11858,42 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "start_date", - "end_date", - "step_days" + "text", + "pattern", + "maxsplit" ], "is_dynamic": false }, { - "title": "Date To Datetime", - "description": "Convert a Date object to a Datetime object.\n date, datetime, convert", - "namespace": "nodetool.date", - "node_type": "nodetool.date.DateToDatetime", + "title": "Validate with Regex", + "description": "Check if text matches a regex pattern.\n regex, validate, check\n\n Use cases:\n - Validate input formats (email, phone, etc)\n - Check text structure\n - Filter text based on patterns", + "namespace": "nodetool.text", + "node_type": "nodetool.text.RegexValidate", "layout": "default", "properties": [ { - "name": "input_date", + "name": "text", "type": { - "type": "date" + "type": "str" }, - "default": {}, - "title": "Input Date", - "description": "Date to convert" + "default": "", + "title": "Text", + "description": "Text to validate" + }, + { + "name": "pattern", + "type": { + "type": "str" + }, + "default": "", + "title": "Pattern", + "description": "Regular expression pattern" } ], "outputs": [ { "type": { - "type": "datetime" + "type": "bool" }, "name": "output" } @@ -12709,31 +11901,47 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "input_date" + "text", + "pattern" ], "is_dynamic": false }, { - "title": "Datetime To Date", - "description": "Convert a Datetime object to a Date object.\n date, datetime, convert", - "namespace": "nodetool.date", - "node_type": "nodetool.date.DatetimeToDate", + "title": "Replace Text", + "description": "Replaces a substring in a text with another substring.\n text, replace, substitute\n\n Use cases:\n - Correcting or updating specific text patterns\n - Sanitizing or normalizing text data\n - Implementing simple text transformations", + "namespace": "nodetool.text", + "node_type": "nodetool.text.Replace", "layout": "default", "properties": [ { - "name": "input_datetime", + "name": "text", + "type": { + "type": "str" + }, + "default": "", + "title": "Text" + }, + { + "name": "old", + "type": { + "type": "str" + }, + "default": "", + "title": "Old" + }, + { + "name": "new", "type": { - "type": "datetime" + "type": "str" }, - "default": {}, - "title": "Input Datetime", - "description": "Datetime to convert" + "default": "", + "title": "New" } ], "outputs": [ { "type": { - "type": "date" + "type": "str" }, "name": "output" } @@ -12741,65 +11949,50 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "input_datetime" + "text", + "old", + "new" ], "is_dynamic": false }, { - "title": "Days Ago", - "description": "Get datetime from specified days ago.\n datetime, past, days", - "namespace": "nodetool.date", - "node_type": "nodetool.date.DaysAgo", + "title": "Save Text", + "description": "Saves input text to a file in the assets folder.\n text, save, file\n\n Use cases:\n - Persisting processed text results\n - Creating text files for downstream nodes or external use\n - Archiving text data within the workflow", + "namespace": "nodetool.text", + "node_type": "nodetool.text.SaveText", "layout": "default", "properties": [ { - "name": "days", + "name": "text", "type": { - "type": "int" + "type": "str" }, - "default": 1, - "title": "Days", - "description": "Number of days ago", - "min": 0.0 - } - ], - "outputs": [ + "default": "", + "title": "Text" + }, { + "name": "folder", "type": { - "type": "datetime" + "type": "folder" }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "days" - ], - "is_dynamic": false - }, - { - "title": "Days From Now", - "description": "Get datetime specified days in the future.\n datetime, future, days", - "namespace": "nodetool.date", - "node_type": "nodetool.date.DaysFromNow", - "layout": "default", - "properties": [ + "default": {}, + "title": "Folder", + "description": "Name of the output folder." + }, { - "name": "days", + "name": "name", "type": { - "type": "int" + "type": "str" }, - "default": 1, - "title": "Days", - "description": "Number of days in the future", - "min": 0.0 + "default": "%Y-%m-%d-%H-%M-%S.txt", + "title": "Name", + "description": "\n Name of the output file.\n You can use time and date variables to create unique names:\n %Y - Year\n %m - Month\n %d - Day\n %H - Hour\n %M - Minute\n %S - Second\n " } ], "outputs": [ { "type": { - "type": "datetime" + "type": "text" }, "name": "output" } @@ -12807,31 +12000,77 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "days" + "text", + "folder", + "name" ], "is_dynamic": false }, { - "title": "End Of Day", - "description": "Get the datetime set to the end of the day (23:59:59).\n datetime, day, end", - "namespace": "nodetool.date", - "node_type": "nodetool.date.EndOfDay", + "title": "Slice Text", + "description": "Slices text using Python's slice notation (start:stop:step).\n text, slice, substring\n\n Use cases:\n - Extracting specific portions of text with flexible indexing\n - Reversing text using negative step\n - Taking every nth character with step parameter\n\n Examples:\n - start=0, stop=5: first 5 characters\n - start=-5: last 5 characters\n - step=2: every second character\n - step=-1: reverse the text", + "namespace": "nodetool.text", + "node_type": "nodetool.text.Slice", "layout": "default", "properties": [ { - "name": "input_datetime", + "name": "text", "type": { - "type": "datetime" + "type": "str" }, - "default": {}, - "title": "Input Datetime", - "description": "Input datetime" + "default": "", + "title": "Text" + }, + { + "name": "start", + "type": { + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "none" + } + ] + }, + "title": "Start Index" + }, + { + "name": "stop", + "type": { + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "none" + } + ] + }, + "title": "Stop Index" + }, + { + "name": "step", + "type": { + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "none" + } + ] + }, + "title": "Step" } ], "outputs": [ { "type": { - "type": "datetime" + "type": "str" }, "name": "output" } @@ -12839,31 +12078,46 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "input_datetime" + "text", + "start", + "stop", + "step" ], "is_dynamic": false }, { - "title": "End Of Month", - "description": "Get the datetime set to the last day of the month.\n datetime, month, end", - "namespace": "nodetool.date", - "node_type": "nodetool.date.EndOfMonth", + "title": "Split Text", + "description": "Separates text into a list of strings based on a specified delimiter.\n text, split, tokenize\n\n Use cases:\n - Parsing CSV or similar delimited data\n - Breaking down sentences into words or phrases\n - Extracting specific elements from structured text", + "namespace": "nodetool.text", + "node_type": "nodetool.text.Split", "layout": "default", "properties": [ { - "name": "input_datetime", + "name": "text", "type": { - "type": "datetime" + "type": "str" }, - "default": {}, - "title": "Input Datetime", - "description": "Input datetime" + "default": "", + "title": "Text" + }, + { + "name": "delimiter", + "type": { + "type": "str" + }, + "default": ",", + "title": "Delimiter" } ], "outputs": [ { "type": { - "type": "datetime" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, "name": "output" } @@ -12871,40 +12125,39 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "input_datetime" + "text", + "delimiter" ], "is_dynamic": false }, { - "title": "End Of Week", - "description": "Get the datetime set to the last day of the week (Sunday by default).\n datetime, week, end", - "namespace": "nodetool.date", - "node_type": "nodetool.date.EndOfWeek", + "title": "Starts With", + "description": "Checks if text starts with a specified prefix.\n text, check, prefix, compare, validate, substring, string\n\n Use cases:\n - Validating string prefixes\n - Filtering text based on starting content\n - Checking file name patterns", + "namespace": "nodetool.text", + "node_type": "nodetool.text.StartsWith", "layout": "default", "properties": [ { - "name": "input_datetime", + "name": "text", "type": { - "type": "datetime" + "type": "str" }, - "default": {}, - "title": "Input Datetime", - "description": "Input datetime" + "default": "", + "title": "Text" }, { - "name": "start_monday", + "name": "prefix", "type": { - "type": "bool" + "type": "str" }, - "default": true, - "title": "Start Monday", - "description": "Consider Monday as start of week (False for Sunday)" + "default": "", + "title": "Prefix" } ], "outputs": [ { "type": { - "type": "datetime" + "type": "bool" }, "name": "output" } @@ -12912,32 +12165,63 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "input_datetime", - "start_monday" + "text", + "prefix" ], "is_dynamic": false }, { - "title": "End Of Year", - "description": "Get the datetime set to the last day of the year.\n datetime, year, end", - "namespace": "nodetool.date", - "node_type": "nodetool.date.EndOfYear", + "title": "Template", + "description": "Uses Jinja2 templating to format strings with variables and filters.\n text, template, formatting, format, combine, concatenate, +, add, variable, replace, filter\n\n Use cases:\n - Generating personalized messages with dynamic content\n - Creating parameterized queries or commands\n - Formatting and filtering text output based on variable inputs\n\n Examples:\n - text: \"Hello, {{ name }}!\"\n - text: \"Title: {{ title|truncate(20) }}\"\n - text: \"Name: {{ name|upper }}\"\n\n Available filters:\n - truncate(length): Truncates text to given length\n - upper: Converts text to uppercase\n - lower: Converts text to lowercase\n - title: Converts text to title case\n - trim: Removes whitespace from start/end\n - replace(old, new): Replaces substring\n - default(value): Sets default if value is undefined\n - first: Gets first character/item\n - last: Gets last character/item\n - length: Gets length of string/list\n - sort: Sorts list\n - join(delimiter): Joins list with delimiter", + "namespace": "nodetool.text", + "node_type": "nodetool.text.Template", "layout": "default", "properties": [ { - "name": "input_datetime", + "name": "string", "type": { - "type": "datetime" + "type": "str" + }, + "default": "", + "title": "String", + "description": "\n Examples:\n - text: \"Hello, {{ name }}!\"\n - text: \"Title: {{ title|truncate(20) }}\"\n - text: \"Name: {{ name|upper }}\"\n\n Available filters:\n - truncate(length): Truncates text to given length\n - upper: Converts text to uppercase\n - lower: Converts text to lowercase\n - title: Converts text to title case\n - trim: Removes whitespace from start/end\n - replace(old, new): Replaces substring\n - default(value): Sets default if value is undefined\n - first: Gets first character/item\n - last: Gets last character/item\n - length: Gets length of string/list\n - sort: Sorts list\n - join(delimiter): Joins list with delimiter\n" + }, + { + "name": "values", + "type": { + "type": "union", + "type_args": [ + { + "type": "str" + }, + { + "type": "list" + }, + { + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] + }, + { + "type": "object" + } + ] }, "default": {}, - "title": "Input Datetime", - "description": "Input datetime" + "title": "Values", + "description": "\n The values to replace in the string.\n - If a string, it will be used as the format string.\n - If a list, it will be used as the format arguments.\n - If a dictionary, it will be used as the template variables.\n - If an object, it will be converted to a dictionary using the object's __dict__ method.\n " } ], "outputs": [ { "type": { - "type": "datetime" + "type": "str" }, "name": "output" } @@ -12945,52 +12229,41 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "input_datetime" + "string", + "values" ], "is_dynamic": false }, { - "title": "Format Date Time", - "description": "Convert a datetime object to a formatted string.\n datetime, format, convert\n\n Use cases:\n - Standardize date formats\n - Prepare dates for different systems", - "namespace": "nodetool.date", - "node_type": "nodetool.date.FormatDateTime", + "title": "Audio Input", + "description": "Audio asset input for workflows.\n input, parameter, audio\n\n Use cases:\n - Load audio files for processing\n - Analyze sound or speech content\n - Provide audio input to models", + "namespace": "nodetool.input", + "node_type": "nodetool.input.AudioInput", "layout": "default", "properties": [ { - "name": "input_datetime", + "name": "value", "type": { - "type": "datetime" + "type": "audio" }, "default": {}, - "title": "Input Datetime", - "description": "Datetime object to format" + "title": "Value", + "description": "The audio to use as input." }, { - "name": "output_format", + "name": "name", "type": { - "type": "enum", - "values": [ - "%Y-%m-%d", - "%m/%d/%Y", - "%d/%m/%Y", - "%B %d, %Y", - "%Y%m%d", - "%Y%m%d_%H%M%S", - "%Y-%m-%dT%H:%M:%S", - "%Y-%m-%dT%H:%M:%S%z", - "%Y-%m-%dT%H:%M:%S%z" - ], - "type_name": "nodetool.nodes.nodetool.date.DateFormat" + "type": "str" }, - "default": "%B %d, %Y", - "title": "Output Format", - "description": "Desired output format" + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." } ], "outputs": [ { "type": { - "type": "str" + "type": "audio" }, "name": "output" } @@ -12998,219 +12271,172 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "input_datetime", - "output_format" + "value" ], "is_dynamic": false }, { - "title": "Get Quarter", - "description": "Get the quarter number and start/end dates for a given datetime.\n datetime, quarter, period\n\n Use cases:\n - Financial reporting periods\n - Quarterly analytics", - "namespace": "nodetool.date", - "node_type": "nodetool.date.GetQuarter", + "title": "Boolean Input", + "description": "Boolean parameter input for workflows.\n input, parameter, boolean, bool\n\n Use cases:\n - Toggle features on/off\n - Set binary flags\n - Control conditional logic", + "namespace": "nodetool.input", + "node_type": "nodetool.input.BooleanInput", "layout": "default", "properties": [ { - "name": "input_datetime", - "type": { - "type": "datetime" - }, - "default": {}, - "title": "Input Datetime", - "description": "Input datetime" - } - ], - "outputs": [ - { + "name": "value", "type": { - "type": "int" + "type": "bool" }, - "name": "quarter" + "default": false, + "title": "Value" }, { + "name": "name", "type": { - "type": "datetime" + "type": "str" }, - "name": "quarter_start" - }, + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." + } + ], + "outputs": [ { "type": { - "type": "datetime" + "type": "bool" }, - "name": "quarter_end" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "input_datetime" + "value" ], "is_dynamic": false }, { - "title": "Get Weekday", - "description": "Get the weekday name or number from a datetime.\n datetime, weekday, name\n\n Use cases:\n - Get day names for scheduling\n - Filter events by weekday", - "namespace": "nodetool.date", - "node_type": "nodetool.date.GetWeekday", + "title": "Chat Input", + "description": "Chat message input for workflows.\n input, parameter, chat, message\n\n Use cases:\n - Accept user prompts or queries\n - Capture conversational input\n - Provide instructions to language models", + "namespace": "nodetool.input", + "node_type": "nodetool.input.ChatInput", "layout": "default", "properties": [ { - "name": "input_datetime", + "name": "value", "type": { - "type": "datetime" + "type": "list", + "type_args": [ + { + "type": "message" + } + ] }, - "default": {}, - "title": "Input Datetime", - "description": "Input datetime" + "default": [], + "title": "Value", + "description": "The chat message to use as input." }, { - "name": "as_name", + "name": "name", "type": { - "type": "bool" + "type": "str" }, - "default": true, - "title": "As Name", - "description": "Return weekday name instead of number (0-6)" + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." } ], "outputs": [ { "type": { - "type": "union", + "type": "list", "type_args": [ { - "type": "str" - }, - { - "type": "int" + "type": "message" } ] }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "input_datetime", - "as_name" - ], - "is_dynamic": false - }, - { - "title": "Hours Ago", - "description": "Get datetime from specified hours ago.\n datetime, past, hours", - "namespace": "nodetool.date", - "node_type": "nodetool.date.HoursAgo", - "layout": "default", - "properties": [ + "name": "history" + }, { - "name": "hours", "type": { - "type": "int" + "type": "str" }, - "default": 1, - "title": "Hours", - "description": "Number of hours ago", - "min": 0.0 - } - ], - "outputs": [ + "name": "text" + }, { "type": { - "type": "datetime" + "type": "image" }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "hours" - ], - "is_dynamic": false - }, - { - "title": "Hours From Now", - "description": "Get datetime specified hours in the future.\n datetime, future, hours", - "namespace": "nodetool.date", - "node_type": "nodetool.date.HoursFromNow", - "layout": "default", - "properties": [ + "name": "image" + }, { - "name": "hours", "type": { - "type": "int" + "type": "audio" }, - "default": 1, - "title": "Hours", - "description": "Number of hours in the future", - "min": 0.0 - } - ], - "outputs": [ + "name": "audio" + }, { "type": { - "type": "datetime" + "type": "video" }, - "name": "output" + "name": "video" + }, + { + "type": { + "type": "document" + }, + "name": "document" + }, + { + "type": { + "type": "list", + "type_args": [ + { + "type": "tool_name" + } + ] + }, + "name": "tools" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "hours" + "value" ], "is_dynamic": false }, { - "title": "Is Date In Range", - "description": "Check if a date falls within a specified range.\n datetime, range, check\n\n Use cases:\n - Validate date ranges\n - Filter date-based data", - "namespace": "nodetool.date", - "node_type": "nodetool.date.IsDateInRange", + "title": "Collection Input", + "description": "Collection input for workflows.\n input, parameter, collection, chroma\n\n Use cases:\n - Select a vector database collection\n - Specify target collection for indexing\n - Choose collection for similarity search", + "namespace": "nodetool.input", + "node_type": "nodetool.input.CollectionInput", "layout": "default", "properties": [ { - "name": "check_date", - "type": { - "type": "datetime" - }, - "default": {}, - "title": "Check Date", - "description": "Date to check" - }, - { - "name": "start_date", - "type": { - "type": "datetime" - }, - "default": {}, - "title": "Start Date", - "description": "Start of date range" - }, - { - "name": "end_date", + "name": "value", "type": { - "type": "datetime" + "type": "collection" }, "default": {}, - "title": "End Date", - "description": "End of date range" + "title": "Value", + "description": "The collection to use as input." }, { - "name": "inclusive", + "name": "name", "type": { - "type": "bool" + "type": "str" }, - "default": true, - "title": "Inclusive", - "description": "Include start and end dates in range" + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." } ], "outputs": [ { "type": { - "type": "bool" + "type": "collection" }, "name": "output" } @@ -13218,68 +12444,87 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "check_date", - "start_date", - "end_date", - "inclusive" + "value" ], "is_dynamic": false }, { - "title": "Months Ago", - "description": "Get datetime from specified months ago.\n datetime, past, months", - "namespace": "nodetool.date", - "node_type": "nodetool.date.MonthsAgo", + "title": "Document File Input", + "description": "Document file input for workflows.\n input, parameter, document, text\n\n Use cases:\n - Load text documents for processing\n - Analyze document content\n - Extract text for NLP tasks\n - Index documents for search", + "namespace": "nodetool.input", + "node_type": "nodetool.input.DocumentFileInput", "layout": "default", "properties": [ { - "name": "months", + "name": "value", "type": { - "type": "int" + "type": "file_path" }, - "default": 1, - "title": "Months", - "description": "Number of months ago", - "min": 0.0 + "default": {}, + "title": "Value", + "description": "The path to the document file." + }, + { + "name": "name", + "type": { + "type": "str" + }, + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." } ], "outputs": [ { "type": { - "type": "datetime" + "type": "document" }, - "name": "output" + "name": "document" + }, + { + "type": { + "type": "file_path" + }, + "name": "path" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "months" + "value" ], "is_dynamic": false }, { - "title": "Months From Now", - "description": "Get datetime specified months in the future.\n datetime, future, months", - "namespace": "nodetool.date", - "node_type": "nodetool.date.MonthsFromNow", + "title": "Document Input", + "description": "Document asset input for workflows.\n input, parameter, document\n\n Use cases:\n - Load documents for processing\n - Analyze document content\n - Provide document input to models", + "namespace": "nodetool.input", + "node_type": "nodetool.input.DocumentInput", "layout": "default", "properties": [ { - "name": "months", + "name": "value", "type": { - "type": "int" + "type": "document" }, - "default": 1, - "title": "Months", - "description": "Number of months in the future", - "min": 0.0 + "default": {}, + "title": "Value", + "description": "The document to use as input." + }, + { + "name": "name", + "type": { + "type": "str" + }, + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." } ], "outputs": [ { "type": { - "type": "datetime" + "type": "document" }, "name": "output" } @@ -13287,72 +12532,48 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "months" + "value" ], "is_dynamic": false }, { - "title": "Now", - "description": "Get the current date and time.\n datetime, current, now", - "namespace": "nodetool.date", - "node_type": "nodetool.date.Now", + "title": "Enum Input", + "description": "Enumeration parameter input for workflows.\n input, parameter, enum, options, select\n\n Use cases:\n - Select from predefined options\n - Enforce choice from valid values\n - Configure categorical parameters", + "namespace": "nodetool.input", + "node_type": "nodetool.input.EnumInput", "layout": "default", - "properties": [], - "outputs": [ + "properties": [ { + "name": "value", "type": { - "type": "datetime" + "type": "str" }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [], - "is_dynamic": false - }, - { - "title": "Parse Date", - "description": "Parse a date string into components.\n date, parse, format", - "namespace": "nodetool.date", - "node_type": "nodetool.date.ParseDate", - "layout": "default", - "properties": [ + "default": "", + "title": "Value" + }, { - "name": "date_string", + "name": "name", "type": { "type": "str" }, "default": "", - "title": "Date String", - "description": "The date string to parse" + "title": "Name", + "description": "The parameter name for the workflow." }, { - "name": "input_format", + "name": "options", "type": { - "type": "enum", - "values": [ - "%Y-%m-%d", - "%m/%d/%Y", - "%d/%m/%Y", - "%B %d, %Y", - "%Y%m%d", - "%Y%m%d_%H%M%S", - "%Y-%m-%dT%H:%M:%S", - "%Y-%m-%dT%H:%M:%S%z", - "%Y-%m-%dT%H:%M:%S%z" - ], - "type_name": "nodetool.nodes.nodetool.date.DateFormat" + "type": "str" }, - "default": "%Y-%m-%d", - "title": "Input Format", - "description": "Format of the input date string" + "default": "", + "title": "Options", + "description": "Comma-separated list of valid options" } ], "outputs": [ { "type": { - "type": "date" + "type": "str" }, "name": "output" } @@ -13360,53 +12581,55 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "date_string", - "input_format" + "value" ], "is_dynamic": false }, { - "title": "Parse Date Time", - "description": "Parse a date/time string into components.\n datetime, parse, format\n\n Use cases:\n - Extract date components from strings\n - Convert between date formats", - "namespace": "nodetool.date", - "node_type": "nodetool.date.ParseDateTime", + "title": "Float Input", + "description": "Float parameter input for workflows.\n input, parameter, float, number\n\n Use cases:\n - Specify a numeric value within a defined range\n - Set thresholds or scaling factors\n - Configure continuous parameters like opacity or volume", + "namespace": "nodetool.input", + "node_type": "nodetool.input.FloatInput", "layout": "default", "properties": [ { - "name": "datetime_string", + "name": "value", + "type": { + "type": "float" + }, + "default": 0.0, + "title": "Value" + }, + { + "name": "name", "type": { "type": "str" }, "default": "", - "title": "Datetime String", - "description": "The datetime string to parse" + "title": "Name", + "description": "The parameter name for the workflow." }, { - "name": "input_format", + "name": "min", "type": { - "type": "enum", - "values": [ - "%Y-%m-%d", - "%m/%d/%Y", - "%d/%m/%Y", - "%B %d, %Y", - "%Y%m%d", - "%Y%m%d_%H%M%S", - "%Y-%m-%dT%H:%M:%S", - "%Y-%m-%dT%H:%M:%S%z", - "%Y-%m-%dT%H:%M:%S%z" - ], - "type_name": "nodetool.nodes.nodetool.date.DateFormat" + "type": "float" }, - "default": "%Y-%m-%d", - "title": "Input Format", - "description": "Format of the input datetime string" + "default": 0, + "title": "Min" + }, + { + "name": "max", + "type": { + "type": "float" + }, + "default": 100, + "title": "Max" } ], "outputs": [ { "type": { - "type": "datetime" + "type": "float" }, "name": "output" } @@ -13414,32 +12637,60 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "datetime_string", - "input_format" + "value" ], "is_dynamic": false }, { - "title": "Start Of Day", - "description": "Get the datetime set to the start of the day (00:00:00).\n datetime, day, start", - "namespace": "nodetool.date", - "node_type": "nodetool.date.StartOfDay", + "title": "Group Input", + "description": "Generic group input for loops.\n input, group, collection, loop\n\n Use cases:\n - provides input for a loop\n - iterates over a group of items", + "namespace": "nodetool.input", + "node_type": "nodetool.input.GroupInput", + "layout": "default", + "properties": [], + "outputs": [ + { + "type": { + "type": "any" + }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [], + "is_dynamic": false + }, + { + "title": "Image Input", + "description": "Image asset input for workflows.\n input, parameter, image\n\n Use cases:\n - Load images for processing or analysis\n - Provide visual input to models\n - Select images for manipulation", + "namespace": "nodetool.input", + "node_type": "nodetool.input.ImageInput", "layout": "default", "properties": [ { - "name": "input_datetime", + "name": "value", "type": { - "type": "datetime" + "type": "image" }, "default": {}, - "title": "Input Datetime", - "description": "Input datetime" + "title": "Value", + "description": "The image to use as input." + }, + { + "name": "name", + "type": { + "type": "str" + }, + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." } ], "outputs": [ { "type": { - "type": "datetime" + "type": "image" }, "name": "output" } @@ -13447,31 +12698,55 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "input_datetime" + "value" ], "is_dynamic": false }, { - "title": "Start Of Month", - "description": "Get the datetime set to the first day of the month.\n datetime, month, start", - "namespace": "nodetool.date", - "node_type": "nodetool.date.StartOfMonth", + "title": "Integer Input", + "description": "Integer parameter input for workflows.\n input, parameter, integer, number\n\n Use cases:\n - Specify counts or quantities\n - Set index values\n - Configure discrete numeric parameters", + "namespace": "nodetool.input", + "node_type": "nodetool.input.IntegerInput", "layout": "default", "properties": [ { - "name": "input_datetime", + "name": "value", "type": { - "type": "datetime" + "type": "int" }, - "default": {}, - "title": "Input Datetime", - "description": "Input datetime" + "default": 0, + "title": "Value" + }, + { + "name": "name", + "type": { + "type": "str" + }, + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." + }, + { + "name": "min", + "type": { + "type": "int" + }, + "default": 0, + "title": "Min" + }, + { + "name": "max", + "type": { + "type": "int" + }, + "default": 100, + "title": "Max" } ], "outputs": [ { "type": { - "type": "datetime" + "type": "int" }, "name": "output" } @@ -13479,40 +12754,40 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "input_datetime" + "value" ], "is_dynamic": false }, { - "title": "Start Of Week", - "description": "Get the datetime set to the first day of the week (Monday by default).\n datetime, week, start", - "namespace": "nodetool.date", - "node_type": "nodetool.date.StartOfWeek", + "title": "Path Input", + "description": "Local path input for workflows.\n input, parameter, path\n\n Use cases:\n - Provide a local path to a file or directory\n - Specify a file or directory for processing\n - Load local data for analysis", + "namespace": "nodetool.input", + "node_type": "nodetool.input.PathInput", "layout": "default", "properties": [ { - "name": "input_datetime", + "name": "value", "type": { - "type": "datetime" + "type": "file_path" }, "default": {}, - "title": "Input Datetime", - "description": "Input datetime" + "title": "Value", + "description": "The path to use as input." }, { - "name": "start_monday", + "name": "name", "type": { - "type": "bool" + "type": "str" }, - "default": true, - "title": "Start Monday", - "description": "Consider Monday as start of week (False for Sunday)" + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." } ], "outputs": [ { "type": { - "type": "datetime" + "type": "file_path" }, "name": "output" } @@ -13520,32 +12795,39 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "input_datetime", - "start_monday" + "value" ], "is_dynamic": false }, { - "title": "Start Of Year", - "description": "Get the datetime set to the first day of the year.\n datetime, year, start", - "namespace": "nodetool.date", - "node_type": "nodetool.date.StartOfYear", + "title": "String Input", + "description": "String parameter input for workflows.\n input, parameter, string, text\n\n Use cases:\n - Provide text labels or names\n - Enter search queries\n - Specify file paths or URLs", + "namespace": "nodetool.input", + "node_type": "nodetool.input.StringInput", "layout": "default", "properties": [ { - "name": "input_datetime", + "name": "value", "type": { - "type": "datetime" + "type": "str" }, - "default": {}, - "title": "Input Datetime", - "description": "Input datetime" + "default": "", + "title": "Value" + }, + { + "name": "name", + "type": { + "type": "str" + }, + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." } ], "outputs": [ { "type": { - "type": "datetime" + "type": "str" }, "name": "output" } @@ -13553,59 +12835,81 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "input_datetime" + "value" ], "is_dynamic": false }, { - "title": "Today", - "description": "Get the current date.\n date, today, now", - "namespace": "nodetool.date", - "node_type": "nodetool.date.Today", + "title": "Text Input", + "description": "Text content input for workflows.\n input, parameter, text\n\n Use cases:\n - Load text documents or articles\n - Process multi-line text content\n - Analyze large text bodies", + "namespace": "nodetool.input", + "node_type": "nodetool.input.TextInput", "layout": "default", - "properties": [], + "properties": [ + { + "name": "value", + "type": { + "type": "text" + }, + "default": {}, + "title": "Value", + "description": "The text to use as input." + }, + { + "name": "name", + "type": { + "type": "str" + }, + "default": "", + "title": "Name", + "description": "The parameter name for the workflow." + } + ], "outputs": [ { "type": { - "type": "date" + "type": "text" }, "name": "output" } ], "the_model_info": {}, "recommended_models": [], - "basic_fields": [], + "basic_fields": [ + "value" + ], "is_dynamic": false }, { - "title": "Base Get JSONPath", - "description": "Base class for extracting typed data from a JSON object using a path expression.\n json, path, extract\n\n Examples for an object {\"a\": {\"b\": {\"c\": 1}}}\n \"a.b.c\" -> 1\n \"a.b\" -> {\"c\": 1}\n \"a\" -> {\"b\": {\"c\": 1}}\n\n Use cases:\n - Navigate complex JSON structures\n - Extract specific values from nested JSON with type safety", - "namespace": "nodetool.json", - "node_type": "nodetool.json.BaseGetJSONPath", + "title": "Video Input", + "description": "Video asset input for workflows.\n input, parameter, video\n\n Use cases:\n - Load video files for processing\n - Analyze video content\n - Extract frames or audio from videos", + "namespace": "nodetool.input", + "node_type": "nodetool.input.VideoInput", "layout": "default", "properties": [ { - "name": "data", + "name": "value", "type": { - "type": "any" + "type": "video" }, - "title": "Data", - "description": "JSON object to extract from" + "default": {}, + "title": "Value", + "description": "The video to use as input." }, { - "name": "path", + "name": "name", "type": { "type": "str" }, "default": "", - "title": "Path", - "description": "Path to the desired value (dot notation)" + "title": "Name", + "description": "The parameter name for the workflow." } ], "outputs": [ { "type": { - "type": "any" + "type": "video" }, "name": "output" } @@ -13613,59 +12917,60 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "data", - "path" + "value" ], "is_dynamic": false }, { - "title": "Filter JSON", - "description": "Filter JSON array based on a key-value condition.\n json, filter, array\n\n Use cases:\n - Filter arrays of objects\n - Search JSON data", - "namespace": "nodetool.json", - "node_type": "nodetool.json.FilterJSON", + "title": "Chart Generator", + "description": "LLM Agent to create Plotly Express charts based on natural language descriptions.\n llm, data visualization, charts\n\n Use cases:\n - Generating interactive charts from natural language descriptions\n - Creating data visualizations with minimal configuration\n - Converting data analysis requirements into visual representations", + "namespace": "nodetool.generators", + "node_type": "nodetool.generators.ChartGenerator", "layout": "default", "properties": [ { - "name": "array", + "name": "model", "type": { - "type": "list", - "type_args": [ - { - "type": "dict" - } - ] + "type": "language_model" }, - "default": [], - "title": "Array", - "description": "Array of JSON objects to filter" + "default": {}, + "title": "Model", + "description": "The GPT model to use for chart generation." }, { - "name": "key", + "name": "prompt", "type": { "type": "str" }, "default": "", - "title": "Key", - "description": "Key to filter on" + "title": "Prompt", + "description": "Natural language description of the desired chart" }, { - "name": "value", + "name": "data", "type": { - "type": "any" + "type": "dataframe" }, - "title": "Value", - "description": "Value to match" + "default": {}, + "title": "Data", + "description": "The data to visualize" + }, + { + "name": "max_tokens", + "type": { + "type": "int" + }, + "default": 4096, + "title": "Max Tokens", + "description": "The maximum number of tokens to generate.", + "min": 1.0, + "max": 100000.0 } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "dict" - } - ] + "type": "plotly_config" }, "name": "output" } @@ -13673,50 +12978,71 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "array", - "key", - "value" + "prompt", + "data", + "model" ], "is_dynamic": false }, { - "title": "Get JSONPath Bool", - "description": "Extract a boolean value from a JSON path\n json, path, extract, boolean", - "namespace": "nodetool.json", - "node_type": "nodetool.json.GetJSONPathBool", + "title": "Data Generator", + "description": "LLM Agent to create a dataframe based on a user prompt.\n llm, dataframe creation, data structuring\n\n Use cases:\n - Generating structured data from natural language descriptions\n - Creating sample datasets for testing or demonstration\n - Converting unstructured text into tabular format", + "namespace": "nodetool.generators", + "node_type": "nodetool.generators.DataGenerator", "layout": "default", "properties": [ { - "name": "data", + "name": "model", "type": { - "type": "any" + "type": "language_model" + }, + "default": {}, + "title": "Model", + "description": "The GPT model to use for data generation." + }, + { + "name": "prompt", + "type": { + "type": "str" }, - "title": "Data", - "description": "JSON object to extract from" + "default": "", + "title": "Prompt", + "description": "The user prompt" }, { - "name": "path", + "name": "input_text", "type": { "type": "str" }, "default": "", - "title": "Path", - "description": "Path to the desired value (dot notation)" + "title": "Input Text", + "description": "The input text to be analyzed by the agent." }, { - "name": "default", + "name": "max_tokens", "type": { - "type": "bool" + "type": "int" }, - "default": false, - "title": "Default", - "description": "Default value to return if path is not found" + "default": 4096, + "title": "Max Tokens", + "description": "The maximum number of tokens to generate.", + "min": 1.0, + "max": 100000.0 + }, + { + "name": "columns", + "type": { + "type": "record_type" + }, + "default": {}, + "title": "Columns", + "description": "The columns to use in the dataframe." } ], "outputs": [ { "type": { - "type": "bool" + "type": "dataframe" }, "name": "output" } @@ -13724,50 +13050,71 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "data", - "path", - "default" + "prompt", + "model", + "columns" ], "is_dynamic": false }, { - "title": "Get JSONPath Dict", - "description": "Extract a dictionary value from a JSON path\n json, path, extract, object", - "namespace": "nodetool.json", - "node_type": "nodetool.json.GetJSONPathDict", + "title": "Data Streamer", + "description": "LLM Agent to create a stream of data based on a user prompt.\n llm, data streaming, data structuring\n\n Use cases:\n - Generating structured data from natural language descriptions\n - Creating sample datasets for testing or demonstration", + "namespace": "nodetool.generators", + "node_type": "nodetool.generators.DataStreamer", "layout": "default", "properties": [ { - "name": "data", + "name": "model", "type": { - "type": "any" + "type": "language_model" }, - "title": "Data", - "description": "JSON object to extract from" + "default": {}, + "title": "Model", + "description": "The GPT model to use for data generation." }, { - "name": "path", + "name": "prompt", "type": { "type": "str" }, "default": "", - "title": "Path", - "description": "Path to the desired value (dot notation)" + "title": "Prompt", + "description": "The user prompt" }, { - "name": "default", + "name": "input_text", "type": { - "type": "dict" + "type": "str" + }, + "default": "", + "title": "Input Text", + "description": "The input text to be analyzed by the agent." + }, + { + "name": "max_tokens", + "type": { + "type": "int" + }, + "default": 4096, + "title": "Max Tokens", + "description": "The maximum number of tokens to generate.", + "min": 1.0, + "max": 100000.0 + }, + { + "name": "columns", + "type": { + "type": "record_type" }, "default": {}, - "title": "Default", - "description": "Default value to return if path is not found" + "title": "Columns", + "description": "The columns to use in the dataframe." } ], "outputs": [ { "type": { - "type": "dict" + "type": "any" }, "name": "output" } @@ -13775,101 +13122,144 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "data", - "path", - "default" + "prompt", + "model", + "columns" ], "is_dynamic": false }, { - "title": "Get JSONPath Float", - "description": "Extract a float value from a JSON path\n json, path, extract, number", - "namespace": "nodetool.json", - "node_type": "nodetool.json.GetJSONPathFloat", + "title": "List Generator", + "description": "LLM Agent to create a stream of strings based on a user prompt.\n llm, text streaming\n\n Use cases:\n - Generating text from natural language descriptions\n - Streaming responses from an LLM", + "namespace": "nodetool.generators", + "node_type": "nodetool.generators.ListGenerator", "layout": "default", "properties": [ { - "name": "data", + "name": "model", "type": { - "type": "any" + "type": "language_model" }, - "title": "Data", - "description": "JSON object to extract from" + "default": {}, + "title": "Model", + "description": "The GPT model to use for string generation." }, { - "name": "path", + "name": "prompt", "type": { "type": "str" }, "default": "", - "title": "Path", - "description": "Path to the desired value (dot notation)" + "title": "Prompt", + "description": "The user prompt" }, { - "name": "default", + "name": "input_text", "type": { - "type": "float" + "type": "str" }, - "default": 0.0, - "title": "Default", - "description": "Default value to return if path is not found" + "default": "", + "title": "Input Text", + "description": "The input text to be analyzed by the agent." + }, + { + "name": "max_tokens", + "type": { + "type": "int" + }, + "default": 4096, + "title": "Max Tokens", + "description": "The maximum number of tokens to generate.", + "min": 1.0, + "max": 100000.0 } ], "outputs": [ { "type": { - "type": "float" + "type": "str" }, - "name": "output" + "name": "item" + }, + { + "type": { + "type": "int" + }, + "name": "index" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "data", - "path", - "default" + "prompt", + "model" ], "is_dynamic": false }, { - "title": "Get JSONPath Int", - "description": "Extract an integer value from a JSON path\n json, path, extract, number", - "namespace": "nodetool.json", - "node_type": "nodetool.json.GetJSONPathInt", + "title": "SVGGenerator", + "description": "LLM Agent to create SVG elements based on user prompts.\n svg, generator, vector, graphics\n\n Use cases:\n - Creating vector graphics from text descriptions\n - Generating scalable illustrations\n - Creating custom icons and diagrams", + "namespace": "nodetool.generators", + "node_type": "nodetool.generators.SVGGenerator", "layout": "default", "properties": [ { - "name": "data", + "name": "model", "type": { - "type": "any" + "type": "language_model" }, - "title": "Data", - "description": "JSON object to extract from" + "default": {}, + "title": "Model", + "description": "The language model to use for SVG generation." }, { - "name": "path", + "name": "prompt", "type": { "type": "str" }, "default": "", - "title": "Path", - "description": "Path to the desired value (dot notation)" + "title": "Prompt", + "description": "The user prompt for SVG generation" }, { - "name": "default", + "name": "image", + "type": { + "type": "image" + }, + "default": {}, + "title": "Image", + "description": "Image to use for generation" + }, + { + "name": "audio", + "type": { + "type": "audio" + }, + "default": {}, + "title": "Audio", + "description": "Audio to use for generation" + }, + { + "name": "max_tokens", "type": { "type": "int" }, - "default": 0, - "title": "Default", - "description": "Default value to return if path is not found" + "default": 8192, + "title": "Max Tokens", + "description": "The maximum number of tokens to generate.", + "min": 1.0, + "max": 100000.0 } ], "outputs": [ { "type": { - "type": "int" + "type": "list", + "type_args": [ + { + "type": "svg_element" + } + ] }, "name": "output" } @@ -13877,50 +13267,39 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "data", - "path", - "default" + "prompt", + "image", + "audio", + "model" ], "is_dynamic": false }, { - "title": "Get JSONPath List", - "description": "Extract a list value from a JSON path\n json, path, extract, array", - "namespace": "nodetool.json", - "node_type": "nodetool.json.GetJSONPathList", + "title": "Batch To List", + "description": "Convert an image batch to a list of image references.\n batch, list, images, processing\n\n Use cases:\n - Convert comfy batch outputs to list format", + "namespace": "nodetool.image", + "node_type": "nodetool.image.BatchToList", "layout": "default", "properties": [ { - "name": "data", - "type": { - "type": "any" - }, - "title": "Data", - "description": "JSON object to extract from" - }, - { - "name": "path", - "type": { - "type": "str" - }, - "default": "", - "title": "Path", - "description": "Path to the desired value (dot notation)" - }, - { - "name": "default", + "name": "batch", "type": { - "type": "list" + "type": "image" }, - "default": [], - "title": "Default", - "description": "Default value to return if path is not found" + "default": {}, + "title": "Batch", + "description": "The batch of images to convert." } ], "outputs": [ { "type": { - "type": "list" + "type": "list", + "type_args": [ + { + "type": "image" + } + ] }, "name": "output" } @@ -13928,50 +13307,75 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "data", - "path", - "default" + "batch" ], "is_dynamic": false }, { - "title": "Get JSONPath Str", - "description": "Extract a string value from a JSON path\n json, path, extract, string", - "namespace": "nodetool.json", - "node_type": "nodetool.json.GetJSONPathStr", + "title": "Crop", + "description": "Crop an image to specified coordinates.\n image, crop\n\n - Remove unwanted borders from images\n - Focus on particular subjects within an image\n - Simplify images by removing distractions", + "namespace": "nodetool.image", + "node_type": "nodetool.image.Crop", "layout": "default", "properties": [ { - "name": "data", + "name": "image", "type": { - "type": "any" + "type": "image" }, - "title": "Data", - "description": "JSON object to extract from" + "default": {}, + "title": "Image", + "description": "The image to crop." }, { - "name": "path", + "name": "left", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Path", - "description": "Path to the desired value (dot notation)" + "default": 0, + "title": "Left", + "description": "The left coordinate.", + "min": 0.0, + "max": 4096.0 }, { - "name": "default", + "name": "top", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Default", - "description": "Default value to return if path is not found" + "default": 0, + "title": "Top", + "description": "The top coordinate.", + "min": 0.0, + "max": 4096.0 + }, + { + "name": "right", + "type": { + "type": "int" + }, + "default": 512, + "title": "Right", + "description": "The right coordinate.", + "min": 0.0, + "max": 4096.0 + }, + { + "name": "bottom", + "type": { + "type": "int" + }, + "default": 512, + "title": "Bottom", + "description": "The bottom coordinate.", + "min": 0.0, + "max": 4096.0 } ], "outputs": [ { "type": { - "type": "str" + "type": "image" }, "name": "output" } @@ -13979,50 +13383,57 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "data", - "path", - "default" + "image", + "left", + "top", + "right", + "bottom" ], "is_dynamic": false }, { - "title": "JSON Template", - "description": "Template JSON strings with variable substitution.\n json, template, substitute, variables\n\n Example:\n template: '{\"name\": \"$user\", \"age\": $age}'\n values: {\"user\": \"John\", \"age\": 30}\n result: '{\"name\": \"John\", \"age\": 30}'\n\n Use cases:\n - Create dynamic JSON payloads\n - Generate JSON with variable data\n - Build API request templates", - "namespace": "nodetool.json", - "node_type": "nodetool.json.JSONTemplate", + "title": "Fit", + "description": "Resize an image to fit within specified dimensions while preserving aspect ratio.\n image, resize, fit\n\n - Resize images for online publishing requirements\n - Preprocess images to uniform sizes for machine learning\n - Control image display sizes for web development", + "namespace": "nodetool.image", + "node_type": "nodetool.image.Fit", "layout": "default", "properties": [ { - "name": "template", + "name": "image", "type": { - "type": "str" + "type": "image" }, - "default": "", - "title": "Template", - "description": "JSON template string with $variable placeholders" + "default": {}, + "title": "Image", + "description": "The image to fit." }, { - "name": "values", + "name": "width", "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] + "type": "int" }, - "default": {}, - "title": "Values", - "description": "Dictionary of values to substitute into the template" + "default": 512, + "title": "Width", + "description": "Width to fit to.", + "min": 1.0, + "max": 4096.0 + }, + { + "name": "height", + "type": { + "type": "int" + }, + "default": 512, + "title": "Height", + "description": "Height to fit to.", + "min": 1.0, + "max": 4096.0 } ], "outputs": [ { "type": { - "type": "dict" + "type": "image" }, "name": "output" } @@ -14030,184 +13441,158 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "template", - "values" + "image", + "width", + "height" ], "is_dynamic": false }, { - "title": "Load JSON Folder", - "description": "Load JSON files from an asset folder.\n load, json, file, import", - "namespace": "nodetool.json", - "node_type": "nodetool.json.LoadJSONAssets", + "title": "Get Metadata", + "description": "Get metadata about the input image.\n metadata, properties, analysis, information\n\n Use cases:\n - Use width and height for layout calculations\n - Analyze image properties for processing decisions\n - Gather information for image cataloging or organization", + "namespace": "nodetool.image", + "node_type": "nodetool.image.GetMetadata", "layout": "default", "properties": [ { - "name": "folder", + "name": "image", "type": { - "type": "folder" + "type": "image" }, "default": {}, - "title": "Folder", - "description": "The asset folder to load the JSON files from." + "title": "Image", + "description": "The input image." } ], "outputs": [ - { - "type": { - "type": "dict" - }, - "name": "json" - }, { "type": { "type": "str" }, - "name": "name" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "folder" - ], - "is_dynamic": false - }, - { - "title": "Parse Dict", - "description": "Parse a JSON string into a Python dictionary.\n json, parse, decode, dictionary\n\n Use cases:\n - Convert JSON API responses to Python dictionaries\n - Process JSON configuration files\n - Parse object-like JSON data", - "namespace": "nodetool.json", - "node_type": "nodetool.json.ParseDict", - "layout": "default", - "properties": [ + "name": "format" + }, { - "name": "json_string", "type": { "type": "str" }, - "default": "", - "title": "Json String", - "description": "JSON string to parse into a dictionary" - } - ], - "outputs": [ + "name": "mode" + }, { "type": { - "type": "dict" + "type": "int" }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "json_string" - ], - "is_dynamic": false - }, - { - "title": "Parse List", - "description": "Parse a JSON string into a Python list.\n json, parse, decode, array, list\n\n Use cases:\n - Convert JSON array responses to Python lists\n - Process JSON data collections\n - Parse array-like JSON data", - "namespace": "nodetool.json", - "node_type": "nodetool.json.ParseList", - "layout": "default", - "properties": [ + "name": "width" + }, { - "name": "json_string", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Json String", - "description": "JSON string to parse into a list" - } - ], - "outputs": [ + "name": "height" + }, { "type": { - "type": "list" + "type": "int" }, - "name": "output" + "name": "channels" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "json_string" + "image" ], "is_dynamic": false }, { - "title": "Stringify JSON", - "description": "Convert a Python object to a JSON string.\n json, stringify, encode\n\n Use cases:\n - Prepare data for API requests\n - Save data in JSON format", - "namespace": "nodetool.json", - "node_type": "nodetool.json.StringifyJSON", + "title": "Load Image Assets", + "description": "Load images from an asset folder.\n load, image, file, import", + "namespace": "nodetool.image", + "node_type": "nodetool.image.LoadImageAssets", "layout": "default", "properties": [ { - "name": "data", + "name": "folder", "type": { - "type": "any" + "type": "folder" }, "default": {}, - "title": "Data", - "description": "Data to convert to JSON" - }, - { - "name": "indent", - "type": { - "type": "int" - }, - "default": 2, - "title": "Indent", - "description": "Number of spaces for indentation" + "title": "Folder", + "description": "The asset folder to load the images from." } ], "outputs": [ + { + "type": { + "type": "image" + }, + "name": "image" + }, { "type": { "type": "str" }, - "name": "output" + "name": "name" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "data", - "indent" + "folder" ], "is_dynamic": false }, { - "title": "Validate JSON", - "description": "Validate JSON data against a schema.\n json, validate, schema\n\n Use cases:\n - Ensure API payloads match specifications\n - Validate configuration files", - "namespace": "nodetool.json", - "node_type": "nodetool.json.ValidateJSON", + "title": "Paste", + "description": "Paste one image onto another at specified coordinates.\n paste, composite, positioning, overlay\n\n Use cases:\n - Add watermarks or logos to images\n - Combine multiple image elements\n - Create collages or montages", + "namespace": "nodetool.image", + "node_type": "nodetool.image.Paste", "layout": "default", "properties": [ { - "name": "data", + "name": "image", "type": { - "type": "any" + "type": "image" }, - "title": "Data", - "description": "JSON data to validate" + "default": {}, + "title": "Image", + "description": "The image to paste into." }, { - "name": "schema", + "name": "paste", "type": { - "type": "dict" + "type": "image" }, "default": {}, - "title": "Schema", - "description": "JSON schema for validation" + "title": "Paste", + "description": "The image to paste." + }, + { + "name": "left", + "type": { + "type": "int" + }, + "default": 0, + "title": "Left", + "description": "The left coordinate.", + "min": 0.0, + "max": 4096.0 + }, + { + "name": "top", + "type": { + "type": "int" + }, + "default": 0, + "title": "Top", + "description": "The top coordinate.", + "min": 0.0, + "max": 4096.0 } ], "outputs": [ { "type": { - "type": "bool" + "type": "image" }, "name": "output" } @@ -14215,61 +13600,56 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "data", - "schema" + "image", + "paste", + "left", + "top" ], "is_dynamic": false }, { - "title": "Add Audio", - "description": "Add an audio track to a video, replacing or mixing with existing audio.\n video, audio, soundtrack, merge\n\n Use cases:\n 1. Add background music or narration to a silent video\n 2. Replace original audio with a new soundtrack\n 3. Mix new audio with existing video sound", - "namespace": "nodetool.video", - "node_type": "nodetool.video.AddAudio", + "title": "Resize", + "description": "Change image dimensions to specified width and height.\n image, resize\n\n - Preprocess images for machine learning model inputs\n - Optimize images for faster web page loading\n - Create uniform image sizes for layouts", + "namespace": "nodetool.image", + "node_type": "nodetool.image.Resize", "layout": "default", "properties": [ { - "name": "video", - "type": { - "type": "video" - }, - "default": {}, - "title": "Video", - "description": "The input video to add audio to." - }, - { - "name": "audio", + "name": "image", "type": { - "type": "audio" + "type": "image" }, "default": {}, - "title": "Audio", - "description": "The audio file to add to the video." + "title": "Image", + "description": "The image to resize." }, { - "name": "volume", + "name": "width", "type": { - "type": "float" + "type": "int" }, - "default": 1.0, - "title": "Volume", - "description": "Volume adjustment for the added audio. 1.0 is original volume.", + "default": 512, + "title": "Width", + "description": "The target width.", "min": 0.0, - "max": 2.0 + "max": 4096.0 }, { - "name": "mix", + "name": "height", "type": { - "type": "bool" + "type": "int" }, - "default": false, - "title": "Mix", - "description": "If True, mix new audio with existing. If False, replace existing audio." + "default": 512, + "title": "Height", + "description": "The target height.", + "min": 0.0, + "max": 4096.0 } ], "outputs": [ { "type": { - "type": "video" + "type": "image" }, "name": "output" } @@ -14277,94 +13657,96 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video", - "audio", - "volume", - "mix" + "image", + "width", + "height" ], "is_dynamic": false }, { - "title": "Add Subtitles", - "description": "Add subtitles to a video.\n video, subtitles, text, caption\n\n Use cases:\n 1. Add translations or closed captions to videos\n 2. Include explanatory text or commentary in educational videos\n 3. Create lyric videos for music content", - "namespace": "nodetool.video", - "node_type": "nodetool.video.AddSubtitles", + "title": "Save Image Asset", + "description": "Save an image to specified asset folder with customizable name format.\n save, image, folder, naming\n\n Use cases:\n - Save generated images with timestamps\n - Organize outputs into specific folders\n - Create backups of processed images", + "namespace": "nodetool.image", + "node_type": "nodetool.image.SaveImage", "layout": "default", "properties": [ { - "name": "video", + "name": "image", "type": { - "type": "video" + "type": "image" }, "default": {}, - "title": "Video", - "description": "The input video to add subtitles to." + "title": "Image", + "description": "The image to save." }, { - "name": "chunks", + "name": "folder", "type": { - "type": "list", - "type_args": [ - { - "type": "audio_chunk" - } - ] + "type": "folder" }, - "default": [], - "title": "Chunks", - "description": "Audio chunks to add as subtitles." + "default": {}, + "title": "Folder", + "description": "The asset folder to save the image in." }, { - "name": "font", + "name": "name", "type": { - "type": "font" + "type": "str" }, - "default": {}, - "title": "Font", - "description": "The font to use." - }, + "default": "%Y-%m-%d_%H-%M-%S.png", + "title": "Name", + "description": "\n Name of the output file.\n You can use time and date variables to create unique names:\n %Y - Year\n %m - Month\n %d - Day\n %H - Hour\n %M - Minute\n %S - Second\n " + } + ], + "outputs": [ { - "name": "align", "type": { - "type": "enum", - "values": [ - "top", - "center", - "bottom" - ], - "type_name": "nodetool.nodes.nodetool.video.SubtitleTextAlignment" + "type": "image" }, - "default": "bottom", - "title": "Align", - "description": "Vertical alignment of subtitles." - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "image", + "folder", + "name" + ], + "is_dynamic": false + }, + { + "title": "Scale", + "description": "Enlarge or shrink an image by a scale factor.\n image, resize, scale\n\n - Adjust image dimensions for display galleries\n - Standardize image sizes for machine learning datasets\n - Create thumbnail versions of images", + "namespace": "nodetool.image", + "node_type": "nodetool.image.Scale", + "layout": "default", + "properties": [ { - "name": "font_size", + "name": "image", "type": { - "type": "int" + "type": "image" }, - "default": 24, - "title": "Font Size", - "description": "The font size.", - "min": 1.0, - "max": 72.0 + "default": {}, + "title": "Image", + "description": "The image to scale." }, { - "name": "font_color", + "name": "scale", "type": { - "type": "color" - }, - "default": { - "value": "#FFFFFF" + "type": "float" }, - "title": "Font Color", - "description": "The font color." + "default": 1.0, + "title": "Scale", + "description": "The scale factor.", + "min": 0.0, + "max": 10.0 } ], "outputs": [ { "type": { - "type": "video" + "type": "image" }, "name": "output" } @@ -14372,47 +13754,40 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video", - "chunks", - "font", - "align", - "font_size", - "font_color" + "image", + "scale" ], "is_dynamic": false }, { - "title": "Blur", - "description": "Apply a blur effect to a video.\n video, blur, smooth, soften\n\n Use cases:\n 1. Create a dreamy or soft focus effect\n 2. Obscure or censor specific areas of the video\n 3. Reduce noise or grain in low-quality footage", - "namespace": "nodetool.video", - "node_type": "nodetool.video.Blur", + "title": "Base Get JSONPath", + "description": "Base class for extracting typed data from a JSON object using a path expression.\n json, path, extract\n\n Examples for an object {\"a\": {\"b\": {\"c\": 1}}}\n \"a.b.c\" -> 1\n \"a.b\" -> {\"c\": 1}\n \"a\" -> {\"b\": {\"c\": 1}}\n\n Use cases:\n - Navigate complex JSON structures\n - Extract specific values from nested JSON with type safety", + "namespace": "nodetool.json", + "node_type": "nodetool.json.BaseGetJSONPath", "layout": "default", "properties": [ { - "name": "video", + "name": "data", "type": { - "type": "video" + "type": "any" }, - "default": {}, - "title": "Video", - "description": "The input video to apply blur effect." + "title": "Data", + "description": "JSON object to extract from" }, { - "name": "strength", + "name": "path", "type": { - "type": "float" + "type": "str" }, - "default": 5.0, - "title": "Strength", - "description": "The strength of the blur effect. Higher values create a stronger blur.", - "min": 0.0, - "max": 20.0 + "default": "", + "title": "Path", + "description": "Path to the desired value (dot notation)" } ], "outputs": [ { "type": { - "type": "video" + "type": "any" }, "name": "output" } @@ -14420,65 +13795,59 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video", - "strength" + "data", + "path" ], "is_dynamic": false }, { - "title": "Chroma Key", - "description": "Apply chroma key (green screen) effect to a video.\n video, chroma key, green screen, compositing\n\n Use cases:\n 1. Remove green or blue background from video footage\n 2. Create special effects by compositing video onto new backgrounds\n 3. Produce professional-looking videos for presentations or marketing", - "namespace": "nodetool.video", - "node_type": "nodetool.video.ChromaKey", + "title": "Filter JSON", + "description": "Filter JSON array based on a key-value condition.\n json, filter, array\n\n Use cases:\n - Filter arrays of objects\n - Search JSON data", + "namespace": "nodetool.json", + "node_type": "nodetool.json.FilterJSON", "layout": "default", "properties": [ { - "name": "video", - "type": { - "type": "video" - }, - "default": {}, - "title": "Video", - "description": "The input video to apply chroma key effect." - }, - { - "name": "key_color", + "name": "array", "type": { - "type": "color" - }, - "default": { - "value": "#00FF00" + "type": "list", + "type_args": [ + { + "type": "dict" + } + ] }, - "title": "Key Color", - "description": "The color to key out (e.g., '#00FF00' for green)." + "default": [], + "title": "Array", + "description": "Array of JSON objects to filter" }, { - "name": "similarity", + "name": "key", "type": { - "type": "float" + "type": "str" }, - "default": 0.3, - "title": "Similarity", - "description": "Similarity threshold for the key color.", - "min": 0.0, - "max": 1.0 + "default": "", + "title": "Key", + "description": "Key to filter on" }, { - "name": "blend", + "name": "value", "type": { - "type": "float" + "type": "any" }, - "default": 0.1, - "title": "Blend", - "description": "Blending of the keyed area edges.", - "min": 0.0, - "max": 1.0 + "title": "Value", + "description": "Value to match" } ], "outputs": [ { "type": { - "type": "video" + "type": "list", + "type_args": [ + { + "type": "dict" + } + ] }, "name": "output" } @@ -14486,67 +13855,50 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video", - "key_color", - "similarity", - "blend" + "array", + "key", + "value" ], "is_dynamic": false }, { - "title": "Color Balance", - "description": "Adjust the color balance of a video.\n video, color, balance, adjustment\n\n Use cases:\n 1. Correct color casts in video footage\n 2. Enhance specific color tones for artistic effect\n 3. Normalize color balance across multiple video clips", - "namespace": "nodetool.video", - "node_type": "nodetool.video.ColorBalance", + "title": "Get JSONPath Bool", + "description": "Extract a boolean value from a JSON path\n json, path, extract, boolean", + "namespace": "nodetool.json", + "node_type": "nodetool.json.GetJSONPathBool", "layout": "default", "properties": [ { - "name": "video", - "type": { - "type": "video" - }, - "default": {}, - "title": "Video", - "description": "The input video to adjust color balance." - }, - { - "name": "red_adjust", + "name": "data", "type": { - "type": "float" + "type": "any" }, - "default": 1.0, - "title": "Red Adjust", - "description": "Red channel adjustment factor.", - "min": 0.0, - "max": 2.0 + "title": "Data", + "description": "JSON object to extract from" }, { - "name": "green_adjust", + "name": "path", "type": { - "type": "float" + "type": "str" }, - "default": 1.0, - "title": "Green Adjust", - "description": "Green channel adjustment factor.", - "min": 0.0, - "max": 2.0 + "default": "", + "title": "Path", + "description": "Path to the desired value (dot notation)" }, { - "name": "blue_adjust", + "name": "default", "type": { - "type": "float" + "type": "bool" }, - "default": 1.0, - "title": "Blue Adjust", - "description": "Blue channel adjustment factor.", - "min": 0.0, - "max": 2.0 + "default": false, + "title": "Default", + "description": "Default value to return if path is not found" } ], "outputs": [ { "type": { - "type": "video" + "type": "bool" }, "name": "output" } @@ -14554,43 +13906,50 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video", - "red_adjust", - "green_adjust", - "blue_adjust" + "data", + "path", + "default" ], "is_dynamic": false }, { - "title": "Concat", - "description": "Concatenate multiple video files into a single video, including audio when available.\n video, concat, merge, combine, audio, +", - "namespace": "nodetool.video", - "node_type": "nodetool.video.Concat", + "title": "Get JSONPath Dict", + "description": "Extract a dictionary value from a JSON path\n json, path, extract, object", + "namespace": "nodetool.json", + "node_type": "nodetool.json.GetJSONPathDict", "layout": "default", "properties": [ { - "name": "video_a", + "name": "data", "type": { - "type": "video" + "type": "any" }, - "default": {}, - "title": "Video A", - "description": "The first video to concatenate." + "title": "Data", + "description": "JSON object to extract from" }, { - "name": "video_b", + "name": "path", "type": { - "type": "video" + "type": "str" + }, + "default": "", + "title": "Path", + "description": "Path to the desired value (dot notation)" + }, + { + "name": "default", + "type": { + "type": "dict" }, "default": {}, - "title": "Video B", - "description": "The second video to concatenate." + "title": "Default", + "description": "Default value to return if path is not found" } ], "outputs": [ { "type": { - "type": "video" + "type": "dict" }, "name": "output" } @@ -14598,43 +13957,50 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video_a", - "video_b" + "data", + "path", + "default" ], "is_dynamic": false }, { - "title": "Denoise", - "description": "Apply noise reduction to a video.\n video, denoise, clean, enhance\n\n Use cases:\n 1. Improve video quality by reducing unwanted noise\n 2. Enhance low-light footage\n 3. Prepare video for further processing or compression", - "namespace": "nodetool.video", - "node_type": "nodetool.video.Denoise", + "title": "Get JSONPath Float", + "description": "Extract a float value from a JSON path\n json, path, extract, number", + "namespace": "nodetool.json", + "node_type": "nodetool.json.GetJSONPathFloat", "layout": "default", "properties": [ { - "name": "video", + "name": "data", "type": { - "type": "video" + "type": "any" }, - "default": {}, - "title": "Video", - "description": "The input video to denoise." + "title": "Data", + "description": "JSON object to extract from" }, { - "name": "strength", + "name": "path", + "type": { + "type": "str" + }, + "default": "", + "title": "Path", + "description": "Path to the desired value (dot notation)" + }, + { + "name": "default", "type": { "type": "float" }, - "default": 5.0, - "title": "Strength", - "description": "Strength of the denoising effect. Higher values mean more denoising.", - "min": 0.0, - "max": 20.0 + "default": 0.0, + "title": "Default", + "description": "Default value to return if path is not found" } ], "outputs": [ { "type": { - "type": "video" + "type": "float" }, "name": "output" } @@ -14642,32 +14008,50 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video", - "strength" + "data", + "path", + "default" ], "is_dynamic": false }, { - "title": "Extract Audio", - "description": "Separate audio from a video file.\n video, audio, extract, separate", - "namespace": "nodetool.video", - "node_type": "nodetool.video.ExtractAudio", + "title": "Get JSONPath Int", + "description": "Extract an integer value from a JSON path\n json, path, extract, number", + "namespace": "nodetool.json", + "node_type": "nodetool.json.GetJSONPathInt", "layout": "default", "properties": [ { - "name": "video", + "name": "data", + "type": { + "type": "any" + }, + "title": "Data", + "description": "JSON object to extract from" + }, + { + "name": "path", + "type": { + "type": "str" + }, + "default": "", + "title": "Path", + "description": "Path to the desired value (dot notation)" + }, + { + "name": "default", "type": { - "type": "video" + "type": "int" }, - "default": {}, - "title": "Video", - "description": "The input video to separate." + "default": 0, + "title": "Default", + "description": "Default value to return if path is not found" } ], "outputs": [ { "type": { - "type": "audio" + "type": "int" }, "name": "output" } @@ -14675,31 +14059,50 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video" + "data", + "path", + "default" ], "is_dynamic": false }, { - "title": "Fps", - "description": "Get the frames per second (FPS) of a video file.\n video, analysis, frames, fps\n\n Use cases:\n 1. Analyze video properties for quality assessment\n 2. Determine appropriate playback speed for video editing\n 3. Ensure compatibility with target display systems", - "namespace": "nodetool.video", - "node_type": "nodetool.video.Fps", + "title": "Get JSONPath List", + "description": "Extract a list value from a JSON path\n json, path, extract, array", + "namespace": "nodetool.json", + "node_type": "nodetool.json.GetJSONPathList", "layout": "default", "properties": [ { - "name": "video", + "name": "data", "type": { - "type": "video" + "type": "any" }, - "default": {}, - "title": "Video", - "description": "The input video to analyze for FPS." + "title": "Data", + "description": "JSON object to extract from" + }, + { + "name": "path", + "type": { + "type": "str" + }, + "default": "", + "title": "Path", + "description": "Path to the desired value (dot notation)" + }, + { + "name": "default", + "type": { + "type": "list" + }, + "default": [], + "title": "Default", + "description": "Default value to return if path is not found" } ], "outputs": [ { "type": { - "type": "float" + "type": "list" }, "name": "output" } @@ -14707,130 +14110,101 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video" + "data", + "path", + "default" ], "is_dynamic": false }, { - "title": "Frame Iterator", - "description": "Extract frames from a video file using OpenCV.\n video, frames, extract, sequence\n\n Use cases:\n 1. Generate image sequences for further processing\n 2. Extract specific frame ranges from a video\n 3. Create thumbnails or previews from video content", - "namespace": "nodetool.video", - "node_type": "nodetool.video.FrameIterator", + "title": "Get JSONPath Str", + "description": "Extract a string value from a JSON path\n json, path, extract, string", + "namespace": "nodetool.json", + "node_type": "nodetool.json.GetJSONPathStr", "layout": "default", "properties": [ { - "name": "video", + "name": "data", "type": { - "type": "video" + "type": "any" }, - "default": {}, - "title": "Video", - "description": "The input video to extract frames from." + "title": "Data", + "description": "JSON object to extract from" }, { - "name": "start", + "name": "path", "type": { - "type": "int" + "type": "str" }, - "default": 0, - "title": "Start", - "description": "The frame to start extracting from." + "default": "", + "title": "Path", + "description": "Path to the desired value (dot notation)" }, { - "name": "end", + "name": "default", "type": { - "type": "int" + "type": "str" }, - "default": -1, - "title": "End", - "description": "The frame to stop extracting from." + "default": "", + "title": "Default", + "description": "Default value to return if path is not found" } ], "outputs": [ { "type": { - "type": "image" - }, - "name": "frame" - }, - { - "type": { - "type": "int" - }, - "name": "index" - }, - { - "type": { - "type": "float" - }, - "name": "fps" - }, - { - "type": { - "type": "event" + "type": "str" }, - "name": "event" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video", - "start", - "end" + "data", + "path", + "default" ], "is_dynamic": false }, { - "title": "Frame To Video", - "description": "Combine a sequence of frames into a single video file.\n video, frames, combine, sequence\n\n Use cases:\n 1. Create time-lapse videos from image sequences\n 2. Compile processed frames back into a video\n 3. Generate animations from individual images", - "namespace": "nodetool.video", - "node_type": "nodetool.video.FrameToVideo", + "title": "JSON Template", + "description": "Template JSON strings with variable substitution.\n json, template, substitute, variables\n\n Example:\n template: '{\"name\": \"$user\", \"age\": $age}'\n values: {\"user\": \"John\", \"age\": 30}\n result: '{\"name\": \"John\", \"age\": 30}'\n\n Use cases:\n - Create dynamic JSON payloads\n - Generate JSON with variable data\n - Build API request templates", + "namespace": "nodetool.json", + "node_type": "nodetool.json.JSONTemplate", "layout": "default", "properties": [ { - "name": "frame", - "type": { - "type": "image" - }, - "default": {}, - "title": "Frame", - "description": "Collect input frames" - }, - { - "name": "index", - "type": { - "type": "int" - }, - "default": 0, - "title": "Index", - "description": "Index of the current frame. -1 signals end of stream." - }, - { - "name": "fps", + "name": "template", "type": { - "type": "float" + "type": "str" }, - "default": 30, - "title": "Fps", - "description": "The FPS of the output video." + "default": "", + "title": "Template", + "description": "JSON template string with $variable placeholders" }, { - "name": "event", + "name": "values", "type": { - "type": "event" - }, - "default": { - "name": "done" + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] }, - "title": "Event", - "description": "Signal end of stream" + "default": {}, + "title": "Values", + "description": "Dictionary of values to substitute into the template" } ], "outputs": [ { "type": { - "type": "any" + "type": "dict" }, "name": "output" } @@ -14838,18 +14212,16 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "frame", - "index", - "fps", - "event" + "template", + "values" ], "is_dynamic": false }, { - "title": "Load Video Folder", - "description": "Load video files from an asset folder.\n\n video, assets, load\n\n Use cases:\n - Provide videos for batch processing\n - Iterate over stored video assets\n - Prepare clips for editing or analysis", - "namespace": "nodetool.video", - "node_type": "nodetool.video.LoadVideoAssets", + "title": "Load JSON Folder", + "description": "Load JSON files from an asset folder.\n load, json, file, import", + "namespace": "nodetool.json", + "node_type": "nodetool.json.LoadJSONAssets", "layout": "default", "properties": [ { @@ -14859,15 +14231,15 @@ }, "default": {}, "title": "Folder", - "description": "The asset folder to load the video files from." + "description": "The asset folder to load the JSON files from." } ], "outputs": [ { "type": { - "type": "video" + "type": "dict" }, - "name": "video" + "name": "json" }, { "type": { @@ -14884,73 +14256,58 @@ "is_dynamic": false }, { - "title": "Overlay", - "description": "Overlay one video on top of another, including audio overlay when available.\n video, overlay, composite, picture-in-picture, audio", - "namespace": "nodetool.video", - "node_type": "nodetool.video.Overlay", + "title": "Parse Dict", + "description": "Parse a JSON string into a Python dictionary.\n json, parse, decode, dictionary\n\n Use cases:\n - Convert JSON API responses to Python dictionaries\n - Process JSON configuration files\n - Parse object-like JSON data", + "namespace": "nodetool.json", + "node_type": "nodetool.json.ParseDict", "layout": "default", "properties": [ { - "name": "main_video", - "type": { - "type": "video" - }, - "default": {}, - "title": "Main Video", - "description": "The main (background) video." - }, - { - "name": "overlay_video", - "type": { - "type": "video" - }, - "default": {}, - "title": "Overlay Video", - "description": "The video to overlay on top." - }, - { - "name": "x", - "type": { - "type": "int" - }, - "default": 0, - "title": "X", - "description": "X-coordinate for overlay placement." - }, - { - "name": "y", + "name": "json_string", "type": { - "type": "int" + "type": "str" }, - "default": 0, - "title": "Y", - "description": "Y-coordinate for overlay placement." - }, + "default": "", + "title": "Json String", + "description": "JSON string to parse into a dictionary" + } + ], + "outputs": [ { - "name": "scale", "type": { - "type": "float" + "type": "dict" }, - "default": 1.0, - "title": "Scale", - "description": "Scale factor for the overlay video." - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "json_string" + ], + "is_dynamic": false + }, + { + "title": "Parse List", + "description": "Parse a JSON string into a Python list.\n json, parse, decode, array, list\n\n Use cases:\n - Convert JSON array responses to Python lists\n - Process JSON data collections\n - Parse array-like JSON data", + "namespace": "nodetool.json", + "node_type": "nodetool.json.ParseList", + "layout": "default", + "properties": [ { - "name": "overlay_audio_volume", + "name": "json_string", "type": { - "type": "float" + "type": "str" }, - "default": 0.5, - "title": "Overlay Audio Volume", - "description": "Volume of the overlay audio relative to the main audio.", - "min": 0.0, - "max": 1.0 + "default": "", + "title": "Json String", + "description": "JSON string to parse into a list" } ], "outputs": [ { "type": { - "type": "video" + "type": "list" }, "name": "output" } @@ -14958,54 +14315,40 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "main_video", - "overlay_video", - "x", - "y", - "scale", - "overlay_audio_volume" + "json_string" ], "is_dynamic": false }, { - "title": "Resize", - "description": "Resize a video to a specific width and height.\n video, resize, scale, dimensions\n\n Use cases:\n 1. Adjust video resolution for different display requirements\n 2. Reduce file size by downscaling video\n 3. Prepare videos for specific platforms with size constraints", - "namespace": "nodetool.video", - "node_type": "nodetool.video.Resize", + "title": "Stringify JSON", + "description": "Convert a Python object to a JSON string.\n json, stringify, encode\n\n Use cases:\n - Prepare data for API requests\n - Save data in JSON format", + "namespace": "nodetool.json", + "node_type": "nodetool.json.StringifyJSON", "layout": "default", "properties": [ { - "name": "video", + "name": "data", "type": { - "type": "video" + "type": "any" }, "default": {}, - "title": "Video", - "description": "The input video to resize." - }, - { - "name": "width", - "type": { - "type": "int" - }, - "default": -1, - "title": "Width", - "description": "The target width. Use -1 to maintain aspect ratio." + "title": "Data", + "description": "Data to convert to JSON" }, { - "name": "height", + "name": "indent", "type": { "type": "int" }, - "default": -1, - "title": "Height", - "description": "The target height. Use -1 to maintain aspect ratio." + "default": 2, + "title": "Indent", + "description": "Number of spaces for indentation" } ], "outputs": [ { "type": { - "type": "video" + "type": "str" }, "name": "output" } @@ -15013,33 +14356,40 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video", - "width", - "height" + "data", + "indent" ], "is_dynamic": false }, { - "title": "Reverse", - "description": "Reverse the playback of a video.\n video, reverse, backwards, effect\n\n Use cases:\n 1. Create artistic effects by playing video in reverse\n 2. Analyze motion or events in reverse order\n 3. Generate unique transitions or intros for video projects", - "namespace": "nodetool.video", - "node_type": "nodetool.video.Reverse", + "title": "Validate JSON", + "description": "Validate JSON data against a schema.\n json, validate, schema\n\n Use cases:\n - Ensure API payloads match specifications\n - Validate configuration files", + "namespace": "nodetool.json", + "node_type": "nodetool.json.ValidateJSON", "layout": "default", "properties": [ { - "name": "video", + "name": "data", "type": { - "type": "video" + "type": "any" + }, + "title": "Data", + "description": "JSON data to validate" + }, + { + "name": "schema", + "type": { + "type": "dict" }, "default": {}, - "title": "Video", - "description": "The input video to reverse." + "title": "Schema", + "description": "JSON schema for validation" } ], "outputs": [ { "type": { - "type": "video" + "type": "bool" }, "name": "output" } @@ -15047,180 +14397,195 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video" + "data", + "schema" ], "is_dynamic": false }, { - "title": "Rotate", - "description": "Rotate a video by a specified angle.\n video, rotate, orientation, transform\n\n Use cases:\n 1. Correct orientation of videos taken with a rotated camera\n 2. Create artistic effects by rotating video content\n 3. Adjust video for different display orientations", - "namespace": "nodetool.video", - "node_type": "nodetool.video.Rotate", + "title": "Collector", + "description": "Collect items until a \"done\" event and return them as a list.\n collector, aggregate, list, stream\n\n Use cases:\n - Gather results from multiple processing steps\n - Collect streaming data into batches\n - Aggregate outputs from parallel operations", + "namespace": "nodetool.control", + "node_type": "nodetool.control.Collector", "layout": "default", "properties": [ { - "name": "video", + "name": "input_item", "type": { - "type": "video" + "type": "any" }, - "default": {}, - "title": "Video", - "description": "The input video to rotate." + "title": "Input Item", + "description": "The input item to collect." }, { - "name": "angle", + "name": "event", "type": { - "type": "float" + "type": "event" }, - "default": 0.0, - "title": "Angle", - "description": "The angle of rotation in degrees.", - "min": -360.0, - "max": 360.0 + "default": {}, + "title": "Event", + "description": "Signal end of stream" } ], "outputs": [ { "type": { - "type": "video" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, "name": "output" + }, + { + "type": { + "type": "event" + }, + "name": "event" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video", - "angle" + "input_item", + "event" ], "is_dynamic": false }, { - "title": "Saturation", - "description": "Adjust the color saturation of a video.\n video, saturation, color, enhance\n\n Use cases:\n 1. Enhance color vibrancy in dull or flat-looking footage\n 2. Create stylistic effects by over-saturating or desaturating video\n 3. Correct oversaturated footage from certain cameras", - "namespace": "nodetool.video", - "node_type": "nodetool.video.Saturation", + "title": "If", + "description": "Conditionally executes one of two branches based on a condition.\n control, flow, condition, logic, else, true, false, switch, toggle, flow-control\n\n Use cases:\n - Branch workflow based on conditions\n - Handle different cases in data processing\n - Implement decision logic", + "namespace": "nodetool.control", + "node_type": "nodetool.control.If", "layout": "default", "properties": [ { - "name": "video", + "name": "condition", "type": { - "type": "video" + "type": "bool" }, - "default": {}, - "title": "Video", - "description": "The input video to adjust saturation." + "default": false, + "title": "Condition", + "description": "The condition to evaluate" }, { - "name": "saturation", + "name": "value", "type": { - "type": "float" + "type": "any" }, - "default": 1.0, - "title": "Saturation", - "description": "Saturation level. 1.0 is original, <1 decreases saturation, >1 increases saturation.", - "min": 0.0, - "max": 3.0 + "title": "Value", + "description": "The value to pass to the next node" } ], "outputs": [ { "type": { - "type": "video" + "type": "any" }, - "name": "output" + "name": "if_true" + }, + { + "type": { + "type": "any" + }, + "name": "if_false" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video", - "saturation" + "condition", + "value" ], "is_dynamic": false }, { - "title": "Save Video Asset", - "description": "Save a video to an asset folder.\n video, save, file, output\n\n Use cases:\n 1. Export processed video to a specific asset folder\n 2. Save video with a custom name\n 3. Create a copy of a video in a different location", - "namespace": "nodetool.video", - "node_type": "nodetool.video.SaveVideo", + "title": "Iterator", + "description": "Iterate over a list and emit each item sequentially.\n iterator, loop, list, sequence\n\n Use cases:\n - Process each item of a collection in order\n - Drive downstream nodes with individual elements", + "namespace": "nodetool.control", + "node_type": "nodetool.control.Iterator", "layout": "default", "properties": [ { - "name": "video", + "name": "input_list", "type": { - "type": "video" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": {}, - "title": "Video", - "description": "The video to save." - }, + "title": "Input List", + "description": "The list of items to iterate over." + } + ], + "outputs": [ { - "name": "folder", "type": { - "type": "folder" + "type": "any" }, - "default": {}, - "title": "Folder", - "description": "The asset folder to save the video in." + "name": "output" }, { - "name": "name", "type": { - "type": "str" + "type": "int" }, - "default": "%Y-%m-%d-%H-%M-%S.mp4", - "title": "Name", - "description": "\n Name of the output video.\n You can use time and date variables to create unique names:\n %Y - Year\n %m - Month\n %d - Day\n %H - Hour\n %M - Minute\n %S - Second\n " - } - ], - "outputs": [ + "name": "index" + }, { "type": { - "type": "video" + "type": "event" }, - "name": "output" + "name": "event" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video", - "folder", - "name" + "input_list" ], "is_dynamic": false }, { - "title": "Set Speed", - "description": "Adjust the playback speed of a video.\n video, speed, tempo, time\n\n Use cases:\n 1. Create slow-motion effects by decreasing video speed\n 2. Generate time-lapse videos by increasing playback speed\n 3. Synchronize video duration with audio or other timing requirements", - "namespace": "nodetool.video", - "node_type": "nodetool.video.SetSpeed", + "title": "Append", + "description": "Adds a value to the end of a list.\n list, add, insert, extend\n\n Use cases:\n - Grow a list dynamically\n - Add new elements to an existing list\n - Implement a stack-like structure", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Append", "layout": "default", "properties": [ { - "name": "video", + "name": "values", "type": { - "type": "video" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": {}, - "title": "Video", - "description": "The input video to adjust speed." + "default": [], + "title": "Values" }, { - "name": "speed_factor", + "name": "value", "type": { - "type": "float" + "type": "any" }, - "default": 1.0, - "title": "Speed Factor", - "description": "The speed adjustment factor. Values > 1 speed up, < 1 slow down." + "title": "Value" } ], "outputs": [ { "type": { - "type": "video" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, "name": "output" } @@ -15228,54 +14593,36 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video", - "speed_factor" + "values", + "value" ], "is_dynamic": false }, { - "title": "Sharpness", - "description": "Adjust the sharpness of a video.\n video, sharpen, enhance, detail\n\n Use cases:\n 1. Enhance detail in slightly out-of-focus footage\n 2. Correct softness introduced by video compression\n 3. Create stylistic effects by over-sharpening", - "namespace": "nodetool.video", - "node_type": "nodetool.video.Sharpness", + "title": "Average", + "description": "Calculates the arithmetic mean of a list of numbers.\n list, average, mean, aggregate, math\n\n Use cases:\n - Find average value\n - Calculate mean of numeric data", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Average", "layout": "default", "properties": [ { - "name": "video", - "type": { - "type": "video" - }, - "default": {}, - "title": "Video", - "description": "The input video to sharpen." - }, - { - "name": "luma_amount", - "type": { - "type": "float" - }, - "default": 1.0, - "title": "Luma Amount", - "description": "Amount of sharpening to apply to luma (brightness) channel.", - "min": 0.0, - "max": 3.0 - }, - { - "name": "chroma_amount", + "name": "values", "type": { - "type": "float" + "type": "list", + "type_args": [ + { + "type": "float" + } + ] }, - "default": 0.5, - "title": "Chroma Amount", - "description": "Amount of sharpening to apply to chroma (color) channels.", - "min": 0.0, - "max": 3.0 + "default": [], + "title": "Values" } ], "outputs": [ { "type": { - "type": "video" + "type": "float" }, "name": "output" } @@ -15283,53 +14630,53 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video", - "luma_amount", - "chroma_amount" + "values" ], "is_dynamic": false }, { - "title": "Stabilize", - "description": "Apply video stabilization to reduce camera shake and jitter.\n video, stabilize, smooth, shake-reduction\n\n Use cases:\n 1. Improve quality of handheld or action camera footage\n 2. Smooth out panning and tracking shots\n 3. Enhance viewer experience by reducing motion sickness", - "namespace": "nodetool.video", - "node_type": "nodetool.video.Stabilize", + "title": "Chunk", + "description": "Splits a list into smaller chunks of specified size.\n list, chunk, split, group\n\n Use cases:\n - Batch processing\n - Pagination\n - Creating sublists of fixed size", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Chunk", "layout": "default", "properties": [ { - "name": "video", - "type": { - "type": "video" - }, - "default": {}, - "title": "Video", - "description": "The input video to stabilize." - }, - { - "name": "smoothing", + "name": "values", "type": { - "type": "float" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": 10.0, - "title": "Smoothing", - "description": "Smoothing strength. Higher values result in smoother but potentially more cropped video.", - "min": 1.0, - "max": 100.0 + "default": [], + "title": "Values" }, { - "name": "crop_black", + "name": "chunk_size", "type": { - "type": "bool" + "type": "int" }, - "default": true, - "title": "Crop Black", - "description": "Whether to crop black borders that may appear after stabilization." + "default": 1, + "title": "Chunk Size" } ], "outputs": [ { "type": { - "type": "video" + "type": "list", + "type_args": [ + { + "type": "list", + "type_args": [ + { + "type": "any" + } + ] + } + ] }, "name": "output" } @@ -15337,123 +14684,41 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video", - "smoothing", - "crop_black" + "values", + "chunk_size" ], "is_dynamic": false }, { - "title": "Transition", - "description": "Create a transition effect between two videos, including audio transition when available.\n video, transition, effect, merge, audio\n\n Use cases:\n 1. Create smooth transitions between video clips in a montage\n 2. Add professional-looking effects to video projects\n 3. Blend scenes together for creative storytelling\n 4. Smoothly transition between audio tracks of different video clips", - "namespace": "nodetool.video", - "node_type": "nodetool.video.Transition", + "title": "Dedupe", + "description": "Removes duplicate elements from a list, ensuring uniqueness.\n list, unique, distinct, deduplicate\n\n Use cases:\n - Remove redundant entries\n - Create a set-like structure\n - Ensure list elements are unique", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Dedupe", "layout": "default", "properties": [ { - "name": "video_a", - "type": { - "type": "video" - }, - "default": {}, - "title": "Video A", - "description": "The first video in the transition." - }, - { - "name": "video_b", - "type": { - "type": "video" - }, - "default": {}, - "title": "Video B", - "description": "The second video in the transition." - }, - { - "name": "transition_type", - "type": { - "type": "enum", - "values": [ - "fade", - "wipeleft", - "wiperight", - "wipeup", - "wipedown", - "slideleft", - "slideright", - "slideup", - "slidedown", - "circlecrop", - "rectcrop", - "distance", - "fadeblack", - "fadewhite", - "radial", - "smoothleft", - "smoothright", - "smoothup", - "smoothdown", - "circleopen", - "circleclose", - "vertopen", - "vertclose", - "horzopen", - "horzclose", - "dissolve", - "pixelize", - "diagtl", - "diagtr", - "diagbl", - "diagbr", - "hlslice", - "hrslice", - "vuslice", - "vdslice", - "hblur", - "fadegrays", - "wipetl", - "wipetr", - "wipebl", - "wipebr", - "squeezeh", - "squeezev", - "zoomin", - "fadefast", - "fadeslow", - "hlwind", - "hrwind", - "vuwind", - "vdwind", - "coverleft", - "coverright", - "coverup", - "coverdown", - "revealleft", - "revealright", - "revealup", - "revealdown" - ], - "type_name": "nodetool.nodes.nodetool.video.TransitionType" - }, - "default": "fade", - "title": "Transition Type", - "description": "Type of transition effect" - }, - { - "name": "duration", + "name": "values", "type": { - "type": "float" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": 1.0, - "title": "Duration", - "description": "Duration of the transition effect in seconds.", - "min": 0.1, - "max": 5.0 + "default": [], + "title": "Values" } ], "outputs": [ { "type": { - "type": "video" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, "name": "output" } @@ -15461,52 +14726,53 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video_a", - "video_b", - "transition_type", - "duration" + "values" ], "is_dynamic": false }, { - "title": "Trim", - "description": "Trim a video to a specific start and end time.\n video, trim, cut, segment\n\n Use cases:\n 1. Extract specific segments from a longer video\n 2. Remove unwanted parts from the beginning or end of a video\n 3. Create shorter clips from a full-length video", - "namespace": "nodetool.video", - "node_type": "nodetool.video.Trim", + "title": "Difference", + "description": "Finds elements that exist in first list but not in second list.\n list, set, difference, subtract\n\n Use cases:\n - Find unique elements in one list\n - Remove items present in another list\n - Identify distinct elements", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Difference", "layout": "default", "properties": [ { - "name": "video", - "type": { - "type": "video" - }, - "default": {}, - "title": "Video", - "description": "The input video to trim." - }, - { - "name": "start_time", + "name": "list1", "type": { - "type": "float" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": 0.0, - "title": "Start Time", - "description": "The start time in seconds for the trimmed video." + "default": [], + "title": "List1" }, { - "name": "end_time", + "name": "list2", "type": { - "type": "float" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": -1.0, - "title": "End Time", - "description": "The end time in seconds for the trimmed video. Use -1 for the end of the video." + "default": [], + "title": "List2" } ], "outputs": [ { "type": { - "type": "video" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, "name": "output" } @@ -15514,27 +14780,43 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "video", - "start_time", - "end_time" + "list1", + "list2" ], "is_dynamic": false }, { - "title": "Batch To List", - "description": "Convert an image batch to a list of image references.\n batch, list, images, processing\n\n Use cases:\n - Convert comfy batch outputs to list format", - "namespace": "nodetool.image", - "node_type": "nodetool.image.BatchToList", + "title": "Extend", + "description": "Merges one list into another, extending the original list.\n list, merge, concatenate, combine\n\n Use cases:\n - Combine multiple lists\n - Add all elements from one list to another", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Extend", "layout": "default", "properties": [ { - "name": "batch", + "name": "values", "type": { - "type": "image" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": {}, - "title": "Batch", - "description": "The batch of images to convert." + "default": [], + "title": "Values" + }, + { + "name": "other_values", + "type": { + "type": "list", + "type_args": [ + { + "type": "any" + } + ] + }, + "default": [], + "title": "Other Values" } ], "outputs": [ @@ -15543,7 +14825,7 @@ "type": "list", "type_args": [ { - "type": "image" + "type": "any" } ] }, @@ -15553,75 +14835,50 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "batch" + "values", + "other_values" ], "is_dynamic": false }, { - "title": "Crop", - "description": "Crop an image to specified coordinates.\n image, crop\n\n - Remove unwanted borders from images\n - Focus on particular subjects within an image\n - Simplify images by removing distractions", - "namespace": "nodetool.image", - "node_type": "nodetool.image.Crop", + "title": "Filter Dicts", + "description": "Filter a list of dictionaries based on a condition.\n list, filter, query, condition\n\n Basic Operators:\n - Comparison: >, <, >=, <=, ==, !=\n - Logical: and, or, not\n - Membership: in, not in\n\n Example Conditions:\n # Basic comparisons\n age > 30\n price <= 100\n status == 'active'\n\n # Multiple conditions\n age > 30 and salary < 50000\n (price >= 100) and (price <= 200)\n department in ['Sales', 'Marketing']\n\n # String operations\n name.str.startswith('J')\n email.str.contains('@company.com')\n\n # Datetime conditions\n date > '2024-01-01'\n date.dt.year == 2024\n date.dt.month >= 6\n date.dt.day_name() == 'Monday'\n\n # Date ranges\n date.between('2024-01-01', '2024-12-31')\n date >= '2024-01-01' and date < '2025-01-01'\n\n # Complex datetime\n date.dt.hour < 12\n date.dt.dayofweek <= 4 # Weekdays only\n\n # Numeric operations\n price.between(100, 200)\n quantity % 2 == 0 # Even numbers\n\n # Special values\n value.isna() # Check for NULL/NaN\n value.notna() # Check for non-NULL/non-NaN\n\n Note: Dates should be in ISO format (YYYY-MM-DD) or include time (YYYY-MM-DD HH:MM:SS)\n\n Use cases:\n - Filter list of dictionary objects based on criteria\n - Extract subset of data meeting specific conditions\n - Clean data by removing unwanted entries", + "namespace": "nodetool.list", + "node_type": "nodetool.list.FilterDicts", "layout": "default", "properties": [ { - "name": "image", - "type": { - "type": "image" - }, - "default": {}, - "title": "Image", - "description": "The image to crop." - }, - { - "name": "left", - "type": { - "type": "int" - }, - "default": 0, - "title": "Left", - "description": "The left coordinate.", - "min": 0.0, - "max": 4096.0 - }, - { - "name": "top", - "type": { - "type": "int" - }, - "default": 0, - "title": "Top", - "description": "The top coordinate.", - "min": 0.0, - "max": 4096.0 - }, - { - "name": "right", + "name": "values", "type": { - "type": "int" + "type": "list", + "type_args": [ + { + "type": "dict" + } + ] }, - "default": 512, - "title": "Right", - "description": "The right coordinate.", - "min": 0.0, - "max": 4096.0 + "default": [], + "title": "Values" }, { - "name": "bottom", + "name": "condition", "type": { - "type": "int" + "type": "str" }, - "default": 512, - "title": "Bottom", - "description": "The bottom coordinate.", - "min": 0.0, - "max": 4096.0 + "default": "", + "title": "Condition", + "description": "\n The filtering condition using pandas query syntax.\n\n Basic Operators:\n - Comparison: >, <, >=, <=, ==, !=\n - Logical: and, or, not\n - Membership: in, not in\n \n Example Conditions:\n # Basic comparisons\n age > 30\n price <= 100\n status == 'active'\n \n See node documentation for more examples.\n " } ], "outputs": [ { "type": { - "type": "image" + "type": "list", + "type_args": [ + { + "type": "dict" + } + ] }, "name": "output" } @@ -15629,57 +14886,82 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "image", - "left", - "top", - "right", - "bottom" + "values", + "condition" ], "is_dynamic": false }, { - "title": "Fit", - "description": "Resize an image to fit within specified dimensions while preserving aspect ratio.\n image, resize, fit\n\n - Resize images for online publishing requirements\n - Preprocess images to uniform sizes for machine learning\n - Control image display sizes for web development", - "namespace": "nodetool.image", - "node_type": "nodetool.image.Fit", + "title": "Filter Dicts By Number", + "description": "Filters a list of dictionaries based on numeric values for a specified key.\n list, filter, dictionary, numbers, numeric\n\n Use cases:\n - Filter dictionaries by numeric comparisons (greater than, less than, equal to)\n - Filter records with even/odd numeric values\n - Filter entries with positive/negative numbers", + "namespace": "nodetool.list", + "node_type": "nodetool.list.FilterDictsByNumber", "layout": "default", "properties": [ { - "name": "image", + "name": "values", "type": { - "type": "image" + "type": "list", + "type_args": [ + { + "type": "dict" + } + ] }, - "default": {}, - "title": "Image", - "description": "The image to fit." + "default": [], + "title": "Values" }, { - "name": "width", + "name": "key", "type": { - "type": "int" + "type": "str" }, - "default": 512, - "title": "Width", - "description": "Width to fit to.", - "min": 1.0, - "max": 4096.0 + "default": "", + "title": "Key" }, { - "name": "height", + "name": "filter_type", "type": { - "type": "int" + "type": "enum", + "values": [ + "greater_than", + "less_than", + "equal_to", + "even", + "odd", + "positive", + "negative" + ], + "type_name": "nodetool.nodes.nodetool.list.FilterDictNumberType" }, - "default": 512, - "title": "Height", - "description": "Height to fit to.", - "min": 1.0, - "max": 4096.0 + "default": "greater_than", + "title": "Filter Type" + }, + { + "name": "value", + "type": { + "type": "union", + "type_args": [ + { + "type": "float" + }, + { + "type": "none" + } + ] + }, + "title": "Value" } ], "outputs": [ { "type": { - "type": "image" + "type": "list", + "type_args": [ + { + "type": "dict" + } + ] }, "name": "output" } @@ -15687,158 +14969,230 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "image", - "width", - "height" + "values", + "key", + "filter_type", + "value" ], "is_dynamic": false }, { - "title": "Get Metadata", - "description": "Get metadata about the input image.\n metadata, properties, analysis, information\n\n Use cases:\n - Use width and height for layout calculations\n - Analyze image properties for processing decisions\n - Gather information for image cataloging or organization", - "namespace": "nodetool.image", - "node_type": "nodetool.image.GetMetadata", + "title": "Filter Dicts By Range", + "description": "Filters a list of dictionaries based on a numeric range for a specified key.\n list, filter, dictionary, range, between\n\n Use cases:\n - Filter records based on numeric ranges (e.g., price range, age range)\n - Find entries with values within specified bounds\n - Filter data sets based on numeric criteria", + "namespace": "nodetool.list", + "node_type": "nodetool.list.FilterDictsByRange", "layout": "default", "properties": [ { - "name": "image", + "name": "values", "type": { - "type": "image" + "type": "list", + "type_args": [ + { + "type": "dict" + } + ] }, - "default": {}, - "title": "Image", - "description": "The input image." - } - ], - "outputs": [ + "default": [], + "title": "Values" + }, { + "name": "key", "type": { "type": "str" }, - "name": "format" + "default": "", + "title": "Key", + "description": "The dictionary key to check for the range" }, { + "name": "min_value", "type": { - "type": "str" + "type": "float" }, - "name": "mode" + "default": 0, + "title": "Min Value", + "description": "The minimum value (inclusive) of the range" }, { + "name": "max_value", "type": { - "type": "int" + "type": "float" }, - "name": "width" + "default": 0, + "title": "Max Value", + "description": "The maximum value (inclusive) of the range" }, { + "name": "inclusive", "type": { - "type": "int" + "type": "bool" }, - "name": "height" - }, + "default": true, + "title": "Inclusive", + "description": "If True, includes the min and max values in the results" + } + ], + "outputs": [ { "type": { - "type": "int" + "type": "list", + "type_args": [ + { + "type": "dict" + } + ] }, - "name": "channels" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "image" + "values", + "key", + "min_value", + "max_value", + "inclusive" ], "is_dynamic": false }, { - "title": "Load Image Assets", - "description": "Load images from an asset folder.\n load, image, file, import", - "namespace": "nodetool.image", - "node_type": "nodetool.image.LoadImageAssets", + "title": "Filter Dicts By Value", + "description": "Filters a list of dictionaries based on their values using various criteria.\n list, filter, dictionary, values\n\n Use cases:\n - Filter dictionaries by value content\n - Filter dictionaries by value type\n - Filter dictionaries by value patterns", + "namespace": "nodetool.list", + "node_type": "nodetool.list.FilterDictsByValue", "layout": "default", "properties": [ { - "name": "folder", + "name": "values", "type": { - "type": "folder" + "type": "list", + "type_args": [ + { + "type": "dict" + } + ] }, - "default": {}, - "title": "Folder", - "description": "The asset folder to load the images from." - } - ], - "outputs": [ + "default": [], + "title": "Values" + }, { + "name": "key", "type": { - "type": "image" + "type": "str" }, - "name": "image" + "default": "", + "title": "Key", + "description": "The dictionary key to check" + }, + { + "name": "filter_type", + "type": { + "type": "enum", + "values": [ + "contains", + "starts_with", + "ends_with", + "equals", + "type_is", + "length_greater", + "length_less", + "exact_length" + ], + "type_name": "nodetool.nodes.nodetool.list.FilterType" + }, + "default": "contains", + "title": "Filter Type", + "description": "The type of filter to apply" }, { + "name": "criteria", "type": { "type": "str" }, - "name": "name" + "default": "", + "title": "Criteria", + "description": "The filtering criteria (text to match, type name, or length as string)" + } + ], + "outputs": [ + { + "type": { + "type": "list", + "type_args": [ + { + "type": "dict" + } + ] + }, + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "folder" + "values", + "key", + "filter_type", + "criteria" ], "is_dynamic": false }, { - "title": "Paste", - "description": "Paste one image onto another at specified coordinates.\n paste, composite, positioning, overlay\n\n Use cases:\n - Add watermarks or logos to images\n - Combine multiple image elements\n - Create collages or montages", - "namespace": "nodetool.image", - "node_type": "nodetool.image.Paste", + "title": "Filter Dicts Regex", + "description": "Filters a list of dictionaries using regular expressions on specified keys.\n list, filter, regex, dictionary, pattern\n\n Use cases:\n - Filter dictionaries with values matching complex patterns\n - Search for dictionaries containing emails, dates, or specific formats\n - Advanced text pattern matching across dictionary values", + "namespace": "nodetool.list", + "node_type": "nodetool.list.FilterDictsRegex", "layout": "default", "properties": [ { - "name": "image", + "name": "values", "type": { - "type": "image" + "type": "list", + "type_args": [ + { + "type": "dict" + } + ] }, - "default": {}, - "title": "Image", - "description": "The image to paste into." + "default": [], + "title": "Values" }, { - "name": "paste", + "name": "key", "type": { - "type": "image" + "type": "str" }, - "default": {}, - "title": "Paste", - "description": "The image to paste." + "default": "", + "title": "Key" }, { - "name": "left", + "name": "pattern", "type": { - "type": "int" + "type": "str" }, - "default": 0, - "title": "Left", - "description": "The left coordinate.", - "min": 0.0, - "max": 4096.0 + "default": "", + "title": "Pattern" }, { - "name": "top", + "name": "full_match", "type": { - "type": "int" + "type": "bool" }, - "default": 0, - "title": "Top", - "description": "The top coordinate.", - "min": 0.0, - "max": 4096.0 + "default": false, + "title": "Full Match" } ], "outputs": [ { "type": { - "type": "image" + "type": "list", + "type_args": [ + { + "type": "dict" + } + ] }, "name": "output" } @@ -15846,56 +15200,43 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "image", - "paste", - "left", - "top" + "values", + "key", + "pattern", + "full_match" ], "is_dynamic": false }, { - "title": "Resize", - "description": "Change image dimensions to specified width and height.\n image, resize\n\n - Preprocess images for machine learning model inputs\n - Optimize images for faster web page loading\n - Create uniform image sizes for layouts", - "namespace": "nodetool.image", - "node_type": "nodetool.image.Resize", - "layout": "default", - "properties": [ - { - "name": "image", - "type": { - "type": "image" - }, - "default": {}, - "title": "Image", - "description": "The image to resize." - }, - { - "name": "width", - "type": { - "type": "int" - }, - "default": 512, - "title": "Width", - "description": "The target width.", - "min": 0.0, - "max": 4096.0 - }, + "title": "Filter None", + "description": "Filters out None values from a list.\n list, filter, none, null\n\n Use cases:\n - Clean data by removing null values\n - Get only valid entries\n - Remove placeholder values", + "namespace": "nodetool.list", + "node_type": "nodetool.list.FilterNone", + "layout": "default", + "properties": [ { - "name": "height", + "name": "values", "type": { - "type": "int" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": 512, - "title": "Height", - "description": "The target height.", - "min": 0.0, - "max": 4096.0 + "default": [], + "title": "Values" } ], "outputs": [ { "type": { - "type": "image" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, "name": "output" } @@ -15903,51 +15244,64 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "image", - "width", - "height" + "values" ], "is_dynamic": false }, { - "title": "Save Image Asset", - "description": "Save an image to specified asset folder with customizable name format.\n save, image, folder, naming\n\n Use cases:\n - Save generated images with timestamps\n - Organize outputs into specific folders\n - Create backups of processed images", - "namespace": "nodetool.image", - "node_type": "nodetool.image.SaveImage", + "title": "Filter Number Range", + "description": "Filters a list of numbers to find values within a specified range.\n list, filter, numbers, range, between\n\n Use cases:\n - Find numbers within a specific range\n - Filter data points within bounds\n - Implement range-based filtering", + "namespace": "nodetool.list", + "node_type": "nodetool.list.FilterNumberRange", "layout": "default", "properties": [ { - "name": "image", + "name": "values", "type": { - "type": "image" + "type": "list", + "type_args": [ + { + "type": "float" + } + ] }, - "default": {}, - "title": "Image", - "description": "The image to save." + "default": [], + "title": "Values" }, { - "name": "folder", + "name": "min_value", "type": { - "type": "folder" + "type": "float" }, - "default": {}, - "title": "Folder", - "description": "The asset folder to save the image in." + "default": 0, + "title": "Min Value" }, { - "name": "name", + "name": "max_value", "type": { - "type": "str" + "type": "float" }, - "default": "%Y-%m-%d_%H-%M-%S.png", - "title": "Name", - "description": "\n Name of the output file.\n You can use time and date variables to create unique names:\n %Y - Year\n %m - Month\n %d - Day\n %H - Hour\n %M - Minute\n %S - Second\n " + "default": 0, + "title": "Max Value" + }, + { + "name": "inclusive", + "type": { + "type": "bool" + }, + "default": true, + "title": "Inclusive" } ], "outputs": [ { "type": { - "type": "image" + "type": "list", + "type_args": [ + { + "type": "float" + } + ] }, "name": "output" } @@ -15955,44 +15309,78 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "image", - "folder", - "name" + "values", + "min_value", + "max_value", + "inclusive" ], "is_dynamic": false }, { - "title": "Scale", - "description": "Enlarge or shrink an image by a scale factor.\n image, resize, scale\n\n - Adjust image dimensions for display galleries\n - Standardize image sizes for machine learning datasets\n - Create thumbnail versions of images", - "namespace": "nodetool.image", - "node_type": "nodetool.image.Scale", + "title": "Filter Numbers", + "description": "Filters a list of numbers based on various numerical conditions.\n list, filter, numbers, numeric\n\n Use cases:\n - Filter numbers by comparison (greater than, less than, equal to)\n - Filter even/odd numbers\n - Filter positive/negative numbers", + "namespace": "nodetool.list", + "node_type": "nodetool.list.FilterNumbers", "layout": "default", "properties": [ { - "name": "image", + "name": "values", "type": { - "type": "image" + "type": "list", + "type_args": [ + { + "type": "float" + } + ] }, - "default": {}, - "title": "Image", - "description": "The image to scale." + "default": [], + "title": "Values" }, { - "name": "scale", + "name": "filter_type", "type": { - "type": "float" + "type": "enum", + "values": [ + "greater_than", + "less_than", + "equal_to", + "even", + "odd", + "positive", + "negative" + ], + "type_name": "nodetool.nodes.nodetool.list.FilterNumberType" }, - "default": 1.0, - "title": "Scale", - "description": "The scale factor.", - "min": 0.0, - "max": 10.0 + "default": "greater_than", + "title": "Filter Type", + "description": "The type of filter to apply" + }, + { + "name": "value", + "type": { + "type": "union", + "type_args": [ + { + "type": "float" + }, + { + "type": "none" + } + ] + }, + "title": "Value", + "description": "The comparison value (for greater_than, less_than, equal_to)" } ], "outputs": [ { "type": { - "type": "image" + "type": "list", + "type_args": [ + { + "type": "float" + } + ] }, "name": "output" } @@ -16000,55 +15388,60 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "image", - "scale" + "values", + "filter_type", + "value" ], "is_dynamic": false }, { - "title": "Add Column", - "description": "Add list of values as new column to dataframe.\n dataframe, column, list\n\n Use cases:\n - Incorporate external data into existing dataframe\n - Add calculated results as new column\n - Augment dataframe with additional features", - "namespace": "nodetool.data", - "node_type": "nodetool.data.AddColumn", + "title": "Filter Regex", + "description": "Filters a list of strings using regular expressions.\n list, filter, regex, pattern, text\n\n Use cases:\n - Filter strings using complex patterns\n - Extract strings matching specific formats (emails, dates, etc.)\n - Advanced text pattern matching", + "namespace": "nodetool.list", + "node_type": "nodetool.list.FilterRegex", "layout": "default", "properties": [ { - "name": "dataframe", + "name": "values", "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, - "default": {}, - "title": "Dataframe", - "description": "Dataframe object to add a new column to." + "default": [], + "title": "Values" }, { - "name": "column_name", + "name": "pattern", "type": { "type": "str" }, "default": "", - "title": "Column Name", - "description": "The name of the new column to be added to the dataframe." + "title": "Pattern", + "description": "The regular expression pattern to match against." }, { - "name": "values", + "name": "full_match", "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "bool" }, - "default": [], - "title": "Values", - "description": "A list of any type of elements which will be the new column's values." + "default": false, + "title": "Full Match", + "description": "Whether to match the entire string or find pattern anywhere in string" } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, "name": "output" } @@ -16056,42 +15449,69 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "dataframe", - "column_name", - "values" + "values", + "pattern", + "full_match" ], "is_dynamic": false }, { - "title": "Append", - "description": "Append two dataframes along rows.\n append, concat, rows\n\n Use cases:\n - Combine data from multiple time periods\n - Merge datasets with same structure\n - Aggregate data from different sources", - "namespace": "nodetool.data", - "node_type": "nodetool.data.Append", + "title": "Filter Strings", + "description": "Filters a list of strings based on various criteria.\n list, filter, strings, text\n\n Use cases:\n - Filter strings by length\n - Filter strings containing specific text\n - Filter strings by prefix/suffix\n - Filter strings using regex patterns", + "namespace": "nodetool.list", + "node_type": "nodetool.list.FilterStrings", "layout": "default", "properties": [ { - "name": "dataframe_a", + "name": "values", "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] + }, + "default": [], + "title": "Values" + }, + { + "name": "filter_type", + "type": { + "type": "enum", + "values": [ + "contains", + "starts_with", + "ends_with", + "length_greater", + "length_less", + "exact_length" + ], + "type_name": "nodetool.nodes.nodetool.list.FilterType" }, - "default": {}, - "title": "Dataframe A", - "description": "First DataFrame to be appended." + "default": "contains", + "title": "Filter Type", + "description": "The type of filter to apply" }, { - "name": "dataframe_b", + "name": "criteria", "type": { - "type": "dataframe" + "type": "str" }, - "default": {}, - "title": "Dataframe B", - "description": "Second DataFrame to be appended." + "default": "", + "title": "Criteria", + "description": "The filtering criteria (text to match or length as string)" } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, "name": "output" } @@ -16099,32 +15519,51 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "dataframe_a", - "dataframe_b" + "values", + "filter_type", + "criteria" ], "is_dynamic": false }, { - "title": "Drop Duplicates", - "description": "Remove duplicate rows from dataframe.\n duplicates, unique, clean\n\n Use cases:\n - Clean dataset by removing redundant entries\n - Ensure data integrity in analysis\n - Prepare data for unique value operations", - "namespace": "nodetool.data", - "node_type": "nodetool.data.DropDuplicates", + "title": "Flatten", + "description": "Flattens a nested list structure into a single flat list.\n list, flatten, nested, structure\n\n Use cases:\n - Convert nested lists into a single flat list\n - Simplify complex list structures\n - Process hierarchical data as a sequence\n\n Examples:\n [[1, 2], [3, 4]] -> [1, 2, 3, 4]\n [[1, [2, 3]], [4, [5, 6]]] -> [1, 2, 3, 4, 5, 6]", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Flatten", "layout": "default", "properties": [ { - "name": "df", + "name": "values", "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": {}, - "title": "Df", - "description": "The input DataFrame." + "default": [], + "title": "Values" + }, + { + "name": "max_depth", + "type": { + "type": "int" + }, + "default": -1, + "title": "Max Depth", + "min": -1.0 } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, "name": "output" } @@ -16132,31 +15571,52 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "df" + "values", + "max_depth" ], "is_dynamic": false }, { - "title": "Drop NA", - "description": "Remove rows with NA values from dataframe.\n na, missing, clean\n\n Use cases:\n - Clean dataset by removing incomplete entries\n - Prepare data for analysis requiring complete cases\n - Improve data quality for modeling", - "namespace": "nodetool.data", - "node_type": "nodetool.data.DropNA", + "title": "Generate Sequence", + "description": "Generates a list of integers within a specified range.\n list, range, sequence, numbers\n\n Use cases:\n - Create numbered lists\n - Generate index sequences\n - Produce arithmetic progressions", + "namespace": "nodetool.list", + "node_type": "nodetool.list.GenerateSequence", "layout": "default", "properties": [ { - "name": "df", + "name": "start", "type": { - "type": "dataframe" + "type": "int" }, - "default": {}, - "title": "Df", - "description": "The input DataFrame." + "default": 0, + "title": "Start" + }, + { + "name": "stop", + "type": { + "type": "int" + }, + "default": 0, + "title": "Stop" + }, + { + "name": "step", + "type": { + "type": "int" + }, + "default": 1, + "title": "Step" } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "int" + } + ] }, "name": "output" } @@ -16164,45 +15624,45 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "df" + "start", + "stop", + "step" ], "is_dynamic": false }, { - "title": "Extract Column", - "description": "Convert dataframe column to list.\n dataframe, column, list\n\n Use cases:\n - Extract data for use in other processing steps\n - Prepare column data for plotting or analysis\n - Convert categorical data to list for encoding", - "namespace": "nodetool.data", - "node_type": "nodetool.data.ExtractColumn", + "title": "Get Element", + "description": "Retrieves a single value from a list at a specific index.\n list, get, extract, value\n\n Use cases:\n - Access a specific element by position\n - Implement array-like indexing\n - Extract the first or last element", + "namespace": "nodetool.list", + "node_type": "nodetool.list.GetElement", "layout": "default", "properties": [ { - "name": "dataframe", + "name": "values", "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": {}, - "title": "Dataframe", - "description": "The input dataframe." + "default": [], + "title": "Values" }, { - "name": "column_name", + "name": "index", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Column Name", - "description": "The name of the column to be converted to a list." + "default": 0, + "title": "Index" } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "any" }, "name": "output" } @@ -16210,41 +15670,54 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "dataframe", - "column_name" + "values", + "index" ], "is_dynamic": false }, { - "title": "Filter", - "description": "Filter dataframe based on condition.\n filter, query, condition\n\n Example conditions:\n age > 30\n age > 30 and salary < 50000\n name == 'John Doe'\n 100 <= price <= 200\n status in ['Active', 'Pending']\n not (age < 18)\n\n Use cases:\n - Extract subset of data meeting specific criteria\n - Remove outliers or invalid data points\n - Focus analysis on relevant data segments", - "namespace": "nodetool.data", - "node_type": "nodetool.data.Filter", + "title": "Intersection", + "description": "Finds common elements between two lists.\n list, set, intersection, common\n\n Use cases:\n - Find elements present in both lists\n - Identify shared items between collections\n - Filter for matching elements", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Intersection", "layout": "default", "properties": [ { - "name": "df", + "name": "list1", "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": {}, - "title": "Df", - "description": "The DataFrame to filter." + "default": [], + "title": "List1" }, { - "name": "condition", + "name": "list2", "type": { - "type": "str" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": "", - "title": "Condition", - "description": "The filtering condition to be applied to the DataFrame, e.g. column_name > 5." + "default": [], + "title": "List2" } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, "name": "output" } @@ -16252,41 +15725,36 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "df", - "condition" + "list1", + "list2" ], "is_dynamic": false }, { - "title": "Find Row", - "description": "Find the first row in a dataframe that matches a given condition.\n filter, query, condition, single row\n\n Example conditions:\n age > 30\n age > 30 and salary < 50000\n name == 'John Doe'\n 100 <= price <= 200\n status in ['Active', 'Pending']\n not (age < 18)\n\n Use cases:\n - Retrieve specific record based on criteria\n - Find first occurrence of a particular condition\n - Extract single data point for further analysis", - "namespace": "nodetool.data", - "node_type": "nodetool.data.FindRow", + "title": "Length", + "description": "Calculates the length of a list.\n list, count, size\n\n Use cases:\n - Determine the number of elements in a list\n - Check if a list is empty\n - Validate list size constraints", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Length", "layout": "default", "properties": [ { - "name": "df", - "type": { - "type": "dataframe" - }, - "default": {}, - "title": "Df", - "description": "The DataFrame to search." - }, - { - "name": "condition", + "name": "values", "type": { - "type": "str" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": "", - "title": "Condition", - "description": "The condition to filter the DataFrame, e.g. 'column_name == value'." + "default": [], + "title": "Values" } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "int" }, "name": "output" } @@ -16294,16 +15762,15 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "df", - "condition" + "values" ], "is_dynamic": false }, { - "title": "From List", - "description": "Convert list of dicts to dataframe.\n list, dataframe, convert\n\n Use cases:\n - Transform list data into structured dataframe\n - Prepare list data for analysis or visualization\n - Convert API responses to dataframe format", - "namespace": "nodetool.data", - "node_type": "nodetool.data.FromList", + "title": "Map Field", + "description": "Extracts a specific field from a list of dictionaries or objects.\n list, map, field, extract, pluck\n\n Use cases:\n - Extract specific fields from a list of objects\n - Transform complex data structures into simple lists\n - Collect values for a particular key across multiple dictionaries", + "namespace": "nodetool.list", + "node_type": "nodetool.list.MapField", "layout": "default", "properties": [ { @@ -16312,51 +15779,46 @@ "type": "list", "type_args": [ { - "type": "any" + "type": "union", + "type_args": [ + { + "type": "dict" + }, + { + "type": "object" + } + ] } ] }, "default": [], - "title": "Values", - "description": "List of values to be converted, each value will be a row." - } - ], - "outputs": [ + "title": "Values" + }, { + "name": "field", "type": { - "type": "dataframe" + "type": "str" }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "values" - ], - "is_dynamic": false - }, - { - "title": "Import CSV", - "description": "Convert CSV string to dataframe.\n csv, dataframe, import\n\n Use cases:\n - Import CSV data from string input\n - Convert CSV responses from APIs to dataframe", - "namespace": "nodetool.data", - "node_type": "nodetool.data.ImportCSV", - "layout": "default", - "properties": [ + "default": "", + "title": "Field" + }, { - "name": "csv_data", + "name": "default", "type": { - "type": "str" + "type": "any" }, - "default": "", - "title": "CSV Data", - "description": "String input of CSV formatted text." + "title": "Default" } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, "name": "output" } @@ -16364,30 +15826,37 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "csv_data" + "values", + "field", + "default" ], "is_dynamic": false }, { - "title": "Convert JSON to DataFrame", - "description": "Transforms a JSON string into a pandas DataFrame.\n json, dataframe, conversion\n\n Use cases:\n - Converting API responses to tabular format\n - Preparing JSON data for analysis or visualization\n - Structuring unstructured JSON data for further processing", - "namespace": "nodetool.data", - "node_type": "nodetool.data.JSONToDataframe", + "title": "Maximum", + "description": "Finds the largest value in a list of numbers.\n list, max, maximum, aggregate, math\n\n Use cases:\n - Find highest value\n - Get largest number in dataset", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Maximum", "layout": "default", "properties": [ { - "name": "text", + "name": "values", "type": { - "type": "str" + "type": "list", + "type_args": [ + { + "type": "float" + } + ] }, - "default": "", - "title": "JSON" + "default": [], + "title": "Values" } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "float" }, "name": "output" } @@ -16395,49 +15864,35 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text" + "values" ], "is_dynamic": false }, { - "title": "Join", - "description": "Join two dataframes on specified column.\n join, merge, column\n\n Use cases:\n - Combine data from related tables\n - Enrich dataset with additional information\n - Link data based on common identifiers", - "namespace": "nodetool.data", - "node_type": "nodetool.data.Join", + "title": "Minimum", + "description": "Finds the smallest value in a list of numbers.\n list, min, minimum, aggregate, math\n\n Use cases:\n - Find lowest value\n - Get smallest number in dataset", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Minimum", "layout": "default", "properties": [ { - "name": "dataframe_a", - "type": { - "type": "dataframe" - }, - "default": {}, - "title": "Dataframe A", - "description": "First DataFrame to be merged." - }, - { - "name": "dataframe_b", - "type": { - "type": "dataframe" - }, - "default": {}, - "title": "Dataframe B", - "description": "Second DataFrame to be merged." - }, - { - "name": "join_on", + "name": "values", "type": { - "type": "str" + "type": "list", + "type_args": [ + { + "type": "float" + } + ] }, - "default": "", - "title": "Join On", - "description": "The column name on which to join the two dataframes." + "default": [], + "title": "Values" } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "float" }, "name": "output" } @@ -16445,80 +15900,76 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "dataframe_a", - "dataframe_b", - "join_on" + "values" ], "is_dynamic": false }, { - "title": "Load CSV Assets", - "description": "Load dataframes from an asset folder.\n load, dataframe, file, import\n\n Use cases:\n - Load multiple dataframes from a folder\n - Process multiple datasets in sequence\n - Batch import of data files", - "namespace": "nodetool.data", - "node_type": "nodetool.data.LoadCSVAssets", + "title": "Product", + "description": "Calculates the product of all numbers in a list.\n list, product, multiply, aggregate, math\n\n Use cases:\n - Multiply all numbers together\n - Calculate compound values", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Product", "layout": "default", "properties": [ { - "name": "folder", + "name": "values", "type": { - "type": "folder" + "type": "list", + "type_args": [ + { + "type": "float" + } + ] }, - "default": {}, - "title": "Folder", - "description": "The asset folder to load the dataframes from." + "default": [], + "title": "Values" } ], "outputs": [ { "type": { - "type": "dataframe" - }, - "name": "dataframe" - }, - { - "type": { - "type": "str" + "type": "float" }, - "name": "name" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "folder" + "values" ], "is_dynamic": false }, { - "title": "Merge", - "description": "Merge two dataframes along columns.\n merge, concat, columns\n\n Use cases:\n - Combine data from multiple sources\n - Add new features to existing dataframe\n - Merge time series data from different periods", - "namespace": "nodetool.data", - "node_type": "nodetool.data.Merge", + "title": "Randomize", + "description": "Randomly shuffles the elements of a list.\n list, shuffle, random, order\n\n Use cases:\n - Randomize the order of items in a playlist\n - Implement random sampling without replacement\n - Create randomized data sets for testing", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Randomize", "layout": "default", "properties": [ { - "name": "dataframe_a", - "type": { - "type": "dataframe" - }, - "default": {}, - "title": "Dataframe A", - "description": "First DataFrame to be merged." - }, - { - "name": "dataframe_b", + "name": "values", "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": {}, - "title": "Dataframe B", - "description": "Second DataFrame to be merged." + "default": [], + "title": "Values" } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, "name": "output" } @@ -16526,79 +15977,77 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "dataframe_a", - "dataframe_b" + "values" ], "is_dynamic": false }, { - "title": "Row Iterator", - "description": "Iterate over rows of a dataframe.", - "namespace": "nodetool.data", - "node_type": "nodetool.data.RowIterator", + "title": "Reverse", + "description": "Inverts the order of elements in a list.\n list, reverse, invert, flip\n\n Use cases:\n - Reverse the order of a sequence", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Reverse", "layout": "default", "properties": [ { - "name": "dataframe", + "name": "values", "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": {}, - "title": "Dataframe", - "description": "The input dataframe." + "default": [], + "title": "Values" } ], "outputs": [ { "type": { - "type": "dict" - }, - "name": "dict" - }, - { - "type": { - "type": "int" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "name": "index" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "dataframe" + "values" ], "is_dynamic": false }, { - "title": "Save Dataframe", - "description": "Save dataframe in specified folder.\n csv, folder, save\n\n Use cases:\n - Export processed data for external use\n - Create backups of dataframes", - "namespace": "nodetool.data", - "node_type": "nodetool.data.SaveDataframe", + "title": "Save List", + "description": "Saves a list to a text file, placing each element on a new line.\n list, save, file, serialize\n\n Use cases:\n - Export list data to a file\n - Create a simple text-based database\n - Generate line-separated output", + "namespace": "nodetool.list", + "node_type": "nodetool.list.SaveList", "layout": "default", "properties": [ { - "name": "df", - "type": { - "type": "dataframe" - }, - "default": {}, - "title": "Df" - }, - { - "name": "folder", + "name": "values", "type": { - "type": "folder" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": {}, - "title": "Folder", - "description": "Name of the output folder." + "default": [], + "title": "Values" }, { "name": "name", "type": { "type": "str" }, - "default": "output.csv", + "default": "text.txt", "title": "Name", "description": "\n Name of the output file.\n You can use time and date variables to create unique names:\n %Y - Year\n %m - Month\n %d - Day\n %H - Hour\n %M - Minute\n %S - Second\n " } @@ -16606,7 +16055,7 @@ "outputs": [ { "type": { - "type": "dataframe" + "type": "text" }, "name": "output" } @@ -16614,42 +16063,54 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "df", - "folder", + "values", "name" ], "is_dynamic": false }, { - "title": "Select Column", - "description": "Select specific columns from dataframe.\n dataframe, columns, filter\n\n Use cases:\n - Extract relevant features for analysis\n - Reduce dataframe size by removing unnecessary columns\n - Prepare data for specific visualizations or models", - "namespace": "nodetool.data", - "node_type": "nodetool.data.SelectColumn", + "title": "Select Elements", + "description": "Selects specific values from a list using index positions.\n list, select, index, extract\n\n Use cases:\n - Pick specific elements by their positions\n - Rearrange list elements\n - Create a new list from selected indices", + "namespace": "nodetool.list", + "node_type": "nodetool.list.SelectElements", "layout": "default", "properties": [ { - "name": "dataframe", + "name": "values", "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": {}, - "title": "Dataframe", - "description": "a dataframe from which columns are to be selected" + "default": [], + "title": "Values" }, { - "name": "columns", + "name": "indices", "type": { - "type": "str" + "type": "list", + "type_args": [ + { + "type": "int" + } + ] }, - "default": "", - "title": "Columns", - "description": "comma separated list of column names" + "default": [], + "title": "Indices" } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, "name": "output" } @@ -16657,92 +16118,65 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "dataframe", - "columns" + "values", + "indices" ], "is_dynamic": false }, { "title": "Slice", - "description": "Slice a dataframe by rows using start and end indices.\n slice, subset, rows\n\n Use cases:\n - Extract a specific range of rows from a large dataset\n - Create training and testing subsets for machine learning\n - Analyze data in smaller chunks", - "namespace": "nodetool.data", - "node_type": "nodetool.data.Slice", + "description": "Extracts a subset from a list using start, stop, and step indices.\n list, slice, subset, extract\n\n Use cases:\n - Get a portion of a list\n - Implement pagination\n - Extract every nth element", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Slice", "layout": "default", "properties": [ { - "name": "dataframe", + "name": "values", "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": {}, - "title": "Dataframe", - "description": "The input dataframe to be sliced." + "default": [], + "title": "Values" }, { - "name": "start_index", + "name": "start", "type": { "type": "int" }, "default": 0, - "title": "Start Index", - "description": "The starting index of the slice (inclusive)." + "title": "Start" }, { - "name": "end_index", + "name": "stop", "type": { "type": "int" }, - "default": -1, - "title": "End Index", - "description": "The ending index of the slice (exclusive). Use -1 for the last row." - } - ], - "outputs": [ - { - "type": { - "type": "dataframe" - }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "dataframe", - "start_index", - "end_index" - ], - "is_dynamic": false - }, - { - "title": "Sort By Column", - "description": "Sort dataframe by specified column.\n sort, order, column\n\n Use cases:\n - Arrange data in ascending or descending order\n - Identify top or bottom values in dataset\n - Prepare data for rank-based analysis", - "namespace": "nodetool.data", - "node_type": "nodetool.data.SortByColumn", - "layout": "default", - "properties": [ - { - "name": "df", - "type": { - "type": "dataframe" - }, - "default": {}, - "title": "Df" + "default": 0, + "title": "Stop" }, { - "name": "column", + "name": "step", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Column", - "description": "The column to sort the DataFrame by." + "default": 1, + "title": "Step" } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, "name": "output" } @@ -16750,26 +16184,45 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "df", - "column" + "values", + "start", + "stop", + "step" ], "is_dynamic": false }, { - "title": "To List", - "description": "Convert dataframe to list of dictionaries.\n dataframe, list, convert\n\n Use cases:\n - Convert dataframe data for API consumption\n - Transform data for JSON serialization\n - Prepare data for document-based storage", - "namespace": "nodetool.data", - "node_type": "nodetool.data.ToList", + "title": "Sort", + "description": "Sorts the elements of a list in ascending or descending order.\n list, sort, order, arrange\n\n Use cases:\n - Organize data in a specific order\n - Prepare data for binary search or other algorithms\n - Rank items based on their values", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Sort", "layout": "default", "properties": [ { - "name": "dataframe", + "name": "values", "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": {}, - "title": "Dataframe", - "description": "The input dataframe to convert." + "default": [], + "title": "Values" + }, + { + "name": "order", + "type": { + "type": "enum", + "values": [ + "ascending", + "descending" + ], + "type_name": "nodetool.nodes.nodetool.list.SortOrder" + }, + "default": "ascending", + "title": "Order" } ], "outputs": [ @@ -16778,7 +16231,7 @@ "type": "list", "type_args": [ { - "type": "dict" + "type": "any" } ] }, @@ -16788,39 +16241,36 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "dataframe" + "values", + "order" ], "is_dynamic": false }, { - "title": "Array Output", - "description": "Output node for generic array data.\n array, numerical\n\n Use cases:\n - Outputting results from machine learning models\n - Representing complex numerical data structures", - "namespace": "nodetool.output", - "node_type": "nodetool.output.ArrayOutput", + "title": "Sum", + "description": "Calculates the sum of a list of numbers.\n list, sum, aggregate, math\n\n Use cases:\n - Calculate total of numeric values\n - Add up all elements in a list", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Sum", "layout": "default", "properties": [ { - "name": "value", - "type": { - "type": "np_array" - }, - "default": {}, - "title": "Value" - }, - { - "name": "name", + "name": "values", "type": { - "type": "str" + "type": "list", + "type_args": [ + { + "type": "float" + } + ] }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "default": [], + "title": "Values" } ], "outputs": [ { "type": { - "type": "np_array" + "type": "float" }, "name": "output" } @@ -16828,39 +16278,57 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "values" ], "is_dynamic": false }, { - "title": "Audio Output", - "description": "Output node for audio content references.\n audio, sound, media\n\n Use cases:\n - Displaying processed or generated audio\n - Passing audio data between workflow nodes\n - Returning results of audio analysis", - "namespace": "nodetool.output", - "node_type": "nodetool.output.AudioOutput", + "title": "Transform", + "description": "Applies a transformation to each element in a list.\n list, transform, map, convert\n\n Use cases:\n - Convert types (str to int, etc.)\n - Apply formatting\n - Mathematical operations", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Transform", "layout": "default", "properties": [ { - "name": "value", + "name": "values", "type": { - "type": "audio" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": {}, - "title": "Value" + "default": [], + "title": "Values" }, { - "name": "name", + "name": "transform_type", "type": { - "type": "str" + "type": "enum", + "values": [ + "to_int", + "to_float", + "to_string", + "uppercase", + "lowercase", + "strip" + ], + "type_name": "nodetool.nodes.nodetool.list.TransformType" }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "default": "to_string", + "title": "Transform Type" } ], "outputs": [ { "type": { - "type": "audio" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, "name": "output" } @@ -16868,39 +16336,54 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "values", + "transform_type" ], "is_dynamic": false }, { - "title": "Boolean Output", - "description": "Output node for a single boolean value.\n boolean, true, false, flag, condition, flow-control, branch, else, true, false, switch, toggle\n\n Use cases:\n - Returning binary results (yes/no, true/false)\n - Controlling conditional logic in workflows\n - Indicating success/failure of operations", - "namespace": "nodetool.output", - "node_type": "nodetool.output.BooleanOutput", + "title": "Union", + "description": "Combines unique elements from two lists.\n list, set, union, combine\n\n Use cases:\n - Merge lists while removing duplicates\n - Combine collections uniquely\n - Create comprehensive set of items", + "namespace": "nodetool.list", + "node_type": "nodetool.list.Union", "layout": "default", "properties": [ { - "name": "value", + "name": "list1", "type": { - "type": "bool" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": false, - "title": "Value" + "default": [], + "title": "List1" }, { - "name": "name", + "name": "list2", "type": { - "type": "str" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "default": [], + "title": "List2" } ], "outputs": [ { "type": { - "type": "bool" + "type": "list", + "type_args": [ + { + "type": "any" + } + ] }, "name": "output" } @@ -16908,39 +16391,32 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "list1", + "list2" ], "is_dynamic": false }, { - "title": "Dataframe Output", - "description": "Output node for structured data references.\n dataframe, table, structured\n\n Use cases:\n - Outputting tabular data results\n - Passing structured data between analysis steps\n - Displaying data in table format", - "namespace": "nodetool.output", - "node_type": "nodetool.output.DataframeOutput", + "title": "Image Generation", + "description": "Generate an image using Google's Imagen model via the Gemini API.\n google, image generation, ai, imagen\n\n Use cases:\n - Create images from text descriptions\n - Generate assets for creative projects\n - Explore AI-powered image synthesis", + "namespace": "google.image_generation", + "node_type": "google.image_generation.ImageGeneration", "layout": "default", "properties": [ { - "name": "value", - "type": { - "type": "dataframe" - }, - "default": {}, - "title": "Value" - }, - { - "name": "name", + "name": "prompt", "type": { "type": "str" }, "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "title": "Prompt", + "description": "The text prompt describing the image to generate." } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "image" }, "name": "output" } @@ -16948,55 +16424,31 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "prompt" ], "is_dynamic": false }, { - "title": "Dictionary Output", - "description": "Output node for key-value pair data.\n dictionary, key-value, mapping\n\n Use cases:\n - Returning multiple named values\n - Passing complex data structures between nodes\n - Organizing heterogeneous output data", - "namespace": "nodetool.output", - "node_type": "nodetool.output.DictionaryOutput", + "title": "DELETE Request", + "description": "Remove a resource from a server using an HTTP DELETE request.\n http, delete, request, url\n\n Use cases:\n - Delete user accounts\n - Remove API resources\n - Cancel subscriptions\n - Clear cache entries", + "namespace": "lib.http", + "node_type": "lib.http.DeleteRequest", "layout": "default", "properties": [ { - "name": "value", - "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] - }, - "default": {}, - "title": "Value" - }, - { - "name": "name", + "name": "url", "type": { "type": "str" }, "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "title": "Url", + "description": "The URL to make the request to." } ], "outputs": [ { "type": { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] + "type": "str" }, "name": "output" } @@ -17004,39 +16456,73 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "url" ], "is_dynamic": false }, { - "title": "Document Output", - "description": "Output node for document content references.\n document, pdf, file\n\n Use cases:\n - Displaying processed or generated documents\n - Passing document data between workflow nodes\n - Returning results of document analysis", - "namespace": "nodetool.output", - "node_type": "nodetool.output.DocumentOutput", + "title": "Download Dataframe", + "description": "Download data from a URL and return as a dataframe.\n http, get, request, url, dataframe, csv, json, data\n\n Use cases:\n - Download CSV data and convert to dataframe\n - Fetch JSON data and convert to dataframe\n - Retrieve tabular data from APIs\n - Process data files from URLs", + "namespace": "lib.http", + "node_type": "lib.http.DownloadDataframe", "layout": "default", "properties": [ { - "name": "value", + "name": "url", "type": { - "type": "document" + "type": "str" + }, + "default": "", + "title": "Url", + "description": "The URL to make the request to." + }, + { + "name": "file_format", + "type": { + "type": "enum", + "values": [ + "csv", + "json", + "tsv" + ], + "type_name": "nodetool.nodes.lib.http.FileFormat" + }, + "default": "csv", + "title": "File Format", + "description": "The format of the data file (csv, json, tsv)." + }, + { + "name": "columns", + "type": { + "type": "record_type" }, "default": {}, - "title": "Value" + "title": "Columns", + "description": "The columns of the dataframe." }, { - "name": "name", + "name": "encoding", "type": { "type": "str" }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "default": "utf-8", + "title": "Encoding", + "description": "The encoding of the text file." + }, + { + "name": "delimiter", + "type": { + "type": "str" + }, + "default": ",", + "title": "Delimiter", + "description": "The delimiter for CSV/TSV files." } ], "outputs": [ { "type": { - "type": "document" + "type": "dataframe" }, "name": "output" } @@ -17044,165 +16530,198 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "url", + "columns", + "file_format" ], "is_dynamic": false }, { - "title": "Float Output", - "description": "Output node for a single float value.\n float, decimal, number\n\n Use cases:\n - Returning decimal results (e.g. percentages, ratios)\n - Passing floating-point parameters between nodes\n - Displaying numeric metrics with decimal precision", - "namespace": "nodetool.output", - "node_type": "nodetool.output.FloatOutput", + "title": "Download Files", + "description": "Download files from a list of URLs into a local folder.\n download, files, urls, batch\n\n Use cases:\n - Batch download files from multiple URLs\n - Create local copies of remote resources\n - Archive web content\n - Download datasets", + "namespace": "lib.http", + "node_type": "lib.http.DownloadFiles", "layout": "default", "properties": [ { - "name": "value", + "name": "urls", "type": { - "type": "float" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, - "default": 0, - "title": "Value" + "default": [], + "title": "Urls", + "description": "List of URLs to download." }, { - "name": "name", + "name": "output_folder", "type": { - "type": "str" + "type": "file_path" }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." - } - ], - "outputs": [ + "default": { + "path": "downloads" + }, + "title": "Output Folder", + "description": "Local folder path where files will be saved." + }, { + "name": "max_concurrent_downloads", "type": { - "type": "float" + "type": "int" }, - "name": "output" + "default": 5, + "title": "Max Concurrent Downloads", + "description": "Maximum number of concurrent downloads." } ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "value" - ], - "is_dynamic": false - }, - { - "title": "Group Output", - "description": "Generic output node for grouped data from any node.\n group, composite, multi-output\n\n Use cases:\n - Aggregating multiple outputs from a single node\n - Passing varied data types as a single unit\n - Organizing related outputs in workflows", - "namespace": "nodetool.output", - "node_type": "nodetool.output.GroupOutput", - "layout": "default", - "properties": [ + "outputs": [ { - "name": "input", "type": { - "type": "any" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, - "title": "Input" - } - ], - "outputs": [ + "name": "success" + }, { "type": { "type": "list", "type_args": [ { - "type": "any" + "type": "str" } ] }, - "name": "output" + "name": "failed" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "input" + "urls", + "output_folder", + "max_concurrent_downloads" ], "is_dynamic": false }, { - "title": "Image List Output", - "description": "Output node for a list of image references.\n images, list, gallery\n\n Use cases:\n - Displaying multiple images in a grid\n - Returning image search results", - "namespace": "nodetool.output", - "node_type": "nodetool.output.ImageListOutput", + "title": "Fetch Page", + "description": "Fetch a web page using Selenium and return its content.\n selenium, fetch, webpage, http\n\n Use cases:\n - Retrieve content from dynamic websites\n - Capture JavaScript-rendered content\n - Interact with web applications", + "namespace": "lib.http", + "node_type": "lib.http.FetchPage", "layout": "default", "properties": [ { - "name": "value", + "name": "url", "type": { - "type": "list", - "type_args": [ - { - "type": "image" - } - ] + "type": "str" }, - "default": [], - "title": "Value", - "description": "The images to display." + "default": "", + "title": "Url", + "description": "The URL to fetch the page from." }, { - "name": "name", + "name": "wait_time", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "default": 10, + "title": "Wait Time", + "description": "Maximum time to wait for page load (in seconds)." } ], "outputs": [ { "type": { - "type": "list", + "type": "str" + }, + "name": "html" + }, + { + "type": { + "type": "bool" + }, + "name": "success" + }, + { + "type": { + "type": "union", "type_args": [ { - "type": "image" + "type": "str" + }, + { + "type": "none" } ] }, - "name": "output" + "name": "error_message" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "url", + "wait_time" ], "is_dynamic": false }, { - "title": "Image Output", - "description": "Output node for a single image reference.\n image, picture, visual\n\n Use cases:\n - Displaying a single processed or generated image\n - Passing image data between workflow nodes\n - Returning image analysis results", - "namespace": "nodetool.output", - "node_type": "nodetool.output.ImageOutput", + "title": "Filter Valid URLs", + "description": "Filter a list of URLs by checking their validity using HEAD requests.\n url validation, http, head request\n\n Use cases:\n - Clean URL lists by removing broken links\n - Verify resource availability\n - Validate website URLs before processing", + "namespace": "lib.http", + "node_type": "lib.http.FilterValidURLs", "layout": "default", "properties": [ { - "name": "value", + "name": "url", "type": { - "type": "image" + "type": "str" }, - "default": {}, - "title": "Value" + "default": "", + "title": "Url", + "description": "The URL to make the request to." }, { - "name": "name", + "name": "urls", "type": { - "type": "str" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, - "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "default": [], + "title": "Urls", + "description": "List of URLs to validate." + }, + { + "name": "max_concurrent_requests", + "type": { + "type": "int" + }, + "default": 10, + "title": "Max Concurrent Requests", + "description": "Maximum number of concurrent HEAD requests." } ], "outputs": [ { "type": { - "type": "image" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, "name": "output" } @@ -17210,39 +16729,31 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "url" ], "is_dynamic": false }, { - "title": "Integer Output", - "description": "Output node for a single integer value.\n integer, number, count\n\n Use cases:\n - Returning numeric results (e.g. counts, indices)\n - Passing integer parameters between nodes\n - Displaying numeric metrics", - "namespace": "nodetool.output", - "node_type": "nodetool.output.IntegerOutput", + "title": "GET Request", + "description": "Perform an HTTP GET request to retrieve data from a specified URL.\n http, get, request, url\n\n Use cases:\n - Fetch web page content\n - Retrieve API data\n - Download files\n - Check website availability", + "namespace": "lib.http", + "node_type": "lib.http.GetRequest", "layout": "default", "properties": [ { - "name": "value", - "type": { - "type": "int" - }, - "default": 0, - "title": "Value" - }, - { - "name": "name", + "name": "url", "type": { "type": "str" }, "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "title": "Url", + "description": "The URL to make the request to." } ], "outputs": [ { "type": { - "type": "int" + "type": "str" }, "name": "output" } @@ -17250,49 +16761,31 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "url" ], "is_dynamic": false }, { - "title": "List Output", - "description": "Output node for a list of arbitrary values.\n list, output, any\n\n Use cases:\n - Returning multiple results from a workflow\n - Aggregating outputs from multiple nodes", - "namespace": "nodetool.output", - "node_type": "nodetool.output.ListOutput", + "title": "GET Binary", + "description": "Perform an HTTP GET request and return raw binary data.\n http, get, request, url, binary, download\n\n Use cases:\n - Download binary files\n - Fetch images or media\n - Retrieve PDF documents\n - Download any non-text content", + "namespace": "lib.http", + "node_type": "lib.http.GetRequestBinary", "layout": "default", "properties": [ { - "name": "value", - "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] - }, - "default": [], - "title": "Value" - }, - { - "name": "name", + "name": "url", "type": { "type": "str" }, "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "title": "Url", + "description": "The URL to make the request to." } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "any" - } - ] + "type": "bytes" }, "name": "output" } @@ -17300,39 +16793,31 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "url" ], "is_dynamic": false }, { - "title": "Model Output", - "description": "Output node for machine learning model references.\n model, ml, ai\n\n Use cases:\n - Passing trained models between workflow steps\n - Outputting newly created or fine-tuned models\n - Referencing models for later use in the workflow", - "namespace": "nodetool.output", - "node_type": "nodetool.output.ModelOutput", + "title": "GET Document", + "description": "Perform an HTTP GET request and return a document\n http, get, request, url, document\n\n Use cases:\n - Download PDF documents\n - Retrieve Word documents\n - Fetch Excel files\n - Download any document format", + "namespace": "lib.http", + "node_type": "lib.http.GetRequestDocument", "layout": "default", "properties": [ { - "name": "value", - "type": { - "type": "model_ref" - }, - "default": {}, - "title": "Value" - }, - { - "name": "name", + "name": "url", "type": { "type": "str" }, "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "title": "Url", + "description": "The URL to make the request to." } ], "outputs": [ { "type": { - "type": "model_ref" + "type": "document" }, "name": "output" } @@ -17340,39 +16825,31 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "url" ], "is_dynamic": false }, { - "title": "String Output", - "description": "Output node for a single string value.\n string, text, output\n\n Use cases:\n - Returning text results or messages\n - Passing string parameters between nodes\n - Displaying short text outputs", - "namespace": "nodetool.output", - "node_type": "nodetool.output.StringOutput", + "title": "HTTPBase", + "description": "Base node for HTTP requests.\n\n http, network, request\n\n Use cases:\n - Share common fields for HTTP nodes\n - Add custom request parameters in subclasses\n - Control visibility of specific request types", + "namespace": "lib.http", + "node_type": "lib.http.HTTPBase", "layout": "default", "properties": [ { - "name": "value", - "type": { - "type": "str" - }, - "default": "", - "title": "Value" - }, - { - "name": "name", + "name": "url", "type": { "type": "str" }, "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "title": "Url", + "description": "The URL to make the request to." } ], "outputs": [ { "type": { - "type": "str" + "type": "any" }, "name": "output" } @@ -17380,39 +16857,39 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "url" ], "is_dynamic": false }, { - "title": "Text Output", - "description": "Output node for structured text content.\n text, content, document\n\n Use cases:\n - Returning longer text content or documents\n - Passing formatted text between processing steps\n - Displaying rich text output", - "namespace": "nodetool.output", - "node_type": "nodetool.output.TextOutput", + "title": "HEAD Request", + "description": "Retrieve headers from a resource using an HTTP HEAD request.\n http, head, request, url\n\n Use cases:\n - Check resource existence\n - Get metadata without downloading content\n - Verify authentication or permissions", + "namespace": "lib.http", + "node_type": "lib.http.HeadRequest", "layout": "default", - "properties": [ - { - "name": "value", - "type": { - "type": "text" - }, - "default": {}, - "title": "Value" - }, + "properties": [ { - "name": "name", + "name": "url", "type": { "type": "str" }, "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "title": "Url", + "description": "The URL to make the request to." } ], "outputs": [ { "type": { - "type": "text" + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "str" + } + ] }, "name": "output" } @@ -17420,71 +16897,104 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "url" ], "is_dynamic": false }, { - "title": "Video Output", - "description": "Output node for video content references.\n video, media, clip\n\n Use cases:\n - Displaying processed or generated video content\n - Passing video data between workflow steps\n - Returning results of video analysis", - "namespace": "nodetool.output", - "node_type": "nodetool.output.VideoOutput", + "title": "Image Downloader", + "description": "Download images from list of URLs and return a list of ImageRefs.\n image download, web scraping, data processing\n\n Use cases:\n - Prepare image datasets for machine learning tasks\n - Archive images from web pages\n - Process and analyze images extracted from websites", + "namespace": "lib.http", + "node_type": "lib.http.ImageDownloader", "layout": "default", "properties": [ { - "name": "value", + "name": "images", "type": { - "type": "video" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, - "default": {}, - "title": "Value" + "default": [], + "title": "Images", + "description": "List of image URLs to download." }, { - "name": "name", + "name": "base_url", "type": { "type": "str" }, "default": "", - "title": "Name", - "description": "The parameter name for the workflow." + "title": "Base Url", + "description": "Base URL to prepend to relative image URLs." + }, + { + "name": "max_concurrent_downloads", + "type": { + "type": "int" + }, + "default": 10, + "title": "Max Concurrent Downloads", + "description": "Maximum number of concurrent image downloads." } ], "outputs": [ { "type": { - "type": "video" + "type": "list", + "type_args": [ + { + "type": "image" + } + ] }, - "name": "output" + "name": "images" + }, + { + "type": { + "type": "list", + "type_args": [ + { + "type": "str" + } + ] + }, + "name": "failed_urls" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "value" + "images", + "base_url", + "max_concurrent_downloads" ], "is_dynamic": false }, { - "title": "Image Generation", - "description": "Generate an image using Google's Imagen model via the Gemini API.\n google, image generation, ai, imagen\n\n Use cases:\n - Create images from text descriptions\n - Generate assets for creative projects\n - Explore AI-powered image synthesis", - "namespace": "google.image_generation", - "node_type": "google.image_generation.ImageGeneration", + "title": "GET JSON", + "description": "Perform an HTTP GET request and parse the response as JSON.\n http, get, request, url, json, api\n\n Use cases:\n - Fetch data from REST APIs\n - Retrieve JSON-formatted responses\n - Interface with JSON web services", + "namespace": "lib.http", + "node_type": "lib.http.JSONGetRequest", "layout": "default", "properties": [ { - "name": "prompt", + "name": "url", "type": { "type": "str" }, "default": "", - "title": "Prompt", - "description": "The text prompt describing the image to generate." + "title": "Url", + "description": "The URL to make the request to." } ], "outputs": [ { "type": { - "type": "image" + "type": "dict" }, "name": "output" } @@ -17492,15 +17002,15 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "prompt" + "url" ], "is_dynamic": false }, { - "title": "Extract Feed Metadata", - "description": "Extracts metadata from an RSS feed.\n rss, metadata, feed\n \n Use cases:\n - Get feed information\n - Validate feed details\n - Extract feed metadata", - "namespace": "lib.rss", - "node_type": "lib.rss.ExtractFeedMetadata", + "title": "PATCH JSON", + "description": "Partially update resources with JSON data using an HTTP PATCH request.\n http, patch, request, url, json, api\n\n Use cases:\n - Partial updates to API resources\n - Modify specific fields without full replacement\n - Efficient updates for large objects", + "namespace": "lib.http", + "node_type": "lib.http.JSONPatchRequest", "layout": "default", "properties": [ { @@ -17510,7 +17020,16 @@ }, "default": "", "title": "Url", - "description": "URL of the RSS feed" + "description": "The URL to make the request to." + }, + { + "name": "data", + "type": { + "type": "dict" + }, + "default": {}, + "title": "Data", + "description": "The JSON data to send in the PATCH request." } ], "outputs": [ @@ -17529,10 +17048,10 @@ "is_dynamic": false }, { - "title": "Fetch RSS Feed", - "description": "Fetches and parses an RSS feed from a URL.\n rss, feed, network\n \n Use cases:\n - Monitor news feeds\n - Aggregate content from multiple sources\n - Process blog updates", - "namespace": "lib.rss", - "node_type": "lib.rss.FetchRSSFeed", + "title": "POST JSON", + "description": "Send JSON data to a server using an HTTP POST request.\n http, post, request, url, json, api\n\n Use cases:\n - Send structured data to REST APIs\n - Create resources with JSON payloads\n - Interface with modern web services", + "namespace": "lib.http", + "node_type": "lib.http.JSONPostRequest", "layout": "default", "properties": [ { @@ -17542,18 +17061,22 @@ }, "default": "", "title": "Url", - "description": "URL of the RSS feed to fetch" + "description": "The URL to make the request to." + }, + { + "name": "data", + "type": { + "type": "dict" + }, + "default": {}, + "title": "Data", + "description": "The JSON data to send in the POST request." } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "rss_entry" - } - ] + "type": "dict" }, "name": "output" } @@ -17566,96 +17089,76 @@ "is_dynamic": false }, { - "title": "Extract RSS Entry Fields", - "description": "Extracts fields from an RSS entry.\n rss, entry, fields", - "namespace": "lib.rss", - "node_type": "lib.rss.RSSEntryFields", + "title": "PUT JSON", + "description": "Update resources with JSON data using an HTTP PUT request.\n http, put, request, url, json, api\n\n Use cases:\n - Update existing API resources\n - Replace complete objects in REST APIs\n - Set configuration with JSON data", + "namespace": "lib.http", + "node_type": "lib.http.JSONPutRequest", "layout": "default", "properties": [ { - "name": "entry", - "type": { - "type": "rss_entry" - }, - "default": {}, - "title": "Entry", - "description": "The RSS entry to extract fields from." - } - ], - "outputs": [ - { - "type": { - "type": "str" - }, - "name": "title" - }, - { + "name": "url", "type": { "type": "str" }, - "name": "link" - }, - { - "type": { - "type": "datetime" - }, - "name": "published" + "default": "", + "title": "Url", + "description": "The URL to make the request to." }, { + "name": "data", "type": { - "type": "str" + "type": "dict" }, - "name": "summary" - }, + "default": {}, + "title": "Data", + "description": "The JSON data to send in the PUT request." + } + ], + "outputs": [ { "type": { - "type": "str" + "type": "dict" }, - "name": "author" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "entry" + "url" ], "is_dynamic": false }, { - "title": "HTMLSplitter", - "description": "Split HTML content into semantic chunks based on HTML tags.\n html, text, semantic, tags, parsing", - "namespace": "lib.llama_index", - "node_type": "lib.llama_index.HTMLSplitter", + "title": "POST Request", + "description": "Send data to a server using an HTTP POST request.\n http, post, request, url, data\n\n Use cases:\n - Submit form data\n - Create new resources on an API\n - Upload files\n - Authenticate users", + "namespace": "lib.http", + "node_type": "lib.http.PostRequest", "layout": "default", "properties": [ { - "name": "document_id", + "name": "url", "type": { "type": "str" }, "default": "", - "title": "Document Id", - "description": "Document ID to associate with the HTML content" + "title": "Url", + "description": "The URL to make the request to." }, { - "name": "text", + "name": "data", "type": { "type": "str" }, "default": "", - "title": "Text", - "description": "HTML content to split" + "title": "Data", + "description": "The data to send in the POST request." } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "text_chunk" - } - ] + "type": "str" }, "name": "output" } @@ -17663,64 +17166,48 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "document_id", - "text" + "url" ], "is_dynamic": false }, { - "title": "JSONSplitter", - "description": "Split JSON content into semantic chunks.\n json, parsing, semantic, structured", - "namespace": "lib.llama_index", - "node_type": "lib.llama_index.JSONSplitter", + "title": "POST Binary", + "description": "Send data using an HTTP POST request and return raw binary data.\n http, post, request, url, data, binary\n\n Use cases:\n - Upload and receive binary files\n - Interact with binary APIs\n - Process image or media uploads\n - Handle binary file transformations", + "namespace": "lib.http", + "node_type": "lib.http.PostRequestBinary", "layout": "default", "properties": [ { - "name": "document_id", + "name": "url", "type": { "type": "str" }, "default": "", - "title": "Document Id", - "description": "Document ID to associate with the JSON content" + "title": "Url", + "description": "The URL to make the request to." }, { - "name": "text", + "name": "data", "type": { - "type": "str" + "type": "union", + "type_args": [ + { + "type": "str" + }, + { + "type": "bytes" + } + ] }, "default": "", - "title": "Text", - "description": "JSON content to split" - }, - { - "name": "include_metadata", - "type": { - "type": "bool" - }, - "default": true, - "title": "Include Metadata", - "description": "Whether to include metadata in nodes" - }, - { - "name": "include_prev_next_rel", - "type": { - "type": "bool" - }, - "default": true, - "title": "Include Prev Next Rel", - "description": "Whether to include prev/next relationships" + "title": "Data", + "description": "The data to send in the POST request. Can be string or binary." } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "text_chunk" - } - ] + "type": "bytes" }, "name": "output" } @@ -17728,79 +17215,40 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "document_id", - "text", - "include_metadata", - "include_prev_next_rel" + "url" ], "is_dynamic": false }, { - "title": "Semantic Splitter", - "description": "Split text semantically.\n chroma, embedding, collection, RAG, index, text, markdown, semantic", - "namespace": "lib.llama_index", - "node_type": "lib.llama_index.SemanticSplitter", + "title": "PUT Request", + "description": "Update existing resources on a server using an HTTP PUT request.\n http, put, request, url, data\n\n Use cases:\n - Update user profiles\n - Modify existing API resources\n - Replace file contents\n - Set configuration values", + "namespace": "lib.http", + "node_type": "lib.http.PutRequest", "layout": "default", "properties": [ { - "name": "embed_model", - "type": { - "type": "llama_model" - }, - "default": {}, - "title": "Embed Model", - "description": "Embedding model to use" - }, - { - "name": "document_id", + "name": "url", "type": { "type": "str" }, "default": "", - "title": "Document Id", - "description": "Document ID to associate with the text content" + "title": "Url", + "description": "The URL to make the request to." }, { - "name": "text", + "name": "data", "type": { "type": "str" }, "default": "", - "title": "Text", - "description": "Text content to split" - }, - { - "name": "buffer_size", - "type": { - "type": "int" - }, - "default": 1, - "title": "Buffer Size", - "description": "Buffer size for semantic splitting", - "min": 1.0, - "max": 100.0 - }, - { - "name": "threshold", - "type": { - "type": "int" - }, - "default": 95, - "title": "Threshold", - "description": "Breakpoint percentile threshold for semantic splitting", - "min": 0.0, - "max": 100.0 + "title": "Data", + "description": "The data to send in the PUT request." } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "text_chunk" - } - ] + "type": "str" }, "name": "output" } @@ -17808,11 +17256,7 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "embed_model", - "document_id", - "text", - "buffer_size", - "threshold" + "url" ], "is_dynamic": false }, @@ -18169,84 +17613,44 @@ "is_dynamic": false }, { - "title": "Extract Bullet Lists", - "description": "Extracts bulleted lists from markdown.\n markdown, lists, bullets, extraction\n\n Use cases:\n - Extract unordered list items\n - Analyze bullet point structures\n - Convert bullet lists to structured data", - "namespace": "lib.markdown", - "node_type": "lib.markdown.ExtractBulletLists", + "title": "Extract Markdown", + "description": "Convert PDF to Markdown format using pymupdf4llm.\n pdf, markdown, convert\n\n Use cases:\n - Convert PDF documents to markdown format\n - Preserve document structure in markdown\n - Create editable markdown from PDFs", + "namespace": "lib.pymupdf", + "node_type": "lib.pymupdf.ExtractMarkdown", "layout": "default", "properties": [ { - "name": "markdown", + "name": "pdf", "type": { - "type": "str" + "type": "document" }, - "default": "", - "title": "Markdown", - "description": "The markdown text to analyze" - } - ], - "outputs": [ + "default": {}, + "title": "Pdf", + "description": "The PDF document to convert to markdown" + }, { + "name": "start_page", "type": { - "type": "list", - "type_args": [ - { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] - } - ] + "type": "int" }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "markdown" - ], - "is_dynamic": false - }, - { - "title": "Extract Code Blocks", - "description": "Extracts code blocks and their languages from markdown.\n markdown, code, extraction\n\n Use cases:\n - Extract code samples for analysis\n - Collect programming examples\n - Analyze code snippets in documentation", - "namespace": "lib.markdown", - "node_type": "lib.markdown.ExtractCodeBlocks", - "layout": "default", - "properties": [ + "default": 0, + "title": "Start Page", + "description": "First page to extract (0-based index)" + }, { - "name": "markdown", + "name": "end_page", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Markdown", - "description": "The markdown text to analyze" + "default": -1, + "title": "End Page", + "description": "Last page to extract (-1 for last page)" } ], "outputs": [ { "type": { - "type": "list", - "type_args": [ - { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "str" - } - ] - } - ] + "type": "str" }, "name": "output" } @@ -18254,36 +17658,45 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "markdown" + "pdf", + "start_page", + "end_page" ], "is_dynamic": false }, { - "title": "Extract Headers", - "description": "Extracts headers and creates a document structure/outline.\n markdown, headers, structure\n\n Use cases:\n - Generate table of contents\n - Analyze document structure\n - Extract main topics from documents", - "namespace": "lib.markdown", - "node_type": "lib.markdown.ExtractHeaders", + "title": "Extract Tables", + "description": "Extract tables from a PDF document using PyMuPDF.\n pdf, tables, extract, structured\n\n Use cases:\n - Extract tabular data from PDFs\n - Convert PDF tables to structured formats\n - Analyze table layouts and content", + "namespace": "lib.pymupdf", + "node_type": "lib.pymupdf.ExtractTables", "layout": "default", "properties": [ { - "name": "markdown", + "name": "pdf", "type": { - "type": "str" + "type": "document" }, - "default": "", - "title": "Markdown", - "description": "The markdown text to analyze" + "default": {}, + "title": "Pdf", + "description": "The PDF document to extract tables from" }, { - "name": "max_level", + "name": "start_page", "type": { "type": "int" }, - "default": 6, - "title": "Max Level", - "description": "Maximum header level to extract (1-6)", - "min": 1.0, - "max": 6.0 + "default": 0, + "title": "Start Page", + "description": "First page to extract (0-based index)" + }, + { + "name": "end_page", + "type": { + "type": "int" + }, + "default": -1, + "title": "End Page", + "description": "Last page to extract (-1 for last page)" } ], "outputs": [ @@ -18292,15 +17705,7 @@ "type": "list", "type_args": [ { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "any" - } - ] + "type": "dict" } ] }, @@ -18310,54 +17715,51 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "markdown", - "max_level" + "pdf", + "start_page", + "end_page" ], "is_dynamic": false }, { - "title": "Extract Links", - "description": "Extracts all links from markdown text.\n markdown, links, extraction\n\n Use cases:\n - Extract references and citations from academic documents\n - Build link graphs from markdown documentation\n - Analyze external resources referenced in markdown files", - "namespace": "lib.markdown", - "node_type": "lib.markdown.ExtractLinks", + "title": "Extract Text", + "description": "Extract plain text from a PDF document using PyMuPDF.\n pdf, text, extract\n\n Use cases:\n - Extract raw text content from PDFs\n - Convert PDF documents to plain text\n - Prepare text for further processing", + "namespace": "lib.pymupdf", + "node_type": "lib.pymupdf.ExtractText", "layout": "default", "properties": [ { - "name": "markdown", + "name": "pdf", "type": { - "type": "str" + "type": "document" }, - "default": "", - "title": "Markdown", - "description": "The markdown text to analyze" + "default": {}, + "title": "Pdf", + "description": "The PDF document to extract text from" }, { - "name": "include_titles", + "name": "start_page", "type": { - "type": "bool" + "type": "int" }, - "default": true, - "title": "Include Titles", - "description": "Whether to include link titles in output" - } - ], - "outputs": [ + "default": 0, + "title": "Start Page", + "description": "First page to extract (0-based index)" + }, { + "name": "end_page", "type": { - "type": "list", - "type_args": [ - { - "type": "dict", - "type_args": [ - { - "type": "str" - }, - { - "type": "str" - } - ] - } - ] + "type": "int" + }, + "default": -1, + "title": "End Page", + "description": "Last page to extract (-1 for last page)" + } + ], + "outputs": [ + { + "type": { + "type": "str" }, "name": "output" } @@ -18365,26 +17767,45 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "markdown", - "include_titles" + "pdf", + "start_page", + "end_page" ], "is_dynamic": false }, { - "title": "Extract Numbered Lists", - "description": "Extracts numbered lists from markdown.\n markdown, lists, numbered, extraction\n\n Use cases:\n - Extract ordered list items\n - Analyze enumerated structures\n - Convert numbered lists to structured data", - "namespace": "lib.markdown", - "node_type": "lib.markdown.ExtractNumberedLists", + "title": "Extract Text Blocks", + "description": "Extract text blocks with their bounding boxes from a PDF.\n pdf, text, blocks, layout\n\n Use cases:\n - Analyze text layout and structure\n - Extract text while preserving block-level formatting\n - Get text position information", + "namespace": "lib.pymupdf", + "node_type": "lib.pymupdf.ExtractTextBlocks", "layout": "default", "properties": [ { - "name": "markdown", + "name": "pdf", "type": { - "type": "str" + "type": "document" }, - "default": "", - "title": "Markdown", - "description": "The markdown text to analyze" + "default": {}, + "title": "Pdf", + "description": "The PDF document to extract text blocks from" + }, + { + "name": "start_page", + "type": { + "type": "int" + }, + "default": 0, + "title": "Start Page", + "description": "First page to extract (0-based index)" + }, + { + "name": "end_page", + "type": { + "type": "int" + }, + "default": -1, + "title": "End Page", + "description": "Last page to extract (-1 for last page)" } ], "outputs": [ @@ -18393,7 +17814,7 @@ "type": "list", "type_args": [ { - "type": "str" + "type": "dict" } ] }, @@ -18403,63 +17824,56 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "markdown" + "pdf", + "start_page", + "end_page" ], "is_dynamic": false }, { - "title": "Extract Tables", - "description": "Extracts tables from markdown and converts them to structured data.\n markdown, tables, data\n\n Use cases:\n - Extract tabular data from markdown\n - Convert markdown tables to structured formats\n - Analyze tabulated information", - "namespace": "lib.markdown", - "node_type": "lib.markdown.ExtractTables", + "title": "Extract Text With Style", + "description": "Extract text with style information (font, size, color) from a PDF.\n pdf, text, style, formatting\n\n Use cases:\n - Preserve text formatting during extraction\n - Analyze document styling\n - Extract text with font information", + "namespace": "lib.pymupdf", + "node_type": "lib.pymupdf.ExtractTextWithStyle", "layout": "default", "properties": [ { - "name": "markdown", + "name": "pdf", "type": { - "type": "str" + "type": "document" }, - "default": "", - "title": "Markdown", - "description": "The markdown text to analyze" - } - ], - "outputs": [ + "default": {}, + "title": "Pdf", + "description": "The PDF document to extract styled text from" + }, { + "name": "start_page", "type": { - "type": "dataframe" + "type": "int" }, - "name": "output" - } - ], - "the_model_info": {}, - "recommended_models": [], - "basic_fields": [ - "markdown" - ], - "is_dynamic": false - }, - { - "title": "DELETE Request", - "description": "Remove a resource from a server using an HTTP DELETE request.\n http, delete, request, url\n\n Use cases:\n - Delete user accounts\n - Remove API resources\n - Cancel subscriptions\n - Clear cache entries", - "namespace": "lib.http", - "node_type": "lib.http.DeleteRequest", - "layout": "default", - "properties": [ + "default": 0, + "title": "Start Page", + "description": "First page to extract (0-based index)" + }, { - "name": "url", + "name": "end_page", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Url", - "description": "The URL to make the request to." + "default": -1, + "title": "End Page", + "description": "Last page to extract (-1 for last page)" } ], "outputs": [ { "type": { - "type": "str" + "type": "list", + "type_args": [ + { + "type": "dict" + } + ] }, "name": "output" } @@ -18467,73 +17881,124 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url" + "pdf", + "start_page", + "end_page" ], "is_dynamic": false }, { - "title": "Download Dataframe", - "description": "Download data from a URL and return as a dataframe.\n http, get, request, url, dataframe, csv, json, data\n\n Use cases:\n - Download CSV data and convert to dataframe\n - Fetch JSON data and convert to dataframe\n - Retrieve tabular data from APIs\n - Process data files from URLs", - "namespace": "lib.http", - "node_type": "lib.http.DownloadDataframe", + "title": "Split Markdown", + "description": "Splits markdown text by headers while preserving header hierarchy in metadata.\n markdown, split, headers\n\n Use cases:\n - Splitting markdown documentation while preserving structure\n - Processing markdown files for semantic search\n - Creating context-aware chunks from markdown content", + "namespace": "lib.langchain", + "node_type": "lib.langchain.MarkdownSplitter", "layout": "default", "properties": [ { - "name": "url", + "name": "text", "type": { "type": "str" }, "default": "", - "title": "Url", - "description": "The URL to make the request to." + "title": "Markdown Text" }, { - "name": "file_format", + "name": "document_id", "type": { - "type": "enum", - "values": [ - "csv", - "json", - "tsv" + "type": "str" + }, + "default": "", + "title": "Document Id", + "description": "Document ID to associate with the text" + }, + { + "name": "headers_to_split_on", + "type": { + "type": "list", + "type_args": [ + { + "type": "tuple", + "type_args": [ + { + "type": "str" + }, + { + "type": "str" + } + ] + } + ] + }, + "default": [ + [ + "#", + "Header 1" ], - "type_name": "nodetool.nodes.lib.http.FileFormat" + [ + "##", + "Header 2" + ], + [ + "###", + "Header 3" + ] + ], + "title": "Headers To Split On", + "description": "List of tuples containing (header_symbol, header_name)" + }, + { + "name": "strip_headers", + "type": { + "type": "bool" }, - "default": "csv", - "title": "File Format", - "description": "The format of the data file (csv, json, tsv)." + "default": true, + "title": "Strip Headers", + "description": "Whether to remove headers from the output content" }, { - "name": "columns", + "name": "return_each_line", "type": { - "type": "record_type" + "type": "bool" }, - "default": {}, - "title": "Columns", - "description": "The columns of the dataframe." + "default": false, + "title": "Return Each Line", + "description": "Whether to split into individual lines instead of header sections" }, { - "name": "encoding", + "name": "chunk_size", "type": { - "type": "str" + "type": "union", + "type_args": [ + { + "type": "int" + }, + { + "type": "none" + } + ] }, - "default": "utf-8", - "title": "Encoding", - "description": "The encoding of the text file." + "title": "Chunk Size", + "description": "Optional maximum chunk size for further splitting" }, { - "name": "delimiter", + "name": "chunk_overlap", "type": { - "type": "str" + "type": "int" }, - "default": ",", - "title": "Delimiter", - "description": "The delimiter for CSV/TSV files." + "default": 30, + "title": "Chunk Overlap", + "description": "Overlap size when using chunk_size" } ], "outputs": [ { "type": { - "type": "dataframe" + "type": "list", + "type_args": [ + { + "type": "text_chunk" + } + ] }, "name": "output" } @@ -18541,56 +18006,60 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url", - "columns", - "file_format" + "text", + "document_id", + "headers_to_split_on", + "strip_headers", + "return_each_line", + "chunk_size", + "chunk_overlap" ], "is_dynamic": false - }, - { - "title": "Download Files", - "description": "Download files from a list of URLs into a local folder.\n download, files, urls, batch\n\n Use cases:\n - Batch download files from multiple URLs\n - Create local copies of remote resources\n - Archive web content\n - Download datasets", - "namespace": "lib.http", - "node_type": "lib.http.DownloadFiles", + }, + { + "title": "Split Recursively", + "description": "Splits text recursively using LangChain's RecursiveCharacterTextSplitter.\n text, split, chunks\n\n Use cases:\n - Splitting documents while preserving semantic relationships\n - Creating chunks for language model processing\n - Handling text in languages with/without word boundaries", + "namespace": "lib.langchain", + "node_type": "lib.langchain.RecursiveTextSplitter", "layout": "default", "properties": [ { - "name": "urls", + "name": "text", "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] + "type": "str" }, - "default": [], - "title": "Urls", - "description": "List of URLs to download." + "default": "", + "title": "Text" }, { - "name": "output_folder", + "name": "document_id", "type": { - "type": "file_path" + "type": "str" }, - "default": { - "path": "downloads" + "default": "", + "title": "Document Id", + "description": "Document ID to associate with the text" + }, + { + "name": "chunk_size", + "type": { + "type": "int" }, - "title": "Output Folder", - "description": "Local folder path where files will be saved." + "default": 1000, + "title": "Chunk Size", + "description": "Maximum size of each chunk in characters" }, { - "name": "max_concurrent_downloads", + "name": "chunk_overlap", "type": { "type": "int" }, - "default": 5, - "title": "Max Concurrent Downloads", - "description": "Maximum number of concurrent downloads." - } - ], - "outputs": [ + "default": 200, + "title": "Chunk Overlap", + "description": "Number of characters to overlap between chunks" + }, { + "name": "separators", "type": { "type": "list", "type_args": [ @@ -18599,129 +18068,129 @@ } ] }, - "name": "success" - }, + "default": [ + "\n\n", + "\n", + "." + ], + "title": "Separators", + "description": "List of separators to use for splitting, in order of preference" + } + ], + "outputs": [ { "type": { "type": "list", "type_args": [ { - "type": "str" + "type": "text_chunk" } ] }, - "name": "failed" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "urls", - "output_folder", - "max_concurrent_downloads" + "text", + "document_id", + "chunk_size", + "chunk_overlap", + "separators" ], "is_dynamic": false }, { - "title": "Fetch Page", - "description": "Fetch a web page using Selenium and return its content.\n selenium, fetch, webpage, http\n\n Use cases:\n - Retrieve content from dynamic websites\n - Capture JavaScript-rendered content\n - Interact with web applications", - "namespace": "lib.http", - "node_type": "lib.http.FetchPage", + "title": "Split into Sentences", + "description": "Splits text into sentences using LangChain's SentenceTransformersTokenTextSplitter.\n sentences, split, nlp\n\n Use cases:\n - Natural sentence-based text splitting\n - Creating semantically meaningful chunks\n - Processing text for sentence-level analysis", + "namespace": "lib.langchain", + "node_type": "lib.langchain.SentenceSplitter", "layout": "default", "properties": [ { - "name": "url", + "name": "text", "type": { "type": "str" }, "default": "", - "title": "Url", - "description": "The URL to fetch the page from." + "title": "Text" }, { - "name": "wait_time", + "name": "document_id", "type": { - "type": "int" + "type": "str" }, - "default": 10, - "title": "Wait Time", - "description": "Maximum time to wait for page load (in seconds)." - } - ], - "outputs": [ + "default": "", + "title": "Document Id", + "description": "Document ID to associate with the text" + }, { + "name": "chunk_size", "type": { - "type": "str" + "type": "int" }, - "name": "html" + "default": 40, + "title": "Chunk Size", + "description": "Maximum number of tokens per chunk" }, { + "name": "chunk_overlap", "type": { - "type": "bool" + "type": "int" }, - "name": "success" - }, + "default": 5, + "title": "Chunk Overlap", + "description": "Number of tokens to overlap between chunks" + } + ], + "outputs": [ { "type": { - "type": "union", + "type": "list", "type_args": [ { - "type": "str" - }, - { - "type": "none" + "type": "text_chunk" } ] }, - "name": "error_message" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url", - "wait_time" + "text", + "document_id", + "chunk_size", + "chunk_overlap" ], "is_dynamic": false }, { - "title": "Filter Valid URLs", - "description": "Filter a list of URLs by checking their validity using HEAD requests.\n url validation, http, head request\n\n Use cases:\n - Clean URL lists by removing broken links\n - Verify resource availability\n - Validate website URLs before processing", - "namespace": "lib.http", - "node_type": "lib.http.FilterValidURLs", + "title": "HTMLSplitter", + "description": "Split HTML content into semantic chunks based on HTML tags.\n html, text, semantic, tags, parsing", + "namespace": "lib.llama_index", + "node_type": "lib.llama_index.HTMLSplitter", "layout": "default", "properties": [ { - "name": "url", + "name": "document_id", "type": { "type": "str" }, "default": "", - "title": "Url", - "description": "The URL to make the request to." - }, - { - "name": "urls", - "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] - }, - "default": [], - "title": "Urls", - "description": "List of URLs to validate." + "title": "Document Id", + "description": "Document ID to associate with the HTML content" }, { - "name": "max_concurrent_requests", + "name": "text", "type": { - "type": "int" + "type": "str" }, - "default": 10, - "title": "Max Concurrent Requests", - "description": "Maximum number of concurrent HEAD requests." + "default": "", + "title": "Text", + "description": "HTML content to split" } ], "outputs": [ @@ -18730,7 +18199,7 @@ "type": "list", "type_args": [ { - "type": "str" + "type": "text_chunk" } ] }, @@ -18740,31 +18209,64 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url" + "document_id", + "text" ], "is_dynamic": false }, { - "title": "GET Request", - "description": "Perform an HTTP GET request to retrieve data from a specified URL.\n http, get, request, url\n\n Use cases:\n - Fetch web page content\n - Retrieve API data\n - Download files\n - Check website availability", - "namespace": "lib.http", - "node_type": "lib.http.GetRequest", + "title": "JSONSplitter", + "description": "Split JSON content into semantic chunks.\n json, parsing, semantic, structured", + "namespace": "lib.llama_index", + "node_type": "lib.llama_index.JSONSplitter", "layout": "default", "properties": [ { - "name": "url", + "name": "document_id", "type": { "type": "str" }, "default": "", - "title": "Url", - "description": "The URL to make the request to." + "title": "Document Id", + "description": "Document ID to associate with the JSON content" + }, + { + "name": "text", + "type": { + "type": "str" + }, + "default": "", + "title": "Text", + "description": "JSON content to split" + }, + { + "name": "include_metadata", + "type": { + "type": "bool" + }, + "default": true, + "title": "Include Metadata", + "description": "Whether to include metadata in nodes" + }, + { + "name": "include_prev_next_rel", + "type": { + "type": "bool" + }, + "default": true, + "title": "Include Prev Next Rel", + "description": "Whether to include prev/next relationships" } ], "outputs": [ { "type": { - "type": "str" + "type": "list", + "type_args": [ + { + "type": "text_chunk" + } + ] }, "name": "output" } @@ -18772,31 +18274,79 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url" + "document_id", + "text", + "include_metadata", + "include_prev_next_rel" ], "is_dynamic": false }, { - "title": "GET Binary", - "description": "Perform an HTTP GET request and return raw binary data.\n http, get, request, url, binary, download\n\n Use cases:\n - Download binary files\n - Fetch images or media\n - Retrieve PDF documents\n - Download any non-text content", - "namespace": "lib.http", - "node_type": "lib.http.GetRequestBinary", + "title": "Semantic Splitter", + "description": "Split text semantically.\n chroma, embedding, collection, RAG, index, text, markdown, semantic", + "namespace": "lib.llama_index", + "node_type": "lib.llama_index.SemanticSplitter", "layout": "default", "properties": [ { - "name": "url", + "name": "embed_model", + "type": { + "type": "llama_model" + }, + "default": {}, + "title": "Embed Model", + "description": "Embedding model to use" + }, + { + "name": "document_id", + "type": { + "type": "str" + }, + "default": "", + "title": "Document Id", + "description": "Document ID to associate with the text content" + }, + { + "name": "text", "type": { "type": "str" }, "default": "", - "title": "Url", - "description": "The URL to make the request to." + "title": "Text", + "description": "Text content to split" + }, + { + "name": "buffer_size", + "type": { + "type": "int" + }, + "default": 1, + "title": "Buffer Size", + "description": "Buffer size for semantic splitting", + "min": 1.0, + "max": 100.0 + }, + { + "name": "threshold", + "type": { + "type": "int" + }, + "default": 95, + "title": "Threshold", + "description": "Breakpoint percentile threshold for semantic splitting", + "min": 0.0, + "max": 100.0 } ], "outputs": [ { "type": { - "type": "bytes" + "type": "list", + "type_args": [ + { + "type": "text_chunk" + } + ] }, "name": "output" } @@ -18804,31 +18354,48 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url" + "embed_model", + "document_id", + "text", + "buffer_size", + "threshold" ], "is_dynamic": false }, { - "title": "GET Document", - "description": "Perform an HTTP GET request and return a document\n http, get, request, url, document\n\n Use cases:\n - Download PDF documents\n - Retrieve Word documents\n - Fetch Excel files\n - Download any document format", - "namespace": "lib.http", - "node_type": "lib.http.GetRequestDocument", + "title": "Extract Bullet Lists", + "description": "Extracts bulleted lists from markdown.\n markdown, lists, bullets, extraction\n\n Use cases:\n - Extract unordered list items\n - Analyze bullet point structures\n - Convert bullet lists to structured data", + "namespace": "lib.markdown", + "node_type": "lib.markdown.ExtractBulletLists", "layout": "default", "properties": [ { - "name": "url", + "name": "markdown", "type": { "type": "str" }, "default": "", - "title": "Url", - "description": "The URL to make the request to." + "title": "Markdown", + "description": "The markdown text to analyze" } ], "outputs": [ { "type": { - "type": "document" + "type": "list", + "type_args": [ + { + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] + } + ] }, "name": "output" } @@ -18836,31 +18403,44 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url" + "markdown" ], "is_dynamic": false }, { - "title": "HTTPBase", - "description": "Base node for HTTP requests.\n\n http, network, request\n\n Use cases:\n - Share common fields for HTTP nodes\n - Add custom request parameters in subclasses\n - Control visibility of specific request types", - "namespace": "lib.http", - "node_type": "lib.http.HTTPBase", + "title": "Extract Code Blocks", + "description": "Extracts code blocks and their languages from markdown.\n markdown, code, extraction\n\n Use cases:\n - Extract code samples for analysis\n - Collect programming examples\n - Analyze code snippets in documentation", + "namespace": "lib.markdown", + "node_type": "lib.markdown.ExtractCodeBlocks", "layout": "default", "properties": [ { - "name": "url", + "name": "markdown", "type": { "type": "str" }, "default": "", - "title": "Url", - "description": "The URL to make the request to." + "title": "Markdown", + "description": "The markdown text to analyze" } ], "outputs": [ { "type": { - "type": "any" + "type": "list", + "type_args": [ + { + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "str" + } + ] + } + ] }, "name": "output" } @@ -18868,37 +18448,53 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url" + "markdown" ], "is_dynamic": false }, { - "title": "HEAD Request", - "description": "Retrieve headers from a resource using an HTTP HEAD request.\n http, head, request, url\n\n Use cases:\n - Check resource existence\n - Get metadata without downloading content\n - Verify authentication or permissions", - "namespace": "lib.http", - "node_type": "lib.http.HeadRequest", + "title": "Extract Headers", + "description": "Extracts headers and creates a document structure/outline.\n markdown, headers, structure\n\n Use cases:\n - Generate table of contents\n - Analyze document structure\n - Extract main topics from documents", + "namespace": "lib.markdown", + "node_type": "lib.markdown.ExtractHeaders", "layout": "default", "properties": [ { - "name": "url", + "name": "markdown", "type": { "type": "str" }, "default": "", - "title": "Url", - "description": "The URL to make the request to." + "title": "Markdown", + "description": "The markdown text to analyze" + }, + { + "name": "max_level", + "type": { + "type": "int" + }, + "default": 6, + "title": "Max Level", + "description": "Maximum header level to extract (1-6)", + "min": 1.0, + "max": 6.0 } ], "outputs": [ { "type": { - "type": "dict", + "type": "list", "type_args": [ { - "type": "str" - }, - { - "type": "str" + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "any" + } + ] } ] }, @@ -18908,48 +18504,35 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url" + "markdown", + "max_level" ], "is_dynamic": false }, { - "title": "Image Downloader", - "description": "Download images from list of URLs and return a list of ImageRefs.\n image download, web scraping, data processing\n\n Use cases:\n - Prepare image datasets for machine learning tasks\n - Archive images from web pages\n - Process and analyze images extracted from websites", - "namespace": "lib.http", - "node_type": "lib.http.ImageDownloader", + "title": "Extract Links", + "description": "Extracts all links from markdown text.\n markdown, links, extraction\n\n Use cases:\n - Extract references and citations from academic documents\n - Build link graphs from markdown documentation\n - Analyze external resources referenced in markdown files", + "namespace": "lib.markdown", + "node_type": "lib.markdown.ExtractLinks", "layout": "default", "properties": [ { - "name": "images", - "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] - }, - "default": [], - "title": "Images", - "description": "List of image URLs to download." - }, - { - "name": "base_url", + "name": "markdown", "type": { "type": "str" }, "default": "", - "title": "Base Url", - "description": "Base URL to prepend to relative image URLs." + "title": "Markdown", + "description": "The markdown text to analyze" }, { - "name": "max_concurrent_downloads", + "name": "include_titles", "type": { - "type": "int" + "type": "bool" }, - "default": 10, - "title": "Max Concurrent Downloads", - "description": "Maximum number of concurrent image downloads." + "default": true, + "title": "Include Titles", + "description": "Whether to include link titles in output" } ], "outputs": [ @@ -18958,54 +18541,55 @@ "type": "list", "type_args": [ { - "type": "image" - } - ] - }, - "name": "images" - }, - { - "type": { - "type": "list", - "type_args": [ - { - "type": "str" + "type": "dict", + "type_args": [ + { + "type": "str" + }, + { + "type": "str" + } + ] } ] }, - "name": "failed_urls" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "images", - "base_url", - "max_concurrent_downloads" + "markdown", + "include_titles" ], "is_dynamic": false }, { - "title": "GET JSON", - "description": "Perform an HTTP GET request and parse the response as JSON.\n http, get, request, url, json, api\n\n Use cases:\n - Fetch data from REST APIs\n - Retrieve JSON-formatted responses\n - Interface with JSON web services", - "namespace": "lib.http", - "node_type": "lib.http.JSONGetRequest", + "title": "Extract Numbered Lists", + "description": "Extracts numbered lists from markdown.\n markdown, lists, numbered, extraction\n\n Use cases:\n - Extract ordered list items\n - Analyze enumerated structures\n - Convert numbered lists to structured data", + "namespace": "lib.markdown", + "node_type": "lib.markdown.ExtractNumberedLists", "layout": "default", "properties": [ { - "name": "url", + "name": "markdown", "type": { "type": "str" }, "default": "", - "title": "Url", - "description": "The URL to make the request to." + "title": "Markdown", + "description": "The markdown text to analyze" } ], "outputs": [ { "type": { - "type": "dict" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, "name": "output" } @@ -19013,40 +18597,31 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url" + "markdown" ], "is_dynamic": false }, { - "title": "PATCH JSON", - "description": "Partially update resources with JSON data using an HTTP PATCH request.\n http, patch, request, url, json, api\n\n Use cases:\n - Partial updates to API resources\n - Modify specific fields without full replacement\n - Efficient updates for large objects", - "namespace": "lib.http", - "node_type": "lib.http.JSONPatchRequest", + "title": "Extract Tables", + "description": "Extracts tables from markdown and converts them to structured data.\n markdown, tables, data\n\n Use cases:\n - Extract tabular data from markdown\n - Convert markdown tables to structured formats\n - Analyze tabulated information", + "namespace": "lib.markdown", + "node_type": "lib.markdown.ExtractTables", "layout": "default", "properties": [ { - "name": "url", - "type": { - "type": "str" - }, - "default": "", - "title": "Url", - "description": "The URL to make the request to." - }, - { - "name": "data", + "name": "markdown", "type": { - "type": "dict" + "type": "str" }, - "default": {}, - "title": "Data", - "description": "The JSON data to send in the PATCH request." + "default": "", + "title": "Markdown", + "description": "The markdown text to analyze" } ], "outputs": [ { "type": { - "type": "dict" + "type": "dataframe" }, "name": "output" } @@ -19054,40 +18629,76 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url" + "markdown" ], "is_dynamic": false }, { - "title": "POST JSON", - "description": "Send JSON data to a server using an HTTP POST request.\n http, post, request, url, json, api\n\n Use cases:\n - Send structured data to REST APIs\n - Create resources with JSON payloads\n - Interface with modern web services", - "namespace": "lib.http", - "node_type": "lib.http.JSONPostRequest", + "title": "Text To Speech", + "description": "Converts text to speech using OpenAI TTS models.\n audio, tts, text-to-speech, voice, synthesis\n\n Use cases:\n - Generate spoken content for videos or podcasts\n - Create voice-overs for presentations\n - Assist visually impaired users with text reading\n - Produce audio versions of written content", + "namespace": "openai.audio", + "node_type": "openai.audio.TextToSpeech", "layout": "default", "properties": [ { - "name": "url", + "name": "model", + "type": { + "type": "enum", + "values": [ + "tts-1", + "tts-1-hd", + "gpt-4o-mini-tts" + ], + "type_name": "nodetool.nodes.openai.audio.TtsModel" + }, + "default": "tts-1", + "title": "Model" + }, + { + "name": "voice", + "type": { + "type": "enum", + "values": [ + "alloy", + "ash", + "ballad", + "coral", + "echo", + "fable", + "onyx", + "nova", + "sage", + "shimmer", + "verse" + ], + "type_name": "nodetool.nodes.openai.audio.Voice" + }, + "default": "alloy", + "title": "Voice" + }, + { + "name": "input", "type": { "type": "str" }, "default": "", - "title": "Url", - "description": "The URL to make the request to." + "title": "Input" }, { - "name": "data", + "name": "speed", "type": { - "type": "dict" + "type": "float" }, - "default": {}, - "title": "Data", - "description": "The JSON data to send in the POST request." + "default": 1.0, + "title": "Speed", + "min": 0.25, + "max": 4.0 } ], "outputs": [ { "type": { - "type": "dict" + "type": "audio" }, "name": "output" } @@ -19095,75 +18706,210 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url" + "input", + "model", + "voice" ], "is_dynamic": false }, { - "title": "PUT JSON", - "description": "Update resources with JSON data using an HTTP PUT request.\n http, put, request, url, json, api\n\n Use cases:\n - Update existing API resources\n - Replace complete objects in REST APIs\n - Set configuration with JSON data", - "namespace": "lib.http", - "node_type": "lib.http.JSONPutRequest", + "title": "Transcribe", + "description": "Converts speech to text using OpenAI's speech-to-text API.\n audio, transcription, speech-to-text, stt, whisper\n\n Use cases:\n - Generate accurate transcriptions of audio content\n - Create searchable text from audio recordings\n - Support multiple languages for transcription\n - Enable automated subtitling and captioning", + "namespace": "openai.audio", + "node_type": "openai.audio.Transcribe", "layout": "default", "properties": [ { - "name": "url", + "name": "model", + "type": { + "type": "enum", + "values": [ + "whisper-1", + "gpt-4o-transcribe", + "gpt-4o-mini-transcribe" + ], + "type_name": "nodetool.nodes.openai.audio.TranscriptionModel" + }, + "default": "whisper-1", + "title": "Model", + "description": "The model to use for transcription." + }, + { + "name": "audio", + "type": { + "type": "audio" + }, + "default": {}, + "title": "Audio", + "description": "The audio file to transcribe (max 25 MB)." + }, + { + "name": "language", + "type": { + "type": "enum", + "values": [ + "auto_detect", + "spanish", + "italian", + "korean", + "portuguese", + "english", + "japanese", + "german", + "russian", + "dutch", + "polish", + "catalan", + "french", + "indonesian", + "ukrainian", + "turkish", + "malay", + "swedish", + "mandarin", + "finnish", + "norwegian", + "romanian", + "thai", + "vietnamese", + "slovak", + "arabic", + "czech", + "croatian", + "greek", + "serbian", + "danish", + "bulgarian", + "hungarian", + "filipino", + "bosnian", + "galician", + "macedonian", + "hindi", + "estonian", + "slovenian", + "tamil", + "latvian", + "azerbaijani", + "urdu", + "lithuanian", + "hebrew", + "welsh", + "persian", + "icelandic", + "kazakh", + "afrikaans", + "kannada", + "marathi", + "swahili", + "telugu", + "maori", + "nepali", + "armenian", + "belarusian", + "gujarati", + "punjabi", + "bengali" + ], + "type_name": "nodetool.nodes.openai.audio.Language" + }, + "default": "auto_detect", + "title": "Language", + "description": "The language of the input audio" + }, + { + "name": "timestamps", + "type": { + "type": "bool" + }, + "default": false, + "title": "Timestamps", + "description": "Whether to return timestamps for the generated text." + }, + { + "name": "prompt", "type": { "type": "str" }, "default": "", - "title": "Url", - "description": "The URL to make the request to." + "title": "Prompt", + "description": "Optional text to guide the model's style or continue a previous audio segment." }, { - "name": "data", + "name": "temperature", "type": { - "type": "dict" + "type": "float" }, - "default": {}, - "title": "Data", - "description": "The JSON data to send in the PUT request." + "default": 0, + "title": "Temperature", + "description": "The sampling temperature between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.", + "min": 0.0, + "max": 1.0 } ], "outputs": [ { "type": { - "type": "dict" + "type": "str" }, - "name": "output" + "name": "text" + }, + { + "type": { + "type": "list", + "type_args": [ + { + "type": "audio_chunk" + } + ] + }, + "name": "words" + }, + { + "type": { + "type": "list", + "type_args": [ + { + "type": "audio_chunk" + } + ] + }, + "name": "segments" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url" + "audio", + "language", + "timestamps" ], "is_dynamic": false }, { - "title": "POST Request", - "description": "Send data to a server using an HTTP POST request.\n http, post, request, url, data\n\n Use cases:\n - Submit form data\n - Create new resources on an API\n - Upload files\n - Authenticate users", - "namespace": "lib.http", - "node_type": "lib.http.PostRequest", + "title": "Translate", + "description": "Translates speech in audio to English text.\n audio, translation, speech-to-text, localization\n\n Use cases:\n - Translate foreign language audio content to English\n - Create English transcripts of multilingual recordings\n - Assist non-English speakers in understanding audio content\n - Enable cross-language communication in audio formats", + "namespace": "openai.audio", + "node_type": "openai.audio.Translate", "layout": "default", "properties": [ { - "name": "url", + "name": "audio", "type": { - "type": "str" + "type": "audio" }, - "default": "", - "title": "Url", - "description": "The URL to make the request to." + "default": {}, + "title": "Audio", + "description": "The audio file to translate." }, { - "name": "data", + "name": "temperature", "type": { - "type": "str" + "type": "float" }, - "default": "", - "title": "Data", - "description": "The data to send in the POST request." + "default": 0.0, + "title": "Temperature", + "description": "The temperature to use for the translation." } ], "outputs": [ @@ -19177,48 +18923,52 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url" + "audio", + "temperature" ], "is_dynamic": false }, { - "title": "POST Binary", - "description": "Send data using an HTTP POST request and return raw binary data.\n http, post, request, url, data, binary\n\n Use cases:\n - Upload and receive binary files\n - Interact with binary APIs\n - Process image or media uploads\n - Handle binary file transformations", - "namespace": "lib.http", - "node_type": "lib.http.PostRequestBinary", + "title": "Embedding", + "description": "Generate vector representations of text for semantic analysis.\n embeddings, similarity, search, clustering, classification\n\n Uses OpenAI's embedding models to create dense vector representations of text.\n These vectors capture semantic meaning, enabling:\n - Semantic search\n - Text clustering\n - Document classification\n - Recommendation systems\n - Anomaly detection\n - Measuring text similarity and diversity", + "namespace": "openai.text", + "node_type": "openai.text.Embedding", "layout": "default", "properties": [ { - "name": "url", + "name": "input", "type": { "type": "str" }, "default": "", - "title": "Url", - "description": "The URL to make the request to." + "title": "Input" }, { - "name": "data", + "name": "model", "type": { - "type": "union", - "type_args": [ - { - "type": "str" - }, - { - "type": "bytes" - } - ] + "type": "enum", + "values": [ + "text-embedding-3-large", + "text-embedding-3-small" + ], + "type_name": "nodetool.nodes.openai.text.EmbeddingModel" }, - "default": "", - "title": "Data", - "description": "The data to send in the POST request. Can be string or binary." + "default": "text-embedding-3-small", + "title": "Model" + }, + { + "name": "chunk_size", + "type": { + "type": "int" + }, + "default": 4096, + "title": "Chunk Size" } ], "outputs": [ { "type": { - "type": "bytes" + "type": "np_array" }, "name": "output" } @@ -19226,34 +18976,27 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url" + "input", + "model", + "chunk_size" ], "is_dynamic": false }, { - "title": "PUT Request", - "description": "Update existing resources on a server using an HTTP PUT request.\n http, put, request, url, data\n\n Use cases:\n - Update user profiles\n - Modify existing API resources\n - Replace file contents\n - Set configuration values", - "namespace": "lib.http", - "node_type": "lib.http.PutRequest", + "title": "Web Search", + "description": "\ud83d\udd0d OpenAI Web Search - Searches the web using OpenAI's web search capabilities.\n\n This node uses an OpenAI model equipped with web search functionality\n (like gpt-4o with search preview) to answer queries based on current web information.\n Requires an OpenAI API key.", + "namespace": "openai.text", + "node_type": "openai.text.WebSearch", "layout": "default", "properties": [ { - "name": "url", - "type": { - "type": "str" - }, - "default": "", - "title": "Url", - "description": "The URL to make the request to." - }, - { - "name": "data", + "name": "query", "type": { "type": "str" }, "default": "", - "title": "Data", - "description": "The data to send in the PUT request." + "title": "Query", + "description": "The search query to execute." } ], "outputs": [ @@ -19267,111 +19010,139 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "url" + "query" ], "is_dynamic": false }, { - "title": "Split Markdown", - "description": "Splits markdown text by headers while preserving header hierarchy in metadata.\n markdown, split, headers\n\n Use cases:\n - Splitting markdown documentation while preserving structure\n - Processing markdown files for semantic search\n - Creating context-aware chunks from markdown content", - "namespace": "lib.langchain", - "node_type": "lib.langchain.MarkdownSplitter", + "title": "Create Image", + "description": "Generates images from textual descriptions.\n image, t2i, tti, text-to-image, create, generate, picture, photo, art, drawing, illustration\n\n Use cases:\n 1. Create custom illustrations for articles or presentations\n 2. Generate concept art for creative projects\n 3. Produce visual aids for educational content\n 4. Design unique marketing visuals or product mockups\n 5. Explore artistic ideas and styles programmatically", + "namespace": "openai.image", + "node_type": "openai.image.CreateImage", "layout": "default", "properties": [ { - "name": "text", + "name": "prompt", "type": { "type": "str" }, "default": "", - "title": "Markdown Text" + "title": "Prompt", + "description": "The prompt to use." }, { - "name": "document_id", + "name": "model", "type": { - "type": "str" + "type": "enum", + "values": [ + "gpt-image-1" + ], + "type_name": "nodetool.nodes.openai.image.Model" }, - "default": "", - "title": "Document Id", - "description": "Document ID to associate with the text" + "default": "gpt-image-1", + "title": "Model", + "description": "The model to use for image generation." }, { - "name": "headers_to_split_on", + "name": "size", "type": { - "type": "list", - "type_args": [ - { - "type": "tuple", - "type_args": [ - { - "type": "str" - }, - { - "type": "str" - } - ] - } - ] - }, - "default": [ - [ - "#", - "Header 1" - ], - [ - "##", - "Header 2" + "type": "enum", + "values": [ + "1024x1024", + "1536x1024", + "1024x1536" ], - [ - "###", - "Header 3" - ] - ], - "title": "Headers To Split On", - "description": "List of tuples containing (header_symbol, header_name)" + "type_name": "nodetool.nodes.openai.image.Size" + }, + "default": "1024x1024", + "title": "Size", + "description": "The size of the image to generate." }, { - "name": "strip_headers", + "name": "background", "type": { - "type": "bool" + "type": "enum", + "values": [ + "transparent", + "opaque", + "auto" + ], + "type_name": "nodetool.nodes.openai.image.Background" }, - "default": true, - "title": "Strip Headers", - "description": "Whether to remove headers from the output content" + "default": "auto", + "title": "Background", + "description": "The background of the image to generate." }, { - "name": "return_each_line", + "name": "quality", "type": { - "type": "bool" + "type": "enum", + "values": [ + "high", + "medium", + "low" + ], + "type_name": "nodetool.nodes.openai.image.Quality" }, - "default": false, - "title": "Return Each Line", - "description": "Whether to split into individual lines instead of header sections" - }, + "default": "high", + "title": "Quality", + "description": "The quality of the image to generate." + } + ], + "outputs": [ { - "name": "chunk_size", "type": { - "type": "union", - "type_args": [ - { - "type": "int" - }, - { - "type": "none" - } - ] + "type": "image" }, - "title": "Chunk Size", - "description": "Optional maximum chunk size for further splitting" + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "prompt", + "model", + "size", + "background", + "quality" + ], + "is_dynamic": false + }, + { + "title": "List Scheduled Events", + "description": "Fetch scheduled events for a Calendly user.", + "namespace": "calendly.events", + "node_type": "calendly.events.ListScheduledEvents", + "layout": "default", + "properties": [ + { + "name": "user", + "type": { + "type": "str" + }, + "default": "", + "title": "User", + "description": "User URI to fetch events for" }, { - "name": "chunk_overlap", + "name": "count", "type": { "type": "int" }, - "default": 30, - "title": "Chunk Overlap", - "description": "Overlap size when using chunk_size" + "default": 20, + "title": "Count", + "description": "Number of events to return", + "min": 1.0, + "max": 100.0 + }, + { + "name": "status", + "type": { + "type": "str" + }, + "default": "active", + "title": "Status", + "description": "Event status filter" } ], "outputs": [ @@ -19380,7 +19151,7 @@ "type": "list", "type_args": [ { - "type": "text_chunk" + "type": "calendly_event" } ] }, @@ -19390,115 +19161,92 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "document_id", - "headers_to_split_on", - "strip_headers", - "return_each_line", - "chunk_size", - "chunk_overlap" + "user", + "count", + "status" ], "is_dynamic": false }, { - "title": "Split Recursively", - "description": "Splits text recursively using LangChain's RecursiveCharacterTextSplitter.\n text, split, chunks\n\n Use cases:\n - Splitting documents while preserving semantic relationships\n - Creating chunks for language model processing\n - Handling text in languages with/without word boundaries", - "namespace": "lib.langchain", - "node_type": "lib.langchain.RecursiveTextSplitter", + "title": "Scheduled Event Fields", + "description": "Extract fields from a CalendlyEvent.", + "namespace": "calendly.events", + "node_type": "calendly.events.ScheduledEventFields", "layout": "default", "properties": [ { - "name": "text", + "name": "event", "type": { - "type": "str" + "type": "calendly_event" }, - "default": "", - "title": "Text" - }, + "default": {}, + "title": "Event", + "description": "The Calendly event to extract" + } + ], + "outputs": [ { - "name": "document_id", "type": { "type": "str" }, - "default": "", - "title": "Document Id", - "description": "Document ID to associate with the text" + "name": "uri" }, { - "name": "chunk_size", "type": { - "type": "int" + "type": "str" }, - "default": 1000, - "title": "Chunk Size", - "description": "Maximum size of each chunk in characters" + "name": "name" }, { - "name": "chunk_overlap", "type": { - "type": "int" + "type": "datetime" }, - "default": 200, - "title": "Chunk Overlap", - "description": "Number of characters to overlap between chunks" + "name": "start_time" }, { - "name": "separators", "type": { - "type": "list", - "type_args": [ - { - "type": "str" - } - ] + "type": "datetime" }, - "default": [ - "\n\n", - "\n", - "." - ], - "title": "Separators", - "description": "List of separators to use for splitting, in order of preference" - } - ], - "outputs": [ + "name": "end_time" + }, { "type": { - "type": "list", - "type_args": [ - { - "type": "text_chunk" - } - ] + "type": "str" }, - "name": "output" + "name": "location" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", - "document_id", - "chunk_size", - "chunk_overlap", - "separators" + "event" ], "is_dynamic": false }, { - "title": "Split into Sentences", - "description": "Splits text into sentences using LangChain's SentenceTransformersTokenTextSplitter.\n sentences, split, nlp\n\n Use cases:\n - Natural sentence-based text splitting\n - Creating semantically meaningful chunks\n - Processing text for sentence-level analysis", - "namespace": "lib.langchain", - "node_type": "lib.langchain.SentenceSplitter", + "title": "Index Aggregated Text", + "description": "Index multiple text chunks at once with aggregated embeddings from Ollama.\n chroma, embedding, collection, RAG, index, text, chunk, batch, ollama", + "namespace": "chroma.index", + "node_type": "chroma.index.IndexAggregatedText", "layout": "default", "properties": [ { - "name": "text", + "name": "collection", + "type": { + "type": "collection" + }, + "default": {}, + "title": "Collection", + "description": "The collection to index" + }, + { + "name": "document", "type": { "type": "str" }, "default": "", - "title": "Text" + "title": "Document", + "description": "The document to index" }, { "name": "document_id", @@ -19507,366 +19255,400 @@ }, "default": "", "title": "Document Id", - "description": "Document ID to associate with the text" + "description": "The document ID to associate with the text" }, { - "name": "chunk_size", + "name": "metadata", "type": { - "type": "int" + "type": "dict" }, - "default": 40, - "title": "Chunk Size", - "description": "Maximum number of tokens per chunk" + "default": {}, + "title": "Metadata", + "description": "The metadata to associate with the text" }, { - "name": "chunk_overlap", - "type": { - "type": "int" - }, - "default": 5, - "title": "Chunk Overlap", - "description": "Number of tokens to overlap between chunks" - } - ], - "outputs": [ - { + "name": "text_chunks", "type": { "type": "list", "type_args": [ { - "type": "text_chunk" + "type": "union", + "type_args": [ + { + "type": "text_chunk" + }, + { + "type": "str" + } + ] } ] }, - "name": "output" + "default": [], + "title": "Text Chunks", + "description": "List of text chunks to index" + }, + { + "name": "context_window", + "type": { + "type": "int" + }, + "default": 4096, + "title": "Context Window", + "description": "The context window size to use for the model", + "min": 1.0 + }, + { + "name": "aggregation", + "type": { + "type": "enum", + "values": [ + "mean", + "max", + "min", + "sum" + ], + "type_name": "nodetool.nodes.chroma.index.EmbeddingAggregation" + }, + "default": "mean", + "title": "Aggregation", + "description": "The aggregation method to use for the embeddings." } ], + "outputs": [], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "text", + "collection", + "document", "document_id", - "chunk_size", - "chunk_overlap" + "metadata", + "text_chunks", + "context_window", + "aggregation" ], "is_dynamic": false }, { - "title": "Extract Markdown", - "description": "Convert PDF to Markdown format using pymupdf4llm.\n pdf, markdown, convert\n\n Use cases:\n - Convert PDF documents to markdown format\n - Preserve document structure in markdown\n - Create editable markdown from PDFs", - "namespace": "lib.pymupdf", - "node_type": "lib.pymupdf.ExtractMarkdown", + "title": "Index Embedding", + "description": "Index a list of embeddings.", + "namespace": "chroma.index", + "node_type": "chroma.index.IndexEmbedding", "layout": "default", "properties": [ { - "name": "pdf", + "name": "collection", "type": { - "type": "document" + "type": "collection" }, "default": {}, - "title": "Pdf", - "description": "The PDF document to convert to markdown" + "title": "Collection", + "description": "The collection to index" }, { - "name": "start_page", + "name": "embedding", "type": { - "type": "int" + "type": "np_array" }, - "default": 0, - "title": "Start Page", - "description": "First page to extract (0-based index)" + "default": {}, + "title": "Embedding", + "description": "The embedding to index" }, { - "name": "end_page", + "name": "id", "type": { - "type": "int" + "type": "str" }, - "default": -1, - "title": "End Page", - "description": "Last page to extract (-1 for last page)" + "default": "", + "title": "Id", + "description": "The ID to associate with the embedding" + }, + { + "name": "metadata", + "type": { + "type": "dict" + }, + "default": {}, + "title": "Metadata", + "description": "The metadata to associate with the embedding" } ], - "outputs": [ + "outputs": [], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "collection", + "embedding", + "id", + "metadata" + ], + "is_dynamic": false + }, + { + "title": "Index Image", + "description": "Index a single image asset.\n chroma, embedding, collection, RAG, index, image", + "namespace": "chroma.index", + "node_type": "chroma.index.IndexImage", + "layout": "default", + "properties": [ + { + "name": "collection", + "type": { + "type": "collection" + }, + "default": {}, + "title": "Collection", + "description": "The collection to index" + }, + { + "name": "image", + "type": { + "type": "image" + }, + "default": {}, + "title": "Image", + "description": "Image asset to index" + }, { + "name": "metadata", "type": { - "type": "str" + "type": "dict" }, - "name": "output" + "default": {}, + "title": "Metadata", + "description": "The metadata to associate with the image" } ], + "outputs": [], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "pdf", - "start_page", - "end_page" + "collection", + "image", + "metadata" ], "is_dynamic": false }, { - "title": "Extract Tables", - "description": "Extract tables from a PDF document using PyMuPDF.\n pdf, tables, extract, structured\n\n Use cases:\n - Extract tabular data from PDFs\n - Convert PDF tables to structured formats\n - Analyze table layouts and content", - "namespace": "lib.pymupdf", - "node_type": "lib.pymupdf.ExtractTables", + "title": "Index Images", + "description": "Index a list of image assets or files.\n chroma, embedding, collection, RAG, index, image, batch", + "namespace": "chroma.index", + "node_type": "chroma.index.IndexImages", "layout": "default", "properties": [ { - "name": "pdf", + "name": "collection", "type": { - "type": "document" + "type": "collection" }, "default": {}, - "title": "Pdf", - "description": "The PDF document to extract tables from" - }, - { - "name": "start_page", - "type": { - "type": "int" - }, - "default": 0, - "title": "Start Page", - "description": "First page to extract (0-based index)" + "title": "Collection", + "description": "The collection to index" }, { - "name": "end_page", - "type": { - "type": "int" - }, - "default": -1, - "title": "End Page", - "description": "Last page to extract (-1 for last page)" - } - ], - "outputs": [ - { + "name": "images", "type": { "type": "list", "type_args": [ { - "type": "dict" + "type": "image" } ] }, - "name": "output" + "default": [], + "title": "Images", + "description": "List of image assets to index" + }, + { + "name": "upsert", + "type": { + "type": "bool" + }, + "default": false, + "title": "Upsert", + "description": "Whether to upsert the images" } ], + "outputs": [], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "pdf", - "start_page", - "end_page" + "collection", + "images", + "upsert" ], "is_dynamic": false }, { - "title": "Extract Text", - "description": "Extract plain text from a PDF document using PyMuPDF.\n pdf, text, extract\n\n Use cases:\n - Extract raw text content from PDFs\n - Convert PDF documents to plain text\n - Prepare text for further processing", - "namespace": "lib.pymupdf", - "node_type": "lib.pymupdf.ExtractText", + "title": "Index String", + "description": "Index a string with a Document ID to a collection.\n chroma, embedding, collection, RAG, index, text, string\n\n Use cases:\n - Index documents for a vector search", + "namespace": "chroma.index", + "node_type": "chroma.index.IndexString", "layout": "default", "properties": [ { - "name": "pdf", + "name": "collection", "type": { - "type": "document" + "type": "collection" }, "default": {}, - "title": "Pdf", - "description": "The PDF document to extract text from" + "title": "Collection", + "description": "The collection to index" }, { - "name": "start_page", + "name": "text", "type": { - "type": "int" + "type": "str" }, - "default": 0, - "title": "Start Page", - "description": "First page to extract (0-based index)" + "default": "", + "title": "Text", + "description": "Text content to index" }, { - "name": "end_page", + "name": "document_id", "type": { - "type": "int" + "type": "str" }, - "default": -1, - "title": "End Page", - "description": "Last page to extract (-1 for last page)" - } - ], - "outputs": [ + "default": "", + "title": "Document Id", + "description": "Document ID to associate with the text content" + }, { + "name": "metadata", "type": { - "type": "str" + "type": "dict" }, - "name": "output" + "default": {}, + "title": "Metadata", + "description": "The metadata to associate with the text" } ], + "outputs": [], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "pdf", - "start_page", - "end_page" + "collection", + "text", + "document_id", + "metadata" ], "is_dynamic": false }, { - "title": "Extract Text Blocks", - "description": "Extract text blocks with their bounding boxes from a PDF.\n pdf, text, blocks, layout\n\n Use cases:\n - Analyze text layout and structure\n - Extract text while preserving block-level formatting\n - Get text position information", - "namespace": "lib.pymupdf", - "node_type": "lib.pymupdf.ExtractTextBlocks", + "title": "Index Text Chunk", + "description": "Index a single text chunk.\n chroma, embedding, collection, RAG, index, text, chunk", + "namespace": "chroma.index", + "node_type": "chroma.index.IndexTextChunk", "layout": "default", "properties": [ { - "name": "pdf", + "name": "collection", "type": { - "type": "document" + "type": "collection" }, "default": {}, - "title": "Pdf", - "description": "The PDF document to extract text blocks from" + "title": "Collection", + "description": "The collection to index" }, { - "name": "start_page", + "name": "text_chunk", "type": { - "type": "int" + "type": "text_chunk" }, - "default": 0, - "title": "Start Page", - "description": "First page to extract (0-based index)" + "default": {}, + "title": "Text Chunk", + "description": "Text chunk to index" }, { - "name": "end_page", - "type": { - "type": "int" - }, - "default": -1, - "title": "End Page", - "description": "Last page to extract (-1 for last page)" - } - ], - "outputs": [ - { + "name": "metadata", "type": { - "type": "list", - "type_args": [ - { - "type": "dict" - } - ] + "type": "dict" }, - "name": "output" + "default": {}, + "title": "Metadata", + "description": "The metadata to associate with the text chunk" } ], + "outputs": [], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "pdf", - "start_page", - "end_page" + "collection", + "text_chunk", + "metadata" ], "is_dynamic": false }, { - "title": "Extract Text With Style", - "description": "Extract text with style information (font, size, color) from a PDF.\n pdf, text, style, formatting\n\n Use cases:\n - Preserve text formatting during extraction\n - Analyze document styling\n - Extract text with font information", - "namespace": "lib.pymupdf", - "node_type": "lib.pymupdf.ExtractTextWithStyle", + "title": "Index Text Chunks", + "description": "Index multiple text chunks at once.\n chroma, embedding, collection, RAG, index, text, chunk, batch", + "namespace": "chroma.index", + "node_type": "chroma.index.IndexTextChunks", "layout": "default", "properties": [ { - "name": "pdf", + "name": "collection", "type": { - "type": "document" + "type": "collection" }, "default": {}, - "title": "Pdf", - "description": "The PDF document to extract styled text from" - }, - { - "name": "start_page", - "type": { - "type": "int" - }, - "default": 0, - "title": "Start Page", - "description": "First page to extract (0-based index)" + "title": "Collection", + "description": "The collection to index" }, { - "name": "end_page", - "type": { - "type": "int" - }, - "default": -1, - "title": "End Page", - "description": "Last page to extract (-1 for last page)" - } - ], - "outputs": [ - { + "name": "text_chunks", "type": { "type": "list", "type_args": [ { - "type": "dict" + "type": "text_chunk" } ] }, - "name": "output" + "default": [], + "title": "Text Chunks", + "description": "List of text chunks to index" } ], + "outputs": [], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "pdf", - "start_page", - "end_page" + "collection", + "text_chunks" ], "is_dynamic": false }, { - "title": "Embedding", - "description": "Generate vector representations of text for semantic analysis.\n embeddings, similarity, search, clustering, classification\n\n Uses OpenAI's embedding models to create dense vector representations of text.\n These vectors capture semantic meaning, enabling:\n - Semantic search\n - Text clustering\n - Document classification\n - Recommendation systems\n - Anomaly detection\n - Measuring text similarity and diversity", - "namespace": "openai.text", - "node_type": "openai.text.Embedding", + "title": "Collection", + "description": "Get or create a collection.\n chroma, embedding, collection, RAG, get, create", + "namespace": "chroma.collections", + "node_type": "chroma.collections.Collection", "layout": "default", - "properties": [ - { - "name": "input", - "type": { - "type": "str" - }, - "default": "", - "title": "Input" - }, + "properties": [ { - "name": "model", + "name": "name", "type": { - "type": "enum", - "values": [ - "text-embedding-3-large", - "text-embedding-3-small" - ], - "type_name": "nodetool.nodes.openai.text.EmbeddingModel" + "type": "str" }, - "default": "text-embedding-3-small", - "title": "Model" + "default": "", + "title": "Name", + "description": "The name of the collection to create" }, { - "name": "chunk_size", + "name": "embedding_model", "type": { - "type": "int" + "type": "llama_model" }, - "default": 4096, - "title": "Chunk Size" + "default": {}, + "title": "Embedding Model", + "description": "The embedding model to use" } ], "outputs": [ { "type": { - "type": "np_array" + "type": "collection" }, "name": "output" } @@ -19874,33 +19656,32 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "input", - "model", - "chunk_size" + "name", + "embedding_model" ], "is_dynamic": false }, { - "title": "Web Search", - "description": "\ud83d\udd0d OpenAI Web Search - Searches the web using OpenAI's web search capabilities.\n\n This node uses an OpenAI model equipped with web search functionality\n (like gpt-4o with search preview) to answer queries based on current web information.\n Requires an OpenAI API key.", - "namespace": "openai.text", - "node_type": "openai.text.WebSearch", + "title": "Count", + "description": "Count the number of documents in a collection.\n chroma, embedding, collection, RAG", + "namespace": "chroma.collections", + "node_type": "chroma.collections.Count", "layout": "default", "properties": [ { - "name": "query", + "name": "collection", "type": { - "type": "str" + "type": "collection" }, - "default": "", - "title": "Query", - "description": "The search query to execute." + "default": {}, + "title": "Collection", + "description": "The collection to count" } ], "outputs": [ { "type": { - "type": "str" + "type": "int" }, "name": "output" } @@ -19908,76 +19689,68 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "query" + "collection" ], "is_dynamic": false }, { - "title": "Text To Speech", - "description": "Converts text to speech using OpenAI TTS models.\n audio, tts, text-to-speech, voice, synthesis\n\n Use cases:\n - Generate spoken content for videos or podcasts\n - Create voice-overs for presentations\n - Assist visually impaired users with text reading\n - Produce audio versions of written content", - "namespace": "openai.audio", - "node_type": "openai.audio.TextToSpeech", + "title": "Get Documents", + "description": "Get documents from a chroma collection.\n chroma, embedding, collection, RAG, retrieve", + "namespace": "chroma.collections", + "node_type": "chroma.collections.GetDocuments", "layout": "default", "properties": [ { - "name": "model", + "name": "collection", "type": { - "type": "enum", - "values": [ - "tts-1", - "tts-1-hd", - "gpt-4o-mini-tts" - ], - "type_name": "nodetool.nodes.openai.audio.TtsModel" + "type": "collection" }, - "default": "tts-1", - "title": "Model" + "default": {}, + "title": "Collection", + "description": "The collection to get" }, { - "name": "voice", + "name": "ids", "type": { - "type": "enum", - "values": [ - "alloy", - "ash", - "ballad", - "coral", - "echo", - "fable", - "onyx", - "nova", - "sage", - "shimmer", - "verse" - ], - "type_name": "nodetool.nodes.openai.audio.Voice" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, - "default": "alloy", - "title": "Voice" + "default": [], + "title": "Ids", + "description": "The ids of the documents to get" }, { - "name": "input", + "name": "limit", "type": { - "type": "str" + "type": "int" }, - "default": "", - "title": "Input" + "default": 100, + "title": "Limit", + "description": "The limit of the documents to get" }, { - "name": "speed", + "name": "offset", "type": { - "type": "float" + "type": "int" }, - "default": 1.0, - "title": "Speed", - "min": 0.25, - "max": 4.0 + "default": 0, + "title": "Offset", + "description": "The offset of the documents to get" } ], "outputs": [ { "type": { - "type": "audio" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, "name": "output" } @@ -19985,355 +19758,390 @@ "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "input", - "model", - "voice" + "collection", + "ids", + "limit", + "offset" ], "is_dynamic": false }, { - "title": "Transcribe", - "description": "Converts speech to text using OpenAI's speech-to-text API.\n audio, transcription, speech-to-text, stt, whisper\n\n Use cases:\n - Generate accurate transcriptions of audio content\n - Create searchable text from audio recordings\n - Support multiple languages for transcription\n - Enable automated subtitling and captioning", - "namespace": "openai.audio", - "node_type": "openai.audio.Transcribe", + "title": "Peek", + "description": "Peek at the documents in a collection.\n chroma, embedding, collection, RAG, preview", + "namespace": "chroma.collections", + "node_type": "chroma.collections.Peek", "layout": "default", "properties": [ { - "name": "model", + "name": "collection", "type": { - "type": "enum", - "values": [ - "whisper-1", - "gpt-4o-transcribe", - "gpt-4o-mini-transcribe" - ], - "type_name": "nodetool.nodes.openai.audio.TranscriptionModel" + "type": "collection" }, - "default": "whisper-1", - "title": "Model", - "description": "The model to use for transcription." + "default": {}, + "title": "Collection", + "description": "The collection to peek" }, { - "name": "audio", + "name": "limit", "type": { - "type": "audio" + "type": "int" }, - "default": {}, - "title": "Audio", - "description": "The audio file to transcribe (max 25 MB)." - }, + "default": 100, + "title": "Limit", + "description": "The limit of the documents to peek" + } + ], + "outputs": [ { - "name": "language", "type": { - "type": "enum", - "values": [ - "auto_detect", - "spanish", - "italian", - "korean", - "portuguese", - "english", - "japanese", - "german", - "russian", - "dutch", - "polish", - "catalan", - "french", - "indonesian", - "ukrainian", - "turkish", - "malay", - "swedish", - "mandarin", - "finnish", - "norwegian", - "romanian", - "thai", - "vietnamese", - "slovak", - "arabic", - "czech", - "croatian", - "greek", - "serbian", - "danish", - "bulgarian", - "hungarian", - "filipino", - "bosnian", - "galician", - "macedonian", - "hindi", - "estonian", - "slovenian", - "tamil", - "latvian", - "azerbaijani", - "urdu", - "lithuanian", - "hebrew", - "welsh", - "persian", - "icelandic", - "kazakh", - "afrikaans", - "kannada", - "marathi", - "swahili", - "telugu", - "maori", - "nepali", - "armenian", - "belarusian", - "gujarati", - "punjabi", - "bengali" - ], - "type_name": "nodetool.nodes.openai.audio.Language" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, - "default": "auto_detect", - "title": "Language", - "description": "The language of the input audio" - }, + "name": "output" + } + ], + "the_model_info": {}, + "recommended_models": [], + "basic_fields": [ + "collection", + "limit" + ], + "is_dynamic": false + }, + { + "title": "Hybrid Search", + "description": "Hybrid search combining semantic and keyword-based search for better retrieval.\n Uses reciprocal rank fusion to combine results from both methods.", + "namespace": "chroma.query", + "node_type": "chroma.query.HybridSearch", + "layout": "default", + "properties": [ { - "name": "timestamps", + "name": "collection", "type": { - "type": "bool" + "type": "collection" }, - "default": false, - "title": "Timestamps", - "description": "Whether to return timestamps for the generated text." + "default": {}, + "title": "Collection", + "description": "The collection to query" }, { - "name": "prompt", + "name": "text", "type": { "type": "str" }, "default": "", - "title": "Prompt", - "description": "Optional text to guide the model's style or continue a previous audio segment." + "title": "Text", + "description": "The text to query" }, { - "name": "temperature", + "name": "n_results", + "type": { + "type": "int" + }, + "default": 5, + "title": "N Results", + "description": "The number of final results to return" + }, + { + "name": "k_constant", "type": { "type": "float" }, - "default": 0, - "title": "Temperature", - "description": "The sampling temperature between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.", - "min": 0.0, - "max": 1.0 + "default": 60.0, + "title": "K Constant", + "description": "Constant for reciprocal rank fusion (default: 60.0)" + }, + { + "name": "min_keyword_length", + "type": { + "type": "int" + }, + "default": 3, + "title": "Min Keyword Length", + "description": "Minimum length for keyword tokens" } ], "outputs": [ { "type": { - "type": "str" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, - "name": "text" + "name": "ids" }, { "type": { "type": "list", "type_args": [ { - "type": "audio_chunk" + "type": "str" } ] }, - "name": "words" + "name": "documents" }, { "type": { "type": "list", "type_args": [ { - "type": "audio_chunk" + "type": "dict" } ] }, - "name": "segments" + "name": "metadatas" + }, + { + "type": { + "type": "list", + "type_args": [ + { + "type": "float" + } + ] + }, + "name": "distances" + }, + { + "type": { + "type": "list", + "type_args": [ + { + "type": "float" + } + ] + }, + "name": "scores" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "audio", - "language", - "timestamps" + "collection", + "text", + "n_results", + "k_constant", + "min_keyword_length" ], "is_dynamic": false }, { - "title": "Translate", - "description": "Translates speech in audio to English text.\n audio, translation, speech-to-text, localization\n\n Use cases:\n - Translate foreign language audio content to English\n - Create English transcripts of multilingual recordings\n - Assist non-English speakers in understanding audio content\n - Enable cross-language communication in audio formats", - "namespace": "openai.audio", - "node_type": "openai.audio.Translate", + "title": "Query Image", + "description": "Query the index for similar images.", + "namespace": "chroma.query", + "node_type": "chroma.query.QueryImage", "layout": "default", "properties": [ { - "name": "audio", + "name": "collection", "type": { - "type": "audio" + "type": "collection" }, "default": {}, - "title": "Audio", - "description": "The audio file to translate." + "title": "Collection", + "description": "The collection to query" }, { - "name": "temperature", + "name": "image", "type": { - "type": "float" + "type": "image" }, - "default": 0.0, - "title": "Temperature", - "description": "The temperature to use for the translation." + "default": {}, + "title": "Image", + "description": "The image to query" + }, + { + "name": "n_results", + "type": { + "type": "int" + }, + "default": 1, + "title": "N Results", + "description": "The number of results to return" } ], "outputs": [ { "type": { - "type": "str" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, - "name": "output" + "name": "ids" + }, + { + "type": { + "type": "list", + "type_args": [ + { + "type": "str" + } + ] + }, + "name": "documents" + }, + { + "type": { + "type": "list", + "type_args": [ + { + "type": "dict" + } + ] + }, + "name": "metadatas" + }, + { + "type": { + "type": "list", + "type_args": [ + { + "type": "float" + } + ] + }, + "name": "distances" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "audio", - "temperature" + "collection", + "image", + "n_results" ], "is_dynamic": false }, { - "title": "Create Image", - "description": "Generates images from textual descriptions.\n image, t2i, tti, text-to-image, create, generate, picture, photo, art, drawing, illustration\n\n Use cases:\n 1. Create custom illustrations for articles or presentations\n 2. Generate concept art for creative projects\n 3. Produce visual aids for educational content\n 4. Design unique marketing visuals or product mockups\n 5. Explore artistic ideas and styles programmatically", - "namespace": "openai.image", - "node_type": "openai.image.CreateImage", + "title": "Query Text", + "description": "Query the index for similar text.", + "namespace": "chroma.query", + "node_type": "chroma.query.QueryText", "layout": "default", "properties": [ { - "name": "prompt", + "name": "collection", + "type": { + "type": "collection" + }, + "default": {}, + "title": "Collection", + "description": "The collection to query" + }, + { + "name": "text", "type": { "type": "str" }, "default": "", - "title": "Prompt", - "description": "The prompt to use." + "title": "Text", + "description": "The text to query" }, { - "name": "model", + "name": "n_results", "type": { - "type": "enum", - "values": [ - "gpt-image-1" - ], - "type_name": "nodetool.nodes.openai.image.Model" + "type": "int" }, - "default": "gpt-image-1", - "title": "Model", - "description": "The model to use for image generation." - }, + "default": 1, + "title": "N Results", + "description": "The number of results to return" + } + ], + "outputs": [ { - "name": "size", "type": { - "type": "enum", - "values": [ - "1024x1024", - "1536x1024", - "1024x1536" - ], - "type_name": "nodetool.nodes.openai.image.Size" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, - "default": "1024x1024", - "title": "Size", - "description": "The size of the image to generate." + "name": "ids" }, { - "name": "background", - "type": { - "type": "enum", - "values": [ - "transparent", - "opaque", - "auto" - ], - "type_name": "nodetool.nodes.openai.image.Background" + "type": { + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, - "default": "auto", - "title": "Background", - "description": "The background of the image to generate." + "name": "documents" }, { - "name": "quality", "type": { - "type": "enum", - "values": [ - "high", - "medium", - "low" - ], - "type_name": "nodetool.nodes.openai.image.Quality" + "type": "list", + "type_args": [ + { + "type": "dict" + } + ] }, - "default": "high", - "title": "Quality", - "description": "The quality of the image to generate." - } - ], - "outputs": [ + "name": "metadatas" + }, { "type": { - "type": "image" + "type": "list", + "type_args": [ + { + "type": "float" + } + ] }, - "name": "output" + "name": "distances" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "prompt", - "model", - "size", - "background", - "quality" + "collection", + "text", + "n_results" ], "is_dynamic": false }, { - "title": "List Scheduled Events", - "description": "Fetch scheduled events for a Calendly user.\n calendly, calendar, events", - "namespace": "calendly.events", - "node_type": "calendly.events.ListScheduledEvents", + "title": "Remove Overlap", + "description": "Removes overlapping words between consecutive strings in a list.\n Splits text into words and matches word sequences for more accurate overlap detection.", + "namespace": "chroma.query", + "node_type": "chroma.query.RemoveOverlap", "layout": "default", "properties": [ { - "name": "user", + "name": "documents", "type": { - "type": "str" + "type": "list", + "type_args": [ + { + "type": "str" + } + ] }, - "default": "", - "title": "User", - "description": "User URI to fetch events for" + "default": [], + "title": "Documents", + "description": "List of strings to process for overlap removal" }, { - "name": "count", + "name": "min_overlap_words", "type": { "type": "int" }, - "default": 20, - "title": "Count", - "description": "Number of events to return" - }, - { - "name": "status", - "type": { - "type": "str" - }, - "default": "active", - "title": "Status", - "description": "Event status filter" + "default": 2, + "title": "Min Overlap Words", + "description": "Minimum number of words that must overlap to be considered" } ], "outputs": [ @@ -20342,108 +20150,71 @@ "type": "list", "type_args": [ { - "type": "calendly_event" + "type": "str" } ] }, - "name": "output" + "name": "documents" } ], "the_model_info": {}, "recommended_models": [], "basic_fields": [ - "user", - "count", - "status" + "documents", + "min_overlap_words" ], "is_dynamic": false }, { - "title": "Scheduled Event Fields", - "description": "Extract fields from a CalendlyEvent.\n calendly, event, fields", - "namespace": "calendly.events", - "node_type": "calendly.events.ScheduledEventFields", + "title": "Chroma", + "description": "Base class for Chroma vector database nodes.\n\n chroma, base, database\n\n Use cases:\n - Provide shared helpers for Chroma indexing and queries\n - Disable caching for subclasses\n - Convert result IDs into asset references", + "namespace": "chroma.chroma_node", + "node_type": "chroma.chroma_node.Chroma", "layout": "default", - "properties": [ - { - "name": "event", - "type": { - "type": "calendly_event" - }, - "default": {}, - "title": "Event", - "description": "The Calendly event to extract" - } - ], + "properties": [], "outputs": [ { "type": { - "type": "str" - }, - "name": "uri" - }, - { - "type": { - "type": "str" - }, - "name": "name" - }, - { - "type": { - "type": "datetime" - }, - "name": "start_time" - }, - { - "type": { - "type": "datetime" - }, - "name": "end_time" - }, - { - "type": { - "type": "str" + "type": "any" }, - "name": "location" + "name": "output" } ], "the_model_info": {}, "recommended_models": [], - "basic_fields": [ - "event" - ], + "basic_fields": [], "is_dynamic": false } ], "assets": [ { "package_name": "nodetool-base", - "name": "Categorize Mails.jpg", + "name": "Image To Audio Story.jpg", "path": "" }, { "package_name": "nodetool-base", - "name": "Simple Chat.jpg", + "name": "Daily Digest.jpg", "path": "" }, { "package_name": "nodetool-base", - "name": "Chat with Docs.jpg", + "name": "Simple Chat.jpg", "path": "" }, { "package_name": "nodetool-base", - "name": "Daily Digest.jpg", + "name": "Data Generator.jpg", "path": "" }, { "package_name": "nodetool-base", - "name": "Image To Audio Story.jpg", + "name": "Chat with Docs.jpg", "path": "" }, { "package_name": "nodetool-base", - "name": "Data Generator.jpg", + "name": "Categorize Mails.jpg", "path": "" }, { @@ -20454,8 +20225,20 @@ ], "examples": [ { - "id": "66a76fbad01511ef97f9000025dd7c17", - "name": "Summarize Newsletters", + "id": "01170228d0c411efaac30000491f150f", + "name": "Paper2Podcast", + "description": "", + "tags": [] + }, + { + "id": "4967c0b0d07b11efb3dc000010283958", + "name": "Summarize RSS", + "description": "", + "tags": [] + }, + { + "id": "310d885a341811f0942e0000191c0ba5", + "name": "Color Boost Video", "description": "", "tags": [] }, @@ -20468,6 +20251,23 @@ "rag" ] }, + { + "id": "78483f1ce4d611ef849100004ef921c4", + "name": "Ingest PDF", + "description": "", + "tags": [ + "llm" + ] + }, + { + "id": "f905ed2212f611f0b622000001bffa9d", + "name": "Simple Chat", + "description": "Basic chat interface with tools", + "tags": [ + "chat", + "start" + ] + }, { "id": "43a125a6124611f0b49100005eb1b543", "name": "Image To Audio Story", @@ -20483,18 +20283,6 @@ "description": "Automatically categorize emails using AI classification", "tags": [] }, - { - "id": "01170228d0c411efaac30000491f150f", - "name": "Paper2Podcast", - "description": "", - "tags": [] - }, - { - "id": "4967c0b0d07b11efb3dc000010283958", - "name": "Summarize RSS", - "description": "", - "tags": [] - }, { "id": "5d2e4a22f33211ef9a370000764c777a", "name": "Categorize Mails", @@ -20505,10 +20293,20 @@ ] }, { - "id": "310d885a341811f0942e0000191c0ba5", - "name": "Color Boost Video", - "description": "", - "tags": [] + "id": "9759819033e111f0935900003bf156d2", + "name": "Data Visualization Pipeline", + "description": "Transform natural language descriptions into data visualizations with AI-powered data and chart generation. This workflow demonstrates how to create customized charts from text prompts without manual data preparation.", + "tags": [ + "agents" + ] + }, + { + "id": "f1a11024132411f0b12f000053c522ea", + "name": "Data Generator", + "description": "Generate structured data using AI agents", + "tags": [ + "agents" + ] }, { "id": "remove_silence", @@ -20525,37 +20323,10 @@ "tags": [] }, { - "id": "78483f1ce4d611ef849100004ef921c4", - "name": "Ingest PDF", + "id": "66a76fbad01511ef97f9000025dd7c17", + "name": "Summarize Newsletters", "description": "", - "tags": [ - "llm" - ] - }, - { - "id": "9759819033e111f0935900003bf156d2", - "name": "Data Visualization Pipeline", - "description": "Transform natural language descriptions into data visualizations with AI-powered data and chart generation. This workflow demonstrates how to create customized charts from text prompts without manual data preparation.", - "tags": [ - "agents" - ] - }, - { - "id": "f905ed2212f611f0b622000001bffa9d", - "name": "Simple Chat", - "description": "Basic chat interface with tools", - "tags": [ - "chat", - "start" - ] - }, - { - "id": "f1a11024132411f0b12f000053c522ea", - "name": "Data Generator", - "description": "Generate structured data using AI agents", - "tags": [ - "agents" - ] + "tags": [] } ] } \ No newline at end of file diff --git a/tests/nodetool/test_os_nodes.py b/tests/nodetool/test_os_nodes.py index c92ab6e..a8d6232 100644 --- a/tests/nodetool/test_os_nodes.py +++ b/tests/nodetool/test_os_nodes.py @@ -7,7 +7,10 @@ FileExists, ListFiles, CreateDirectory, + CreateTemporaryFile, + CreateTemporaryDirectory, ) +import os @pytest.fixture @@ -39,3 +42,18 @@ async def test_file_operations(context: ProcessingContext, tmp_path): files = await list_node.process(context) assert len(files) == 1 assert files[0].path == str(file_path) + + +@pytest.mark.asyncio +async def test_tempfile_nodes(context: ProcessingContext, tmp_path): + file_node = CreateTemporaryFile(prefix="test_", suffix=".txt", dir=str(tmp_path)) + temp_file = await file_node.process(context) + assert os.path.exists(temp_file.path) + assert temp_file.path.startswith(os.path.join(str(tmp_path), "test_")) + assert temp_file.path.endswith(".txt") + + dir_node = CreateTemporaryDirectory(prefix="dir_", suffix="_tmp", dir=str(tmp_path)) + temp_dir = await dir_node.process(context) + assert os.path.isdir(temp_dir.path) + assert temp_dir.path.startswith(os.path.join(str(tmp_path), "dir_")) + assert temp_dir.path.endswith("_tmp")