Nodes/WhiteRabbit/๐Ÿ‡ RIFE VFI Custom Timing
ComfyUI Node

๐Ÿ‡ RIFE VFI Custom Timing

Speed ramps, easing, and exact timing โ€” RIFE in-betweens you actually place

By Artificial-SweetenerยทCreated about a year agoยทUpdated about a month agoยท 82
๐Ÿ‡ RIFE VFI Custom Timing
  • frames
  • optional_interpolation_states
  • IMAGE
โ—„ckpt_namerife47.pthโ–บ
โ—„multiplier2โ–บ
โ—„t_modelinearโ–บ
โ—„t_gamma1.00โ–บ
โ—„t_min0.000โ–บ
โ—„t_max1.000โ–บ
โ—„scale_factor1.00โ–บ
โ—„ensembletrueโ–บ
โ—„clear_cache_after_n_frames10โ–บ
โ—„custom_t_list_csvโ–บ

The plain interpolate-by-multiple node is great until you realize every in-between frame is landing at the same evenly spaced spot - and real motion isn't even. RIFE VFI Custom Timing is the same interpolation engine, but you get to say where each new frame lands between the source pair. That one change turns a "smooth it out" tool into a motion-design tool: ease in, ease out, clamp the range so motion never sticks too close to a frame, or hand it an exact list of blend positions and get frame-perfect control.

It's the node that makes slow-motion ramps, speed-ups, and - the pack's signature move - seamless video loops possible. WhiteRabbit was built around looping video, and custom timing is the seam that holds a loop together: instead of letting a transition drift through frames at uniform speed, you pin where each synthesized frame lands so the loop's lastโ†’first jump feels like a normal step.

How it works

For every pair of frames, the node generates multiplier in-between frames, and a timing function maps each one to a position t between 0 (the first frame) and 1 (the next). The t_mode control picks the function:

  • linear - the default, evenly spaced.
  • gamma_in / gamma_out / gamma_in_out - easing modes where t_gamma sets the strength. Higher gamma = more easing. Handy for ramps: ease-in feels like acceleration, ease-out feels like settling.
  • bounded_linear - clamps the positions to t_minโ€“t_max. This is the anti-freeze tool: if frames keep sticking at the same spot, tighten the range so motion never sits too close to a source frame.
  • custom_list - ignores the schedule entirely and reads exact positions from the custom_t_list_csv field, a comma-separated list like 0.18,0.41,0.66.

The whole point of custom_list is that you don't have to invent the list yourself - the pack's RIFE Seam Timing Analyzer computes one for you and hands it over ready to paste.

The inputs that matter

  • frames - your clip.
  • multiplier - how many new frames per pair. 0 is a passthrough (no new frames), which is genuinely useful for previewing timing without burning GPU time.
  • t_mode and t_gamma - the easing controls above.
  • custom_t_list_csv - the override list. Takes comma- or space-separated values in 0โ€“1, clamps and sorts them for you.
  • optional_interpolation_states - skip in-between frames for selected pairs (scene cuts) while keeping the timing of the rest.
  • ckpt_name - RIFE 4.7/4.9 default, auto-downloaded into models/frame_interpolation/ on first use; scale_factor and ensemble are the usual quality/speed pair.

Installing it

WhiteRabbit is a one-time install for all 14 of its nodes:

cd ComfyUI/custom_nodes
git clone https://github.com/Artificial-Sweetener/comfyui-WhiteRabbit
cd comfyui-WhiteRabbit
python -m pip install -r requirements.txt

Or hit ComfyUI Manager โ†’ search "WhiteRabbit" โ†’ install, then restart. The pack's only extra pip dependency is torchlanc; it's written for ComfyUI's v3 node API, so keep ComfyUI current.

Where people get burned

  • Empty or wrong custom_list. If your list has more values than multiplier creates, extras get ignored; if it's empty, custom_list falls back to the schedule. Paste the analyzer's output verbatim and you're fine.
  • t_gamma at the default of 1. That's basically linear. You need to raise it (2โ€“4 is a good starting range) before you'll see easing.
  • Clamping yourself into a corner. bounded_linear with a tight t_min/t_max produces a speed bump you may not want - it's there to prevent frame-sticking, not to create motion.

For a one-off smooth-out job, use the simpler multiply node. For anything where timing is the point - loops, ramps, beats - this is the one you'll actually reach for.

Categoryvideo utils

Inputs (12)

NameTypeDefaultDescription
ckpt_nameCOMBOrife47.pthChoose RIFE 4.7, 4.9, 4.25, or 4.26 (for interpolation). Missing catalog models download automatically into ComfyUI's frame_interpolation model folder.
framesIMAGEYour input clip: one image per frame.
multiplierINT2How many new frames to create between each pair. 0 = passthrough (no new frames).
t_modeCOMBOlinearHow to spread the new frames over time: straight line, ease in/out, limit the range, or provide your own list.
t_gammaFLOAT1.000.05โ€“10Easing strength for gamma modes. Higher = more easing.
t_minFLOAT0.0000โ€“1Earliest allowed position between the two frames (0 = exactly the first frame). Use with bounded_linear.
t_maxFLOAT1.0000โ€“1Latest allowed position between the two frames (1 = exactly the next frame). Use with bounded_linear.
scale_factorFLOAT1.000.25โ€“4Quality vs speed. 1.0 recommended. Lower = faster/softer; higher = sharper/slower.
ensembleBOOLEANtrueBlend forward & backward predictions to reduce artifacts (slower).
clear_cache_after_n_framesINT100โ€“1000Free up GPU memory every N generated frames (advanced). Set 0 to never.
custom_t_list_csvoptSTRINGExact positions between the two frames (0โ€“1), comma-separated, e.g. 0.18,0.41,0.66. Overrides the schedule.
optional_interpolation_statesoptINTERPOLATION_STATESDonโ€™t create in-between frames for selected frame pairs (e.g., scene cuts). Timing stays the same.

Outputs (1)

NameTypeDescription
IMAGEIMAGEโ€”