Nodes/comfyui-OreX/↔️ OreX Image Compare
ComfyUI Node

↔️ OreX Image Compare

Stop squinting at two images in separate tabs

By orex2121·Created about a year ago·Updated a day ago· 34
↔️ OreX Image Compare
  • image_1
  • image_2
    modeSlider
    opacity0.50
    blink_speed1.00
    output_path

    Every workflow eventually reaches the same ritual: you bump a seed, swap a LoRA, or re-run a sampler, and now you have two nearly identical images and a monitor full of browser tabs. That ritual is the entire reason "Image Comparer" nodes exist, and the rgthree one is practically a household name for it - this is the same job, from a smaller pack, with a few extra tricks.

    ↔️ OreX Image Compare drops two IMAGE tensors onto one canvas and lets you flip between five ways of looking at them, all inside the node body. No outputs, no downstream wiring. It's a terminal display node - you put it at the end of a chain, hit run, and stare at the result.

    How it works

    The Python half does almost nothing clever: when the graph runs, it saves each image you've connected into ComfyUI's temp folder and hands the frontend the file paths. All the actual comparing happens in a JavaScript extension (js/OreX_ImageCompare.js) that renders both images onto a canvas inside the node. That's why it behaves like a piece of UI rather than a data node.

    The mode dropdown is where the value lives:

    • Slider - the classic wipe curtain. Drag the divider to reveal one image over the other. This is the one you'll actually use 90% of the time.
    • Side-by-Side - both images at full frame.
    • Overlap - image_1 overlaid on image_2, where opacity controls how transparent image_1 is. Nice for spotting alignment drift.
    • Difference - a composite that highlights pixel differences. Great for catching subtle changes an eyeball glides past.
    • Blink - alternating frames, blink_speed controls the pace. Uncomfortable to watch for long, but useful when the difference is tiny.

    You can also zoom with the mouse wheel (up to 10×) and pan around once zoomed - genuinely handy for pixel-peeping a face fix or a watermark you don't want.

    The inputs that matter

    • mode - the enum above. This is the whole point of the node.
    • opacity (0–1, default 0.5) - only affects Overlap.
    • blink_speed (1–3, default 1) - only affects Blink.
    • image_1 / image_2 - your two IMAGE tensors. Either can be left unconnected, but then you're just looking at one picture, which is not a compare.
    • output_path - an optional string. Wire one in and the save button writes there instead of the default output folder.

    One thing the README never mentions (it's stale - this pack's docs only cover its load/save nodes, the code has moved past them): the 💾 Save current view button on the node. It snapshots the canvas exactly as you see it - slider position, zoom, everything - and saves a JPEG to output/<date>/<mode>/OreX_Compare_<mode>_NNNNN.jpg, or to <your output_path>/<mode>/ if you set one. Blink mode saves a looping GIF instead. Worth it when you've dialed in the perfect wipe position and want to share the "before vs after."

    Installing it

    Same as any custom node, no model downloads, no heavy dependencies:

    cd ComfyUI/custom_nodes
    git clone https://github.com/orex2121/comfyui-OreX
    

    then restart ComfyUI. Or skip the terminal and search "OreX" in ComfyUI Manager - it'll handle the clone and any requirements. The requirements file is just Pillow and soundfile (that second one is for the pack's audio-loading node, not this one), so install friction is basically zero.

    Gotchas

    Because this is a frontend widget node, the number-one failure is a node body that renders empty or old. If that happens, hard-refresh the browser (Ctrl+Shift+R), and if it persists, delete the folder from custom_nodes and reinstall - the pack's own README leads with exactly that instruction, in all caps, in Russian. Node 2.0 and other ComfyUI frontend updates are known to break custom display nodes like this one (rgthree's comparer had the same trouble in late 2025), so if it stops working after a ComfyUI update, that's usually the culprit, not you.

    For Difference and Overlap, feed it same-size images. The node fits things to its canvas but doesn't resample one onto the other, so mismatched dimensions make the composite harder to read. And remember blink_speed only controls on-screen blinking - the saved GIF uses a fixed 1-second frame period regardless. Small, but it'll confuse you once.

    Category🤫OreX/Image

    Inputs (6)

    NameTypeDefaultDescription
    modeCOMBOSlider5 options: Slider, Side-by-Side, Overlap, Difference, Blink
    opacityFLOAT0.500–1
    blink_speedFLOAT1.001–3
    image_1optIMAGE
    image_2optIMAGE
    output_pathoptSTRING

    Outputs (0)

    No outputs