---
title: 'Video Concat'
description: 'Concatenate video clips into one MP4, in order. Wire an array of clips, or up to 6 discrete ports.'
updated: 2026-07-28
---

# Video Concat

**Node type:** `utility:video_concat`  
**Category:** `Data`

## Description

Concatenates video clips into one MP4, in order, via a server-side ffmpeg step. There are two ways to supply the clips:

- **Array (`clips`):** wire an iterator's collected clips or a Media Splitter `segments` array into the `clips` port to stitch N clips in array order. This is the way to reassemble the output of a fan-out (e.g. one talking-avatar clip per script slice) back into a single video.
- **Discrete ports (`video_1`..`video_6`):** wire 2 to 6 clips individually; unwired ports are skipped and the wired ones concatenate in port order.

When `clips` is wired it takes precedence and the discrete ports are ignored (no silent merge of the two). At least 2 clips are required, and at most 12: past the cap the node fails loud rather than truncating. The node fails loud in general: a failed concat returns an error, never a partial result.

The `clips` array accepts elements that are a bare URL string or a `{ url }` / `{ video }` / `{ videoUrl }` object; each element is one clip. Each discrete port accepts the same shapes, or an array of them (the first resolvable element is used, since a discrete port expects one clip).

## Canvas ports

These appear as port handles on the left side of the node.

| ID        | Label             | Details                                                       |
| --------- | ----------------- | ------------------------------------------------------------- |
| `clips`   | **Clips (array)** | `ARRAY`. An ordered list of clips; overrides the ports below. |
| `video_1` | **Video 1**       | `VIDEO` _(required)_                                          |
| `video_2` | **Video 2**       | `VIDEO` _(required)_                                          |
| `video_3` | **Video 3**       | `VIDEO`                                                       |
| `video_4` | **Video 4**       | `VIDEO`                                                       |
| `video_5` | **Video 5**       | `VIDEO`                                                       |
| `video_6` | **Video 6**       | `VIDEO`                                                       |

## Sidebar config

These render as form fields in the right-side config panel when the node is selected.

_No sidebar config fields._

## Outputs

| ID      | Label                  | Type    |
| ------- | ---------------------- | ------- |
| `video` | **Concatenated Video** | `VIDEO` |

## Notes

- Between 2 and 12 clips. Fewer than 2 or more than 12 is an error, not a truncation.
- `clips` (the array port) wins over `video_1`..`video_6` when both are wired. They are never merged.
- The re-encode can take minutes for long reels; the node waits for completion.
- The 12-clip cap keeps the concat inside the clipper Lambda's budget (2GB / 300s, 512MB /tmp).

---

_Auto-generated from the Wireflow node registry (this page hand-edited for the `clips` array port)._

---

Documentation index: fetch https://www.wireflow.ai/llms.txt for the full list of Wireflow docs.
