Nodes/S42 CutFlow/🔊 S42 CutFlow Audio Concat Pro
ComfyUI Node

🔊 S42 CutFlow Audio Concat Pro

Stitch two audio clips together with a proper crossfade, right in the graph

By GeekyGhost·Created 6 months ago·Updated 4 months ago· 3
🔊 S42 CutFlow Audio Concat Pro
  • audio_a
  • audio_b
  • merged_audio
  • info
pad_ms0
crossfade_ms50
fade_curvelogarithmic

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, or exponential. 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.

CategoryS42 CutFlow/Expanded

Inputs (5)

NameTypeDefaultDescription
audio_aAUDIO
audio_bAUDIO
pad_msINT0
crossfade_msINT50
fade_curveCOMBOlogarithmic3 options: logarithmic, linear, exponential

Outputs (2)

NameTypeDescription
merged_audioAUDIO
infoSTRING