Output Video Bucket
Push a generated clip to S3, keep a key
- video
- video
- key
- manifest
Video is where the "pass a key, not the bytes" idea really pays off. A generated clip is megabytes of data, and shipping that around your render setup is exactly the kind of thing that makes ComfyUI-as-API painful. Output Video Bucket saves a native VIDEO into your S3-compatible bucket, mints a clean UUID key, and hands it back to you. The key is the payload now.
Inputs: video (the VIDEO you're saving), format (COMBO, default auto) and codec (COMBO, default auto) so you can containerize/re-encode as needed, plus optional subfolder. Outputs: video (passed through), key (STRING), manifest (BUCKET_MANIFEST).
How it works
The node wraps the video into the chosen container/codec (auto keeps the source's arrangement), uploads it as <key>.<ext>, and writes a <key>.json manifest recording width, height, fps, frame count, duration, and whether it has an audio track - the last one is gold for downstream decisions. One key, one video file, clean and content-stable.
This is the "basic tier" video output: it takes a whole VIDEO and stores it whole. If you're assembling video from raw frames (or want CRF control, or transparent webm, or to mux in audio), you want Output Video Bucket (Advanced) instead - that node accepts frames or a video and gives you real encoding control.
Why you'd reach for it
The output/input round trip is the point: whatever you generate, the key output can be stored in a database or passed to a caller, and any machine on the tailnet can pull the clip later with an Input/Load node. No copying from output/ to input/, no filename collisions, no counters. It's a small habit change that removes a whole class of "where did my render go" friction.
Install
ComfyUI Manager (search In-N-Out Bucket) or:
cd ComfyUI/custom_nodes
git clone https://github.com/littleowl/ComfyUI_In-N-Out_Bucket.git
pip install -r ComfyUI_In-N-Out_Bucket/requirements.txt
cp ComfyUI_In-N-Out_Bucket/.env.example ComfyUI_In-N-Out_Bucket/.env
Restart, under buckets/video. Only boto3 and python-dotenv are installed; PyAV handles the transcoding and already ships with ComfyUI.
Troubleshooting
Upload failures = bucket connection issues nine times out of ten: verify S3_ENDPOINT_URL, credentials, and S3_ADDRESSING_STYLE (path for RustFS/MinIO, auto for AWS). The video bucket auto-creates on first use. A subtler trap: format/codec of auto just copies the source's container arrangement, so if the incoming video is already webm, you'll get webm back - pick explicit format/codec if a downstream consumer needs, say, h264/mp4 specifically. And keep in mind the manifest's has_audio flag: check it before assuming a clip has sound.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | The video to save. | |
| format | COMBO | auto | Container format to save as. |
| codec | COMBO | auto | Codec to use. |
| subfolderopt | STRING | Optional prefix to organize assets, e.g. 'renders'. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | The input video, passed through for chaining. |
| key | STRING | The asset key the video was saved under. |
| manifest | BUCKET_MANIFEST | Metadata written alongside the video. |