Nodes/MKRShift_Nodes/Audio Concat
ComfyUI Node

Audio Concat

Stitch audio clips together end-to-end, with a stream-copy fast path

By criskb·Created 7 months ago·Updated 5 months ago· 0
Audio Concat
  • audio_a
  • audio_b
  • audio_c
  • audio
  • output_path
  • duration_sec
  • summary
output_formatauto
filename_prefixMKR_audio_concat
subfolder
overwritefalse
stream_copy_if_possibletrue
audio_paths
filename_label

So you generated four dialogue clips or a pile of foley one-shots, and now you need them as one continuous track. MKRAudioConcat is the "join these in order" node - it takes two audio inputs (plus an optional third and/or a list of file paths) and produces a single file with everything back-to-back. It's the boring, necessary utility that every multi-shot pipeline ends up needing, and unlike mixing it's not an overlay: the total duration is the sum of the parts.

Where it sits in the MKRShift_Nodes audio family: this is the Utility branch, so it's about assembling rather than shaping. Chain it before MKRAudioTrimFadeNormalize to master the joined result, or feed the output into MKRPresaveAudio to hand the whole thing to your delivery chain.

How it works

If the inputs are actual files and ffmpeg is available, the node uses ffmpeg's concat demuxer - a text file listing the sources. When stream_copy_if_possible is on (it is by default) and every source is the same format as the requested output, it concatenates with -c copy, which is nearly instant because nothing is re-encoded. If formats differ, or copy isn't possible, it falls back to a full re-encode with the right codec for the target format.

If the inputs are waveform payloads (no decodable file), there's a numpy fallback: it resamples everything to the highest sample rate, aligns channels, and concatenates sample arrays. That's slower and less clean than ffmpeg copy, but it means the node works even when ffmpeg isn't installed.

Inputs that matter

  • audio_a, audio_b - the two required sources, in order.
  • audio_c (optional) - a third source.
  • audio_paths (optional) - a multiline text box of file paths, one per line. This is the sneaky-useful one: you can concat a whole folder's worth of files without a dozen wires.
  • stream_copy_if_possible - on by default. Leave it on; it's the difference between instant joins and a full re-encode. Turn it off only if copy produces glitches between files.
  • The usual save block: output_format (auto inherits the first source's format), filename_prefix, subfolder, overwrite, filename_label.

Outputs: audio (MKR_AUDIO), output_path, duration_sec, summary (JSON with source count and which mode - file_ffmpeg copy/re-encode vs waveform - actually ran).

Install

ComfyUI Manager (search "MKRShift Nodes"), or:

cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes

Restart. The fast -c copy path needs ffmpeg on your PATH; without it you fall back to the numpy path (and only WAV-ish payloads work reliably). No model downloads either way.

Common issues

The trap is mixed formats: if your sources are a mix of MP3 and WAV and you ask for auto output, the node picks the first source's extension and has to re-encode - which is why stream_copy_if_possible sometimes doesn't save you. Normalize sources to one format upstream if you care about lossless joins. Also, audio_paths entries are resolved relative to ComfyUI's input/output/temp dirs and your CWD, so absolute paths are the safe bet.

CategoryMKRShift Nodes/Media/Audio/Utility

Inputs (10)

NameTypeDefaultDescription
audio_a*
audio_b*
output_formatCOMBOauto5 options: auto, wav, mp3, flac, ogg
filename_prefixSTRINGMKR_audio_concat
subfolderSTRING
overwriteBOOLEANfalse
stream_copy_if_possibleBOOLEANtrue
audio_copt*
audio_pathsoptSTRING
filename_labeloptSTRING

Outputs (4)

NameTypeDescription
audioMKR_AUDIO
output_pathSTRING
duration_secFLOAT
summarySTRING