VRGDG_CombinevideosV5
The combine node that knows which set it's on — and labels each scene for you
- audio_meta
- video_1
- video_2
- video_3
- video_4
- video_5
- video_6
- video_7
- video_8
- video_9
- video_10
- video_11
- video_12
- video_13
- video_14
- video_15
- video_16
- blended_video_frames
If VRGDG_CombinevideosV2 is the barebones set assembler, V5 is the version that actually runs the queue workflow: it knows which set you're on, how many sets there are, how many scenes the ragged last set has, and it can save its output straight to disk - with or without label bars on every frame. It's the combine node you'd pick when you're churning through a full song, not assembling one set in isolation.
Everything from V2 is here - up to 16 optional IMAGE video_1–video_16 inputs, an fps (default 25), and the required audio_meta DICT that drives per-scene trimming. On top of that it adds the set-scheduling context: index (which set you're on), total_sets, and groups_in_last_set (so the final partial set doesn't pad empty slots into the timeline). duration (default 4.0) acts as a fallback per-scene duration when audio_meta doesn't supply one.
The outputs that aren't outputs
The important difference from V2 is folder_path and with_labels. With with_labels on, the node draws a black bar with a white label under each frame (using the scene number), saves that labeled version into a WithLabels/ subfolder, and writes the plain version to folder_path - all via OpenCV's VideoWriter as mp4v. folder_path is resolved against ComfyUI's output directory unless it's an absolute path. So the node both returns blended_video_frames and writes files, which is how the queue workflow collects a per-set MP4 per run without you wiring up extra save nodes.
Those labeled videos are the debugging gift nobody expects: run once with labels on and you get a grid-able record of exactly which scene each segment is, which makes "scene 7 is wrong" a five-second diagnosis instead of a guessing game.
Gotchas
The per-scene trimming here treats audio_meta durations as frame counts when that's what the dict carries (the queue node emits frame-based durations), and it only pads - it never trims short videos up. That asymmetry with V2 matters: V2 will trim an over-long clip to its target; V5 will happily ship an over-long clip. So generate to length first. And note groups_in_last_set is clamped at 16, so an out-of-range value silently becomes "a full set" - keep it fed from CalculateSetsFromAudio_Queue.
Install
ComfyUI Manager → search "vrgamedev", or git clone https://github.com/vrgamegirl19/comfyui-vrgamedevgirl into ComfyUI/custom_nodes, restart. Needs the pack requirements (kornia, librosa, imageio) plus OpenCV, which is bundled with ComfyUI. It's the workhorse of the combine stage - V2 for a quick single assembly, V5 for the real run.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| fps | FLOAT | 25.00 | — |
| duration | FLOAT | 4.00 | — |
| audio_meta | DICT | — | |
| index | INT | 0 | — |
| total_sets | INT | 1 | — |
| groups_in_last_set | INT | 160–16 | — |
| folder_path | STRING | ./output_videos | — |
| with_labels | BOOLEAN | true | If enabled, adds label bars and saves labeled video to WithLabels/. |
| video_1opt | IMAGE | — | |
| video_2opt | IMAGE | — | |
| video_3opt | IMAGE | — | |
| video_4opt | IMAGE | — | |
| video_5opt | IMAGE | — | |
| video_6opt | IMAGE | — | |
| video_7opt | IMAGE | — | |
| video_8opt | IMAGE | — | |
| video_9opt | IMAGE | — | |
| video_10opt | IMAGE | — | |
| video_11opt | IMAGE | — | |
| video_12opt | IMAGE | — | |
| video_13opt | IMAGE | — | |
| video_14opt | IMAGE | — | |
| video_15opt | IMAGE | — | |
| video_16opt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| blended_video_frames | IMAGE | — |