Nodes/ComfyUI-Gradual-IC-LoRA/IC Strength Curve
ComfyUI Node

IC Strength Curve

IC Strength Curve is the input side of the gradual-IC-LoRA pack

By Burgstall-labs·Created 2 months ago·Updated 2 months ago· 3
IC Strength Curve
    • curve
    curve_data{"keyframes": [[0.0, 1.0], [1.0, 1.0]], "mode": "monotone", "y_min": -0.5, "y_max": 2.0, "version": 1}
    preset_fallback(use curve_data)
    y_min-0.5
    y_max2.0

    What it is

    IC Strength Curve is the drawing board for the Gradual-IC-LoRA pack. If IC-LoRA Curve Apply is the engine, this is the steering wheel: a little canvas widget where you sketch how strong an LTX-2.3 IC-LoRA's effect should be at every point in the clip, and it emits the IC_CURVE that Curve Apply samples from. Instead of "strength = 0.8 everywhere", you get "starts at 0, climbs through the first third, holds near 1.2, then eases back to nothing." That's a normal thing to want once you've played with LTX's control LoRAs for a while - an effect that shows up in a single render rather than a hard cut between two constant-strength clips.

    The X axis is normalised clip time (0 to 1); the Y axis is the strength multiplier, default range −0.5 to +2.0, adjustable with y_min/y_max.

    How it works

    The heavy lifting lives in a JavaScript canvas widget (js/ic_curve_editor.js), which writes the curve state as a JSON string into a hidden STRING widget - that hidden widget is the curve_data input you see in the node. The Python side parses, validates, and normalizes it into a plain-dict IC_CURVE that flows through the graph and serializes cleanly into the workflow JSON and the API. Resampling the curve to actual frames happens downstream in IC-LoRA Curve Apply, so this node never needs to know your frame count - keep it dumb and portable.

    Two design touches worth noting. A freshly added node defaults to a constant-1.0 curve, so it's a no-op until you actually edit it - no surprise "why is my video different" moments. And the default interpolation is monotone (Fritsch–Carlson cubic), which never overshoots past your keyframe values - important when your curve is a strength you're clamping between 0 and 1.5.

    Inputs and outputs

    Only three inputs to worry about, and for interactive use you mostly ignore them:

    • curve_data - the JSON string the canvas widget writes. Hand-editable if you know the format; treat it as read-only otherwise.
    • preset_fallback - the escape hatch for headless/API use where the canvas can't render: constant, linear, ease_in, or plateau_step, instead of drawing.
    • y_min / y_max - the visible Y range on the canvas. Default −0.5..+2.0 is a good start; negative values are there so you can actually pull an effect off mid-clip.

    The single output, curve (IC_CURVE), wires straight into the curve input of IC-LoRA Curve Apply.

    Editing

    Click empty space to add a keyframe, drag to move it, right-click or double-click to delete (minimum two kept). Click the curve: chip to cycle interpolation: monotone → catmull → linear (catmull overshoots between keyframes; linear is linear). Presets under the curve give you constant, linear, ease in, and plateau step - the ease in and plateau step shapes are what the pack's own findings docs recommend for clean ramps on LTX, since the model tracks smooth S-curves most faithfully.

    Install

    Via ComfyUI Manager (search "Gradual-IC-LoRA"), or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Burgstall-labs/ComfyUI-Gradual-IC-LoRA
    

    Then restart ComfyUI. No extra Python deps and nothing to download - the whole pack runs on what ComfyUI ships, and this node in particular is just a canvas plus JSON. You do need LTX-2.3 and an IC-LoRA of your own for the curve to mean anything.

    Common issues

    • Canvas won't show up / you're driving it from an API. That's exactly what preset_fallback is for - pick a preset and the node builds the curve without the widget. The author's docs call this out explicitly for headless use.
    • Your ramp reads weak. That's usually not this node - it's LTX's temporal-consistency prior pulling spatially-drastic effects toward the average. Push peak values or strength_global into the 1.5–2.5 range; style and colour ramps track at 1.0 fine.
    • Hand-writing curve_data JSON. Keep keyframes sorted ascending by t, values inside the editor range, and use "mode" of monotone, catmull, or linear. If in doubt, prefer preset_fallback.
    CategoryGradual-IC-LoRA

    Inputs (4)

    NameTypeDefaultDescription
    curve_dataSTRING{"keyframes": [[0.0, 1.0], [1.0, 1.0]], "mode": "monotone", "y_min": -0.5, "y_max": 2.0, "version": 1}
    preset_fallbackoptCOMBO(use curve_data)5 options: (use curve_data), constant, linear, ease_in, plateau_step
    y_minoptFLOAT-0.5-10–10
    y_maxoptFLOAT2.0-10–10

    Outputs (1)

    NameTypeDescription
    curveIC_CURVE