SAX Image Collector
Line up all your candidates before you judge them
- slot_0
- slot_1
- slot_2
- slot_3
- slot_4
- slot_5
- slot_6
- slot_7
- slot_8
- slot_9
- slot_10
- slot_11
- slot_12
- slot_13
- slot_14
- slot_15
- slot_16
- slot_17
- slot_18
- slot_19
- slot_20
- slot_21
- slot_22
- slot_23
- slot_24
- slot_25
- slot_26
- slot_27
- slot_28
- slot_29
- slot_30
- slot_31
- slot_32
- slot_33
- slot_34
- slot_35
- slot_36
- slot_37
- slot_38
- slot_39
- slot_40
- slot_41
- slot_42
- slot_43
- slot_44
- slot_45
- slot_46
- slot_47
- slot_48
- slot_49
- slot_50
- slot_51
- slot_52
- slot_53
- slot_54
- slot_55
- slot_56
- slot_57
- slot_58
- slot_59
- slot_60
- slot_61
- slot_62
- slot_63
- images
The fastest way to judge whether a change helped is to see the versions side by side. That's the whole job of SAX Image Collector: take the IMAGE outputs from a bunch of branches - different LoRA strengths, different guidance modes, different detailer settings - and concatenate them into one batch tensor, which you then feed to SAX Image Preview for a proper comparison grid. It's the pack's answer to the endless "which setting is better" ritual, and it pairs specifically with SAX Image Preview, which is designed to consume exactly this kind of batch.
How it works
Sixty-four inputs (slot_0 through slot_63), all optional, all ANY type, and one output: images (IMAGE). Connect as many branch outputs as you've got, and it merges them into a single batched image tensor. To make that merge actually work, it handles the usual batch-composition chores for you: it takes the first connected image's dimensions as the reference and resizes the rest to match, and it auto-converts grayscale (1-channel) and RGBA (4-channel) inputs to RGB (3-channel). If more than a hundred images pile up, it keeps the first 100 - a practical ceiling so a runaway loop can't balloon into a memory bomb.
The inputs are ANY, not strictly IMAGE, which is a ComfyUI-wildcard convention: you can wire a range of things in, and the node sorts out what's usable. In practice you'll connect IMAGE outputs.
How to use it
The comparison workflow the README advertises is simple and powerful:
- Run several detailer branches off one base - the SAM3 + two Enhanced Detailers example in the pack docs sends two hair-color variations to the collector.
- Run one batch per parameter setting - guidance on vs. off, DeepCache on vs. off, LoRA A vs. LoRA B.
- Connect all the
IMAGEoutputs to collector slots, wire the collector'simagesinto SAX Image Preview, and get a grid you can click through.
The pipe plays nice too: SAX Detailer and SAX KSampler both output IMAGE alongside their PIPE_LINE, so you grab the IMAGE socket for the collector and keep the pipe for the main line. A node that accepts IMAGE also accepts the batch output, so you can chain collectors or feed a save node.
Where it sits in the pack
It's the third member of the collector family, alongside SAX Node Collector (aggregates arbitrary node outputs for downstream wiring) and SAX Pipe Collector (picks the first valid pipe). Image Collector is the comparison-flavored one: it's about viewing many results, not routing them. Its natural partner is SAX Image Preview, which turns the batch into a clickable grid - this node does the assembling, the preview does the looking.
Installing
Part of the pack, no extra dependencies:
cd ComfyUI/custom_nodes
git clone https://github.com/so16tm/SAX_Bridge
SAX/Bridge/Collect → SAX Image Collector. One honest note: because it resizes everything to the first input's dimensions, mixing wildly different aspect ratios makes the smaller ones letterbox or stretch - keep your branches at the same resolution and the comparisons stay honest.
Inputs (64)
| Name | Type | Default | Description |
|---|---|---|---|
| slot_0opt | * | — | |
| slot_1opt | * | — | |
| slot_2opt | * | — | |
| slot_3opt | * | — | |
| slot_4opt | * | — | |
| slot_5opt | * | — | |
| slot_6opt | * | — | |
| slot_7opt | * | — | |
| slot_8opt | * | — | |
| slot_9opt | * | — | |
| slot_10opt | * | — | |
| slot_11opt | * | — | |
| slot_12opt | * | — | |
| slot_13opt | * | — | |
| slot_14opt | * | — | |
| slot_15opt | * | — | |
| slot_16opt | * | — | |
| slot_17opt | * | — | |
| slot_18opt | * | — | |
| slot_19opt | * | — | |
| slot_20opt | * | — | |
| slot_21opt | * | — | |
| slot_22opt | * | — | |
| slot_23opt | * | — | |
| slot_24opt | * | — | |
| slot_25opt | * | — | |
| slot_26opt | * | — | |
| slot_27opt | * | — | |
| slot_28opt | * | — | |
| slot_29opt | * | — | |
| slot_30opt | * | — | |
| slot_31opt | * | — | |
| slot_32opt | * | — | |
| slot_33opt | * | — | |
| slot_34opt | * | — | |
| slot_35opt | * | — | |
| slot_36opt | * | — | |
| slot_37opt | * | — | |
| slot_38opt | * | — | |
| slot_39opt | * | — | |
| slot_40opt | * | — | |
| slot_41opt | * | — | |
| slot_42opt | * | — | |
| slot_43opt | * | — | |
| slot_44opt | * | — | |
| slot_45opt | * | — | |
| slot_46opt | * | — | |
| slot_47opt | * | — | |
| slot_48opt | * | — | |
| slot_49opt | * | — | |
| slot_50opt | * | — | |
| slot_51opt | * | — | |
| slot_52opt | * | — | |
| slot_53opt | * | — | |
| slot_54opt | * | — | |
| slot_55opt | * | — | |
| slot_56opt | * | — | |
| slot_57opt | * | — | |
| slot_58opt | * | — | |
| slot_59opt | * | — | |
| slot_60opt | * | — | |
| slot_61opt | * | — | |
| slot_62opt | * | — | |
| slot_63opt | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |