ComfyUI Ino Nodes
125+ production-ready V3 custom nodes for ComfyUI covering file ops, S3 cloud storage, image/video/audio processing, model management (HuggingFace/Civitai/S3), OpenAI & Runpod integration, and workflow utilities.
Nodes (142)
Type-matched equality for any value — the boolean feeder for conditional graphs
Are these two booleans the same? The one-question logic node
The odd little mapping that feeds switch nodes
The cosmetic cast that makes a CLIP wire connect — know what it's not doing
Declare 'this is a ControlNet now' — the type-satisfying cast node
Turn almost anything into an integer — the adapter node that unblocks your wiring
Relabel any port as MODEL — a pass-through for stubborn wire mismatches
Cast anything to a string — the glue that stops type-mismatch whack-a-mole
The name is a lie — it doesn't convert anything, and that's the point
Feed a dynamic string into a dropdown — the ComfyUI combo-workaround node
Download models from Civitai inside the graph, and wire the path straight in
The gate node for conditional workflows
Six comparison operators, one boolean out — the tiny logic node that gates your workflows
AND or OR on two booleans — the gate your workflow was missing
Normalize any video to MP4 with FFmpeg, right in the graph
Copy a file inside ComfyUI's folders — without touching a terminal
Copy a folder's worth of files, with renaming, straight from the graph
How many files actually landed? Ino Count Files does the counting for you
Build a LoRA recipe card from scratch — metadata and all
The JSON recipe card that tells a downloader where the model lives
Crop a square around any point, not just the center
Stamp your files with a timestamp built exactly how you want it
A UTC timestamp string, fresh on every run
Pause your graph without freezing ComfyUI
Any file on disk → a data URI string, ready to hand to an API
Pick your rounding instead of fighting Python's
Stop typing repo IDs into your workflow
Get ComfyUI's real input/output/temp folders
One node that encodes positive and negative — Flux-aware
Pick a ControlNet from a list, get a download config string, wire it to the downloader
A guaranteed-unique ID every run — encoded as base64 for no good reason
How long did that run actually take?
Verify your downloads actually match
Grab a full checkpoint download config from a dropdown — the Flux 1 dev path included
Find the newest file in a folder, without a file browser
Pick a LoRA from the pack's catalog by name or ID — config included
Pick a LoRA from a dropdown and get a download config string — no manual file hunting
Turn a LoRA file path into ID, name, and trigger word — the parsing trick that saves your prompt
The dropdown that carries your whole sampler setup
Split one model config into its UNet, CLIP and VAE download configs
Get the real path to your models folder
Drive the sampler from a config string, not twenty widgets
Pick your autoencoder from a dropdown
Pick a video model from the pack's catalog and get its download recipe
One config string, download to loaded
One config in, the right downloader picks it up — automatically
The honest version is 'check the type-specific loaders instead'
Make a REST call from inside a workflow — no API key, no extra install
Pull a model straight from a URL into ComfyUI's models folder
Pull a model file into ComfyUI's folders, in-graph
Grab a whole HuggingFace repo into ComfyUI's models folder
Turn a stack of images into one tensor ComfyUI can feed forward
Fit any image into a fixed canvas — resize to the longer side, then crop or pad
Resize to a max side, keep the aspect ratio — the 'fit into my batch size' node
Point it at a folder of refs and get reference conditioning — no manual loading
Batch-encode your refs into conditioning
Turn an in-graph IMAGE into a data URI for vision APIs
Batch_00001 → Batch_00002, on every run — the counter that names your outputs
The one-node bridge when a node won't accept your integer
The int-to-string converter that keeps your filenames and labels honest
Is it landscape or portrait? Ask the node, then branch on it
The boolean that tells you which way the image is facing
A square check for workflows that need to branch on aspect ratio
One field out of a JSON blob, without the parsing headache
Patch a JSON string mid-graph — the config mutator
How many items are in that list? One clean number, no guesswork
Grow a list one item at a time, or all at once — it handles both
Grab the first item off a list without breaking the rest of it
Need one image out of a batch? This node is the index card
Pull the last item off any list
The list-count node that doesn't make you wire up a whole branch
Load a CLIP from a file path, not a dropdown — for dynamic workflows
Load a ControlNet from a path string and keep structure control config-driven
Load a UNET by path, not by dropdown — the model loader for automated pipelines
Load an image by path, not by clicking the upload box
Dump a folder of images into ComfyUI — with skip and cap controls
Load a LoRA from a path string and get its trigger word for free
A LoRA loader that tells you its name and trigger word — and skips CLIP
Stack up to five LoRAs in one node and keep your graph readable
Download and load UNET + CLIP + VAE + 4 LoRAs from one config JSON
Load a VAE from a path string when the file isn't a constant
Collect up to 10 things into one list — the pack's list constructor
Arithmetic between two numbers without hunting for a calculator node
Integer math inside the graph, with divide-by-zero that won't kill your batch
The resolution calculator with an MP budget
Move files or folders around inside ComfyUI's directories, straight from the graph
The tiny NOT gate that keeps your logic clean
Blur it, flag it, or route it
A persistent counter on every image
Chat with any OpenAI-compatible API from inside the graph — vLLM, RunPod, Modal included
The OpenAI Responses API node — text or image in, structured output out
Preview generated video right in the graph, no hunting in your output folder
Print to the console mid-graph — and pass a value through while you're at it
Random integers with zero-padded strings — batch naming without the ugly gaps
A NOISE generator with a real seed output — make your custom sampler reproducible
Force execution order without touching your data — the traffic-cop node
Dedupe a folder by content hash
Delete a file from a workflow — but treat it like the loaded gun it is
A recursive folder delete inside the graph — handy, and it WILL do what you asked
Cover a target box and crop to it — for when you need exact W×H, not just 'smaller'
Turn five S3 credentials into one config string, once, and reuse it
Pull an audio file out of S3 and get a real AUDIO tensor on the wire
Fetch one file from S3 into a local folder — with smart skip logic
Mirror a whole S3 folder locally — concurrent, verifiable, idempotent
Pull an image out of S3 and straight into an IMAGE tensor
Download a model straight from S3 into ComfyUI's model folders
Read a text file from S3 straight into a string — no local file at all
Fetch a video from S3 as a real VIDEO type, ready for the player
Presigned S3 URLs from the graph
Mirror a whole folder to S3 — or pull it back — like rsync for your bucket
Send generated audio straight to S3 as MP3 — no temp-file juggling
Push a local file to S3 — and optionally delete it after
Sync a whole results folder to S3 — concurrent uploads plus a verification pass
Shove the image you just generated straight into S3
A string, straight to S3 — no temp file, no fuss
Get videos off the local disk and into object storage, without leaving the graph
Did that upload actually land, and is it intact? Ask the node.
Save images where you want, and get a wire back
Stop hand-editing JSON config files — let the workflow write them
Write any string to disk — the logging node ComfyUI forgot
Split a LoRA config JSON into every field, so you can see and reuse what's inside
Take a model config JSON apart, wire by wire
The boring little string joiner you'll actually use
A substring check that lets your workflow make decisions
Character counting for people who don't want to count
Find-and-replace for your prompts and filenames
Fill the {tokens} in your prompt template
Slice a string by index — Python style, gotcha included
Split on a delimiter and grab the piece you actually wanted
The yes/no check that routes your workflow
Bulk-delete the characters that break your filenames
Turn any string into a stable, letters-only ID
The one switch that flips your whole prompt to SHOUTING
Strip the accidental whitespace from anything pasted
A boolean switch that only runs the branch you actually pick
One int, up to ten pipelines — the batch router
Read the last N lines of ComfyUI's own terminal output, inside the graph
Extract zip archives from inside a workflow, not a terminal
Tweak a model config without ever touching the JSON
Find the corrupt files in your dataset before it bites you
Call a Runpod serverless vLLM endpoint from your workflow — with image input if you need it
Zip a folder without leaving the graph — the archive step your pipeline has been missing
ComfyUI Ino Nodes
A comprehensive custom node package for ComfyUI delivering 125+ production-ready nodes across 18 categories. Built entirely on the modern ComfyUI V3 schema, Ino Nodes covers everything from file system operations and S3 cloud storage to image/video/audio processing, model management, OpenAI integration, and workflow utilities.
Whether you're building automated pipelines that download models from HuggingFace, upload results to S3, process images in batch, or chain LLM calls into your workflows — Ino Nodes provides the building blocks with consistent interfaces, proper error handling, and clean async execution throughout.
Every file-related node follows a unified pattern with parent_folder (input/output/temp) selection, folder, and filename inputs, outputting success, message, rel_path, and abs_path for predictable chaining. S3 upload nodes save to temp with unique filenames by default, media download nodes return native ComfyUI types (IMAGE, AUDIO, VIDEO), and all nodes include an enabled toggle and descriptive tooltips.
Important: This package requires
inopyutils. All S3 operations require S3 credentials configured via environment variables or the S3 Config node. OpenAI and Runpod nodes require their respective API keys. Basic Auth middleware is optional and only activates whenCOMFYUI_USERNAMEandCOMFYUI_PASSWORDare set.
Installation
ComfyUI-Manager (Recommended)
- Install ComfyUI-Manager
- Search for "ComfyUI Ino Nodes" in the manager
- Click install and restart ComfyUI
Manual Installation
cd ComfyUI/custom_nodes
git clone https://github.com/nobandegani/ComfyUI-InoNodes.git
cd comfyui_ino_nodes
pip install -r requirements.txt
Restart ComfyUI after installation.
Node Reference
InoFileHelper (13 nodes)
File system operations with consistent parent_folder/folder/filename inputs and success/message/rel_path/abs_path outputs.
| Node | Description |
|---|---|
| Ino Increment Batch Name | Increments a batch name string (e.g., Batch_00001 → Batch_00002) |
| Ino Zip | Zips a source folder into a zip file at the specified destination |
| Ino Unzip | Extracts a zip file to the specified destination folder |
| Ino Remove File | Removes a file from the filesystem |
| Ino Remove Folder | Removes a folder and all its contents recursively |
| Ino Copy Files | Copies files from one folder to another with optional renaming |
| Ino Count Files | Counts files in a folder, optionally recursively |
| Ino Validate Media Files | Validates and categorizes media files, separating valid from invalid |
| Ino Remove Duplicate Files | Removes duplicate files using SHA-256 hash comparison |
| Ino Get Last File | Returns the most recently modified file in a folder |
| Ino Move Path | Moves a file or folder from one location to another with optional overwrite |
| Ino Get File Hash | Computes the SHA-256 hash of a file |
| Ino File To Base64 | Converts a file to a base64 data URI string with auto MIME detection |
InoImageHelper (10 nodes)
Image loading, saving, resizing, cropping, and batch processing. Image loading uses EXIF rotation handling matching native ComfyUI behavior.
| Node | Description | |---|---| | Ino Save Images | Saves images to a specified folder with a filename prefix | | Ino Load Images From Folder | Loads images from a folder with skip/cap options, returns images, masks, and count | | Ino Image Resize By Longer Side V1 | Resizes an image so the longer side matches the target size, preserving aspect ratio | | Ino Image Resize By Longer Side And Crop V2 | Resizes to fit target dimensions with optional cropping and position control | | Ino Image List To Batch | Combines a list of images into a single batched tensor with resize or pad | | Ino Crop Image By Box | Crops an image to a square region around a point with adjustable shift offsets | | Ino On Image List Completed | Tracks image processing progress with a persistent counter stored in the folder | | Ino Image To Base64 | Converts an image to a base64-encoded data URL string | | Ino Images From Folder To Reference Latent | Loads images, scales them, and encodes as reference latents for conditioning | | Ino Images To Reference Latent | Encodes a batch of images as reference latents and applies them to conditioning |
InoStringHelper (13 nodes)
String manipulation, formatting, and file saving.
| Node | Description |
|---|---|
| Ino String Toggle Case | Converts a string to upper or lower case |
| Ino String Replace Placeholder | Replaces all {placeholder} tokens in a string with a replacement value |
| Ino String Replace | Replaces all occurrences of a substring with another |
| Ino String Strip Simple | Removes all specified characters from a string |
| Ino String To Alphabetic String | Hashes a string and converts it to a fixed-length alphabetic-only string |
| Ino Save Text | Saves a text string to a file in the specified folder |
| Ino String Concat | Joins two strings with an optional separator |
| Ino String Contains | Checks if a string contains a substring, optionally case-insensitive |
| Ino String Length | Returns the character count of a string |
| Ino String Trim | Strips leading and/or trailing whitespace (both/left/right) |
| Ino String Split | Splits a string by a delimiter and returns the part at a given index |
| Ino String Starts/Ends With | Checks if a string starts or ends with a given substring |
| Ino String Slice | Extracts a substring by start and end index |
InoS3Helper (16 nodes)
S3 cloud storage operations. Media uploads save to temp with unique filenames. Media downloads return native ComfyUI types.
| Node | Description | |---|---| | Ino S3 Config | Creates an S3 configuration string from credentials | | Ino S3 Download File | Downloads a file from S3 to a local folder | | Ino S3 Download Folder | Downloads an entire folder from S3 with concurrent downloads | | Ino S3 Download Image | Downloads an image from S3 and returns it as IMAGE + MASK | | Ino S3 Download Audio | Downloads an audio file from S3 and returns it as AUDIO | | Ino S3 Download Video | Downloads a video file from S3 and returns it as VIDEO | | Ino S3 Download String | Downloads a text file from S3 and returns its content as a string | | Ino S3 Upload File | Uploads a local file to S3 with optional local deletion | | Ino S3 Upload Folder | Uploads an entire folder to S3 with concurrent uploads and verification | | Ino S3 Upload Image | Saves a single image as PNG to temp then uploads to S3 | | Ino S3 Upload Audio | Saves audio as MP3 to temp then uploads to S3 | | Ino S3 Upload Video | Saves video to temp then uploads to S3 | | Ino S3 Upload String | Saves a string as a file (txt/json/ini) to temp then uploads to S3 | | Ino S3 Sync Folder | Syncs a local folder with S3 bidirectionally (upload or download) | | Ino S3 Verify File | Verifies a local file exists in S3 and optionally checks integrity via hash | | Ino S3 Get Download URL | Generates a presigned download URL for an S3 object |
InoModelHelper (23 nodes)
Model downloading from multiple sources and loading into ComfyUI.
| Node | Description | |---|---| | Ino Create Model File Config | Creates a model download configuration from individual fields | | Ino Get Image Model Download Config | Retrieves image model download config from CSV | | Ino Get Video Model Download Config | Retrieves video model download config from CSV | | Ino Get Vae Download Config | Retrieves VAE model download config from CSV | | Ino Get Clip Download Config | Retrieves CLIP model download config from CSV | | Ino Get Controlnet Download Config | Retrieves ControlNet model download config from CSV | | Ino Get Lora Download Config | Retrieves LoRA model download config from CSV | | Ino Http Download Model | Downloads a model file from an HTTP URL | | Ino S3 Download Model | Downloads a model file from S3 | | Ino Hugging Face Download Model | Downloads a single model file from HuggingFace | | Ino Hugging Face Download Repo | Downloads an entire repository from HuggingFace | | Ino Civitai Download Model | Downloads a model file from Civitai | | Ino Handle Download Model | Delegates download to the appropriate handler based on config | | Ino Load VAE Model | Loads a VAE model from a file path | | Ino Load Controlnet Model | Loads a ControlNet model from a file path | | Ino Load Clip Model | Loads a CLIP model from a file path | | Ino Load Diffusion Model | Loads a diffusion/UNET model from a file path | | Ino Load Lora Clip Model | Loads a LoRA and applies it to both model and CLIP | | Ino Load Lora Model | Loads a LoRA and applies it to the model only | | Ino Handle Load Model | Generic model loader by type | | Ino Handle Download And Load Model | Downloads and loads a model in a single operation | | Ino Get Model Path As String | Returns the absolute path to a model directory for a given type | | Ino Load Multiple Lora | Loads up to 5 LoRAs and applies them sequentially to model and CLIP |
InoSamplerHelper (11 nodes)
Model configuration, conditioning, and sampler setup for generation workflows.
| Node | Description | |---|---| | Ino Random Noise | Generates random noise with selectable 32-bit or 64-bit seed precision | | Ino Get Model Config | Retrieves a model configuration by name or ID from JSON | | Ino Get Lora Config | Retrieves a LoRA configuration by name or ID from JSON | | Ino Create Lora Config | Creates a LoRA configuration JSON from individual fields | | Ino Show Model Config | Parses a model config JSON and outputs all individual fields | | Ino Update Model Config | Overrides specific fields in a model config, unset values unchanged | | Ino Show Lora Config | Parses a LoRA config JSON and outputs all individual fields | | Ino Load Sampler Models | Downloads and loads UNET, CLIP, VAE and up to 4 LoRAs from config | | Ino Get Sampler Config | Builds guider, sampler, and sigmas from a model config | | Ino Get Conditioning | Encodes positive/negative conditioning with optional Flux encoder and guidance | | Ino Get Model Download Config | Extracts individual download configs (UNET, CLIP1, CLIP2, VAE) from a model config |
InoExtraNodes (8 nodes)
Workflow control, logic, and debugging utilities.
| Node | Description | |---|---| | Ino Relay | Passes through two values of any type, useful for controlling execution order | | Ino Any Equal | Compares two values of the same type for equality | | Ino Delay Async | Delays execution for a specified number of seconds | | Ino Print Log | Prints a log message to the console and passes through the relay value | | Ino Switch On Bool | Routes one of two inputs based on a boolean switch with lazy evaluation | | Ino Switch On Int | Routes one of up to 10 inputs based on an integer index | | Ino Length | Returns the length of a list or tuple input | | Ino Terminal Log | Captures and returns the last N lines from terminal stdout |
InoCastHelper (6 nodes)
Type casting from any type to specific ComfyUI types.
| Node | Description | |---|---| | Ino Cast Any To String | Casts any input value to a string | | Ino Cast Any To Int | Casts any input value to an integer | | Ino Cast Any To Model | Casts any input to a MODEL type | | Ino Cast Any To Clip | Casts any input to a CLIP type | | Ino Cast Any To Vae | Casts any input to a VAE type | | Ino Cast Any To Controlnet | Casts any input to a CONTROL_NET type |
InoBoolHelper (4 nodes)
Boolean logic operations.
| Node | Description | |---|---| | Ino Boolean Equal | Checks if two boolean values are equal | | Ino Not Boolean | Negates a boolean value (NOT operation) | | Ino Bool To Switch | Converts a boolean to an integer: 2 for true, 1 for false, -1 when disabled | | Ino Condition Boolean | Performs AND or OR operation on two boolean values |
InoIntHelper (4 nodes)
Integer operations and conversions.
| Node | Description | |---|---| | Ino Random Int In Range | Generates a random integer within a range with optional zero-padded string | | Ino Int To String | Converts an integer to a string | | Ino Int To Float | Converts an integer to a float | | Ino Compare Int | Compares two integer values using a selected operator (=, <, >, <=, >=, <>) |
InoTimeHelper (4 nodes)
Date and time formatting and calculations.
| Node | Description | |---|---| | Ino DateTime Simple | Returns the current UTC date and time as ISO or simple format string | | Ino DateTime Custom | Returns a customizable datetime string with selectable components and separators | | Ino DateTime Duration | Calculates the duration between two ISO datetime strings | | Ino DateTime Base64 | Returns the current UTC datetime encoded as a base64 string, unique per execution |
InoJsonHelper (3 nodes)
JSON manipulation and persistence.
| Node | Description | |---|---| | Ino Json Set Field | Sets a field in a JSON string and returns the updated JSON | | Ino Json Get Field | Gets a field value from a JSON string by field name | | Ino Save Json | Saves a JSON string to a file in the specified folder |
InoFloatHelper (2 nodes)
Float operations and conversions.
| Node | Description | |---|---| | Ino Float To Int | Converts a float to an integer using round, floor, or ceil | | Ino Compare Float | Compares two float values using a selected operator |
InoPathHelper (2 nodes)
ComfyUI path utilities.
| Node | Description | |---|---| | Ino Get Comfy Path | Returns the absolute path to a ComfyUI directory (input, output, or temp) | | Ino Get Lora Path Name Trigger Word | Extracts the LoRA ID, name, and trigger word from a file path |
InoOpenaiHelper (2 nodes)
OpenAI API integration.
| Node | Description | |---|---| | Ino Openai Responses | Sends a text or image prompt to OpenAI Responses API | | Ino Openai Chat Completions | Sends a chat completion request to any OpenAI-compatible API |
InoHttpHelper (1 node)
General-purpose HTTP client.
| Node | Description | |---|---| | Ino Http Call | Makes an HTTP request (GET/POST/PUT/DELETE/PATCH) and returns the response |
InoMediaHelper (1 node)
Media format conversion.
| Node | Description | |---|---| | Ino Convert Video To MP4 | Converts video files to MP4 via FFmpeg with optional FPS and resolution changes |
InoRunpodHelper (1 node)
Runpod serverless inference.
| Node | Description | |---|---| | Ino Vllm Run Sync | Runs a synchronous vLLM inference request on Runpod serverless |
InoVideoHelper (1 node)
Video preview.
| Node | Description | |---|---| | Ino Preview Video | Saves a video to the temp directory for in-node preview |
Environment Variables
| Variable | Required | Purpose |
|---|---|---|
| COMFYUI_INO_DEBUG | No | Enable debug logging (set to 1) |
| COMFYUI_USERNAME | No | Basic Auth username (enables auth when set with password) |
| COMFYUI_PASSWORD | No | Basic Auth password |
| S3_ACCESS_KEY | For S3 | S3 access key ID |
| S3_ACCESS_SECRET | For S3 | S3 secret access key |
| S3_ENDPOINT_URL | For S3 | S3 endpoint URL |
| S3_REGION_NAME | For S3 | S3 region |
| S3_BUCKET_NAME | For S3 | S3 bucket name |
| OPENAI_TOKEN | For OpenAI | OpenAI API key |
| RUNPOD_API_KEY | For Runpod | Runpod API key |
| CIVITAI_TOKEN | For Civitai | Civitai download token |
Dependencies
| Package | Purpose |
|---|---|
| inopyutils | Core utility functions (file, S3, HTTP, JSON helpers) |
| openai | OpenAI API client |
| aiohttp | Async HTTP client and server middleware |
| numpy | Array operations |
| Pillow | Image processing |
| torch | Tensor operations |
| huggingface_hub | HuggingFace model downloads |
| hf_xet | HuggingFace extended transport |
Project Info
| | | |---|---| | Version | 2.0.5 | | Python | >= 3.10 | | ComfyUI | v0.18.1+ | | Schema | V3 (all nodes) | | License | MIT | | Publisher | Inoland | | Contact | [email protected] | | Repository | github.com/nobandegani/ComfyUI-InoNodes | | Registry | comfyregistry.org |
For issues and feature requests: GitHub Issues