Video Audio Merge AB (QQ)
Crossfade two clips into one video — with audio that follows
- image_A
- image_B
- audio_A
- audio_B
- images
- audio
- debug
You've got two Wan clips and you want one continuous video. A hard cut looks cheap, and stitching frame tensors naively means a visible seam where the two clips' colors and motion disagree. VideoAudioMergeAB is the pack's two-clip assembler: it crossfades A into B over a configurable overlap with real easing, merges their audio with the same fade envelope, and spits out a single image sequence plus a sync'd AUDIO track. If your Wan workflow ends in "two clips, one save," this is the seam-remover.
It's from siraxe/ComfyUI-WanVideoWrapper_QQ, the "(QQ)" Wan pack - one of the "Video Merge ABC"-family nodes that cover the two- and three-clip cases.
How it works
The merge math is a weighted blend across an overlap zone. Overlap_A and Overlap_B define the crossfade region (the node safely clamps them to available frames), and easing_type (linear, ease_in, ease_out, ease_in_out) shapes how opacity ramps across it, with easing_clamp controlling how much of the curve is used. Frames before the overlap come from A untouched, frames after from B - the only blended frames are the seam.
Two behaviors worth knowing. First, a single-frame A gets special treatment: it's treated as a title/still that fades out over B's opening frames, so you can overlay a logo or a starting frame without writing merge logic yourself. Second, cut_mode - when on, it does a hard cut with zero audio processing, which is your "just concatenate, I'll handle the polish" escape hatch. In normal mode, audio follows the same envelope: A's audio fades out, B's fades in, with optional normalize_volume and a b_volume_gain multiplier (0–2) if B needs to sit louder. Audio is blended to a common sample rate and channel count on CPU to avoid device-mismatch crashes.
The debug output carries a dict with the frame counts, overlap, and sample rate used - handy when a merge comes out shorter than expected.
Inputs and outputs that matter
image_A/image_B- the two clips to merge (order matters: A is first).Overlap_A/Overlap_B- crossfade length in frames (default 24 each).easing_type+easing_clamp- the fade curve.audio_A/audio_B(optional) - AUDIO tensors; without them you get silent output.cut_mode- hard cut, no audio work.video_fps- used for audio timing (default 24).
Outputs: images (IMAGE), audio (AUDIO), debug (DEBUG).
Installation
cd ComfyUI/custom_nodes
git clone https://github.com/siraxe/ComfyUI-WanVideoWrapper_QQ.git
Restart ComfyUI (or ComfyUI Manager → "WanVideoWrapper_QQ"). No extra Python deps - pure torch; the pack's requirements.txt is empty. After the v1.3.4 rename to ComfyUI-SA-Nodes-QQ, delete any old wanwrapper_qq folder.
Common issues
The most common surprise: an overlap larger than half a clip's frames. The node clamps to safe values, but if both clips are short and your overlap is huge, you're blending most of the video and it turns to mush - keep overlaps a fraction of the shorter clip. Audio drift is the other one: if the audio you feed in isn't roughly the same duration as its video clip, the merge truncates to fit, so trim tracks first. And remember b_volume_gain only helps B - there's no matching A-gain, so a quiet A means normalizing fights you; turn off normalize_volume if you want true levels preserved.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| image_A | IMAGE | — | |
| image_B | IMAGE | — | |
| Overlap_A | INT | 240–1000 | — |
| Overlap_B | INT | 240–1000 | — |
| video_fps | FLOAT | 24.01–120 | — |
| easing_clamp | FLOAT | 0.50-1–2 | — |
| easing_type | COMBO | 4 options: linear, ease_in, ease_out, ease_in_out | |
| normalize_volume | BOOLEAN | true | — |
| b_volume_gain | FLOAT | 1.000–2 | — |
| cut_mode | BOOLEAN | false | — |
| audio_Aopt | AUDIO | — | |
| audio_Bopt | AUDIO | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| audio | AUDIO | — |
| debug | DEBUG | — |