Two Image Concatenator (Buff)
Two frames in, six channels out — the TemporalNet2 glue
- image1
- image2
- IMAGE
This node exists for one reason, and the README is upfront about it: it's built for TemporalNet2 in video streaming workflows. TemporalNet2 is a ControlNet-style model that conditions on optical flow - and it wants its conditioning input as a 6-channel image. This node takes two 3-channel images and stacks them along the channel dimension into one 6-channel tensor. That's the entire job.
To understand why that matters, think about the temporal-consistency pipeline it slots into. You want each new frame to stay consistent with the last, so you need to tell the model how the scene moved. The optical-flow family of nodes in this pack (see RaftOpticalFlowNode / BatchRaftOpticalFlowNode) computes that motion as a color-coded flow image. TemporalNet2 ingests a 6-channel input that combines the flow/previous-frame information with the current control frame - two 3-channel images side by side in one tensor. The concatenator is the seam where those two halves meet. Pair the flow visualization with your current frame, stack them, and you've built exactly the input that model wants.
How it works
The mechanism is a single torch.cat(..., dim=3) - the channel axis. Both inputs must be 3-channel images ([B, H, W, 3]), and they must match on batch size, height, and width, or the node raises a ValueError with a clear message. Output is [B, H, W, 6] with image1's channels first, image2's second. Batch-wise it's composable: give it two batches of N frames and it returns one batch of N six-channel frames, which is what makes it usable in streaming loops where you're processing frame pairs.
Inputs and output
image1- first 3-channel image; the README's intent is the previous frame (or its flow visualization).image2- second 3-channel image; the current frame.
Single output: IMAGE, the 6-channel stack.
Install
Part of BuffMcBigHuge's QoL pack - ComfyUI Manager (search "ComfyUI-Buff-Nodes") or:
cd ComfyUI/custom_nodes
git clone https://github.com/BuffMcBigHuge/ComfyUI-Buff-Nodes
Restart ComfyUI. No extra Python dependencies. TemporalNet2 itself is a separate download from Hugging Face, loaded through a ControlNet loader like any other ControlNet model.
Gotchas
The shape checks are the whole troubleshooting story: mismatched sizes fail loudly, and 4-channel images (RGBA) fail the 3-channel assertion - strip alpha first. This is also the node to remember when a TemporalNet2 workflow you grabbed off the internet throws "unexpected 6 channel image": this is how the six channels get made, and if the workflow author used a different pack's equivalent, you can rebuild the connection with this one. It's a tiny node with a single very specific job, but in a video-streaming workflow it's the piece that makes the temporal model's input actually exist.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| image1 | IMAGE | First input image (3 channels). Typically the previous frame for temporal models. | |
| image2 | IMAGE | Second input image (3 channels). Typically the current frame for temporal models. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |