AUDIO Concat @ vrch.ai
Stitch two audio clips together, crossfade optional
- audio1
- audio2
- AUDIO
The AUDIO Concat @ vrch.ai does one simple thing: it takes two AUDIO inputs and joins them end to end into a single clip. No tricks, no format drama - audio1 plays, then audio2 plays, and you get one combined AUDIO output. It's the node you reach for when your realtime workflow keeps producing audio in chunks - a TTS line here, a recorded snippet there - and you want one continuous file at the end instead of a folder full of fragments.
Where it gets slightly less boring is the crossfade_duration_ms input. Set it to 0 and the join is a hard cut. Set it to, say, 500 and the tail of the first clip blends into the head of the second, which is the difference between an abrupt splice and something you could play in front of an audience. For DJ-ish looping and narrated content that seam quality is usually the whole point.
How it works
Feed audio1 and audio2 in, get AUDIO out. The node resamples/synchronizes the two inputs so they match, then concatenates them with the requested crossfade in milliseconds (0–10000, stepped at 100ms in the UI). The single output is a normal AUDIO you can push into an AUDIO Saver @ vrch.ai, a Web Viewer, or any other audio sink in the graph.
The crossfade is the only parameter you'll fiddle with in practice. Zero is fine for simple stacking. Values in the 300–800ms range smooth over a beat or a sentence boundary without sounding like a mush of both clips. Above a second or two you're basically making a mashup, which is a legit use but usually not what you meant.
Installing it
Standard pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/VrchStudio/comfyui-web-viewer
pip install -r comfyui-web-viewer/requirements.txt
Or install "ComfyUI Web Viewer" from ComfyUI Manager and restart. No models, no FFmpeg requirement, nothing to download beyond the pack itself.
Practical notes
The order matters - there's no auto-detect for "which clip is the intro." Wire the earlier clip into audio1 and the later one into audio2, or you'll get your story backwards and won't notice until the export.
Where people actually use this: chaining an Audio Recorder capture to a pre-rolled intro/outro, joining TTS segments into one narration track for the audio picture book workflows, and looping ambience by concatenating a clip with itself. If you only need one of the inputs, you can leave the other disconnected only if the node tolerates it - in practice, give both a real signal, even if that means a second silent clip, so the concat behaves predictably.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| audio1 | AUDIO | — | |
| audio2 | AUDIO | — | |
| crossfade_duration_ms | INT | 00–10000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | — |