🔊 S42 CutFlow Audio Concat Pro
Stitch two audio clips together with a proper crossfade, right in the graph
- audio_a
- audio_b
- merged_audio
- info
Concatenating two audio clips sounds like the easiest thing in the world, and then you try it and hear the click. A hard splice almost always lands mid-waveform, and that discontinuity is a little pop every single time. S42CF Audio Concat Pro is the node that fixes that properly: it appends one AUDIO to another with a real crossfade over the seam, with selectable fade curves, instead of just cramming the tensors together.
Inputs are the two clips plus three controls:
audio_a/audio_b- the two AUDIO inputs. A plays first, then B. Sample rates should match (both from the same loader family normally will).pad_ms(default 0) - gap inserted between the clips. Positive adds that much silence after A before B starts; negative trims that much off the end of A. Useful for building rhythm - a beat's worth of silence between two drops, or trimming a trailing tail you don't want.crossfade_ms(default 50) - the overlap length where A fades out and B fades in. 50ms is the invisible, nobody-will-notice default; push to 200–500ms for a proper ambient-style blend.fade_curve-logarithmic(default),linear, orexponential. This is the geek knob: logarithmic uses equal-power-ish (√) curves that keep the perceived loudness steady through the seam, which is why it's the default. Linear is fine for dialogue. Exponential gives a fast-attack fade-out feel. For music, stay on logarithmic unless you hear something you don't like.
The mechanism is exactly what you'd hope: it fades the tail of A with curve A, fades the head of B with curve B, sums the overlapping region, and concatenates. Pure torch, no model, instant. Outputs are merged_audio (AUDIO) and info (a string, though the code's summary is unhelpfully terse - trust the output, not the message).
Where this earns its place: building a montage track from several generated snippets, stitching a song's intro onto a loop, or assembling a beat-synced sequence where your S42CF_BeatSnap cuts need clean joins afterward. It's the audio glue that pairs with the pack's visual cut/split nodes.
One caveat to know: it doesn't resample. If your two clips came from different sources at different sample rates, the waveform math assumes they match, and mismatched rates make the merged result sound wrong (off-speed or glitchy). Normalize your sources first, or use S42CF_AudioVideoSync's time-stretch if you need to force a rate change.
Installing it
S42-CutFlow install: ComfyUI Manager → search "S42 CutFlow" → Install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/GeekyGhost/S42-CutFlow.git
pip install -r S42-CutFlow/requirements.txt
One-line requirements (opencv-python-headless); the concat is pure torch. The "[S42 CutFlow] Loaded ..." console line confirms the pack registered.
The takeaway
If you're joining audio at all, use this instead of a raw concat. The 50ms logarithmic crossfade is the kind of default that quietly saves you from a hundred audible pops.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| audio_a | AUDIO | — | |
| audio_b | AUDIO | — | |
| pad_ms | INT | 0 | — |
| crossfade_ms | INT | 50 | — |
| fade_curve | COMBO | logarithmic | 3 options: logarithmic, linear, exponential |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| merged_audio | AUDIO | — |
| info | STRING | — |