Attome S3 Save Video
Render video straight to S3, with audio muxed in
- frames
- s3_config
- audio
- s3_uris
The end of a video pipeline is usually the same chore: gather your frame batch, run Save Video, then manually upload the MP4 somewhere. Attome S3 Save Video collapses that into one step - it encodes your IMAGE batch into an MP4 and uploads it to the bucket, returning the s3:// path. It even takes an optional audio input and muxes it into the file, so a complete video with sound comes out of a single node.
It's part of Comfyui_Attome_S3 and it's the pack's most ambitious save node, because video encoding is where the corners get cut.
Inputs and outputs
frames(required) - the IMAGE batch from your sampler.s3_key(required) - destination path; it'll be forced to.mp4no matter what you type.s3_config(optional) - from the Attome S3 Config node, orenv.txtdefaults.fps- playback speed, default 24, range 1–120.codec-mp4v(default),avc1, orXVID. This is the choice that matters:avc1is H.264, which produces smaller, universally playable files - but the encoding is slow and the output can be huge in memory during encode.mp4vis the fast, lazy default.save_metadata(optional) - defaulttrue. MP4 workflow metadata is written as©cmt/desctags, which again needsmutagen.audio(optional) - an AUDIO object. If present, it's muxed into the MP4.- Output:
s3_uris- list of uploaded paths.
The audio muxing caveat
This is where you need to read the fine print. The video is encoded with OpenCV (cv2.VideoWriter, RGB→BGR, fourcc from your codec choice). The audio track is then muxed in with ffmpeg - and the node looks for ffmpeg on your PATH first, then tries imageio_ffmpeg. If neither exists, it silently saves the video without audio. No error, no warning beyond a console line. So if your soundtrack mysteriously vanishes, check which ffmpeg. One line fixes it:
pip install imageio-ffmpeg
The muxing also depends on your ffmpeg build handling -c:v copy with the video's codec; if it fails, the fallback is video-only again.
Install and gotchas
ComfyUI Manager (search "Comfyui_Attome_S3"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/attome-ai/Comfyui_Attome_S3
cd Comfyui_Attome_S3
pip install -r requirements.txt
Restart. Needs opencv-python for encoding, torchaudio if you pass audio, and ffmpeg (system or imageio-ffmpeg) for the mux step. Upload-side, it's the pack standard: s3:PutObject permission or you get Access Denied, and endpoint_url for MinIO/R2. One more trap: because the extension is always forced to .mp4, a key like outputs/final comes back as outputs/final.mp4 - use the returned URI, don't reconstruct it. And the workflow-embedding habit applies: save_metadata: false for anything you'll share, keys in env.txt not in the graph. Get those right and it's the cleanest "render → cloud" finish line this pack offers.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| frames | IMAGE | — | |
| s3_key | STRING | path/to/output.mp4 | — |
| s3_configopt | S3_CONFIG | — | |
| fpsopt | FLOAT | 24.01–120 | — |
| codecopt | COMBO | mp4v | 3 options: mp4v, avc1, XVID |
| save_metadataopt | BOOLEAN | true | — |
| audioopt | AUDIO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| s3_uris | STRING | — |