Nodes/ComfyUI-BCNodes/Image Comparer
ComfyUI Node

Image Comparer

Put A and B on one node and drag the divider

By 0xBeycan·Created 24 days ago·Updated 4 days ago· 2
Image Comparer
  • image_a
  • image_b

    Comparing two upscales, two LoRA strengths, or two model checkpoints is the single most common thing you do in ComfyUI, and the default experience is opening two image files and clicking back and forth. Image Comparer puts both on the node with a divider you drag.

    What it is

    Two optional image inputs, image_a and image_b, drawn on the canvas itself so the comparison moves with the node. A fills the node. Hover it, and B gets painted in from the left edge up to your pointer, with a divider line and A / B tags. Move the pointer off and you're looking at A alone.

    If either side carries more than one image - a batch, or a list - a row of labels above the image (A1 A2 B1 …) picks the pair you're looking at.

    It's an output node with no outputs: there is nothing to wire it into. Queue the workflow and it renders, the same way Preview Image does. That also means anything upstream of it executes when you hit queue, which makes it a fine "just show me the result" endpoint while you're iterating.

    How it works

    The images are written into ComfyUI's temp folder, exactly like Preview Image, and drawn onto the node with the divider handled in the frontend. The comparison lives with the run: it survives a tab switch, not a restart, and nothing about it is saved into the workflow file - so the node you share is a node with its inputs, not a node with a screenshot baked in. The node keeps whatever size you give it and letterboxes the image inside, so resize it into a tall, wide rectangle if you're comparing crops.

    Why this one and not rgthree's

    rgthree's Image Comparer is the default comparison node for a lot of people - it appears in 97 corpus threads - and it took a direct hit in the Nodes 2.0 frontend rewrite. From a thread on that migration: "Personally I didn't mind the new setup, but instantly the 'rgthree comparer' didn't work. I use that on almost every workflow." That's the case for a second implementation existing: the node is small, the job is trivial, and when the popular one breaks you want an alternative that isn't a rewrite of your workflow.

    What actually matters when you use it

    • Compare one variable at a time. Two checkpoints at different steps and different CFG tells you nothing except that one looks nicer.
    • Same seed, same prompt. Obvious, and people still forget. If the images are different compositions, the divider just shows you two pictures, not a comparison.
    • Look at the thing you're judging. Drag the divider across an eye, a hairline, a fabric seam, paint speckle in a background - that's where upscalers and detail LoRAs actually differ. The overall impression is the least informative part of the image.
    • Both sides from the same source node is the classic own-goal. If image_a and image_b come off the same output you'll swear the comparison is "identical, so the effect does nothing". It is identical. You wired the same tensor in twice.

    Installing it

    ComfyUI Manager → search ComfyUI-BCNodes → install → restart. Or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/0xBeycan/ComfyUI-BCNodes
    pip install -r ComfyUI-BCNodes/requirements.txt
    

    Reload the browser tab after the restart - the drawing behaviour is frontend JavaScript and this node needs it. The pack's requirements.txt only pulls postfx and caption-audit for other nodes; the comparer itself is self-contained. It sits under BCNodes/workflow in the node library.

    Common issues

    Nothing appears on the node. Check the temp folder isn't being cleared mid-run, and that you actually queued the prompt - an output node only draws on execution.

    Two nodes, same name. rgthree's comparer has the identical display name. The two register under different keys (BC_ImageComparer versus rgthree's), so they coexist happily; look at the category if you're not sure which you dragged out.

    It's a viewer, not a save. Nothing lands in output/. If you want the pair kept, wire an actual Save Image node to whatever produced them.

    CategoryBCNodes/workflow

    Inputs (2)

    NameTypeDefaultDescription
    image_aoptIMAGE—
    image_boptIMAGE—

    Outputs (0)

    No outputs