Nodes/Nine_Image_Compare/Compare Nine Images
ComfyUI Node

Compare Nine Images

The A/B compare node that kills tab-switching

By smthemex·Created 2 months ago·Updated 2 months ago· 6
Compare Nine Images
  • reference_image
  • compare_image_1
  • compare_image_2
  • compare_image_3
  • compare_image_4
  • compare_image_5
  • compare_image_6
  • compare_image_7
  • compare_image_8
  • compare_image_9

    You've been here: you set a fixed seed and sweep CFG from 4 to 12, or compare a checkpoint against four LoRA strengths, and now you have a wall of preview images to squint at. Download them all, open them side by side, alt-tab until your eyes bleed. NineImageCompare exists to kill that workflow. It's the kind of node that doesn't generate anything - it just makes looking at your outputs dramatically less miserable.

    It's exactly what the name says: one reference image up against up to nine comparison images, laid out in a grid where each cell has a draggable split slider, like the before/after widgets on every skincare ad ever. Drag, and the left/top side of every cell reveals the reference image while the right/bottom shows the comparison, all synced to the same position. It's a UI tool, not a model - there are no weights, no checkpoints, no VRAM cost, and the author marks it experimental in the schema.

    How it works

    Under the hood it's two pieces doing a hand-off. The Python side is barely a wrapper: on execute it runs ComfyUI's built-in PreviewImage node to save the reference and each connected comparison image (with comfy.compare.* filename prefixes), then hands the saved image paths back to the frontend. The actual compare UI lives in js/compare.js, a custom DOM widget that builds the grid after each run.

    A few details are worth knowing because they shape how it behaves:

    • Grid size is automatic. It counts how many compare inputs actually have images wired in (1 to 9) and computes cols = ceil(sqrt(count)) - so 1–4 images get a 2-wide grid, 5–9 get a 3-wide one.
    • One reference, shared everywhere. Every cell pairs your single reference_image against a different compare image. It's "baseline vs. many," not pairwise among the nine.
    • Drag direction auto-locks. You can drag either way; once your mouse moves past 3px it locks to horizontal (left/right reveal) or vertical (top/bottom reveal) and applies that to all cells at once. That sync is the whole trick - you're comparing the same region across every variant simultaneously.
    • No outputs. It's a terminal node; info_schema lists zero outputs and it's marked is_output_node, so it sits at the end of the graph like a PreviewImage.

    The inputs

    All ten inputs are IMAGE-typed and all optional - there are no required inputs, no parameters to tune:

    • reference_image - the baseline every comparison cell shows. The frontend returns early if this isn't connected, so it's the one input that's effectively mandatory.
    • compare_image_1 through compare_image_9 - the variants. Hook up as many as you have; the node tolerates gaps. Typical wiring is a bunch of LoadImage nodes (the bundled example workflow does exactly that), or the outputs of whatever branches you're comparing.

    If you're sweeping seeds or samplers, a cleaner trick is to wire sampler outputs through SaveImage/PreviewImage in each branch and then pull the images back in - but for most people, loading finished renders into the nine inputs is the whole point.

    Installing it

    No dependencies beyond ComfyUI itself - there's no requirements.txt, no models to download. From the README:

    cd ComfyUI/custom_nodes
    git clone https://github.com/smthemex/Nine_Image_Compare.git
    

    Then restart ComfyUI. ComfyUI Manager can also grab it if you search for "Nine_Image_Compare."

    One real gotcha: this pack is written against the new ComfyUI extension API - it imports comfy_api.latest and registers through ComfyExtension/comfy_entrypoint() rather than the legacy NODE_CLASS_MAPPINGS. That means it needs a recent ComfyUI build. If you're on an older install and the node won't load, update ComfyUI before you blame the pack. It's also worth knowing this is a rework of ComfyUI's own image-compare node (the source comment says so), stretched from two images to nine.

    Troubleshooting

    The honest answer is that this is a tiny, low-traffic, experimental node, so there's no big community war-story archive to lean on - the failure modes are mostly the usual suspects:

    • Node missing from the menu - almost always the outdated-ComfyUI issue above, since comfy_api only exists in newer builds.
    • Nothing renders - you need reference_image connected; the JS bails if there's no reference data.
    • Slider feels stuck - drag more than 3px; it waits for a direction to lock onto before moving anything.
    • Images piling up - it saves previews through PreviewImage every run, so files accumulate in ComfyUI's output/temp like any preview. Don't be surprised to see comfy.compare.* files in there.

    If you A/B test anything regularly, this is worth the two minutes to install. It's not glamorous, but it's the difference between squinting at a folder of PNGs and actually seeing the difference your settings make.

    Categoryimage

    Inputs (10)

    NameTypeDefaultDescription
    reference_imageoptIMAGE
    compare_image_1optIMAGE
    compare_image_2optIMAGE
    compare_image_3optIMAGE
    compare_image_4optIMAGE
    compare_image_5optIMAGE
    compare_image_6optIMAGE
    compare_image_7optIMAGE
    compare_image_8optIMAGE
    compare_image_9optIMAGE

    Outputs (0)

    No outputs