Nodes/ComfyUI_StarNodes/⭐ Star Video Compare
ComfyUI Node

⭐ Star Video Compare

A wipe slider for two videos, plus a stitched clip you can actually send someone

By Starnodes2024·Created 2 years ago·Updated 2 days ago· 106
⭐ Star Video Compare
  • video_1
  • video_2
  • video_native_1
  • video_native_2
  • comparison_video
layoutleft/right
max_size1920
fps24.00
looptrue
caption_video1
caption_video2
compare_position0.50

Why you'd want this

Video work is a comparison business. Pass 1 versus the upscale refine. LoRA on versus off. Original versus a grade. Seed A versus seed B. Two media player windows and a lot of eye-flicking is how most people do it, and eye-flicking is bad at judging motion, texture and flicker.

⭐ Star Video Compare puts a draggable wipe slider right inside the node - two clips synced, drag it back and forth - and it also hands you a single stitched comparison video back out as a wire, so you can save it, compress it, or paste it into a thread to show someone why version B is better.

It's the video sibling of the pack's ⭐ Star Image Compare, from ComfyUI_StarNodes - an unusually broad one-person pack (100+ nodes, v3.0, in ComfyUI Manager since the author's first "tiny helper nodes" drop in late 2024).

What goes in

Four optional inputs, and you use whichever you have:

  • video_1 / video_2 - videos as an IMAGE batch (frames), which is what most ComfyUI video nodes hand around.
  • video_native_1 / video_native_2 - native ComfyUI VIDEO objects. These are only used when the matching IMAGE input isn't connected; the node decodes them to frames through ffmpeg.

The widgets that matter to a beginner:

  • layout - left/right or top/bottom for the stitched output.
  • max_size - longest side of the stitched video, default 1920, and 0 means no resize at all. This is the one people forget: at 1920 with left/right, each half ends up about 960 px wide.
  • fps - drives both the preview playback and the stitched output. Set your save node to the same number or the clip plays at the wrong speed.
  • caption_video1 / caption_video2 - short labels burned into each half. Worth filling in for anything you're going to share; the bars are sized relative to frame height, so short captions look tidy and long ones get cramped.
  • compare_position - where the slider starts. 0.0 shows video 2, 1.0 shows video 1.
  • loop - whether the in-node preview loops.

Output: one IMAGE batch named comparison_video.

How it behaves

Both inputs get normalised first: if the two clips differ in resolution, the smaller is Lanczos-upscaled to the larger's dimensions so the wipe lines up on the same geometry. Then the node writes two small H.264 preview mp4s into ComfyUI's temp folder and sends them to the frontend - that's the slider you drag. The stitched output is built frame by frame in Python: frame counts matched by looping the shorter clip, caption bars drawn if you typed any, halves pasted side by side or stacked, then scaled so its longest side equals max_size. You get one IMAGE batch back.

Wiring the output

comparison_video is an IMAGE batch, not a VIDEO object, so it goes to anything that saves frames: Save WebM, Video Combine, the pack's own ⭐ Star Video Compressor, or a plain Save Image if you just want a still.

This is also an output node in the ComfyUI sense - it runs whether or not anything is plugged in after it. That's convenient: drop it on two branches and just use the slider to judge, never saving a thing. It also means an empty run of this node is normal, not a bug.

Installing

Standard pack install. 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

This node's dependency lives in that requirements list: imageio-ffmpeg, which ships a bundled ffmpeg binary. The pack looks for a bundled binary first, then imageio-ffmpeg, then system ffmpeg on your PATH, and if it finds none it says so in a clear error instead of failing mysteriously. You only need ffmpeg for the native VIDEO inputs and the temp preview clips; comparing two IMAGE batches works without it. And a whole-pack note: install.py also pip-installs nvidia-vfx from NVIDIA's index for the RTX super-res node - skip it on non-RTX hardware, nothing here needs it.

Traps worth knowing

Lengths get fudged. If one clip is 3 seconds and the other 6, the short one is looped to fill the timeline - fine for judging an upscale, useless for judging pacing.

Upscaling hides detail differences. Because the smaller clip is enlarged to match, a 720p versus 1080p comparison shows one side blurrier than it really is. For a fair upscale test, compare at matched resolution.

No audio. The decode strips it and the output is frames, so the comparison video is silent by construction. If sound matters, compare the original files.

max_size bites twice. At the default 1920, a side-by-side of two 1080p clips is downscaled to roughly 960 px per side. For a crisp two-up you're sharing, push max_size up or to 0 and let your encoder handle the size. And captions are burnt in with no toggle - leave both empty if you don't want bars.

Category⭐StarNodes/Video

Inputs (11)

NameTypeDefaultDescription
layoutCOMBOleft/rightOrientation of the stitched comparison video output.
max_sizeINT19200–16384Longest side of the stitched output video. 0 = no resize.
fpsFLOAT24.001–240Frame rate for the preview playback and the stitched output.
loopBOOLEANtrueLoop the preview playback.
caption_video1STRINGCaption for video 1 (left / top half of the stitched output).
caption_video2STRINGCaption for video 2 (right / bottom half of the stitched output).
compare_positionFLOAT0.500–1Initial slider position. 0.0 = Video 2, 1.0 = Video 1.
video_1optIMAGEFirst video as IMAGE batch (frames).
video_2optIMAGESecond video as IMAGE batch (frames).
video_native_1optVIDEONative ComfyUI VIDEO input for video 1. Used when video_1 is not connected.
video_native_2optVIDEONative ComfyUI VIDEO input for video 2. Used when video_2 is not connected.

Outputs (1)

NameTypeDescription
comparison_videoIMAGE