Nodes/S3 Serverless-Inline Storage Utils/S3 Video Upload (Inline Credentials)
ComfyUI Node

S3 Video Upload (Inline Credentials)

Frames in, uploaded MP4 out — this node encodes and ships in one step

By udayjain26·Created about a year ago·Updated 6 months ago· 1
S3 Video Upload (Inline Credentials)
  • images
  • audio
  • s3_url
  • upload_status
  • file_size_mb
frame_rate8.0
filename_prefixcomfy_video
bucket_name
access_key_id
secret_access_key
regionus-east-1
endpoint_url
folder_pathuploads
video_formatmp4
video_quality23

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.

CategoryS3 Serverless Storage

Inputs (12)

NameTypeDefaultDescription
imagesIMAGEImage sequence to create video from
frame_rateFLOAT8.00.1–60Video frame rate (fps)
filename_prefixSTRINGcomfy_videoPrefix for uploaded filename
bucket_nameSTRINGS3 bucket name
access_key_idSTRINGAWS Access Key ID
secret_access_keySTRINGAWS Secret Access Key
regionSTRINGus-east-1AWS region
endpoint_urloptSTRINGCustom S3 endpoint URL (for S3-compatible services like Supabase)
folder_pathoptSTRINGuploadsFolder path within bucket
video_formatoptCOMBOmp4Output video format
video_qualityoptINT2315–35Video quality (15=highest, 35=lowest)
audiooptAUDIOOptional audio to include in video

Outputs (3)

NameTypeDescription
s3_urlSTRING
upload_statusSTRING
file_size_mbINT