π½ Unwrap Frame Set
Why Your 'Save Video' Won't Connect (and the Node That Fixes It)
- frames
- images
- framerate_float
- framerate_rounded
- framerate_base
- framerate_divisor
- first_index
- indexed_length
- frame_count
You drag a wire out of a Dream Video Batches node and ComfyUI flat-out refuses to plug it into Save Video. Nothing happens, no line appears. That's not a bug in your graph - it's the pack's design. Most of it speaks a custom type called FRAME_SET, and stock ComfyUI doesn't know what a frame set is. Unwrap Frame Set [DVB] is the adapter that turns one back into a plain IMAGE batch the rest of the graph - Save Video, VideoHelperSuite, AnimateDiff, whatever - will actually accept. This is the node that makes the pack usable, and skipping it is the single most common way beginners bounce off.
It's genuinely a real-world stumble, not a theoretical one. Someone on r/StableDiffusion hit exactly this with v0.3.40: everything worked until Generate In-Between Frames, then "Save Video" wouldn't take the frames output. The fix, per the pack's README: run the frame set through Unwrap Frame Set, then feed the images output into a Create Video node and on to Save Video.
What it's actually doing
A frame set is more than a pile of images. It also carries two things ComfyUI's core types can't express: an index for each frame (so frames can be gapped, offset, reversed, or spliced) and a frame rate. When you unwrap, you get the pixels back as a normal IMAGE tensor - and all that metadata as separate outputs, because once the pixels are loose, nothing else will tell you what the indices were.
The only input that takes thinking is gap_mode. Gaps appear whenever you've reversed, offset, or spliced a set, and you get three ways to handle them:
- BLEND - fills every missing index by cross-fading between the frames on either side of the hole. Output has one image per index, gaps included. Handy when you just want a dense sequence out.
- FAIL - if the set has any index gaps, the node errors out. A blunt but honest "you need to fix the sequence first" guard.
- REINDEX - passes the images through untouched and hands you the index bookkeeping in the outputs so you can deal with the gaps yourself. It's the "trust me, I know what I'm doing" option.
The inputs and outputs that matter
frames- theFRAME_SETin.gap_mode- the three-way switch above.
The eight outputs are where the value hides. images is the one you'll wire 95% of the time. The rest are metadata you reach for when you're scripting around the pack: framerate_float (say 23.976), framerate_rounded (24), framerate_base and framerate_divisor (the fraction form, e.g. 24000 / 1001), plus first_index, indexed_length, and frame_count so you can reconstruct what the indices were after the pixels have gone out into the wild.
Installing
Grab the pack once and it's available for every node here. ComfyUI Manager (search "Dream Video Batches") is the easy path; the pack is registered, so it's a one-click install. Manual, if you prefer:
cd ComfyUI/custom_nodes
git clone https://github.com/alt-key-project/comfyui-dream-video-batches.git
cd comfyui-dream-video-batches
pip install -r requirements.txt # or use the embedded python in ComfyUI's python_embedded
Then restart ComfyUI. The author is the Alt Key Project / Dream Project YouTube channels, and this pack was built to support AnimateDiff Evolved, VideoHelperSuite, Frame Interpolation, and Stable Video Diffusion workflows - it's a layer on top of those, not a replacement.
Where people get burned
The classic chain that fails: camera node β Save Video. Fix it by inserting Unwrap between the last DVB node and anything that isn't DVB. One more gotcha: with gap_mode at BLEND, a set with big gaps will blend across the hole rather than error, which is usually what you want for video output but can silently turn a skipped frame into a fade - set it to FAIL while debugging if frames look "too smooth" in places you didn't expect.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| frames | FRAME_SET | β | |
| gap_mode | COMBO | 3 options: BLEND, FAIL, REINDEX |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | β |
| framerate_float | FLOAT | β |
| framerate_rounded | INT | β |
| framerate_base | INT | β |
| framerate_divisor | INT | β |
| first_index | INT | β |
| indexed_length | INT | β |
| frame_count | INT | β |