🐇 RIFE Seam Timing Analyzer
It solves the math so your loop seam stops looking like a jump cut
- full_clip
- t_list_csv
- multiplier
A seamless video loop fails or succeeds in a single instant: the jump from the last frame back to the first. Everything else is just footage. RIFE Seam Timing Analyzer exists to make that instant invisible. It looks at the real motion in your clip, then solves for the exact set of blend positions - the t values between 0 and 1 - that make the last→first transition feel like a completely ordinary step in the motion, instead of a hiccup.
This is the pack's hidden brain. RIFE VFI Custom Timing will happily place frames anywhere you tell it to; this node tells it where. The two were designed as a pair, and the whole loop workflow reads like a production line: Prepare Loop Frames isolates the seam, this analyzer computes the timing, Custom Timing renders the seam, Assemble Loop Frames stitches it back on.
How it works
The node takes your full clip and measures how much motion actually happens in it. You tell it which motion to treat as "normal" - the first two frames (use_first_two), the last two (use_last_two), or the median step across the whole clip (use_global_median, which shrugs off outliers but needs at least 3 frames). Then it renders candidate seam frames with RIFE and solves, using an iterative search (calibrate_iters, default 12) for a set of t values whose motion matches that reference. calibrate_metric picks the scoring function - MSE is more sensitive, L1 more forgiving.
It's a probe, not a render: the model here is "used only to test candidate timings," per the node's own description, and the output is data, not frames.
The inputs that matter
- full_clip - your actual footage (≥2 frames). Real motion in, good timing out.
- multiplier - how many new frames you plan to create at the seam. Set it to match the Custom Timing node you'll feed the result into; the output
multiplierechoes it back so you can't lose track. - use_first_two / use_last_two / use_global_median - what counts as "normal" motion. Defaults use the first and last two pairs, which is a sensible baseline.
- t_min / t_max - the allowed range for seam blend points. Keep
t_maxbelow 1.0 (default 0.96) so the seam doesn't stick to the first frame. - auto_tmax (optional) - pushes the upper limit closer to the next frame to hit the target motion step, with a safety
t_capjust shy of 1.0. Enable it when the fixed range can't match your clip's motion.
Using it
Feed the t_list_csv output straight into RIFE VFI Custom Timing's custom_t_list_csv, and match the multiplier values. That's the whole integration - no parsing, no hand-copying of 30 decimals.
Installing it
Standard WhiteRabbit install (once for the whole pack):
cd ComfyUI/custom_nodes
git clone https://github.com/Artificial-Sweetener/comfyui-WhiteRabbit
cd comfyui-WhiteRabbit
python -m pip install -r requirements.txt
or ComfyUI Manager → "WhiteRabbit" → install → restart. RIFE checkpoints auto-download into models/frame_interpolation/ on first use.
Where people get burned
- The multiplier must match. If the analyzer solves for 4 seam frames but Custom Timing is set to 2, you're not using the timing it computed. Match them.
- A clip that's mostly static. The analyzer needs motion to calibrate against; a locked-off shot gives it nothing to match.
use_global_medianplusauto_tmaxhelps, but a clip with zero motion can't produce a meaningful ramp. - It's a search, not a render. Higher
calibrate_itersgives a tighter match but costs time. Start at the default.
For the person who wants the loop to just work, this node is the difference between "pretty close" and "you can't find the seam." It's the one I'd miss most if the pack vanished.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| ckpt_name | COMBO | rife47.pth | Choose RIFE 4.7, 4.9, 4.25, or 4.26 (used only to test candidate timings). Missing catalog models download automatically into ComfyUI's frame_interpolation model folder. |
| scale_factor | FLOAT | 1.000.25–4 | Quality vs speed for the probe renders. 1.0 recommended. |
| ensemble | BOOLEAN | true | Blend forward & backward predictions to reduce artifacts (slower). |
| full_clip | IMAGE | Your input clip (≥2 frames). Real motion here decides the loop seam timing. | |
| multiplier | INT | 4 | How many new frames you plan to create at the loop seam [last→first]. Set 0 to skip. |
| use_first_two | BOOLEAN | true | Match the motion between the first two frames in your clip. |
| use_last_two | BOOLEAN | true | Match the motion between the last two frames in your clip. |
| use_global_median | BOOLEAN | false | Use the median motion across the whole clip (needs ≥3 frames). Helps ignore outliers. |
| calibrate_metric | COMBO | MSE | How we compare frames while solving: MSE (more sensitive) or L1 (more forgiving). |
| calibrate_iters | INT | 124–24 | Search depth per solve. Higher = slower, but a tighter match. |
| t_min | FLOAT | 0.0000–1 | Earliest allowed blend point at the seam (0 = exactly the last frame). |
| t_max | FLOAT | 0.9600–1 | Latest allowed blend point at the seam (keep below 1.0 to avoid sticking to the first frame). |
| auto_tmaxopt | BOOLEAN | false | Automatically push the upper limit closer to the next frame to hit the target motion step. |
| t_capopt | FLOAT | 0.99500.5–0.9999 | Safety cap used with the auto upper limit (keeps it just shy of 1.0). |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| t_list_csv | STRING | — |
| multiplier | INT | — |