Nodes/Realtime LoRA Trainer/LoRA Loader (Scheduled)
ComfyUI Node

LoRA Loader (Scheduled)

Make a LoRA fade in or out mid-generation

By shootthesound·Created 8 months ago·Updated 2 months ago· 538
LoRA Loader (Scheduled)
  • model
  • positive
  • negative
  • model
  • positive
  • negative
  • schedule_out
  • schedule_inv
lora_name
strength1.00
schedule_presetCustom
strength_schedule
lora_path_opt
schedule_in

A LoRA at a flat strength for every step is a blunt instrument. A structure LoRA is most useful early, when composition is being decided; a detail LoRA earns its keep late, once the image has settled. This node lets a LoRA's strength change over the course of generation instead of sitting at one number the whole time - and it works with any LoRA, not just ones from this pack.

What it is and why you'd reach for it

This is the standalone utility node in ShootTheSound/comfyUI-Realtime-Lora - same strength-scheduling engine as the pack's V2 analyzer/loader nodes, but on its own, so you can apply it to a LoRA for an architecture the pack doesn't have a dedicated selective loader for, or just when you don't need block-level control and only want the fade behavior.

The classic use is crossfading two LoRAs: a structure LoRA that's strong at the start and fades out, handing off to a detail LoRA that fades in as it finishes. You could approximate this by hand with multiple KSampler (Advanced) stages and manual strength changes between them, but that's fragile and hard to iterate on. This node makes it one dropdown plus a formula.

How it works

The schedule is a step:strength list, comma-separated, where the step values are 0-1 fractions of the generation rather than raw step counts - 0:0, 1:1 means off at the start and full strength by the end, linearly interpolated in between. 0:1, 0.5:1, 0.6:0, 1:0 holds full strength for the first half, then cuts off. There are 40+ named presets covering fades, ease curves, bell curves (peak in the middle), the "structure LoRA" and "detail LoRA" shaped curves by name, step functions, pulses, and inverted versions of all of them - so hand-writing the syntax is rarely necessary.

The crossfade trick: connect one loader's schedule_inv output (the mathematical inverse of its own schedule - 1 minus the strength at every keyframe) into a second Scheduled LoRA Loader's schedule_in input. Set loader A to "Linear Out (1→0)" and loader B automatically receives the complementary "0:0, 1:1" fade-in, so A fades out exactly as B fades in without you hand-syncing two curves.

Inputs and outputs that matter

  • model / positive / negative - a normal LoRA loader's pipeline inputs, all three patched (conditioning gets touched because the schedule is implemented as generation hooks, not a static patch).
  • lora_name, strength - the LoRA and its baseline strength before the schedule modifies it.
  • schedule_preset - pick from 40+ named curves, or leave on Custom to type your own into strength_schedule.
  • lora_path_opt (optional) - a direct path input that overrides the dropdown, the usual pattern for chaining off one of the pack's trainer nodes.
  • schedule_in (optional) - receive a schedule from an upstream node (typically another Scheduled LoRA Loader's schedule_inv) instead of setting your own.
  • Outputs: model, positive, negative (patched, wire to your sampler), schedule_out (the active schedule string, for chaining to a downstream node), schedule_inv (the inverted schedule - 1 minus strength at each keyframe - built for the crossfade pattern above).

Installing it

ComfyUI Manager: search "Realtime LoRA Trainer." Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/ShootTheSound/comfyUI-Realtime-Lora

Restart ComfyUI. Works immediately, no training backend or model download needed - this is a pure loader/patcher node.

Troubleshooting

Schedule seems ignored, strength stays flat. Make sure schedule_preset isn't left on a fixed value like "Constant 1.0" by accident, and that strength_schedule (if you're hand-writing one) uses step:strength pairs with steps as 0-1 fractions, not raw step numbers - 0,10:1 is not the same as 0:0,1:1.

Crossfade isn't syncing between two LoRAs. Confirm schedule_inv from the first loader is actually wired into schedule_in on the second, and that the second loader's own schedule_preset isn't overriding the incoming schedule - an explicitly set preset on the receiving node takes precedence over what's piped in.

lora_name is empty. Only LoRAs already in your loras folder show up; use lora_path_opt for one you just trained or that lives elsewhere.

Categoryloaders/lora

Inputs (9)

NameTypeDefaultDescription
modelMODEL
positiveCONDITIONINGPositive conditioning from CLIP encode
negativeCONDITIONINGNegative conditioning from CLIP encode
lora_nameCOMBOLoRA file to load
strengthFLOAT1.00-10–10LoRA strength (ignored when using schedule)
schedule_presetCOMBOCustomSelect a preset schedule (populates the text field)
strength_scheduleSTRINGStrength schedule: 0:.2,.5:.8,1:1.0 (step:strength pairs)
lora_path_optoptSTRINGOptional: override the LoRA dropdown with a file path (e.g. from a LoRA-manager / lora-stack node that outputs a path).
schedule_inoptSTRINGSchedule input from another node (overrides preset/text field)

Outputs (5)

NameTypeDescription
modelMODELModel with LoRA applied.
positiveCONDITIONINGPositive conditioning (with hooks if using schedule).
negativeCONDITIONINGNegative conditioning (with hooks if using schedule).
schedule_outSTRINGActive schedule string (for chaining to other loaders).
schedule_invSTRINGInverted schedule (1 - strength at each keyframe, for complementary LoRAs).