Eric Krea2 Sweep Auto Pick
It won't pick your favourite — it'll tell you why it picked the other one
- cell_index
- report
So your Eric Krea2 Sweep Plan just ran a 64-cell grid and you've got a contact sheet, a CSV, and a manifest full of numbers. Now what? Eye-balling every cell works at 8 images and stops working at 64. This node is the honest shortcut: it reads the sweep's sweep_manifest.json, applies a few sanity gates, and hands you one cell_index plus a plain-language report of why it picked that cell. It proposes. You ratify.
What it actually checks
The author calibrated these gates on two full 192-cell characterization runs, and the tooltips read like field notes. The headline number is clip%: cells above 6% are rejected outright, 4–6% are flagged as suspect-but-passing. Sharpness uses Tenengrad (sharp_ten), which proved more trustworthy than Laplacian in the field - subject/tiled sharpness is what it misses, which is exactly what the best_external route exists for. Noise sigma and splotch showed no quality discrimination, so they gate nothing. These are failure detectors, not beauty judges - the metrics never hide a cell, and the picker always comes with runners-up and an explanation.
The three objectives you'll actually reach for:
fastest_acceptable(default) - the fastest cell that passes the gates. Gates self-calibrate against the sweep's own median, or againstreference_cellif you eye-picked one.most_typical- the lowest-uniqueness cell, i.e. the consensus render. In a fixed-seed settings sweep, broken cells deviate hardest, so the consensus is usually the safe winner.most_unique- the seed-sweep objective, where divergence is the point.best_metric/best_external- pick the best value of a built-in column, or of ascores.csvcolumn (blank = first numeric column), joined to cells by filename.
The inputs that matter
Only two are required: manifest_path (wire it straight from Ultra V2's sweep_manifest output, or paste) and objective. The optional tolerance (default 0.25) is the gate slack - quality may be this fraction worse than the reference and still pass. reference_cell (default -1) switches the gates from "sweep median" to "this specific cell's metrics". If uniqueness is missing from an older manifest, the node recomputes it from the cell PNGs itself.
It returns cell_index (an INT) and report (a STRING). Right-click Sweep → Preset's cell_index widget and convert it to an input, wire this to it, and one queue run does sweep → pick → promote. Promotion only happens because you queued the preset node - metrics never silently write your preset library, and that's a feature.
Install
This ships in the Krea2_ComfyUI_Advanced pack by Eric Hiss (EricRollei). Install once, get every Eric Krea2 node:
cd ComfyUI/custom_nodes
git clone https://github.com/EricRollei/Krea2_ComfyUI_Advanced
Then restart ComfyUI (or use ComfyUI Manager and search the pack title). The hard part isn't the node - it's that the pack drives the real Hugging Face Krea2Pipeline, so you need a diffusers build with Krea2Pipeline and Krea 2 weights in diffusers layout. Plain pip install diffusers is not enough; the version string stays 0.39.0.dev0, so install from source with --force-reinstall:
python_embeded\python.exe -m pip install --upgrade --force-reinstall --no-deps git+https://github.com/huggingface/diffusers.git
When it burns you
The obvious one: best_external with no scores.csv next to the manifest picks the first numeric column of nothing and returns a confused report. Point external_csv at the file, or run the folder scorer first. And remember the picker reads the sweep's own metrics - a cell can pass every gate and still be the one you'd never post. Treat cell_index as a shortlist of one, not a verdict. The report exists so you can argue with it.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| manifest_path | STRING | Path to sweep_manifest.json (wire from Ultra V2's sweep_manifest output, or paste). | |
| objective | COMBO | fastest_acceptable | 5 options: fastest_acceptable, most_unique, most_typical, best_metric, best_external |
| metricopt | STRING | best_metric: one of sharp_lap, sharp_ten, noise, splotch, clip, uniqueness, time_s. best_external: a scores.csv column name (blank = first numeric column). | |
| toleranceopt | FLOAT | 0.250.02–2 | Gate slack for fastest_acceptable: quality metrics may be up to this fraction worse than the reference (sweep median, or reference_cell). |
| reference_cellopt | INT | -1-1–9999 | -1 = gates calibrate on the sweep median. >= 0 = gates calibrate on this (eye-picked) cell's own metrics. |
| external_csvopt | STRING | best_external: CSV path. Blank = scores.csv in the sweep folder. Joined to cells by filename. | |
| external_higher_is_betteropt | BOOLEAN | true | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| cell_index | INT | — |
| report | STRING | — |