Nodes/ComfyUI In-N-Out Bucket/Load Video From Bucket (Advanced)
ComfyUI Node

Load Video From Bucket (Advanced)

VHS-style frame controls on your S3 clips

By littleowl·Created 3 months ago·Updated 3 months ago· 2
Load Video From Bucket (Advanced)
    • images
    • audio
    • fps
    • frame_count
    • manifest
    key
    skip_first_frames0
    frame_load_cap0
    select_every_nth1

    The basic Load Video From Bucket hands you a whole VIDEO - fine for playback, useless when you want to process individual frames. Load Video From Bucket (Advanced) is the one for actual video work: it pulls the clip from the bucket and breaks it into images, audio, fps, and frame_count, with three frame controls straight out of the VHS playbook.

    The inputs

    • key (COMBO) - pick the asset from a dropdown of everything in your bucket (or a text field if S3_ALLOW_KEY_LISTING=false).
    • skip_first_frames (INT, default 0) - drop this many frames from the start.
    • frame_load_cap (INT, default 0) - max frames to keep; 0 = all.
    • select_every_nth (INT, default 1) - keep every Nth frame; 1 = keep everything.

    The outputs

    • images (IMAGE) - the frames after your trimming, as a batch tensor.
    • audio (AUDIO) - the full source audio. The tooltip is worth quoting: it's not re-synced to decimated frames. If you keep every 3rd frame, the audio is still the whole track - plan your own sync if you're combining them.
    • fps (FLOAT) - the frame rate, divided by select_every_nth when you decimate. This is the number to feed a downstream encoder so your output plays at the right speed.
    • frame_count (INT) - how many frames you actually got after trimming.
    • manifest (BUCKET_MANIFEST) - the asset's metadata.

    How it works

    The order of operations is skip first, then decimate, then cap - so skip_first_frames and select_every_nth interact the way you'd hope. The real gift is the fps output: when you keep every Nth frame, the output fps is divided accordingly, which means you can hand fps straight into an encoder (like Output Video Bucket (Advanced)) and the timing stays correct without manual math. That one detail saves real headaches.

    When you'd reach for it

    Frame-accurate work: video upscaling, frame interpolation, keyframe-based edits, or feeding a clip into an image-processing pipeline as a batch. Skip the first N frames to cut the title card, decimate a 60fps clip to 30 for speed, cap the count to bound your VRAM on long renders. It's the node that turns a bucket video into something an image model can chew on.

    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. Deps: boto3 + python-dotenv; PyAV ships with ComfyUI.

    Gotchas

    The audio-sync thing is the big one - remember the audio output is the full track regardless of how much you decimate the frames. And an empty key dropdown means either S3_ALLOW_KEY_LISTING=false (you'd see a text box) or the bucket was unreachable when the node loaded, so check the endpoint before assuming your videos vanished. Frame counts explode memory fast on long clips; frame_load_cap exists because of it - set it before your first render on something hours long.

    Categorybuckets/video

    Inputs (4)

    NameTypeDefaultDescription
    keyCOMBOSelect a video asset key from the bucket.
    skip_first_framesINT00–4294967295Drop this many frames from the start.
    frame_load_capINT00–4294967295Max frames to keep (0 = all).
    select_every_nthINT11–4294967295Keep every Nth frame (1 = all). Output fps is divided accordingly.

    Outputs (5)

    NameTypeDescription
    imagesIMAGE
    audioAUDIOFull source audio (not re-synced to decimated frames).
    fpsFLOAT
    frame_countINT
    manifestBUCKET_MANIFEST