Ino S3 Upload File
Push a local file to S3 — and optionally delete it after
- success
- message
- s3_file_path
The other half of the cloud-GPU loop: files finished locally, now they need to be in the bucket. InoS3UploadFile takes a file from a ComfyUI folder (input/output/temp) and uploads it to S3 - and here's the detail that makes it a batch-workflow tool rather than a one-off: delete_local defaults to True, so after a successful upload the local copy is removed. That's the "render to output, ship to S3, clean up the disk" pattern that keeps long batch runs from filling the drive.
The naming logic is worth reading twice because it's slightly clever. If s3_path_key contains a filename, its stem is combined with the local file's extension; otherwise the local filename is used. So s3_path_key = "results/batch3" with a local frame_042.png uploads to results/batch3.png - you control the name via the key, and the extension follows the actual file. Keeps everything consistent even when the local filename is a timestamp hash.
How it works
Required inputs: enabled, s3_path_key (the destination key), parent_folder (input/output/temp), folder, and filename (the local file). Optional: s3_config and delete_local (default True - flip to False to keep the local copy).
Outputs: success, message, and s3_file_path (the final object key, so downstream nodes know exactly where it went).
Credentials via s3_config JSON or env vars (S3_ACCESS_KEY, S3_ACCESS_SECRET, S3_BUCKET_NAME, S3_ENDPOINT_URL, S3_REGION_NAME).
Installing it
Part of the 125+-node ComfyUI-InoNodes pack by nobandegani:
cd ComfyUI/custom_nodes
git clone https://github.com/nobandegani/comfyui_ino_nodes
cd comfyui_ino_nodes
pip install -r requirements.txt
Or search "ComfyUI Ino Nodes" in ComfyUI Manager and restart. Needs inopyutils and a current V3-schema ComfyUI.
Common issues
The delete-on-success default is the one to not be surprised by. If your workflow writes something you want to keep locally, set delete_local to False - and if a run half-completes, know that deletion only happens after a successful upload, so a failed upload leaves the file in place. Also, an empty s3_path_key fails validation with a success: False and an error message - the key is required, even if you want the default naming. And remember parent_folder + folder + filename must resolve to an existing file; the output s3_file_path is your confirmation of where it landed, so check it when you later try to fetch the object back with a download node.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| enabled | BOOLEAN | true | — |
| s3_path_key | STRING | — | |
| parent_folder | COMBO | 3 options: input, output, temp | |
| folder | STRING | — | |
| filename | STRING | — | |
| delete_local | BOOLEAN | true | — |
| s3_configopt | STRING | {"access_key_id": "", "access_key_secret": "", "bucket_name": "", "endpoint_url": "", "region_name": ""} | you can leave it empty and pass it with env vars |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| success | BOOLEAN | — |
| message | STRING | — |
| s3_file_path | STRING | — |