ComfyUI Node

IC Curve Preview

Check your IC-LoRA strength ramp before you burn a long render

By Burgstall-labs·Created 2 months ago·Updated 2 months ago· 3
IC Curve Preview
  • curve
  • video_latent
  • preview
num_latent_frames0
rendered_frames0
width768
height320

What it is

IC Curve Preview is the optional QA node in the Gradual-IC-LoRA pack - the one you add when you're about to commit to a long LTX-2.3 render and you want to see what strength your IC-LoRA will actually get at each frame before the sampler chews through it. It renders the resolved per-frame strength curve as an IMAGE, drawn in pure Pillow. No matplotlib, no extra install; it just works in any ComfyUI.

It's the smallest node in the pack for a reason: the curve editor already shows you the shape you drew, but it shows it on a normalized 0–1 timeline. This node shows the sampled result - the actual per-latent-frame values the Curve Apply node will feed the model. Those two things differ, because LTX's 8× temporal compression means one latent frame covers 8 rendered frames, and the pack resamples your curve onto that latent-frame grid. That's the gap worth checking before a 15-minute render.

How it works

You feed it the same IC_CURVE you're wiring into IC-LoRA Curve Apply, and it resolves the output frame count exactly the way Curve Apply does: from video_latent's temporal dim, or from your explicit num_latent_frames / rendered_frames (via the LTX 8n+1 rule, latent_frames = (rendered_frames − 1) / 8 + 1). It then resamples the curve using the same Python resampler the apply node uses, and draws the plot:

  • a y=0 guide line (dark red) and a y=1 guide line (green), so you can see at a glance where the ramp crosses zero or full strength;
  • rendered-frame tick marks along the x-axis;
  • the strength curve as a polyline with a dot per latent frame;
  • a summary label: latent frames, rendered frames, and the min..max strength actually reached.

Because it uses the apply node's own resample code, what you see here is authoritative - if the sampled curve has a weird step or clamps somewhere you didn't intend, that's what the model will receive.

Inputs and outputs

Only a couple matter:

  • curve (required) - the IC_CURVE you're about to use.
  • video_latent (optional) - wire in the same latent you'll feed Curve Apply, and the node auto-derives the frame count. This is the one to actually wire if you're doing a sanity check.
  • num_latent_frames / rendered_frames (optional) - explicit overrides if you're not wiring a latent; 0 means auto.
  • width (768) / height (320) - just the plot size in pixels. Defaults are fine.

The single output, preview (IMAGE), is for looking at - hook it to a preview or save node, or just let ComfyUI show it.

Install

Same as the rest of the pack - 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; the preview is deliberately pure-PIL so it runs anywhere the pack runs.

Common issues

  • Wrong frame count in the preview. If the x-axis tick marks or the rendered frames label don't match the clip you're about to render, that's a warning sign your latent or your rendered_frames assumption is off - and Curve Apply will hit the same mismatch, so catching it here saves you a hard-fail error later.
  • "The preview shows values above 1.0, is that a bug?" No. The curve editor's default range goes to +2.0 on purpose - spatially-drastic IC-LoRAs need peak strengths past 1.0 to overcome LTX's temporal-consistency dilution, and the preview's y-range auto-fits whatever the curve contains.
  • It's a preview, not a gate. It only renders the strength schedule; it won't catch token-layout problems (that's Curve Apply's hard-fail check) or tell you whether the ramp will actually read well on your subject. For the latter, the pack's findings recommend a quick low-frame test render before the long one.
CategoryGradual-IC-LoRA

Inputs (6)

NameTypeDefaultDescription
curveIC_CURVE
video_latentoptLATENT
num_latent_framesoptINT00–100000
rendered_framesoptINT00–100000
widthoptINT768128–4096
heightoptINT320128–4096

Outputs (1)

NameTypeDescription
previewIMAGE