🐇 Assemble Loop Frames
Append your interpolated seam and call it a loop
- original_images
- interpolated_frames
- images
You've got your clip, and you've got the interpolated transition that bridges the last frame back to the first. Now you need to put them together without creating the very jump you were trying to fix. Assemble Loop Frames does that assembly: it takes your original clip plus the interpolated seam frames, and appends only the new in-between frames to the end of the original footage. No duplicate of frame 1, no dropped frames, no seam visible.
It's the other bookend of WhiteRabbit's loop workflow. Prepare Loop Frames pulls out the [last, first] pair at the start; Assemble Loop Frames puts the finished transition back at the end. If you're making looping video - and the pack's author clearly lives in this world, having shipped a Wan 2.2 5B looping workflow around these exact nodes - this is the node that closes the circle.
How it works
The trick is in what it refuses to do. When your RIFE node interpolated the [last, first] pair, it produced a batch whose first frame is your original last frame and whose last frame is your original first frame (RIFE keeps the source endpoints). Those two endpoints are already in your original clip - the last frame at the end, the first frame at the start. Assemble Loop Frames knows this: it drops the two endpoint frames from the interpolated batch and appends only the middle - the genuinely new in-between frames - to your original clip.
Net effect: original_frames + seam_frames, where the seam slides straight into the loop. When the video repeats, the last frame transitions through the interpolated bridge back to the first frame, and the loop is whole.
The inputs that matter
- original_images - your original clip (frames×H×W×C), the same batch that Prepare Loop Frames passed through untouched.
- interpolated_frames - the seam frames that bridge last→first. The first and last of this batch are the originals; only the middle ones get added.
- images (output) - the complete loop, ready to save or render.
Installing it
Standard WhiteRabbit pack install, done once:
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. Requires a current ComfyUI (v3 node API); the pack's only pip dependency is torchlanc.
Where people get burned
- Plugging the wrong branch in.
original_imagesmust be the original clip, not the seam output. Mix them up and your "loop" is a mess of duplicated frames. - Expecting it to fix a bad seam. This node assembles; it doesn't fix. If the interpolation was done with bad timing, a bad seam is exactly what you'll get. Run RIFE Seam Timing Analyzer first so the transition lands naturally.
The complete chain - Prepare Loop Frames → Seam Timing Analyzer → Custom Timing → Assemble Loop Frames - is the pack's headline workflow, and it's bundled as a PNG you can drop straight into ComfyUI. Assemble is the quiet last step, and it's the one that makes the loop actually loop.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| original_images | IMAGE | Your original clip (frames×H×W×C). | |
| interpolated_frames | IMAGE | Frames that bridge last→first. The first and last of this batch are the originals; only the middle ones get added. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |