ComfyUI Node

AD_sch_IPA

Schedule IPAdapter strength across an animation instead of holding one weight

By cardenluoĀ·Created 2 years agoĀ·Updated 18 days agoĀ· 309
AD_sch_IPA
  • image
  • ipa_stack
  • ipa_stack
ā—„preset▾►
ā—„weight1.00ā–ŗ
ā—„embeds_scaling▾►
ā—„points_string0:(0.0), 7:(1.0), 15:(0.0) ā–ŗ
ā—„invertfalseā–ŗ
ā—„frames16ā–ŗ
ā—„interpolation▾►

Normal IPAdapter usage locks you into one weight for the whole generation. That's fine for a still image, but on an animation it means your reference image's influence never lets up - no ramping in, no fading out, no pulsing to match a beat. AD_sch_IPA fixes that: it's a keyframe-scheduled wrapper around IPAdapter, letting you write a curve for how strongly the reference image should push the generation at each frame, exactly the "IPA scheduling" the pack's README lists as part of its General Control AD Stack.

Worth knowing before you touch this node: its preset, weight, and embeds_scaling options are drawn straight from the standard IPAdapter Plus node's own vocabulary (STANDARD, LIGHT - SD1.5 only, VIT-G, PLUS, PLUS FACE, FULL FACE - SD1.5 only, plus the V-only / K+V / K+V-with-C-penalty embed-scaling modes) - so if you've used IPAdapter before, the settings here will already be familiar, just wrapped in a scheduling layer on top. A quick reminder on the tool underneath: IPAdapter conditions on what a reference image looks like, not where things go - pair it with spatial control (ControlNet, a guide image) if you also need to pin composition, not just style or identity.

How it works

points_string defines a weight curve over the animation using the same frame:(value) syntax as the pack's other scheduling nodes, frames sets the total window, and easing_type governs how the curve moves between points. The result gets packaged into an ipa_stack object - the pack's own stacking format - which downstream nodes in the "General Control AD Stack" consume alongside the actual model conditioning.

The inputs and outputs that matter

  • preset - which IPAdapter variant to schedule: STANDARD, LIGHT - SD1.5 only, VIT-G, PLUS, PLUS FACE, or FULL FACE - SD1.5 only. Match this to your base model family - the SD1.5-only options won't behave on SDXL.
  • weight (default 1, range -1 to 5) - peak strength; your points_string curve scales around this.
  • embeds_scaling - V only, K+V, K+V w/ C penalty, or K+mean(V) w/ C penalty. Leave at a sensible default unless you know you need a specific one - this is an internal tuning knob more than a day-to-day setting.
  • points_string (multiline STRING, default 0:(0.0),\n7:(1.0),\n15:(0.0)\n) - your weight-over-time schedule: ramp up, hold, ramp down, or whatever shape you write.
  • invert (BOOLEAN, default false) - flips the curve.
  • frames (default 16, range 2–255) - total frames the schedule covers.
  • interpolation - linear, ease_in, ease_out, or ease_in_out for how the curve moves between your defined points.
  • image (optional, IMAGE) - your reference image.
  • ipa_stack (optional, IPA_STACK) - chain multiple AD_sch_IPA nodes together to stack several reference images, each with its own schedule.

Output: ipa_stack (IPA_STACK) - feed into whatever downstream node in the pack's AD Stack consumes it.

How to install it

Via ComfyUI Manager: search "ComfyUI-Apt_Preset". Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/cardenluo/ComfyUI-Apt_Preset.git

Then install.bat (Windows) or pip install -r requirements.txt (Linux/Mac), and restart. This node itself doesn't load IPAdapter model files - that happens elsewhere in the pack's stack - but you still need the underlying IPAdapter checkpoints and the matching CLIP vision encoder in your ComfyUI model folders for the preset you pick to actually work, same as any standard IPAdapter setup.

Common issues & troubleshooting

Reference influence stays constant instead of ramping. Check points_string isn't accidentally flat (e.g., all zeros or all the same value) - a schedule with no variation will behave just like a fixed weight.

FULL FACE - SD1.5 only or LIGHT - SD1.5 only doing nothing useful on an SDXL or newer base model. Those presets are explicitly SD1.5-only per their own labels - pick PLUS, PLUS FACE, STANDARD, or VIT-G for anything else.

Output looks soft or loses fine detail. IPAdapter conditioning generally trades detail for reference fidelity the more of the generation it influences - if quality is dropping, try scheduling the weight to peak briefly rather than holding high for the whole clip, which is exactly the kind of thing this node exists to let you do instead of accepting a constant high weight.

Stacking multiple references and losing track of which is which. Chain them through ipa_stack, but keep each node's points_string and preset distinct and documented in your workflow - nothing here labels the stack for you visually beyond the graph itself.

CategoryApt_Preset/AD/😺backup

Inputs (9)

NameTypeDefaultDescription
presetCOMBO6 options: STANDARD (medium strength), LIGHT - SD1.5 only (low strength), VIT-G (medium strength), PLUS (high strength), PLUS FACE (portraits), FULL FACE - SD1.5 only (portraits stronger)
weightFLOAT1.00-1–5—
embeds_scalingCOMBO4 options: V only, K+V, K+V w/ C penalty, K+mean(V) w/ C penalty
points_stringSTRING0:(0.0), 7:(1.0), 15:(0.0) —
invertBOOLEANfalse—
framesINT162–255—
interpolationCOMBO4 options: linear, ease_in, ease_out, ease_in_out
imageoptIMAGE—
ipa_stackoptIPA_STACK—

Outputs (1)

NameTypeDescription
ipa_stackIPA_STACK—