Audio IPAdapter Transitions
Beat-synced image switching for IPAdapter, without the jank
- images
- peaks_weights
- image_1
- weights
- image_2
- weights_invert
- graph_transition
If you've seen the demo videos for ComfyUI_Yvann-Nodes - the dancer, the morphing portraits, the style that shifts exactly when the bass drops - this is the node doing the heavy lifting. It takes a set of reference images and a peak list from Audio Peaks Detection, and it produces per-frame images and weights that you feed into two IPAdapter nodes. The result: your video's style jumps from image A to image B right on the beat, with a blend instead of a hard cut.
The trick: two IPAdapter branches, inverted weights
This is the part people get wrong on the first try, so pay attention. The node doesn't apply IPAdapter itself - it has no idea how to. It outputs:
- image_1 and weights - wire these into your first IPAdapter Batch (image + weight).
- image_2 and weights_invert - wire these into a second IPAdapter Batch.
- graph_transition - a preview of the blend curve.
Between peaks, weights sits at its minimum and weights_invert at its maximum, so IPAdapter branch 1 is nearly silent and branch 2 drives the look. As the next peak approaches, weights ramps up and weights_invert ramps down - image A fades out, image B fades in, smoothly, on the beat. Two samplers (or two stages) each applying one reference, crossfaded by the weight curves. That's the whole architecture, and it's why you need IPAdapter installed and two of its nodes in the graph.
What you set
- images - the batch of reference images. Fewer images than peaks? They cycle, so image 0, 1, 2, 0, 1... You need at least two.
- peaks_weights - from Audio Peaks Detection. The node counts
1s as switch triggers. - transition_mode -
linear,ease_in_out,ease_in, orease_out. ease_in_out (smooth s-curve) is the one that looks cinematic; linear is snappier and more "music video." Your call. - transition_length (default 5) - frames the blend spans, centered on the peak. Longer = dreamier dissolves, shorter = harder hits.
- min_IPA_weight / max_IPA_weight - the IPAdapter strength range across the blend. Defaults 0→1 are sensible; you can push max above 1 (up to 2) to really lean on the reference, which some styles want.
Wiring it up
The pattern, per the pack's own docs: image_1 + weights into the first IPAdapter Batch, image_2 + weights_invert into the second. Both branches then condition your sampler, and the inverted weights are what make the crossfade work - connect them backwards and you'll get one style fighting the other instead of a clean transition.
IP-Adapter itself (Tencent's image-prompting adapter, maintained in ComfyUI by cubiq) is the ecosystem standard for exactly this job - style and composition from a reference image, no LoRA training. This node just adds the scheduling layer on top, so the whole thing stays lightweight: the reference images are never upscaled or processed, only their embeddings are re-weighted per frame.
Gotchas
The most common failure is feeding it peaks that are too dense - every kick drum becomes a transition, and you get seizure-inducing flicker. Raise the threshold on Audio Peaks Detection (or its min_peaks_distance) until transitions land on musical phrases, not individual hits. And remember it's two IPAdapter instances doing the work, so if only one look ever appears, check the inverted branch - weights_invert missing or wired wrong is the classic silent bug.
Same install as the rest of the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/yvann-ba/ComfyUI_Yvann-Nodes
plus ComfyUI Manager for IPAdapter if you don't have it. This is the most "wow" node in the pack, and it's also the one that teaches you how IPAdapter weighting really works. Worth the setup.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Batch of images for transitions (loops if fewer than peaks) | |
| peaks_weights | FLOATS | Peak weights from Audio Peaks Detection node | |
| transition_mode | COMBO | linear | Blending curve between images |
| transition_length | INT | 51–100 | Number of frames for each transition blend |
| min_IPA_weight | FLOAT | 0.000–1.99 | Minimum IPAdapter weight per frame |
| max_IPA_weight | FLOAT | 1.000.1–2 | Maximum IPAdapter weight per frame |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| image_1 | IMAGE | — |
| weights | FLOAT | — |
| image_2 | IMAGE | — |
| weights_invert | FLOAT | — |
| graph_transition | IMAGE | — |