Nodes/comfyui-AGSoft/🔊🪡AGSoft Audio Concatenate Plus
ComfyUI Node

🔊🪡AGSoft Audio Concatenate Plus

Glue TTS clips into one track with crossfades and matched loudness

By Art-xmaster·Created about a year ago·Updated a day ago· 24
🔊🪡AGSoft Audio Concatenate Plus
    • audio_path
    • duration_seconds
    • duration_timecode
    • file_size_mb
    output_nameoutput_audio_plus.mp3
    output_path
    inputs_count2
    modeconcat
    crossfade_duration1.0
    crossfade_curvetri
    loudnormoff
    fade_in0.00
    fade_out0.00
    formatmp3
    bitrate192k

    🔊🪡AGSoft Audio Concatenate Plus is the node that turns several audio files into one, with the two features that make raw concatenation sound amateurish: crossfades between tracks and loudness matching. If you've ever stitched TTS clips together and heard one sentence blast louder than the rest, you know exactly why the loudness part matters.

    The classic workflow: generate a handful of voiceover lines, load them with AGSoft Load Audio, and feed them all into this node. Out comes one file that sounds like it was produced as a unit instead of stapled together.

    How it works

    Set inputs_count (2–10) and the node dynamically grows that many audio_N inputs. Then choose the joining mode:

    • concat - tracks play back-to-back, no transition.
    • crossfade - a smooth transition between adjacent tracks, with crossfade_duration (0.1–30s) and a crossfade_curve to shape it: tri (linear), exp, log, sine-based qsin/hsin, sigmoid dese/desi, or nofade (hard cut).

    The loudnorm toggle is the quiet hero here. It normalizes every track to EBU R128 (integrated −16 LUFS) before joining, so none of them overpowers the others. It's the difference between a podcast that sounds consistent and a mix where you're reaching for the volume knob at every junction.

    You also get fade_in / fade_out for the whole result (0–60s each) - handy for a clip meant to loop or fade up from silence. Output is mp3 / wav / flac / ogg / m4a via format, with bitrate (96k–320k) for the lossy ones. output_name is the filename; output_path is the folder, empty = ComfyUI/output.

    The inputs a beginner actually sets

    • mode - start with crossfade if the tracks are sentences in one narration; concat if they're discrete clips.
    • crossfade_duration - 0.5–1s feels natural for speech. Bigger for music beds.
    • loudnorm - honestly, just leave it on. The default is off, but matching loudness is why you're here.

    Outputs

    • audio_path (STRING) - where the merged file was written.
    • duration_seconds, duration_timecode - the total length (handy if you're fitting it to a video later).
    • file_size_mb - size, so you can sanity-check your bitrate choice.

    Install

    Part of the comfyui-AGSoft pack - ComfyUI Manager → search "comfyui-AGSoft" → Install → restart, or by hand:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Art-xmaster/comfyui-AGSoft
    

    Restart and go. No models, no extra Python deps for audio work; it drives the bundled FFmpeg binary (or a system ffmpeg on PATH). If you see "ffmpeg not found", install FFmpeg and restart ComfyUI.

    One note on feeding it: if you bring audio in through AUDIO sockets, the files arrive as decoded PCM and get written to temp WAVs. That's fine here - the whole point is re-encoding to one output - so unlike the split nodes, you don't need to fight to preserve the source codec.

    CategoryAGSoft/Audio

    Inputs (11)

    NameTypeDefaultDescription
    output_nameSTRINGoutput_audio_plus.mp3Output filename. The extension is set by the chosen format. --- Имя итогового файла. Расширение задаётся выбранным форматом.
    output_pathSTRINGOutput directory. If empty, ComfyUI/output is used. --- Папка сохранения. Если пусто, используется ComfyUI/output.
    inputs_countCOMBO2Number of audio tracks to concatenate. --- Количество аудио-дорожек для склейки.
    modeCOMBOconcatconcat = join tracks back-to-back (no transition). crossfade = smooth transition between tracks. --- concat = склейка встык (без перехода). crossfade = плавный переход между треками.
    crossfade_durationFLOAT1.00.1–30Crossfade duration (seconds) between adjacent tracks. Used only in crossfade mode. --- Длительность кроссфейда (в секундах) между соседними треками. Только в режиме crossfade.
    crossfade_curveCOMBOtriCrossfade curve. tri = linear, exp = exponential, log = logarithmic, qsin/hsin = sine-based, dese/desi = sigmoid, nofade = hard cut. --- Кривая кроссфейда. tri = линейная, exp = экспоненциальная, log = логарифмическая, qsin/hsin = синусоидные, dese/desi = сигмоидные, nofade = жёсткий рез.
    loudnormCOMBOoffNormalize loudness of all tracks to EBU R128 (I=-16 LUFS) before joining, so no track is louder than another. --- Нормализовать громкость всех треков по EBU R128 (I=-16 LUFS) перед склейкой, чтобы ни один трек не был громче другого.
    fade_inFLOAT0.000–60Fade-in of the whole result (seconds). 0 = off. --- Нарастание всего результата (в секундах). 0 = выкл.
    fade_outFLOAT0.000–60Fade-out of the whole result (seconds). 0 = off. --- Затухание всего результата (в секундах). 0 = выкл.
    formatCOMBOmp3Output format. mp3/wav/flac/ogg/m4a. --- Формат выхода. mp3/wav/flac/ogg/m4a.
    bitrateCOMBO192kBitrate for lossy formats (mp3/ogg/m4a). Ignored for wav/flac. --- Битрейт для lossy-форматов (mp3/ogg/m4a). Игнорируется для wav/flac.

    Outputs (4)

    NameTypeDescription
    audio_pathSTRING
    duration_secondsFLOAT
    duration_timecodeSTRING
    file_size_mbFLOAT