ComfyUI Extension: ComfyUI S3 Save Node
A custom ComfyUI node for saving generated images directly to Cloudflare R2 (or S3-compatible) buckets using boto3, with secure random filename generation and public URL return.
Custom Nodes (0)
README
ComfyUI S3 Save Node
A custom ComfyUI node for saving generated images directly to Cloudflare R2 (or S3-compatible) buckets using boto3, with secure random filename generation and public URL return.
Features
- Save images to Cloudflare R2/S3 using direct boto3 uploads
- Unique, random 20-character filename generation for each image
- Batch processing of multiple images
- Error handling and status reporting
- WebP format conversion for efficient storage
- Returns JSON with public URLs and status
Installation
-
Copy this folder to your ComfyUI
custom_nodes
directory:cp -r comfy-s3 /path/to/ComfyUI/custom_nodes/
-
Install the required dependencies:
pip install -r requirements.txt
-
Restart ComfyUI
Configuration
The node is configured via environment variables for maximum flexibility. You can set these in your shell or in a .env
file (if using a loader):
CLOUDFLARE_R2_ENDPOINT_URL= # e.g. https://<account>.r2.cloudflarestorage.com
CLOUDFLARE_ACCESS_KEY_ID=
CLOUDFLARE_SECRET_ACCESS_KEY=
CLOUDFLARE_R2_URL=https://img-dev.fantasy.ai/ # Public base URL for images
CLOUDFLARE_R2_BUCKET=fan-dev
CLOUDFLARE_R2_PREFIX=vik_tests/
- CLOUDFLARE_R2_ENDPOINT_URL: The endpoint for your R2/S3 storage
- CLOUDFLARE_ACCESS_KEY_ID: Your R2/S3 access key
- CLOUDFLARE_SECRET_ACCESS_KEY: Your R2/S3 secret key
- CLOUDFLARE_R2_URL: The public base URL for accessing images
- CLOUDFLARE_R2_BUCKET: The bucket name
- CLOUDFLARE_R2_PREFIX: The prefix/path inside the bucket
Usage
Node Inputs
- images: The image tensor(s) from your ComfyUI workflow
Node Outputs
- STRING: JSON string containing upload results with URLs and status
Example Workflow
- Connect your image generation node to the "images" input
- Run the workflow
- Get JSON output with public URLs
Output Format
The node returns a JSON string with the following structure:
[
{
"url": "https://img-dev.fantasy.ai/vik_tests/ZFUSJbDRJb2d2ikevexX.webp",
"status": "success"
},
{
"url": null,
"status": "failed"
}
]
- Filenames are unique, random 20-character alphanumeric strings (e.g.,
ZFUSJbDRJb2d2ikevexX.webp
). - The URL is constructed from the public base URL, prefix, and filename.
Security Notes
- All credentials and configuration are handled via environment variables.
- No local image saving is performed; all uploads are in-memory and direct to R2/S3.
- Monitor upload logs for any issues.
Troubleshooting
Common Issues
- Import errors: Make sure all dependencies in
requirements.txt
are installed. - Upload failures: Check your environment variables, credentials, endpoint, and bucket permissions.
- JSON parsing errors: Verify the output format and ensure the node ran successfully.
Debug Mode
Enable debug logging by setting the COMFYUI_DEBUG
environment variable:
export COMFYUI_DEBUG=1
Node Registration
This node is registered in __init__.py
using the NODE_CLASS_MAPPINGS
and NODE_DISPLAY_NAME_MAPPINGS
dictionaries for ComfyUI.
License
MIT License - feel free to use and modify as needed.