Load Video (Upload) from S3
Stop Dragging Videos Into ComfyUI — Load Them From an S3 Bucket
- meta_batch
- vae
- IMAGE
- frame_count
- audio
- video_info
Load Video (Upload) from S3 is the video half of ComfyUI-S3-IO, a small pack that makes a bucket your node graph's hard drive. If you've ever rebuilt a workflow on a second machine and watched every Load Video widget go red, you know the pain this solves: instead of hoping the right file is in ComfyUI/input on whatever box you're on, the video just... lives in S3. Pick it from a dropdown, and it's there.
Who actually wants this? Teams rendering on shared or spot instances. People running ComfyUI in containers where the input folder resets. Anyone doing batch video work across more than one machine. For a single desktop setup it's pure overhead - you're trading a drag-and-drop for environment variables. But the moment you share a bucket, this node earns its keep.
How it works
At load time the node asks S3 for everything under your S3IO_INPUT_PREFIX that has a video extension and turns it into the dropdown you see in the video widget. When you run it, one of two things happens:
- If the file already exists in ComfyUI's input directory, it gets uploaded to S3 and loaded locally. This is the "Upload" in the name - drag a video in and it round-trips to the bucket.
- Otherwise it's downloaded to a local cache under
temp/s3-io/and fed to the bundled VideoHelperSuite loader.
That last bit is the pack's real trick. ComfyUI-S3-IO vendors a copy of VideoHelperSuite and just calls its load_video under the hood, so you get all of VHS's frame handling - force rate, custom dims, frame caps - without installing VHS separately. The node even keys its cache off the S3 ETag, so if someone replaces the file in the bucket, the cached copy refreshes. Neat.
The inputs that matter
The dropdown is populated from the bucket, so the rest is familiar VHS territory:
- force_rate - leave at 0 to keep the source's framerate; set it to force a specific one.
- custom_width / custom_height - 0 means "keep original." Set one and the other scales proportionally.
- frame_load_cap - load only the first N frames. Your best friend when VRAM is tight.
- skip_first_frames and select_every_nth - trim the head and/or subsample the timeline.
- format - this is the "what shape do the frames come out as" switch. Default
AnimateDiffgives you a latent batch ready for a motion module;Nonereturns raw frames; the rest (LTXV,Hunyuan,Wan,Cosmos,Mochi) set the latent layout for those video models. Pick the one that matches whatever's downstream.
Outputs
- IMAGE - the frames (or the latent batch, if a format is set).
- frame_count (INT) - how many frames you actually got, handy for math elsewhere.
- audio (AUDIO) - extracted audio, so you can reattach it after the VAE dance.
- video_info (VHS_VIDEOINFO) - metadata, wire it into
VHS_VideoInfoif you want.
Install
Grab it through ComfyUI Manager (search "ComfyUI-S3-IO") or the old-fashioned way:
cd ComfyUI/custom_nodes
git clone https://github.com/olduvai-jp/ComfyUI-S3-IO
cd ComfyUI-S3-IO
python -m pip install -r requirements.txt
Then restart ComfyUI. The real setup is the environment variables - without them the dropdown is just empty:
export S3IO_ACCESS_KEY_ID="AKIA..."
export S3IO_SECRET_ACCESS_KEY="..."
export S3IO_BUCKET="comfy-bucket"
export S3IO_INPUT_PREFIX="inputs" # where the node looks for videos
S3IO_ENDPOINT_URL points it at MinIO or any S3-compatible store, and S3IO_REGION is there if you need it. pip will also pull opencv-python and imageio-ffmpeg, which are chunky wheels - the first install takes a minute.
Where people get burned
Two things trip people up, both pack-wide. First, ComfyUI Manager will show node-conflict warnings against VideoHelperSuite, because this pack ships VHS's class names internally. That's cosmetic - it's not installed, it's vendored - but it also means "Install Missing Custom Nodes" may list this pack whenever a video workflow asks for VHS. Don't install both to satisfy it; the conflict warning is a red herring.
Second, it reads AWS credentials from your environment. If your shell already has real AWS creds exported, this pack will quietly use them for a bucket - the data goes where you point it, but give it a dedicated, scoped IAM key, not your admin credentials. A r/comfyui thread ran scared on exactly this and it turned out to be "Manager listed a pack that reads env vars." Fair to be cautious, silly to be scared.
If the dropdown feels stale, hit ComfyUI's Refresh Node Definitions - S3 listings are re-read on refresh. And remember: temp/s3-io/ is a cache. Clearing temp is safe; the bucket is the source of truth.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| video | COMBO | 0 options: | |
| force_rate | FLOAT | 00–60 | — |
| custom_width | INT | 00–8192 | — |
| custom_height | INT | 00–8192 | — |
| frame_load_cap | INT | 00–9007199254740991 | — |
| skip_first_frames | INT | 00–9007199254740991 | — |
| select_every_nth | INT | 11–9007199254740991 | — |
| meta_batchopt | VHS_BatchManager | — | |
| vaeopt | VAE | — | |
| formatopt | COMBO | AnimateDiff | 7 options: None, AnimateDiff, Mochi, LTXV, Hunyuan, Cosmos, +1 |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| frame_count | INT | — |
| audio | AUDIO | — |
| video_info | VHS_VIDEOINFO | — |