---
title: "Audio Concat"
description: "Join 2 to 12 audio clips into one file, in order, with silence between them. Wire an array into `clips` (an iterator's collected clips) or the discrete `audio_1`..`audio_6` ports; a wired `clips` array wins outright and the discrete ports are ignored (no silent merge). `gap` is the uniform silence between clips in seconds; `gaps` (e.g. \"0.3, 0.5\") sets each join individually and must name exactly one value per join. Every clip is resampled to one format first (default 48 kHz stereo). Free: deterministic processing, content-addressed output."
updated: 2026-09-28
---

# Audio Concat

**Node type:** `utility:audio_concat`  
**Category:** `Editing`

## Description

Join 2 to 12 audio clips into one file, in order, with silence between them. Wire an array into `clips` (an iterator's collected clips) or the discrete `audio_1`..`audio_6` ports; a wired `clips` array wins outright and the discrete ports are ignored (no silent merge). `gap` is the uniform silence between clips in seconds; `gaps` (e.g. "0.3, 0.5") sets each join individually and must name exactly one value per join. Every clip is resampled to one format first (default 48 kHz stereo). Free: deterministic processing, content-addressed output.

## Canvas ports

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

| ID        | Label             | Details |
| --------- | ----------------- | ------- |
| `clips`   | **Clips (array)** | `ARRAY` |
| `audio_1` | **Audio 1**       | `AUDIO` |
| `audio_2` | **Audio 2**       | `AUDIO` |
| `audio_3` | **Audio 3**       | `AUDIO` |
| `audio_4` | **Audio 4**       | `AUDIO` |
| `audio_5` | **Audio 5**       | `AUDIO` |
| `audio_6` | **Audio 6**       | `AUDIO` |

## Sidebar config

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

| ID           | Label                                            | Details                                     |
| ------------ | ------------------------------------------------ | ------------------------------------------- |
| `gap`        | **Gap between clips (s)**                        | `NUMBER`                                    |
| `gaps`       | **Per-join gaps (s, comma list; overrides gap)** | `TEXT`                                      |
| `sampleRate` | **Sample rate**                                  | `TEXT` · options: `48000`, `44100`, `24000` |
| `channels`   | **Channels**                                     | `TEXT` · options: `stereo`, `mono`          |
| `format`     | **Format**                                       | `TEXT` · options: `mp3`, `wav`              |

## Outputs

| ID      | Label            | Type    |
| ------- | ---------------- | ------- |
| `audio` | **Joined Audio** | `AUDIO` |

## What it is for

Join phrases into one track with controlled gaps, without a stack of trim nodes
or a trip to an audio editor.

## Wiring

Wire an array into **clips** (for example an iterator's collected TTS lines),
or wire the discrete **audio_1** to **audio_6** ports. When **clips** is wired it
wins outright and the discrete ports are ignored, never merged. 2 to 12 clips.
A discrete port that receives more than one clip is refused rather than
silently dropping the extras.

## Settings

- **Gap** (seconds, 0 to 10): silence between every pair of clips.
- **Per-join gaps**: a comma list such as `0.3, 0.5, 0.2` that sets each join
  individually. It must name exactly one value per join (clips minus one) and
  overrides **Gap**.
- **Sample rate** (48000 default, 44100, 24000) and **Channels** (stereo
  default, mono): every clip is converted to this one format before joining.
- **Format**: mp3 (default) or wav.

## Free, and why

Free set, no Run button, refreshes when anything downstream runs. The output is
content-addressed by the clip urls, their order and the settings, so an
unchanged re-run reuses the last file.

---

_Auto-generated from the Wireflow node registry._

---

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