IP-Adapter Configuration ποΈπ ’π
The one dial that actually steers Steerable Motion
- configuration
The Steerable Motion README shows two videos made from the same pair of images, where changing one setting produces completely different motion - one glidey, one snappy. That one setting lives in IP-Adapter Configuration ποΈπ ’π . This node is the steering wheel for the AnimateDiff side of the pack. It doesn't generate anything itself; it packages up how IP-Adapter should behave on each keyframe, so the video knows how long to hold each image, how hard to hold it, and how to hand off to the next one.
What it is and why you'd reach for it
IP-Adapter is how Steerable Motion "travels" between images: each keyframe's image embedding is injected through its own cross-attention path, and the weight schedule decides who's in control at any moment. The IP-Adapter panel in the KB puts it bluntly - it's the 100MB adapter that made image prompting cheap, no LoRA training needed. This node is a way to tune that injection per run without touching a complex Apply node.
It outputs a single configuration of type ADVANCED_IPA_SETTINGS, and you wire that into BatchCreativeInterpolation's two optional inputs, base_ipa_advanced_settings and detail_ipa_advanced_settings. Leave those disconnected and the pack uses its own sensible defaults; plug this node in and you're the one driving.
The inputs that matter
Nine fields, and honestly you'll touch maybe five. In rough order of "will change your video":
- ipa_weight (0β2, default 1): overall strength. This is the master volume. Below ~0.7 the keyframe stops steering and the video wanders; above 1.2 you're basically pinning the frame in place.
- ipa_starts_at / ipa_ends_at (0β1): where in the denoise the weight ramps in and out. These control when the image influence applies - later starts mean freer early motion.
- ipa_weight_type (9 options): the curve. linear, ease in, ease out, ease in-out, reverse in-out, and the descriptive four: weak input, weak output, weak middle, strong middle. The middle ones are where the "different motion" magic happens - weak middle loosens the grip between keyframes (more motion), strong middle keeps it pinned.
- ipa_embeds_scaling: how the image embedding is injected - V only, K+V, K+V w/ C penalty, K+mean(V) w/ C penalty. V only is the safe default; K+V mixes in key info but can fight your prompt.
- ipa_noise_strength (default 0.3), use_image_for_noise, type_of_noise (fade/dissolve/gaussian/shuffle), noise_blur: this cluster builds a negative noise image that IP-Adapter uses as a negative embedding. It sounds exotic but it's the trick that stops the video from drifting toward whatever the keyframe image "wants" instead of following your prompt.
Mechanism, in one breath
The node is a pure pass-through - it packages your values into a dict and hands them to BatchCreativeInterpolation, which feeds them into the bundled IPAdapter_plus code (weight schedule, start/end, embeds scaling) and, if ipa_noise_strength is above zero, generates the noise negative via IPAdapterNoise before applying.
Install and the honest part
Same install as the whole pack: Manager β search "Steerable Motion", or git clone https://github.com/banodoco/steerable-motion into ComfyUI/custom_nodes/ and restart. The repo's requirements.txt is just matplotlib - the IP-Adapter machinery is vendored inside the pack - but the workflows need an IP-Adapter model and a CLIP Vision model, both findable through Manager.
The honest part: people call this pack complex, and they're right. Change one field at a time and watch the weight curve on BatchCreativeInterpolation's GRAPH output. If your video looks like a cross-fade between stills with no motion at all, your IPA is holding too hard - drop the weight, move ipa_ends_at earlier, or switch ipa_weight_type to weak middle. That's the whole art of Steerable Motion, and this node is where you practice it.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| ipa_starts_at | FLOAT | 0.000β1 | β |
| ipa_ends_at | FLOAT | 1.000β1 | β |
| ipa_weight_type | COMBO | 9 options: linear, ease in, ease out, ease in-out, reverse in-out, weak input, +3 | |
| ipa_weight | FLOAT | 1.000β2 | β |
| ipa_embeds_scaling | COMBO | 4 options: V only, K+V, K+V w/ C penalty, K+mean(V) w/ C penalty | |
| ipa_noise_strength | FLOAT | 0.300β1 | β |
| use_image_for_noise | BOOLEAN | false | β |
| type_of_noise | COMBO | 4 options: fade, dissolve, gaussian, shuffle | |
| noise_blur | INT | 00β32 | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| configuration | ADVANCED_IPA_SETTINGS | β |