Nodes/ComfyUI-CustomNodePacks/Video Comparer — Player + Wipe/Diff/Scopes
ComfyUI Node

Video Comparer — Player + Wipe/Diff/Scopes

A/B video comparison that doesn't need a queue — wipe, diff, scopes, in-browser

By Code2Collapse·Created 6 months ago·Updated a day ago· 52
Video Comparer — Player + Wipe/Diff/Scopes
  • image_a
  • image_b
  • audio_a
  • audio_b
  • preview
  • diff_mask
  • scope
  • info
modesynced_player
bit_depth32
wipe_position0.50
onion_alpha0.50
diff_gain16
diff_gamma1.00
diff_threshold0.000
diff_modeabsolute
false_color_lutturbo
scope_intensity0.35
frame_index0
label_aA
label_bB
file_a
file_b

Comparing two videos in ComfyUI has historically meant saving both, opening them in two players, and scrubbing back and forth by hand. VideoComparerC2C kills that workflow: it's an in-graph A/B comparer that plays two videos side by side on a shared transport, and its overlay modes - wipe, onion, diff, false color, scopes - render live in the browser without queueing the graph. That last part is the killer feature and the reason this node is worth seeking out inside the ComfyUI-CustomNodePacks pack.

Think of it as a mini Nuke-grade viewer. The author's framing is exactly that: a comparer for image, video, EXR, and audio, with a synced_player as the default so new users land on something that actually plays instead of a static canvas.

How it works

The node takes two sources (image_a/image_b, or file_a/file_b for loading media directly, plus optional audio_a/audio_b) and a mode dropdown that switches the viewer:

  • synced_player - dual <video> elements share one transport: play/pause, seek, frame-step ◀1f / 1f▶, in/out points, loop, playback rate, live FPS. Frame-perfect via requestVideoFrameCallback. This is your default for real A/B review.
  • Overlay modes - wipe (drag the canvas to move the split), onion, diff (with diff_gain, diff_gamma, diff_threshold, diff_mode for absolute/signed/luminance), side_by_side, per_channel, false_color (choose a LUT: viridis, turbo, hot, etc.), bit_depth_crush (quantize to 8/10/12/16/32-bit to spot banding).
  • Scope modes (queue-time) - waveform_scope, parade_scope, vectorscope, histogram_scope, plus audio waveform/spectrogram/loudness.

The live overlay modes are the part to remember: they're computed in the browser on the frames you've already loaded, so scrubbing a wipe or a diff costs zero queue time. The scope modes and audio analysis need a queue pass to compute.

Inputs and outputs that matter

  • image_a / image_b (IMAGE) - the two sides.
  • file_a / file_b - load media directly from disk (populated from your input folders).
  • mode - the viewer mode described above.
  • wipe_position, onion_alpha, diff_gain, false_color_lut, etc. - per-mode tuning; only the relevant ones matter in each mode.
  • label_a / label_b - on-screen labels, default "A"/"B".

Outputs (it's an output node, so it terminates a branch): preview (IMAGE), diff_mask (MASK), scope (IMAGE), and info (STRING). The diff_mask output is the sleeper: in diff modes you get an actual mask of where the two videos differ, which you can feed downstream - a change detector without building one.

Where it fits

Any before/after review loop: inpaint seam QA, model/sampler A/B sweeps, stabilization before/after, video-to-video comparisons. If you generate iterations of a clip, this is the node that makes "which one is better" a ten-second answer instead of a side-by-side-window chore.

Installing it

Standard pack install:

cd ComfyUI/custom_nodes
git clone https://github.com/Code2Collapse/ComfyUI-CustomNodePacks.git

restart ComfyUI or use Manager → "CustomNodePacks". The live browser modes need no extra dependencies; the audio/scopes features pull in whatever the pack already requires (ffmpeg/audio handling is part of the pack's stack).

The honest note

The synced-player and wipe modes are where this node shines and are worth upgrading your workflow for; the scope modes are more "nice to have" - fine for a quick waveform check, not a replacement for a real scopes tool. And since live modes don't queue, remember to run a queue pass if you need the diff_mask or scope outputs actually populated. Give the player a minute - it's the part people stick with.

CategoryC2C/Preview

Inputs (19)

NameTypeDefaultDescription
modeCOMBOsynced_playersynced_player: dual <video> player with shared transport — play, pause, seek, frame-step (◀ 1f / 1f ▶), in/out points, loop, playback rate. Use this for real-time A/B comparison of two videos. Switch to wipe / onion / diff / side_by_side / false_color / bit_depth_crush for overlay analysis.
bit_depthCOMBO32Quantization for bit_depth_crush mode.
wipe_positionFLOAT0.500–1
onion_alphaFLOAT0.500–1
diff_gainFLOAT161–1024
diff_gammaFLOAT1.000.1–4
diff_thresholdFLOAT0.0000–0.5
diff_modeCOMBOabsolute3 options: absolute, signed, luminance
false_color_lutCOMBOturbo7 options: viridis, plasma, inferno, magma, turbo, hot, +1
scope_intensityFLOAT0.350.05–1
frame_indexINT00–100000
label_aSTRINGA
label_bSTRINGB
image_aoptIMAGE
image_boptIMAGE
audio_aoptAUDIO
audio_boptAUDIO
file_aoptCOMBO2 options: , example.png
file_boptCOMBO2 options: , example.png

Outputs (4)

NameTypeDescription
previewIMAGE
diff_maskMASK
scopeIMAGE
infoSTRING