Ino S3 Get Download URL
Presigned S3 URLs from the graph
- success
- message
- download_url
- filename
S3 buckets aren't public by default, which is the whole point - but sometimes you need to hand a file to someone without giving them the keys. That's what presigned URLs are for: a temporary, signed link that grants access to one object for a limited time. InoS3GetDownloadURL generates exactly that from inside a workflow, and returns the URL as a string you can wire anywhere - into an Ino Http Call to fetch the object, into an OpenAI vision node that needs a public URL, or out to a log so you can grab it yourself.
The clever bit for workflow automation: instead of downloading the file and re-uploading it somewhere public, you can generate a link on the fly and pass that around. It's the "share results without making the bucket public" node.
How it works
Required inputs: enabled, s3_key (the object), expires_in (link lifetime in seconds, default 3600, max 7 days = 604800 - the tooltip is explicit about the ceiling), as_attachment (default False), and filename (default ""). Optional: s3_config.
as_attachment- when True, the link forces a download with a filename (thecontent-disposition: attachmentbehavior) instead of opening inline in a browser.filename- the optional download filename; leave empty and it defaults to the object's basename. This is what shows up when someone actually saves the file.
Outputs: success, message, download_url (the presigned link), and filename (the resolved name). Credentials via s3_config JSON or the 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, install, restart. Needs inopyutils and a current V3-schema ComfyUI.
Common issues
Time is the thing to respect here. expires_in caps at 604800 seconds (7 days) - that's an S3 policy limit, not a pack quirk - and a link you generate this run is dead by the next run if the workflow sits idle. If you generate a URL in one execution and try to use it hours later, re-run the node. Also, presigned URLs are signed with your credentials, which is why they work without making the bucket public - but it also means anyone with the link has access for the lifetime you set, so keep expires_in tight for sensitive objects. On self-hosted endpoints (MinIO, Cloudreve, R2), make sure the endpoint URL is reachable from wherever the link will be opened - a URL that works from inside your ComfyUI box won't help someone on the other side of the internet if the endpoint is localhost.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| enabled | BOOLEAN | true | — |
| s3_key | STRING | input/example.png | — |
| expires_in | INT | 36001–604800 | Link lifetime in seconds (max 7 days = 604800). |
| as_attachment | BOOLEAN | false | — |
| filename | STRING | Optional download filename. Leave empty to default to the object's basename. | |
| 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 (4)
| Name | Type | Description |
|---|---|---|
| success | BOOLEAN | — |
| message | STRING | — |
| download_url | STRING | — |
| filename | STRING | — |