Ino S3 Upload Audio
Send generated audio straight to S3 as MP3 — no temp-file juggling
- audio
- audio
- success
- message
- file_name
- s3_audio_path
If you run ComfyUI as part of an actual pipeline - an app backend, a batch job that lands results in object storage - the last mile is usually the annoying part: generate, save locally, script a separate upload. Ino S3 Upload Audio collapses that into one node: it takes an AUDIO tensor, saves it as an MP3, uploads it to your S3 bucket, and hands you back the object key. One less cron job to maintain.
The README frames the whole S3 side of this pack around cloud storage workflows, and this node is the audio-shaped piece of it: "Saves audio as MP3 then uploads it to S3." It's an output node, so it sits at the end of an audio branch.
How it works
The flow is: encode your incoming audio to MP3 (quality selectable), write it to a temp file, upload that file to S3, and optionally delete the local copy once the upload succeeds. The upload target is built from an s3_path_key prefix plus the filename - so s3_path_key of results/audio with a unique filename becomes something like results/audio/Ab3x...mp3.
The inputs that matter
- audio - the AUDIO tensor to upload.
- s3_path_key - the folder prefix in the bucket.
- s3_config - optional JSON of credentials. The tooltip says it plainly: leave it empty and pass credentials via env vars instead (
S3_ACCESS_KEY,S3_ACCESS_SECRET,S3_ENDPOINT_URL,S3_REGION_NAME,S3_BUCKET_NAME). For most people env vars are the right call - you don't want keys baked into every workflow file. - unique_file_name - default true. On, it generates a collision-proof name (base64 timestamp); off, it uses your
filename. On for anything you don't want overwritten. - filename - only used when
unique_file_nameis off. - delete_local - default true: clean up the temp MP3 after a successful upload.
- quality -
V0,128k, or320k. 128k is the default; bump to 320k if the audio matters.
Outputs: audio (passes your audio through, so you can keep wiring it onward), success (BOOLEAN), message, file_name (the local MP3 name), and s3_audio_path (the full object key - the one you actually care about).
Installing it
Part of ComfyUI-InoNodes. ComfyUI Manager → search "ComfyUI Ino Nodes" → install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/nobandegani/ComfyUI-InoNodes
cd comfyui_ino_nodes
pip install -r requirements.txt
Restart after. Then set your S3 env vars (or build an InoS3Config node) and you're done - no other keys involved.
Common issues
Most failures here are credentials, not code. If success comes back false with a message about the key or bucket, check that S3_BUCKET_NAME matches the bucket you're writing to and that the key/secret have write permission on it - the pack validates the s3_path_key early, but a bad bucket name still fails at upload time. Second, remember delete_local defaults to true: if you wanted a local copy for preview, flip it off before the run, not after the file's gone. And a subtle one: with unique_file_name on, your filename is ignored, so don't be confused when the object key doesn't match what you typed.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| enabled | BOOLEAN | true | — |
| audio | AUDIO | — | |
| s3_path_key | STRING | — | |
| 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 |
| unique_file_nameopt | BOOLEAN | true | — |
| filenameopt | STRING | — | |
| delete_localopt | BOOLEAN | true | Delete the locally saved MP3 after a successful S3 upload. |
| qualityopt | COMBO | 128k | MP3 encoding quality. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| success | BOOLEAN | — |
| message | STRING | — |
| file_name | STRING | — |
| s3_audio_path | STRING | — |