S3 Video Upload (Inline Credentials)
Frames in, uploaded MP4 out — this node encodes and ships in one step
- images
- audio
- s3_url
- upload_status
- file_size_mb
S3 Video Upload is the one-stop "make a video and put it somewhere" node. You feed it an image sequence - the frames from an AnimateDiff, LTX-Video, or Wan run - and it encodes those frames into an actual video file with ffmpeg, uploads the result to your bucket, and hands you back the URL. Everything from latent video to shareable link happens inside this single node, which is a lot less plumbing than the usual "decode → VHS VideoCombine → upload" chain.
Like the rest of this pack, the credentials go straight into the node. No environment variables, no shared AWS config file. That matters when you're running ComfyUI as a serverless job or a recycled container where you can't depend on the environment being set up for you - the node carries everything it needs.
How it works
The mechanism is worth understanding because it explains the one real requirement: ffmpeg has to be installed on your machine. The node looks for an ffmpeg binary on your PATH (and checks a few common install locations like /usr/bin/ffmpeg or C:\ffmpeg\bin\ffmpeg.exe), then streams your image tensors to it as raw RGB frames over stdin. ffmpeg encodes with libx264 at a CRF you control, so the image frames never get written to disk as individual files - it goes straight from your GPU output into the encoder.
The video_quality input maps directly to CRF: 15 is highest quality, 35 is lowest, 23 is the default and is a very reasonable "good enough" setting. The frame_rate input (default 8 fps) sets the output speed. Format choices are mp4, webm, avi, and mov, and the filename is just your filename_prefix plus the format extension - comfy_video.mp4, for example.
The inputs that matter
- images - your decoded frame batch. Wire it from a VAE decode.
- frame_rate - default 8 fps; bump it for smooth motion, drop it to shrink files.
- video_format / video_quality - the encoding knobs above.
- bucket_name, access_key_id, secret_access_key, region - your AWS (or compatible) credentials.
- endpoint_url - empty for AWS; for Supabase use
https://<project>.supabase.co/storage/v1/s3, and your provider's endpoint for R2, MinIO, or DigitalOcean Spaces. - audio - declared as an optional input, but the shipped encode path doesn't actually mux audio into the video yet. Don't rely on it; treat it as future plumbing.
Outputs are s3_url, upload_status, and file_size_mb. On failure you get an empty URL, a status explaining the problem, and size 0 - same fail-soft pattern as the rest of the pack, so read the status string.
Install
ComfyUI Manager (search s3_serverless_inline_storage_utils) or:
cd ComfyUI/custom_nodes
git clone https://github.com/udayjain26/s3_serverless_inline_storage_utils
Restart, look under S3 Serverless Storage. No models to download. But don't skip the two hidden dependencies: the ffmpeg binary on your system, and the pack's pip deps (boto3, botocore, pillow, requests) which Manager handles for you.
Troubleshooting
The classic failure here is "FFmpeg not found." The node raises a clear error for that, so install ffmpeg (your package manager, or the usual binary download on Windows) and make sure it's on PATH. If you're uploading to a private bucket, remember the returned URL isn't presigned - it's the object's plain URL, which only works if whatever consumes it can reach the bucket. And if a video comes back visually fine but massive, lower the quality number meaningfully (that's CRF, so smaller number = bigger, prettier file) or drop the frame rate.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Image sequence to create video from | |
| frame_rate | FLOAT | 8.00.1–60 | Video frame rate (fps) |
| filename_prefix | STRING | comfy_video | Prefix for uploaded filename |
| bucket_name | STRING | S3 bucket name | |
| access_key_id | STRING | AWS Access Key ID | |
| secret_access_key | STRING | AWS Secret Access Key | |
| region | STRING | us-east-1 | AWS region |
| endpoint_urlopt | STRING | Custom S3 endpoint URL (for S3-compatible services like Supabase) | |
| folder_pathopt | STRING | uploads | Folder path within bucket |
| video_formatopt | COMBO | mp4 | Output video format |
| video_qualityopt | INT | 2315–35 | Video quality (15=highest, 35=lowest) |
| audioopt | AUDIO | Optional audio to include in video |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| s3_url | STRING | — |
| upload_status | STRING | — |
| file_size_mb | INT | — |