⭐ Star Video Loop
Video that pans forever with no visible cut — the infinite-scroll loop node
- video 1
- images
- fps
Some videos are meant to end. Ambient loops, digital backdrops, social wallpapers - those are meant to not end, and the standard way to fake it is a horizontal pan that wraps around so frame one is pixel-identical to frame one again. That's exactly what ⭐ Star Video Loop does: you feed it a video (or several), it stitches them into a panorama, and it scrolls across that panorama to produce seamless looping frames. No jump cut, no seam, just an infinite drift.
It's one of the StarNodes video tools, so it plays inside that pack's ecosystem - which matters here, because this node doesn't save a file. It hands you frames and an fps, and you take it from there.
What it outputs and what it plugs into
The node returns two things:
- images - an
IMAGEbatch of generated frames, ready for any video combine/save node. - fps - the integer frame rate you asked for.
The natural sibling here is ⭐ Star Video Compressor (or any Video Combine node) - this generates the loop frames, that encodes them into an actual file.
The inputs
- resolution - the width preset: HD (1280), Full HD (1920), 2K (2560), or 4K (3840). Height comes from the aspect ratio.
- aspect_ratio - 1:1, 9:16 (TikTok/Reels), 4:5 (Instagram), 16:9 (YouTube), 3:4, or 2:3. Dimensions get rounded to even numbers so encoders don't complain.
- fps and duration - together they set the output length:
fps × durationframes are generated. - direction - which way the pan scrolls.
- video 1 (and more) - connect one or more
IMAGEbatches. Each input is a video as a frame batch. Addvideo 2,video 3… and they get joined horizontally into one wide sliding panorama.
How the loop actually loops
Here's the mechanism, because it's the part people find surprising. Each source video is resized to the output height and pasted into the panorama - twice, side by side, for seamless tiling. The total scroll distance is exactly one panorama width, and each output frame advances by a sub-pixel amount (panorama_width / (fps × duration)), so after the full clip the camera has moved exactly one panorama width and lands back where it started. That's the perfect loop.
Two honest limitations. First, the source frames advance too: output frame N uses source frame N % min_frames, where min_frames is the shortest connected video - so shorter videos loop in place while the panorama scrolls. Second, this is a pan, not content that evolves. For a "seamless loop" that morphs, you want a proper image-looping model, not this.
Installing it
ComfyUI Manager, search Starnodes, install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/Starnodes2024/ComfyUI_StarNodes
cd ComfyUI_StarNodes
pip install -r requirements.txt
It shows up under ⭐StarNodes/Video. The loop node itself is pure PIL - no ffmpeg needed until you go to encode the frames.
Gotchas
- Connect at least one video or the node throws "At least one video must be connected!".
- The output canvas is driven entirely by the resolution/aspect presets; a portrait aspect with a wide source still gives you a portrait canvas.
- This node makes the pan seamless - it does not make your content seamless. The loop is only as smooth as the shortest source video you feed it.
Want an infinite background for a video wall or a Ken Burns-style drift for a slideshow? This is the one that just works.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| resolution | COMBO | Full HD (1920) | 4 options: HD (1280), Full HD (1920), 2K (2560), 4K (3840) |
| aspect_ratio | COMBO | 1:1 (Square) | 6 options: 1:1 (Square), 9:16 (TikTok/Reels), 4:5 (Instagram), 16:9 (YouTube), 3:4 (Portrait), 2:3 (Portrait) |
| fps | INT | 241–60 | — |
| duration | FLOAT | 10.01–300 | — |
| direction | COMBO | Left to Right | 2 options: Left to Right, Right to Left |
| video 1opt | IMAGE | First video (IMAGE batch). Connect more videos to join them horizontally. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| fps | INT | — |